diff --git a/art/Blaec-gw22P.ttf b/art/Blaec-gw22P.ttf
new file mode 100644
index 000000000..f2222e1c5
Binary files /dev/null and b/art/Blaec-gw22P.ttf differ
diff --git a/art/ending.svg b/art/ending.svg
new file mode 100644
index 000000000..784873f21
--- /dev/null
+++ b/art/ending.svg
@@ -0,0 +1,160 @@
+
+
+
diff --git a/art/logo.svg b/art/logo.svg
new file mode 100644
index 000000000..b023d27f2
--- /dev/null
+++ b/art/logo.svg
@@ -0,0 +1,65 @@
+
+
+
+
diff --git a/common/include/Common.h b/common/include/Common.h
index 3979930ac..97f6eb835 100644
--- a/common/include/Common.h
+++ b/common/include/Common.h
@@ -43,20 +43,25 @@ struct StaticBuffer {
size_t size;
};
+#ifndef USE_CUSTOM_MEMORY_HANDLER
+#ifndef NO_DYNAMIC_MEMORY_ALLOC
void *allocMem(size_t sizeInBytes, enum MemoryType type, uint8_t clearAfterAlloc);
void disposeMem(void* ptr);
+#endif
void memCopyToFrom(void* dst, void* src, size_t sizeInBytes);
void memFill(void* dst, uint8_t val, size_t sizeInBytes);
+#endif
+#ifdef ENDIANESS_AWARE
uint8_t isBigEndian(void);
-void initFileReader(const char * dataFilePath);
-
uint32_t toNativeEndianess(const uint32_t val);
+#endif
+int countLines(const char* text);
extern const char *mainText;
extern char *textBuffer;
@@ -70,6 +75,9 @@ extern size_t biggestOption;
#define TEXT_BUFFER_SIZE (40 * 25)
+
+#ifndef USE_OWN_MIN_MAX
+
#ifndef SMD
#ifndef WIN32
#ifndef LEAN_BUILD
@@ -80,3 +88,5 @@ extern size_t biggestOption;
#endif
#endif
+
+#endif
diff --git a/common/include/Dungeon.h b/common/include/Dungeon.h
index 840237d67..c184b7ca4 100644
--- a/common/include/Dungeon.h
+++ b/common/include/Dungeon.h
@@ -10,7 +10,7 @@ struct GameSnapshot {
struct Vec2i playerTarget;
};
-struct GameSnapshot dungeon_tick(const enum ECommand cmd);
+struct GameSnapshot dungeonTick(const enum ECommand command);
void dungeon_loadMap(
const uint8_t *__restrict__ mapData,
diff --git a/common/include/Engine.h b/common/include/Engine.h
index c3ee8c52e..b870bbeb8 100644
--- a/common/include/Engine.h
+++ b/common/include/Engine.h
@@ -63,8 +63,6 @@ enum EGameMenuState HackingScreen_tickCallback(enum ECommand, void* data);
void HackingScreen_unloadStateCallback(enum EGameMenuState newState);
-int countLines(void);
-
void enterState(enum EGameMenuState State);
int loopTick(enum ECommand cmd);
diff --git a/common/include/Enums.h b/common/include/Enums.h
index 49c2e81e3..bc33a8e70 100644
--- a/common/include/Enums.h
+++ b/common/include/Enums.h
@@ -12,7 +12,8 @@ enum EDirection {
enum CrawlerState {
kCrawlerGameOver = -1,
kCrawlerQuit = 0,
- kCrawlerGameInProgress = 1
+ kCrawlerGameInProgress = 1,
+ kCrawlerGameFinished = 2
};
enum ECommand {
diff --git a/common/include/UI.h b/common/include/UI.h
index b7f6568a4..542634cba 100644
--- a/common/include/UI.h
+++ b/common/include/UI.h
@@ -37,7 +37,7 @@ enum EGameMenuState handleCursor(const enum EGameMenuState* options,
const enum ECommand cmd,
enum EGameMenuState backState);
-void drawGraphic(const uint8_t *shapes);
+void drawGraphic(uint16_t x, uint8_t y, uint16_t dx, uint8_t dy, const uint8_t *shapes);
extern int8_t cursorPosition;
diff --git a/common/src/CTile3DProperties.c b/common/src/CTile3DProperties.c
index 3fb6fafef..a9701c206 100644
--- a/common/src/CTile3DProperties.c
+++ b/common/src/CTile3DProperties.c
@@ -97,7 +97,7 @@ void loadPropertyList(const char *propertyFile, struct MapWithCharKey *map, stru
uint8_t len = *(bufferHead++);
char* meshName = (char*)allocMem(len + 1, GENERAL_MEMORY, 1);
- memcpy(meshName, bufferHead, len);
+ memCopyToFrom(meshName, (char*)bufferHead, len);
mesh = (struct Mesh*)allocMem(sizeof(struct Mesh), GENERAL_MEMORY, 1);
sprintf(&meshNameWithExtension[0], "%s.mdl", meshName);
loadMesh(mesh, &meshNameWithExtension[0]);
diff --git a/common/src/Common.c b/common/src/Common.c
index f98618489..11b2a14a2 100644
--- a/common/src/Common.c
+++ b/common/src/Common.c
@@ -43,7 +43,7 @@
#ifndef USE_CUSTOM_MEMORY_HANDLER
-
+#ifndef NO_DYNAMIC_MEMORY_ALLOC
void *allocMem(size_t sizeInBytes, enum MemoryType type, uint8_t clearAfterAlloc) {
/*
For the general allocator, we're not worried about the type of memory. It all comes from the
@@ -60,7 +60,7 @@ void *allocMem(size_t sizeInBytes, enum MemoryType type, uint8_t clearAfterAlloc
if (clearAfterAlloc) {
memset(ptr, 0, sizeInBytes);
}
-
+
(void)type;
return ptr;
@@ -74,7 +74,7 @@ void disposeMem(void *ptr) {
#endif
}
-
+#endif
void memCopyToFrom(void *dst, void *src, size_t sizeInBytes) {
memcpy(dst, src, sizeInBytes);
}
@@ -112,3 +112,27 @@ uint32_t toNativeEndianess(const uint32_t val) {
return val2;
}
#endif
+
+
+int countLines(const char* text) {
+ int lines = 1;
+ int chars = 0;
+
+ while(*text) {
+ ++chars;
+
+ if (
+#ifdef XRES_FRAMEBUFFER
+ (chars >= (XRES_FRAMEBUFFER / 8)) ||
+#endif
+ *text == '\n') {
+ ++lines;
+ chars = 0;
+ }
+
+ ++text;
+ }
+
+
+ return lines;
+}
diff --git a/common/src/Crawler.c b/common/src/Crawler.c
index a94162814..e526e70e7 100644
--- a/common/src/Crawler.c
+++ b/common/src/Crawler.c
@@ -131,8 +131,8 @@ void Crawler_repaintCallback(void) {
/* The dithered filter on top of the 3D rendering*/
fillRect(0, 0, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER, getPaletteEntry(0xFF000000), TRUE);
- drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - biggestOption - 3,
- ((YRES_FRAMEBUFFER / 8) + 1) - (optionsHeight / 8) - 3,
+ drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - biggestOption - 4,
+ ((YRES_FRAMEBUFFER / 8) + 1) - (optionsHeight / 8) - 4,
biggestOption + 2,
(optionsHeight / 8) + 2,
AbandonMission_Title,
diff --git a/common/src/CreditsScreen.c b/common/src/CreditsScreen.c
index 7bb58279b..b62fe36b9 100644
--- a/common/src/CreditsScreen.c
+++ b/common/src/CreditsScreen.c
@@ -11,6 +11,14 @@
#include "UI.h"
#include "Engine.h"
+#ifndef MONOCHROME_VECTORS
+#include "FixP.h"
+#include "Vec.h"
+#include "Mesh.h"
+#include "CActor.h"
+#include "Renderer.h"
+#endif
+
extern int8_t cursorPosition;
extern const char *mainText;
const char *CreditsScreen_options[1] = {"Back"};
@@ -21,22 +29,25 @@ enum EGameMenuState CreditsScreen_nextStateNavigation[1] = {
void CreditsScreen_initStateCallback(enum EGameMenuState tag) {
(void)tag;
- mainText = "Made by Daniel \n\"MontyOnTheRun\" Monteiro, with the help of many\npeople. Please check\nCREDITS.TXT"
- " on the source code tree for further\nacknowledgements.";
+ mainText = "Made by Daniel \"MontyOnTheRun\" Monteiro, with the help of many people. Please check CREDITS.TXT"
+ " on the source code tree for further acknowledgements.";
}
void CreditsScreen_repaintCallback(void) {
if (firstFrameOnCurrentState) {
clearScreen();
+
+#ifndef MONOCHROME_VECTORS
+ fillRect(0, 0, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER, getPaletteEntry(0xFF00FF00), 0);
+#endif
+
if (mainText != NULL) {
drawTextWindow(1, 1, (XRES_FRAMEBUFFER / 8) - 4, 10, "Credits", mainText);
}
}
-
-
- drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - 7 - 3,
- ((YRES_FRAMEBUFFER / 8) + 1) - (1) - 4,
+ drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - 7 - 4,
+ ((YRES_FRAMEBUFFER / 8) + 1) - (1) - 5,
7 + 2,
3, "Credits", CreditsScreen_options, 1, cursorPosition);
}
diff --git a/common/src/Dungeon.c b/common/src/Dungeon.c
index 63f486a64..6d58e4869 100644
--- a/common/src/Dungeon.c
+++ b/common/src/Dungeon.c
@@ -46,7 +46,7 @@ uint8_t isPositionAllowed(int8_t x, int8_t y) {
&& collisionMap[LEVEL_MAP(x, y)] != '1';
}
-struct GameSnapshot dungeon_tick(const enum ECommand command) {
+struct GameSnapshot dungeonTick(const enum ECommand command) {
int currentPlayerRoom;
int cell;
struct WorldPosition worldPos;
@@ -295,18 +295,22 @@ struct GameSnapshot dungeon_tick(const enum ECommand command) {
switch (getGameStatus()) {
case kBadVictory:
+ gameSnapshot.should_continue = kCrawlerGameFinished;
enterState(kBadVictoryEpilogue);
return gameSnapshot;
case kBadGameOver:
+ gameSnapshot.should_continue = kCrawlerGameFinished;
enterState(kBadGameOverEpilogue);
return gameSnapshot;
case kGoodVictory:
+ gameSnapshot.should_continue = kCrawlerGameFinished;
enterState(kGoodVictoryEpilogue);
return gameSnapshot;
case kGoodGameOver:
+ gameSnapshot.should_continue = kCrawlerGameFinished;
enterState(kGoodGameOverEpilogue);
return gameSnapshot;
default:
diff --git a/common/src/Engine.c b/common/src/Engine.c
index 69bc1b4b5..53fda09fb 100644
--- a/common/src/Engine.c
+++ b/common/src/Engine.c
@@ -97,8 +97,14 @@ void enterState(enum EGameMenuState newState) {
#endif
}
- currentGameMenuState = newState;
initStateCallback(newState);
+
+ if (newState == kBackToGame) {
+ newState = kPlayGame;
+ }
+
+ currentGameMenuState = newState;
+
firstFrameOnCurrentState = 1;
}
diff --git a/common/src/Events.c b/common/src/Events.c
index 768f2dbcd..c78d2682b 100644
--- a/common/src/Events.c
+++ b/common/src/Events.c
@@ -66,7 +66,7 @@ void onLevelLoaded(int index) {
void tickMission(enum ECommand cmd) {
- struct GameSnapshot snapshot = dungeon_tick(cmd);
+ struct GameSnapshot snapshot = dungeonTick(cmd);
x = snapshot.camera_x;
z = snapshot.camera_z;
@@ -147,6 +147,10 @@ int loopTick(enum ECommand command) {
tickMission(command);
+ if (crawlerGameState == kCrawlerGameFinished) {
+ return kCrawlerGameFinished;
+ }
+
if (gameTicks != 0) {
yCameraOffset = ((struct CTile3DProperties *) getFromMap(&tileProperties,
LEVEL_MAP(x, z)))->mFloorHeight -
diff --git a/common/src/GameMenu.c b/common/src/GameMenu.c
index 01a23de49..d28a4c5af 100644
--- a/common/src/GameMenu.c
+++ b/common/src/GameMenu.c
@@ -137,8 +137,8 @@ void GameMenu_repaintCallback(void) {
drawTextWindow(1, 1, (XRES_FRAMEBUFFER / 8) - 2, (YRES_FRAMEBUFFER / 8) - 5, GameMenu_StateTitle, textBuffer);
}
- drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - biggestOption - 3,
- ((YRES_FRAMEBUFFER / 8) + 1) - (optionsHeight / 8) - 3,
+ drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - biggestOption - 4,
+ ((YRES_FRAMEBUFFER / 8) + 1) - (optionsHeight / 8) - 4,
biggestOption + 2,
(optionsHeight / 8) + 2,
GameMenu_StateTitle,
diff --git a/common/src/HackingMinigameRules.c b/common/src/HackingMinigameRules.c
index d00eeb90a..998f084ca 100644
--- a/common/src/HackingMinigameRules.c
+++ b/common/src/HackingMinigameRules.c
@@ -1,13 +1,17 @@
/*
Created by Daniel Monteiro on 2023-11-04.
*/
-#ifdef WIN32
-#include "Win32Int.h"
-#else
-
-#include
-
+#ifdef WIN32
+#include "Win32Int.h"
+#else
+#ifndef SMD
+#include
+#else
+#include
+typedef unsigned long size_t;
#endif
+#endif
+
#include
#include "Common.h"
@@ -19,7 +23,7 @@ uint8_t pinTop[3];
void initHackingMinigame(void) {
- memset(&pins[0][0], 0xFF, sizeof(pins));
+ memFill(&pins[0][0], 0xFF, sizeof(pins));
pins[0][0] = 4;
pins[0][1] = 2;
pins[0][2] = 1;
diff --git a/common/src/HackingScreen.c b/common/src/HackingScreen.c
index ec6fc619d..c840064d0 100644
--- a/common/src/HackingScreen.c
+++ b/common/src/HackingScreen.c
@@ -37,6 +37,9 @@ void HackingScreen_initStateCallback(enum EGameMenuState tag) {
(void)tag;
cursorPosition = 1;
needsToRedrawVisibleMeshes = 0;
+#ifdef PAGE_FLIP_ANIMATION
+ wasSmoothMovementPreviouslyEnabled = enableSmoothMovement;
+#endif
initHackingMinigame();
}
diff --git a/common/src/HelpScreen.c b/common/src/HelpScreen.c
index d1a7ecda8..25afe8001 100644
--- a/common/src/HelpScreen.c
+++ b/common/src/HelpScreen.c
@@ -11,6 +11,14 @@
#include "UI.h"
#include "Engine.h"
+#ifndef MONOCHROME_VECTORS
+#include "FixP.h"
+#include "Vec.h"
+#include "Mesh.h"
+#include "CActor.h"
+#include "Renderer.h"
+#endif
+
extern const char *mainText;
extern int8_t cursorPosition;
@@ -22,20 +30,24 @@ const enum EGameMenuState HelpScreen_nextStateNavigation[1] = {
void HelpScreen_initStateCallback(enum EGameMenuState tag) {
(void)tag;
- mainText = "You must gain access to the reactor, place the EMP\ndevice and, from a safe\ndistance, activate it.";
+ mainText = "You must gain access to the reactor, place the EMP device and, from a safe distance, activate it.";
}
void HelpScreen_repaintCallback(void) {
if (firstFrameOnCurrentState) {
clearScreen();
+#ifndef MONOCHROME_VECTORS
+ fillRect(0, 0, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER, getPaletteEntry(0xFF00FF00), 0);
+#endif
+
if (mainText != NULL) {
drawTextWindow(1, 1, (XRES_FRAMEBUFFER / 8) - 2, 1 + 6, "Help", mainText);
}
}
- drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - 4 - 3,
- ((YRES_FRAMEBUFFER / 8) + 1) - 1 - 4,
+ drawWindowWithOptions((XRES_FRAMEBUFFER / 8) - 4 - 4,
+ ((YRES_FRAMEBUFFER / 8) + 1) - 1 - 5,
4 + 2,
1 + 2, "Help", HelpScreen_options, 1, cursorPosition);
}
diff --git a/common/src/MainMenu.c b/common/src/MainMenu.c
index 308374960..02ce80afd 100644
--- a/common/src/MainMenu.c
+++ b/common/src/MainMenu.c
@@ -1,7 +1,12 @@
#ifdef WIN32
#include "Win32Int.h"
#else
+#ifndef SMD
#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
#endif
#include "Common.h"
@@ -19,2098 +24,3384 @@
#endif
#ifdef EMIT_QUIT_OPTION
-const char *MainMenu_options[4] = {
+
+#define kMainMenuOptionsCount 4
+
+const char *MainMenu_options[kMainMenuOptionsCount] = {
"Play game", "Credits", "Help", "Quit"};
-const enum EGameMenuState MainMenu_nextStateNavigation[4] = {
+const enum EGameMenuState MainMenu_nextStateNavigation[kMainMenuOptionsCount] = {
kPlayGame, kCredits, kHelp,
kQuit};
-const uint8_t kMainMenuOptionsCount = 4;
#else
-const char *MainMenu_options[3] = {
+
+#define kMainMenuOptionsCount 3
+
+const char *MainMenu_options[kMainMenuOptionsCount] = {
"Play game", "Credits", "Help"};
-const enum EGameMenuState MainMenu_nextStateNavigation[3] = {
+const enum EGameMenuState MainMenu_nextStateNavigation[kMainMenuOptionsCount] = {
kPlayGame, kCredits, kHelp};
-const uint8_t kMainMenuOptionsCount = 3;
#endif
-static const uint8_t splashGraphics[] = {
-#ifdef MONOCHROME_VECTORS
- 5,
#ifndef MONOCHROME_VECTORS
-68, 85, 0,
-#endif
-40, 50,
-41, 60,
-70, 59,
-69, 52,
-40, 50,
-5,
+static const uint8_t logoGraphics[] = {
+3,
#ifndef MONOCHROME_VECTORS
-80, 68, 22,
+128, 128, 0,
#endif
-54, 33,
-54, 51,
-66, 55,
-72, 31,
-54, 33,
-6,
+2, 11,
+0, 11,
+0, 9,
+3,
#ifndef MONOCHROME_VECTORS
-136, 170, 0,
+128, 128, 0,
#endif
-54, 57,
-81, 58,
-81, 124,
-32, 123,
-42, 57,
-42, 57,
-4,
+2, 11,
+0, 9,
+2, 9,
+3,
#ifndef MONOCHROME_VECTORS
-0, 0, 0,
+128, 128, 0,
#endif
-42, 57,
-39, 75,
-71, 58,
-42, 57,
-7,
+2, 7,
+0, 7,
+0, 3,
+3,
#ifndef MONOCHROME_VECTORS
-85, 34, 0,
+128, 128, 0,
#endif
-45, 53,
-61, 53,
-59, 47,
-59, 36,
-43, 32,
-42, 54,
-45, 53,
-7,
+2, 7,
+0, 3,
+2, 0,
+3,
#ifndef MONOCHROME_VECTORS
-183, 200, 183,
+128, 128, 0,
#endif
-46, 35,
-63, 37,
-81, 38,
-88, 35,
-88, 21,
-49, 18,
-46, 35,
-5,
+6, 11,
+2, 11,
+2, 0,
+3,
#ifndef MONOCHROME_VECTORS
-0, 0, 0,
+128, 128, 0,
#endif
-49, 18,
-46, 35,
-72, 38,
-73, 22,
-49, 18,
-6,
+6, 11,
+2, 0,
+6, 0,
+3,
#ifndef MONOCHROME_VECTORS
-138, 145, 111,
+128, 128, 0,
#endif
-48, 18,
-73, 22,
-88, 21,
-88, 1,
-77, 1,
-52, 15,
-7,
+9, 11,
+6, 11,
+6, 0,
+3,
#ifndef MONOCHROME_VECTORS
-196, 200, 183,
+128, 128, 0,
#endif
-27, 98,
-27, 108,
-25, 106,
-1, 108,
-1, 1,
-68, 1,
-43, 15,
-6,
+9, 11,
+6, 0,
+9, 0,
+3,
#ifndef MONOCHROME_VECTORS
-108, 103, 83,
+128, 128, 0,
#endif
-60, 57,
-63, 37,
-81, 36,
-81, 59,
-63, 60,
-60, 57,
-5,
+9, 3,
+6, 3,
+6, 5,
+3,
#ifndef MONOCHROME_VECTORS
-145, 124, 111,
+128, 128, 0,
#endif
-26, 108,
-36, 125,
-43, 123,
-27, 98,
-25, 105,
-5,
+9, 3,
+6, 5,
+9, 5,
+3,
#ifndef MONOCHROME_VECTORS
-188, 211, 95,
+128, 128, 0,
#endif
-27, 98,
-43, 98,
-56, 124,
-42, 123,
-27, 98,
-5,
+11, 10,
+9, 11,
+9, 9,
+3,
#ifndef MONOCHROME_VECTORS
-205, 222, 135,
+128, 128, 0,
#endif
-1, 108,
-25, 106,
-36, 125,
-1, 125,
-1, 108,
-5,
+11, 10,
+9, 9,
+11, 9,
+3,
#ifndef MONOCHROME_VECTORS
-85, 68, 0,
-#endif
-46, 47,
-59, 47,
-61, 53,
-45, 53,
-46, 47,
-8,
-#ifndef MONOCHROME_VECTORS
-147, 172, 147,
-#endif
-59, 39,
-59, 39,
-88, 42,
-88, 42,
-88, 36,
-88, 36,
-59, 39,
-59, 39,
-8,
-#ifndef MONOCHROME_VECTORS
-170, 212, 0,
-#endif
-59, 94,
-56, 90,
-56, 90,
-40, 104,
-40, 104,
-40, 104,
-59, 94,
-59, 94,
-7,
-#ifndef MONOCHROME_VECTORS
-0, 0, 218639482,
+128, 128, 0,
#endif
-27, 98,
-36, 98,
-49, 18,
-78, 1,
-68, 1,
-43, 15,
-27, 98,
-5,
+13, 10,
+11, 10,
+11, 0,
+3,
#ifndef MONOCHROME_VECTORS
-0, 0, 218639482,
+128, 128, 0,
#endif
-1, 1,
-1, 7,
-1, 21,
-43, 17,
-68, 1,
+13, 10,
+11, 0,
+13, 0,
3,
#ifndef MONOCHROME_VECTORS
-0, 0, 218639482,
+128, 128, 0,
#endif
-43, 17,
-46, 1,
-68, 1,
-4,
+15, 10,
+13, 10,
+13, 0,
+3,
#ifndef MONOCHROME_VECTORS
-0, 0, 218639482,
+128, 128, 0,
#endif
-49, 18,
-43, 17,
-68, 1,
-78, 1,
-4,
+15, 10,
+13, 0,
+15, 0,
+3,
#ifndef MONOCHROME_VECTORS
-36, 34, 28,
+128, 128, 0,
#endif
-43, 17,
-1, 9,
-0, 1,
-46, 1,
-6,
+15, 11,
+13, 11,
+13, 11,
+3,
#ifndef MONOCHROME_VECTORS
-85, 0, 0,
+128, 128, 0,
#endif
-46, 91,
-34, 108,
-29, 125,
-87, 125,
-87, 86,
-60, 84,
-5,
+15, 11,
+13, 11,
+15, 11,
+3,
#ifndef MONOCHROME_VECTORS
-43, 0, 0,
+128, 128, 0,
#endif
-50, 103,
-74, 107,
-87, 107,
-87, 125,
-46, 125,
-8,
+17, 10,
+15, 10,
+15, 3,
+3,
#ifndef MONOCHROME_VECTORS
-170, 0, 0,
+128, 128, 0,
#endif
-87, 32,
-71, 33,
-55, 36,
-51, 57,
-51, 86,
-62, 98,
-88, 92,
-87, 32,
-6,
+17, 10,
+15, 3,
+17, 3,
+3,
#ifndef MONOCHROME_VECTORS
-180, 0, 0,
+128, 128, 0,
#endif
-56, 37,
-69, 40,
-87, 38,
-87, 33,
-71, 33,
-56, 37,
-5,
+17, 11,
+15, 11,
+15, 11,
+3,
#ifndef MONOCHROME_VECTORS
-190, 0, 0,
+128, 128, 0,
#endif
-52, 56,
-59, 67,
-60, 47,
-56, 37,
-52, 56,
-5,
+17, 11,
+15, 11,
+17, 11,
+3,
#ifndef MONOCHROME_VECTORS
-150, 0, 0,
+128, 128, 0,
#endif
-74, 69,
-78, 49,
-87, 41,
-86, 64,
-74, 69,
-4,
+19, 10,
+17, 10,
+17, 0,
+3,
#ifndef MONOCHROME_VECTORS
-170, 0, 0,
+128, 128, 0,
#endif
-57, 93,
-54, 89,
-46, 92,
-38, 104,
-5,
+19, 10,
+17, 0,
+19, 0,
+3,
#ifndef MONOCHROME_VECTORS
-0, 0, 0,
+128, 128, 0,
#endif
-54, 106,
-54, 106,
-52, 125,
-52, 125,
-87, 125,
-5,
+19, 11,
+17, 11,
+17, 11,
+3,
#ifndef MONOCHROME_VECTORS
128, 128, 0,
#endif
-60, 125,
-60, 125,
-84, 125,
-84, 125,
-61, 125,
-4,
+19, 11,
+17, 11,
+19, 11,
+3,
#ifndef MONOCHROME_VECTORS
-0, 0, 255,
+128, 128, 0,
#endif
-64, 125,
-64, 125,
-70, 125,
-70, 125,
+21, 10,
+19, 10,
+19, 0,
3,
#ifndef MONOCHROME_VECTORS
-0, 0, 218639482,
+128, 128, 0,
#endif
-62, 95,
-58, 67,
-53, 84,
+21, 10,
+19, 0,
+21, 0,
3,
#ifndef MONOCHROME_VECTORS
-0, 0, 218639482,
+128, 128, 0,
#endif
-53, 84,
-58, 67,
-53, 59,
-5,
+21, 9,
+19, 11,
+19, 11,
+3,
#ifndef MONOCHROME_VECTORS
-43, 0, 0,
+128, 128, 0,
#endif
-49, 99,
-49, 99,
-87, 101,
-87, 101,
-87, 98,
+21, 9,
+19, 11,
+21, 11,
3,
#ifndef MONOCHROME_VECTORS
-92, 92, 0,
+128, 128, 0,
#endif
-62, 95,
-74, 69,
-86, 88,
+23, 9,
+21, 10,
+21, 11,
3,
#ifndef MONOCHROME_VECTORS
-100, 100, 0,
+128, 128, 0,
#endif
-58, 67,
-62, 96,
-74, 69,
+23, 9,
+21, 11,
+23, 11,
3,
#ifndef MONOCHROME_VECTORS
-85, 68, 0,
+128, 128, 0,
#endif
-74, 69,
-85, 61,
-85, 88,
-0};
-#else
- 3,
+29, 9,
+23, 9,
+23, 11,
+3,
#ifndef MONOCHROME_VECTORS
- 68, 85, 0,
+128, 128, 0,
#endif
- 40, 50,
- 41, 60,
- 41, 51,
- 3,
+29, 9,
+23, 11,
+29, 11,
+3,
#ifndef MONOCHROME_VECTORS
- 68, 85, 0,
+128, 128, 0,
#endif
- 40, 50,
- 41, 51,
- 40, 50,
- 3,
+29, 11,
+23, 11,
+23, 0,
+3,
#ifndef MONOCHROME_VECTORS
- 68, 85, 0,
+128, 128, 0,
#endif
- 41, 60,
- 69, 59,
- 69, 52,
- 3,
+29, 11,
+23, 0,
+29, 0,
+3,
#ifndef MONOCHROME_VECTORS
- 68, 85, 0,
+128, 128, 0,
#endif
- 41, 60,
- 69, 52,
- 41, 51,
- 3,
+31, 9,
+29, 9,
+29, 0,
+3,
#ifndef MONOCHROME_VECTORS
- 68, 85, 0,
+128, 128, 0,
#endif
- 69, 59,
- 70, 59,
- 70, 59,
- 3,
+31, 9,
+29, 0,
+31, 3,
+3,
#ifndef MONOCHROME_VECTORS
- 68, 85, 0,
+128, 128, 0,
#endif
- 69, 59,
- 70, 59,
- 69, 52,
- 3,
+31, 4,
+29, 6,
+29, 6,
+3,
#ifndef MONOCHROME_VECTORS
- 80, 68, 22,
+128, 128, 0,
#endif
- 54, 51,
- 66, 55,
- 66, 32,
- 3,
+31, 4,
+29, 6,
+31, 8,
+3,
#ifndef MONOCHROME_VECTORS
- 80, 68, 22,
+128, 128, 0,
#endif
- 54, 51,
- 66, 32,
- 54, 33,
- 3,
+3, 29,
+0, 29,
+0, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 80, 68, 22,
+128, 128, 0,
#endif
- 66, 55,
- 72, 31,
- 72, 31,
- 3,
+3, 29,
+0, 19,
+3, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 80, 68, 22,
+128, 128, 0,
#endif
- 66, 55,
- 72, 31,
- 66, 32,
- 3,
+4, 29,
+3, 29,
+3, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 42, 124,
- 32, 123,
- 32, 123,
- 3,
+4, 29,
+3, 19,
+4, 20,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 42, 124,
- 32, 123,
- 42, 57,
- 3,
+5, 27,
+4, 27,
+4, 20,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 42, 124,
- 42, 124,
- 42, 57,
- 3,
+5, 27,
+4, 20,
+5, 21,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 42, 124,
- 42, 57,
- 42, 57,
- 3,
+6, 27,
+5, 27,
+5, 21,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 42, 57,
- 54, 57,
- 54, 124,
- 3,
+6, 27,
+5, 21,
+6, 20,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 42, 57,
- 54, 124,
- 42, 124,
- 3,
+7, 29,
+6, 29,
+6, 20,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 54, 57,
- 81, 58,
- 81, 124,
- 3,
+7, 29,
+6, 20,
+7, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 54, 57,
- 81, 124,
- 54, 124,
- 3,
+11, 29,
+7, 29,
+7, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 81, 58,
- 81, 124,
- 81, 124,
- 3,
+11, 29,
+7, 19,
+11, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 136, 170, 0,
+128, 128, 0,
#endif
- 81, 58,
- 81, 124,
- 81, 124,
- 3,
+13, 29,
+11, 29,
+11, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 42, 57,
- 39, 75,
- 39, 75,
- 3,
+13, 29,
+11, 29,
+13, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 42, 57,
- 39, 75,
- 42, 73,
- 3,
+15, 29,
+13, 29,
+13, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 42, 73,
- 71, 58,
- 71, 58,
- 3,
+15, 29,
+13, 29,
+15, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 42, 73,
- 71, 58,
- 42, 57,
- 3,
+15, 29,
+13, 29,
+13, 21,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 43, 32,
- 42, 54,
- 42, 54,
- 3,
+15, 29,
+13, 21,
+15, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 43, 32,
- 42, 54,
- 43, 54,
- 3,
+17, 28,
+15, 29,
+15, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 45, 32,
- 43, 32,
- 43, 54,
- 3,
+17, 28,
+15, 29,
+17, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 45, 32,
- 43, 54,
- 45, 53,
- 3,
+17, 29,
+15, 29,
+15, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 45, 53,
- 59, 53,
- 59, 36,
- 3,
+17, 29,
+15, 19,
+17, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 45, 53,
- 59, 36,
- 45, 32,
- 3,
+19, 28,
+17, 28,
+17, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 59, 53,
- 59, 53,
- 59, 48,
- 3,
+19, 28,
+17, 19,
+19, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 59, 53,
- 59, 48,
- 59, 47,
- 3,
+19, 27,
+17, 27,
+17, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 59, 47,
- 59, 36,
- 59, 36,
- 3,
+19, 27,
+17, 27,
+19, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 59, 47,
- 59, 36,
- 59, 36,
- 3,
+21, 28,
+19, 28,
+19, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 59, 53,
- 61, 53,
- 61, 53,
- 3,
+21, 28,
+19, 19,
+21, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 34, 0,
+128, 128, 0,
#endif
- 59, 53,
- 61, 53,
- 59, 48,
- 3,
+21, 29,
+19, 29,
+19, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 46, 35,
- 46, 35,
- 46, 33,
- 3,
+21, 29,
+19, 27,
+21, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 46, 35,
- 46, 33,
- 46, 35,
- 3,
+23, 28,
+21, 28,
+21, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 46, 35,
- 49, 35,
- 49, 18,
- 3,
+23, 28,
+21, 19,
+23, 21,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 46, 35,
- 49, 18,
- 46, 33,
- 3,
+23, 29,
+21, 29,
+21, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 49, 35,
- 63, 37,
- 63, 19,
- 3,
+23, 29,
+21, 28,
+23, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 49, 35,
- 63, 19,
- 49, 18,
- 3,
+25, 28,
+23, 28,
+23, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 63, 37,
- 81, 38,
- 81, 21,
- 3,
+25, 28,
+23, 28,
+25, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 63, 37,
- 81, 21,
- 63, 19,
- 3,
+29, 28,
+25, 28,
+25, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 81, 38,
- 88, 35,
- 88, 21,
- 3,
+29, 28,
+25, 28,
+29, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 81, 38,
- 88, 21,
- 81, 21,
- 3,
+29, 29,
+25, 29,
+25, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 88, 35,
- 88, 21,
- 88, 21,
- 3,
+29, 29,
+25, 19,
+29, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 183, 200, 183,
+128, 128, 0,
#endif
- 88, 35,
- 88, 21,
- 88, 21,
- 3,
+31, 28,
+29, 28,
+29, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 49, 18,
- 46, 35,
- 46, 35,
- 3,
+31, 28,
+29, 19,
+31, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 49, 18,
- 46, 35,
- 49, 35,
- 3,
+31, 27,
+29, 27,
+29, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 49, 35,
- 72, 38,
- 72, 22,
- 3,
+31, 27,
+29, 27,
+31, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 49, 35,
- 72, 22,
- 49, 18,
- 3,
+33, 28,
+31, 28,
+31, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 72, 38,
- 73, 22,
- 73, 22,
- 3,
+33, 28,
+31, 19,
+33, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+128, 128, 0,
#endif
- 72, 38,
- 73, 22,
- 72, 22,
- 3,
+33, 29,
+31, 29,
+31, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 52, 15,
- 48, 18,
- 48, 18,
- 3,
+33, 29,
+31, 27,
+33, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 52, 15,
- 48, 18,
- 52, 19,
- 3,
+35, 27,
+33, 28,
+33, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 52, 19,
- 73, 22,
- 73, 4,
- 3,
+35, 27,
+33, 19,
+35, 21,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 52, 19,
- 73, 4,
- 52, 15,
- 3,
+35, 23,
+33, 25,
+33, 25,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 73, 22,
- 77, 22,
- 77, 1,
- 3,
+35, 23,
+33, 25,
+35, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 73, 22,
- 77, 1,
- 73, 4,
- 3,
+35, 29,
+33, 29,
+33, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 77, 22,
- 88, 21,
- 88, 1,
- 3,
+35, 29,
+33, 27,
+35, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 77, 22,
- 88, 1,
- 77, 1,
- 3,
+37, 27,
+35, 27,
+35, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 88, 21,
- 88, 21,
- 88, 21,
- 3,
+37, 27,
+35, 28,
+37, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 138, 145, 111,
+128, 128, 0,
#endif
- 88, 21,
- 88, 21,
- 88, 1,
- 3,
+44, 27,
+37, 27,
+37, 28,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 1, 108,
- 1, 108,
- 1, 108,
- 3,
+44, 27,
+37, 28,
+44, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 1, 108,
- 1, 108,
- 1, 1,
- 3,
+44, 29,
+37, 29,
+37, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 25, 106,
- 1, 108,
- 1, 1,
- 3,
+44, 29,
+37, 19,
+44, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 25, 106,
- 1, 1,
- 25, 1,
- 3,
+46, 27,
+44, 27,
+44, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 27, 108,
- 25, 106,
- 25, 1,
- 3,
+46, 27,
+44, 29,
+46, 29,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 27, 108,
- 25, 1,
- 27, 1,
- 3,
+46, 29,
+44, 29,
+44, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 27, 98,
- 27, 108,
- 27, 1,
- 3,
+46, 29,
+44, 19,
+46, 19,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 27, 98,
- 27, 1,
- 27, 1,
- 3,
+46, 21,
+44, 21,
+44, 23,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 43, 15,
- 27, 98,
- 27, 1,
- 3,
+46, 21,
+44, 23,
+46, 23,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 43, 15,
- 27, 1,
- 43, 1,
- 3,
+46, 25,
+44, 25,
+44, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 43, 1,
- 68, 1,
- 68, 1,
- 3,
+46, 25,
+44, 27,
+46, 27,
+3,
#ifndef MONOCHROME_VECTORS
- 196, 200, 183,
+128, 128, 0,
#endif
- 43, 1,
- 68, 1,
- 43, 15,
- 3,
+4, 47,
+0, 47,
+0, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 60, 57,
- 63, 39,
- 63, 60,
- 3,
+4, 47,
+0, 37,
+4, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 60, 57,
- 63, 60,
- 60, 57,
- 3,
+6, 47,
+4, 47,
+4, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 63, 39,
- 63, 37,
- 63, 60,
- 3,
+6, 47,
+4, 37,
+6, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 63, 39,
- 63, 60,
- 63, 60,
- 3,
+10, 47,
+6, 47,
+6, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 63, 37,
- 81, 36,
- 81, 59,
- 3,
+10, 47,
+6, 39,
+10, 43,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 63, 37,
- 81, 59,
- 63, 60,
- 3,
+10, 47,
+6, 47,
+6, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 81, 36,
- 81, 36,
- 81, 36,
- 3,
+10, 47,
+6, 37,
+10, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 108, 103, 83,
+128, 128, 0,
#endif
- 81, 36,
- 81, 36,
- 81, 59,
- 3,
+11, 47,
+10, 47,
+10, 43,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 25, 105,
- 26, 108,
- 26, 99,
- 3,
+11, 47,
+10, 43,
+11, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 25, 105,
- 26, 99,
- 25, 105,
- 3,
+11, 47,
+10, 47,
+10, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 26, 108,
- 27, 109,
- 27, 98,
- 3,
+11, 47,
+10, 37,
+11, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 26, 108,
- 27, 98,
- 26, 99,
- 3,
+12, 47,
+11, 47,
+11, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 27, 109,
- 36, 125,
- 36, 112,
- 3,
+12, 47,
+11, 45,
+12, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 27, 109,
- 36, 112,
- 27, 98,
- 3,
+12, 45,
+11, 45,
+11, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 36, 125,
- 43, 123,
- 43, 123,
- 3,
+12, 45,
+11, 38,
+12, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 124, 111,
+128, 128, 0,
#endif
- 36, 125,
- 43, 123,
- 36, 112,
- 3,
+13, 47,
+12, 47,
+12, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 188, 211, 95,
+128, 128, 0,
#endif
- 27, 98,
- 42, 98,
- 42, 123,
- 3,
+13, 47,
+12, 46,
+13, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 188, 211, 95,
+128, 128, 0,
#endif
- 27, 98,
- 42, 123,
- 27, 98,
- 3,
+13, 45,
+12, 45,
+12, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 188, 211, 95,
+128, 128, 0,
#endif
- 42, 98,
- 43, 98,
- 43, 123,
- 3,
+13, 45,
+12, 39,
+13, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 188, 211, 95,
+128, 128, 0,
#endif
- 42, 98,
- 43, 123,
- 42, 123,
- 3,
+14, 47,
+13, 47,
+13, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 188, 211, 95,
+128, 128, 0,
#endif
- 43, 98,
- 56, 124,
- 56, 124,
- 3,
+14, 47,
+13, 38,
+14, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 188, 211, 95,
+128, 128, 0,
#endif
- 43, 98,
- 56, 124,
- 43, 123,
- 3,
+17, 47,
+14, 47,
+14, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 1, 125,
- 1, 125,
- 1, 125,
- 3,
+17, 47,
+14, 37,
+17, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 1, 125,
- 1, 125,
- 1, 108,
- 3,
+19, 47,
+17, 47,
+17, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 1, 108,
- 1, 108,
- 1, 125,
- 3,
+19, 47,
+17, 47,
+19, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 1, 108,
- 1, 125,
- 1, 125,
- 3,
+23, 47,
+19, 47,
+19, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 1, 108,
- 25, 106,
- 25, 125,
- 3,
+23, 47,
+19, 47,
+23, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 1, 108,
- 25, 125,
- 1, 125,
- 3,
+23, 47,
+19, 47,
+19, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 25, 106,
- 36, 125,
- 36, 125,
- 3,
+23, 47,
+19, 37,
+23, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 205, 222, 135,
+128, 128, 0,
#endif
- 25, 106,
- 36, 125,
- 25, 125,
- 3,
+25, 47,
+23, 47,
+23, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+128, 128, 0,
#endif
- 46, 53,
- 45, 53,
- 45, 53,
- 3,
+25, 47,
+23, 37,
+25, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+128, 128, 0,
#endif
- 46, 53,
- 45, 53,
- 46, 47,
- 3,
+25, 45,
+23, 45,
+23, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+128, 128, 0,
#endif
- 46, 47,
- 59, 47,
- 59, 53,
- 3,
+25, 45,
+23, 45,
+25, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+128, 128, 0,
#endif
- 46, 47,
- 59, 53,
- 46, 53,
- 3,
+27, 47,
+25, 47,
+25, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+128, 128, 0,
#endif
- 59, 47,
- 61, 53,
- 61, 53,
- 3,
+27, 47,
+25, 37,
+27, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+128, 128, 0,
#endif
- 59, 47,
- 61, 53,
- 59, 53,
- 3,
+27, 43,
+25, 45,
+25, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 147, 172, 147,
+128, 128, 0,
#endif
- 59, 39,
- 88, 42,
- 88, 36,
- 3,
+27, 43,
+25, 45,
+27, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 147, 172, 147,
+128, 128, 0,
#endif
- 59, 39,
- 88, 36,
- 59, 39,
- 3,
+29, 47,
+27, 47,
+27, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 147, 172, 147,
+128, 128, 0,
#endif
- 88, 42,
- 88, 36,
- 88, 36,
- 3,
+29, 47,
+27, 46,
+29, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 147, 172, 147,
+128, 128, 0,
#endif
- 88, 42,
- 88, 36,
- 88, 36,
- 3,
+35, 47,
+29, 47,
+29, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 212, 0,
+128, 128, 0,
#endif
- 56, 90,
- 40, 104,
- 40, 104,
- 3,
+35, 47,
+29, 46,
+35, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 212, 0,
+128, 128, 0,
#endif
- 56, 90,
- 40, 104,
- 56, 96,
- 3,
+35, 47,
+29, 47,
+29, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 212, 0,
+128, 128, 0,
#endif
- 59, 94,
- 56, 90,
- 56, 96,
- 3,
+35, 47,
+29, 37,
+35, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 212, 0,
+128, 128, 0,
#endif
- 59, 94,
- 56, 96,
- 59, 94,
- 3,
+37, 47,
+35, 47,
+35, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 27, 98,
- 36, 98,
- 36, 53,
- 3,
+37, 47,
+35, 47,
+37, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 27, 98,
- 36, 53,
- 27, 98,
- 3,
+37, 47,
+35, 47,
+35, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 36, 98,
- 43, 55,
- 43, 15,
- 3,
+37, 47,
+35, 37,
+37, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 36, 98,
- 43, 15,
- 36, 53,
- 3,
+37, 39,
+35, 39,
+35, 41,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 43, 55,
- 49, 18,
- 49, 12,
- 3,
+37, 39,
+35, 41,
+37, 41,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 43, 55,
- 49, 12,
- 43, 15,
- 3,
+37, 43,
+35, 43,
+35, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 49, 18,
- 68, 7,
- 68, 1,
- 3,
+37, 43,
+35, 45,
+37, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 49, 18,
- 68, 1,
- 49, 12,
- 3,
+40, 47,
+37, 47,
+37, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 68, 7,
- 78, 1,
- 78, 1,
- 3,
+40, 47,
+37, 45,
+40, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 227, 226, 219,
+128, 128, 0,
#endif
- 68, 7,
- 78, 1,
- 68, 1,
- 3,
+44, 47,
+40, 47,
+40, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 1, 1,
- 1, 7,
- 1, 7,
- 3,
+44, 47,
+40, 46,
+44, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 1, 1,
- 1, 7,
- 1, 21,
- 3,
+44, 47,
+40, 47,
+40, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 1, 1,
- 1, 1,
- 1, 21,
- 3,
+44, 47,
+40, 37,
+44, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 1, 1,
- 1, 21,
- 1, 21,
- 3,
+46, 47,
+44, 47,
+44, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 43, 1,
- 1, 1,
- 1, 21,
- 3,
+46, 47,
+44, 37,
+46, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 43, 1,
- 1, 21,
- 43, 17,
- 3,
+46, 45,
+44, 45,
+44, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 68, 1,
- 43, 1,
- 43, 17,
- 3,
+46, 45,
+44, 45,
+46, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 145, 138, 111,
+128, 128, 0,
#endif
- 68, 1,
- 43, 17,
- 68, 1,
- 3,
+48, 47,
+46, 47,
+46, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 72, 62, 55,
+128, 128, 0,
#endif
- 46, 15,
- 43, 17,
- 43, 17,
- 3,
+48, 47,
+46, 37,
+48, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 72, 62, 55,
+128, 128, 0,
#endif
- 46, 15,
- 43, 17,
- 46, 1,
- 3,
+48, 47,
+46, 47,
+46, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 72, 62, 55,
+128, 128, 0,
#endif
- 68, 1,
- 46, 15,
- 46, 1,
- 3,
+48, 47,
+46, 45,
+48, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 72, 62, 55,
+128, 128, 0,
#endif
- 68, 1,
- 46, 1,
- 68, 1,
- 3,
+50, 47,
+48, 47,
+48, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 172, 157, 147,
+128, 128, 0,
#endif
- 49, 18,
- 43, 17,
- 43, 17,
- 3,
+50, 47,
+48, 37,
+50, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 172, 157, 147,
+128, 128, 0,
#endif
- 49, 18,
- 43, 17,
- 49, 13,
- 3,
+50, 41,
+48, 43,
+48, 43,
+3,
#ifndef MONOCHROME_VECTORS
- 172, 157, 147,
+128, 128, 0,
#endif
- 68, 7,
- 49, 18,
- 49, 13,
- 3,
+50, 41,
+48, 43,
+50, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 172, 157, 147,
+128, 128, 0,
#endif
- 68, 7,
- 49, 13,
- 68, 1,
- 3,
+50, 47,
+48, 47,
+48, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 172, 157, 147,
+128, 128, 0,
#endif
- 78, 1,
- 68, 7,
- 68, 1,
- 3,
+50, 47,
+48, 46,
+50, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 172, 157, 147,
+128, 128, 0,
#endif
- 78, 1,
- 68, 1,
- 78, 1,
- 3,
+52, 47,
+50, 47,
+50, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 36, 34, 28,
+128, 128, 0,
#endif
- 1, 9,
- 0, 1,
- 0, 1,
- 3,
+52, 47,
+50, 46,
+52, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 36, 34, 28,
+128, 128, 0,
#endif
- 1, 9,
- 0, 1,
- 1, 1,
- 3,
+56, 47,
+52, 47,
+52, 46,
+3,
#ifndef MONOCHROME_VECTORS
- 36, 34, 28,
+128, 128, 0,
#endif
- 43, 17,
- 1, 9,
- 1, 1,
- 3,
+56, 47,
+52, 46,
+56, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 36, 34, 28,
+128, 128, 0,
#endif
- 43, 17,
- 1, 1,
- 43, 1,
- 3,
+56, 47,
+52, 47,
+52, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 36, 34, 28,
+128, 128, 0,
#endif
- 46, 1,
- 43, 17,
- 43, 1,
- 3,
+56, 47,
+52, 37,
+56, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 36, 34, 28,
+128, 128, 0,
#endif
- 46, 1,
- 43, 1,
- 46, 1,
- 3,
+58, 47,
+56, 47,
+56, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 34, 108,
- 29, 125,
- 29, 125,
- 3,
+58, 47,
+56, 37,
+58, 45,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 34, 108,
- 29, 125,
- 34, 125,
- 3,
+60, 47,
+58, 47,
+58, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 46, 91,
- 34, 108,
- 34, 125,
- 3,
+60, 47,
+58, 37,
+60, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 46, 91,
- 34, 125,
- 46, 125,
- 3,
+62, 47,
+60, 47,
+60, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 60, 84,
- 46, 91,
- 46, 125,
- 3,
+62, 47,
+60, 37,
+62, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 60, 84,
- 46, 125,
- 60, 125,
- 3,
+62, 47,
+60, 47,
+60, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 60, 125,
- 87, 125,
- 87, 86,
- 3,
+62, 47,
+60, 47,
+62, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 60, 125,
- 87, 86,
- 60, 84,
- 3,
+64, 47,
+62, 47,
+62, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 87, 125,
- 87, 125,
- 87, 125,
- 3,
+64, 47,
+62, 39,
+64, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 0, 0,
+128, 128, 0,
#endif
- 87, 125,
- 87, 125,
- 87, 86,
- 3,
+64, 47,
+62, 47,
+62, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 46, 125,
- 50, 103,
- 50, 125,
- 3,
+64, 47,
+62, 47,
+64, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 46, 125,
- 50, 125,
- 46, 125,
- 3,
+66, 47,
+64, 47,
+64, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 50, 103,
- 74, 107,
- 74, 125,
- 3,
+66, 47,
+64, 37,
+66, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 50, 103,
- 74, 125,
- 50, 125,
- 3,
+66, 47,
+64, 47,
+64, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 74, 107,
- 87, 107,
- 87, 125,
- 3,
+66, 47,
+64, 47,
+66, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 74, 107,
- 87, 125,
- 74, 125,
- 3,
+68, 47,
+66, 47,
+66, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 87, 107,
- 87, 125,
- 87, 125,
- 3,
+68, 47,
+66, 37,
+68, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+128, 128, 0,
#endif
- 87, 107,
- 87, 125,
- 87, 125,
- 3,
+68, 45,
+66, 47,
+66, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 51, 57,
- 51, 57,
- 51, 57,
- 3,
+68, 45,
+66, 47,
+68, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 51, 57,
- 51, 57,
- 51, 86,
- 3,
+71, 47,
+68, 47,
+68, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 55, 36,
- 51, 57,
- 51, 86,
- 3,
+71, 47,
+68, 47,
+71, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 55, 36,
- 51, 86,
- 55, 91,
- 3,
+74, 47,
+71, 47,
+71, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 62, 35,
- 55, 36,
- 55, 91,
- 3,
+74, 47,
+71, 47,
+74, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 62, 35,
- 55, 91,
- 62, 98,
- 3,
+74, 47,
+71, 47,
+71, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 71, 33,
- 62, 35,
- 62, 98,
- 3,
+74, 47,
+71, 37,
+74, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 71, 33,
- 62, 98,
- 71, 96,
- 3,
+75, 47,
+74, 47,
+74, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 87, 32,
- 71, 33,
- 71, 96,
- 3,
+75, 47,
+74, 47,
+75, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 87, 32,
- 71, 96,
- 87, 92,
- 3,
+75, 47,
+74, 47,
+74, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 87, 92,
- 88, 92,
- 88, 92,
- 3,
+75, 47,
+74, 37,
+75, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+128, 128, 0,
#endif
- 87, 92,
- 88, 92,
- 87, 32,
- 3,
+76, 47,
+75, 47,
+75, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 56, 37,
- 69, 40,
- 69, 34,
- 3,
+76, 47,
+75, 47,
+76, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 56, 37,
- 69, 34,
- 56, 37,
- 3,
+76, 45,
+75, 45,
+75, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 69, 40,
- 71, 40,
- 71, 33,
- 3,
+76, 45,
+75, 38,
+76, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 69, 40,
- 71, 33,
- 69, 34,
- 3,
+77, 47,
+76, 47,
+76, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 71, 40,
- 87, 38,
- 87, 33,
- 3,
+77, 47,
+76, 47,
+77, 47,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 71, 40,
- 87, 33,
- 71, 33,
- 3,
+77, 45,
+76, 45,
+76, 39,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 87, 38,
- 87, 33,
- 87, 33,
- 3,
+77, 45,
+76, 39,
+77, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 180, 0, 0,
+128, 128, 0,
#endif
- 87, 38,
- 87, 33,
- 87, 33,
- 3,
+78, 47,
+77, 47,
+77, 38,
+3,
#ifndef MONOCHROME_VECTORS
- 190, 0, 0,
+128, 128, 0,
#endif
- 52, 56,
- 56, 63,
- 56, 37,
- 3,
+78, 47,
+77, 38,
+78, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 190, 0, 0,
+128, 128, 0,
#endif
- 52, 56,
- 56, 37,
- 52, 56,
- 3,
+81, 47,
+78, 47,
+78, 37,
+3,
#ifndef MONOCHROME_VECTORS
- 190, 0, 0,
+128, 128, 0,
#endif
- 56, 63,
- 59, 67,
- 59, 43,
- 3,
+81, 47,
+78, 37,
+81, 37,
+0};
+
+#else
+static const uint8_t logoGraphics[] = {
+ 33,
#ifndef MONOCHROME_VECTORS
- 190, 0, 0,
+ 128, 128, 0,
#endif
- 56, 63,
- 59, 43,
- 56, 37,
- 3,
+ 6, 11,
+ 0, 11,
+ 0, 9,
+ 2, 9,
+ 2, 7,
+ 0, 7,
+ 0, 3,
+ 2, 0,
+ 9, 0,
+ 9, 3,
+ 6, 3,
+ 6, 5,
+ 9, 5,
+ 9, 9,
+ 11, 9,
+ 11, 0,
+ 15, 0,
+ 15, 3,
+ 17, 3,
+ 17, 0,
+ 21, 0,
+ 21, 9,
+ 19, 11,
+ 13, 11,
+ 29, 11,
+ 23, 11,
+ 23, 0,
+ 29, 0,
+ 31, 3,
+ 31, 4,
+ 29, 6,
+ 31, 8,
+ 31, 9,
+ 45,
#ifndef MONOCHROME_VECTORS
- 190, 0, 0,
+ 128, 128, 0,
#endif
- 59, 67,
- 60, 47,
- 60, 47,
- 3,
+ 6, 29,
+ 6, 27,
+ 4, 27,
+ 4, 29,
+ 0, 29,
+ 0, 19,
+ 3, 19,
+ 5, 21,
+ 7, 19,
+ 11, 19,
+ 11, 29,
+ 17, 29,
+ 13, 29,
+ 13, 21,
+ 15, 19,
+ 21, 19,
+ 23, 21,
+ 23, 29,
+ 19, 29,
+ 19, 27,
+ 17, 27,
+ 29, 29,
+ 25, 29,
+ 25, 19,
+ 33, 19,
+ 35, 21,
+ 35, 23,
+ 33, 25,
+ 35, 27,
+ 35, 29,
+ 31, 29,
+ 31, 27,
+ 29, 27,
+ 46, 29,
+ 37, 29,
+ 37, 19,
+ 46, 19,
+ 46, 21,
+ 44, 21,
+ 44, 23,
+ 46, 23,
+ 46, 25,
+ 44, 25,
+ 44, 27,
+ 46, 27,
+ 72,
#ifndef MONOCHROME_VECTORS
- 190, 0, 0,
+ 128, 128, 0,
#endif
- 59, 67,
+ 4, 47,
+ 0, 47,
+ 0, 37,
+ 4, 37,
+ 13, 47,
+ 13, 45,
+ 11, 45,
+ 11, 47,
+ 6, 47,
+ 6, 37,
+ 10, 37,
+ 12, 39,
+ 14, 37,
+ 17, 37,
+ 17, 47,
+ 23, 47,
+ 19, 47,
+ 19, 37,
+ 25, 37,
+ 27, 39,
+ 27, 43,
+ 25, 45,
+ 23, 45,
+ 37, 47,
+ 29, 47,
+ 29, 37,
+ 37, 37,
+ 37, 39,
+ 35, 39,
+ 35, 41,
+ 37, 41,
+ 37, 43,
+ 35, 43,
+ 35, 45,
+ 37, 45,
+ 44, 47,
+ 40, 47,
+ 40, 37,
+ 48, 37,
+ 50, 39,
+ 50, 41,
+ 48, 43,
+ 50, 45,
+ 50, 47,
+ 46, 47,
+ 46, 45,
+ 44, 45,
+ 56, 47,
+ 52, 47,
+ 52, 37,
+ 56, 37,
+ 58, 45,
+ 58, 37,
+ 62, 37,
+ 62, 39,
+ 64, 39,
+ 64, 37,
+ 68, 37,
+ 68, 45,
+ 66, 47,
60, 47,
- 59, 43,
- 3,
-#ifndef MONOCHROME_VECTORS
- 150, 0, 0,
+ 77, 47,
+ 77, 45,
+ 75, 45,
+ 75, 47,
+ 71, 47,
+ 71, 37,
+ 74, 37,
+ 76, 39,
+ 78, 37,
+ 81, 37,
+ 81, 47,
+ 0};
+
+
+
#endif
- 74, 69,
- 78, 49,
- 78, 68,
- 3,
+
+
+
+static const uint8_t splashGraphics[] = {
+#ifdef MONOCHROME_VECTORS
+ 4,
#ifndef MONOCHROME_VECTORS
- 150, 0, 0,
+ 136, 170, 0,
#endif
- 74, 69,
- 78, 68,
- 74, 69,
- 3,
+ 51, 77,
+ 54, 99,
+ 36, 98,
+ 38, 80,
+ 5,
#ifndef MONOCHROME_VECTORS
- 150, 0, 0,
+ 108, 103, 83,
#endif
- 78, 49,
- 86, 41,
- 86, 64,
- 3,
+ 49, 18,
+ 40, 72,
+ 52, 74,
+ 71, 33,
+ 84, 18,
+ 5,
#ifndef MONOCHROME_VECTORS
- 150, 0, 0,
+ 138, 145, 111,
#endif
- 78, 49,
- 86, 64,
- 78, 68,
- 3,
+ 49, 18,
+ 73, 22,
+ 87, 21,
+ 87, 1,
+ 77, 1,
+ 6,
#ifndef MONOCHROME_VECTORS
- 150, 0, 0,
+ 196, 200, 183,
#endif
- 86, 41,
- 87, 41,
- 87, 41,
- 3,
+ 27, 98,
+ 26, 106,
+ 1, 108,
+ 1, 1,
+ 68, 1,
+ 43, 17,
+ 4,
#ifndef MONOCHROME_VECTORS
- 150, 0, 0,
+ 145, 124, 111,
#endif
- 86, 41,
- 87, 41,
- 86, 64,
- 3,
+ 36, 125,
+ 43, 123,
+ 27, 98,
+ 26, 106,
+ 5,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+ 188, 211, 95,
#endif
- 38, 104,
- 46, 99,
- 46, 92,
- 3,
+ 27, 98,
+ 43, 98,
+ 56, 124,
+ 42, 123,
+ 27, 98,
+ 4,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+ 205, 222, 135,
#endif
- 38, 104,
- 46, 92,
- 38, 104,
- 3,
+ 26, 106,
+ 36, 125,
+ 1, 125,
+ 1, 108,
+ 7,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+ 0, 0, 188169338,
#endif
- 46, 99,
- 54, 95,
- 54, 89,
+ 27, 98,
+ 36, 98,
+ 49, 18,
+ 77, 1,
+ 68, 1,
+ 43, 15,
+ 27, 98,
3,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+ 0, 0, 188169338,
#endif
- 46, 99,
- 54, 89,
- 46, 92,
- 3,
+ 1, 9,
+ 1, 21,
+ 43, 17,
+ 4,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+ 108, 93, 83,
#endif
- 54, 95,
- 57, 93,
- 57, 93,
- 3,
+ 43, 17,
+ 1, 9,
+ 1, 1,
+ 46, 1,
+ 6,
#ifndef MONOCHROME_VECTORS
- 170, 0, 0,
+ 85, 0, 0,
#endif
- 54, 95,
- 57, 93,
- 54, 89,
- 3,
+ 46, 91,
+ 34, 108,
+ 29, 125,
+ 87, 125,
+ 87, 86,
+ 60, 84,
+ 5,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+ 43, 0, 0,
#endif
- 54, 106,
- 52, 125,
- 52, 125,
- 3,
+ 50, 103,
+ 74, 107,
+ 87, 105,
+ 87, 125,
+ 46, 125,
+ 6,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+ 180, 0, 0,
#endif
- 54, 106,
- 52, 125,
- 54, 125,
- 3,
+ 56, 37,
+ 69, 40,
+ 87, 38,
+ 87, 33,
+ 71, 33,
+ 56, 37,
+ 7,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+ 170, 0, 0,
#endif
- 87, 125,
- 54, 106,
- 54, 125,
- 3,
+ 71, 33,
+ 55, 36,
+ 51, 57,
+ 51, 86,
+ 62, 98,
+ 87, 92,
+ 87, 32,
+ 5,
#ifndef MONOCHROME_VECTORS
- 0, 0, 0,
+ 190, 0, 0,
#endif
- 87, 125,
- 54, 125,
- 87, 125,
- 3,
+ 52, 56,
+ 59, 67,
+ 60, 47,
+ 56, 37,
+ 52, 56,
+ 5,
#ifndef MONOCHROME_VECTORS
- 128, 128, 0,
+ 150, 0, 0,
#endif
- 61, 125,
- 60, 125,
- 60, 125,
- 3,
+ 74, 69,
+ 78, 49,
+ 87, 41,
+ 86, 64,
+ 74, 69,
+ 6,
#ifndef MONOCHROME_VECTORS
- 128, 128, 0,
+ 128, 0, 0,
#endif
- 61, 125,
- 60, 125,
- 61, 125,
- 3,
+ 52, 93,
+ 53, 89,
+ 46, 92,
+ 38, 104,
+ 50, 99,
+ 61, 101,
+ 4,
#ifndef MONOCHROME_VECTORS
- 128, 128, 0,
+ 0, 0, 0,
#endif
- 61, 125,
- 84, 125,
- 84, 125,
- 3,
+ 54, 106,
+ 52, 125,
+ 87, 125,
+ 58, 124,
+ 5,
#ifndef MONOCHROME_VECTORS
128, 128, 0,
#endif
- 61, 125,
+ 60, 125,
+ 60, 125,
+ 84, 125,
84, 125,
61, 125,
- 3,
+ 4,
#ifndef MONOCHROME_VECTORS
0, 0, 255,
#endif
- 70, 125,
64, 125,
64, 125,
- 3,
-#ifndef MONOCHROME_VECTORS
- 0, 0, 255,
-#endif
70, 125,
- 64, 125,
70, 125,
3,
#ifndef MONOCHROME_VECTORS
- 128, 128, 0,
+ 0, 0, 188169338,
#endif
- 53, 84,
- 58, 90,
+ 62, 95,
58, 67,
+ 53, 84,
3,
#ifndef MONOCHROME_VECTORS
- 128, 128, 0,
+ 0, 0, 188169338,
#endif
53, 84,
58, 67,
- 53, 84,
+ 53, 59,
3,
#ifndef MONOCHROME_VECTORS
- 128, 128, 0,
+ 92, 92, 0,
#endif
- 58, 90,
- 62, 95,
62, 95,
+ 74, 69,
+ 86, 88,
3,
#ifndef MONOCHROME_VECTORS
- 128, 128, 0,
+ 100, 100, 0,
#endif
- 58, 90,
- 62, 95,
58, 67,
+ 62, 95,
+ 74, 69,
3,
#ifndef MONOCHROME_VECTORS
- 150, 150, 0,
+ 85, 68, 0,
#endif
- 53, 59,
- 53, 84,
- 53, 84,
- 3,
+ 74, 69,
+ 86, 64,
+ 86, 88,
+ 4,
#ifndef MONOCHROME_VECTORS
- 150, 150, 0,
+ 68, 120, 33,
#endif
- 53, 59,
- 53, 84,
- 53, 84,
- 3,
+ 39, 80,
+ 51, 77,
+ 51, 73,
+ 40, 72,
+ 4,
#ifndef MONOCHROME_VECTORS
- 150, 150, 0,
+ 183, 200, 183,
#endif
- 53, 84,
- 58, 67,
- 58, 67,
- 3,
+ 70, 33,
+ 87, 33,
+ 87, 21,
+ 73, 22,
+ 4,
#ifndef MONOCHROME_VECTORS
- 150, 150, 0,
+ 0, 0, 188169338,
#endif
- 53, 84,
- 58, 67,
- 53, 59,
+ 49, 18,
+ 43, 17,
+ 68, 1,
+ 78, 1,
3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+ 0, 0, 188169338,
#endif
- 87, 98,
- 49, 99,
- 49, 99,
- 3,
+ 43, 17,
+ 45, 1,
+ 68, 1,
+ 0};
+
+
+
+
+#else
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+136, 170, 0,
#endif
- 87, 98,
- 49, 99,
- 87, 101,
- 3,
+38, 98,
+36, 98,
+36, 98,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+136, 170, 0,
#endif
- 87, 98,
- 87, 98,
- 87, 101,
- 3,
+38, 98,
+36, 98,
+38, 80,
+3,
#ifndef MONOCHROME_VECTORS
- 43, 0, 0,
+136, 170, 0,
#endif
- 87, 98,
- 87, 101,
- 87, 98,
- 3,
+38, 80,
+51, 77,
+51, 99,
+3,
#ifndef MONOCHROME_VECTORS
- 92, 92, 0,
+136, 170, 0,
#endif
- 74, 92,
- 62, 95,
- 62, 95,
- 3,
+38, 80,
+51, 99,
+38, 98,
+3,
#ifndef MONOCHROME_VECTORS
- 92, 92, 0,
+136, 170, 0,
#endif
- 74, 92,
- 62, 95,
- 74, 69,
- 3,
+51, 77,
+54, 99,
+54, 99,
+3,
#ifndef MONOCHROME_VECTORS
- 92, 92, 0,
+136, 170, 0,
#endif
- 86, 88,
- 74, 92,
- 74, 69,
- 3,
+51, 77,
+54, 99,
+51, 99,
+3,
#ifndef MONOCHROME_VECTORS
- 92, 92, 0,
+108, 103, 83,
#endif
- 86, 88,
- 74, 69,
- 86, 88,
- 3,
+49, 18,
+40, 72,
+40, 72,
+3,
#ifndef MONOCHROME_VECTORS
- 100, 100, 0,
+108, 103, 83,
#endif
- 62, 67,
- 58, 67,
- 58, 67,
- 3,
+49, 18,
+40, 72,
+49, 74,
+3,
#ifndef MONOCHROME_VECTORS
- 100, 100, 0,
+108, 103, 83,
#endif
- 62, 67,
- 58, 67,
- 62, 96,
- 3,
+52, 18,
+49, 18,
+49, 74,
+3,
#ifndef MONOCHROME_VECTORS
- 100, 100, 0,
+108, 103, 83,
#endif
- 74, 69,
- 62, 67,
- 62, 96,
- 3,
+52, 18,
+49, 74,
+52, 74,
+3,
#ifndef MONOCHROME_VECTORS
- 100, 100, 0,
+108, 103, 83,
#endif
- 74, 69,
- 62, 96,
- 74, 69,
- 3,
+71, 18,
+52, 18,
+52, 74,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+108, 103, 83,
#endif
- 85, 88,
- 74, 69,
- 74, 69,
- 3,
+71, 18,
+52, 74,
+71, 33,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+108, 103, 83,
#endif
- 85, 88,
- 74, 69,
- 85, 61,
- 3,
+84, 18,
+71, 18,
+71, 33,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+108, 103, 83,
#endif
- 85, 88,
- 85, 88,
- 85, 61,
- 3,
+84, 18,
+71, 33,
+84, 18,
+3,
#ifndef MONOCHROME_VECTORS
- 85, 68, 0,
+138, 145, 111,
#endif
- 85, 88,
- 85, 61,
- 85, 88,
- 0};
+73, 4,
+49, 18,
+49, 18,
+3,
+#ifndef MONOCHROME_VECTORS
+138, 145, 111,
+#endif
+73, 4,
+49, 18,
+73, 22,
+3,
+#ifndef MONOCHROME_VECTORS
+138, 145, 111,
+#endif
+77, 1,
+73, 4,
+73, 22,
+3,
+#ifndef MONOCHROME_VECTORS
+138, 145, 111,
+#endif
+77, 1,
+73, 22,
+77, 22,
+3,
+#ifndef MONOCHROME_VECTORS
+138, 145, 111,
+#endif
+77, 22,
+87, 21,
+87, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+138, 145, 111,
+#endif
+77, 22,
+87, 1,
+77, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+138, 145, 111,
+#endif
+87, 21,
+87, 1,
+87, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+138, 145, 111,
+#endif
+87, 21,
+87, 1,
+87, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+1, 108,
+1, 108,
+1, 108,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+1, 108,
+1, 108,
+1, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+26, 106,
+1, 108,
+1, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+26, 106,
+1, 1,
+26, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+27, 98,
+26, 106,
+26, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+27, 98,
+26, 1,
+27, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+43, 17,
+27, 98,
+27, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+43, 17,
+27, 1,
+43, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+43, 1,
+68, 1,
+68, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+196, 200, 183,
+#endif
+43, 1,
+68, 1,
+43, 17,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 124, 111,
+#endif
+26, 106,
+27, 108,
+27, 98,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 124, 111,
+#endif
+26, 106,
+27, 98,
+26, 106,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 124, 111,
+#endif
+27, 108,
+36, 125,
+36, 112,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 124, 111,
+#endif
+27, 108,
+36, 112,
+27, 98,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 124, 111,
+#endif
+36, 125,
+43, 123,
+43, 123,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 124, 111,
+#endif
+36, 125,
+43, 123,
+36, 112,
+3,
+#ifndef MONOCHROME_VECTORS
+188, 211, 95,
+#endif
+27, 98,
+42, 98,
+42, 123,
+3,
+#ifndef MONOCHROME_VECTORS
+188, 211, 95,
+#endif
+27, 98,
+42, 123,
+27, 98,
+3,
+#ifndef MONOCHROME_VECTORS
+188, 211, 95,
+#endif
+42, 98,
+43, 98,
+43, 123,
+3,
+#ifndef MONOCHROME_VECTORS
+188, 211, 95,
+#endif
+42, 98,
+43, 123,
+42, 123,
+3,
+#ifndef MONOCHROME_VECTORS
+188, 211, 95,
+#endif
+43, 98,
+56, 124,
+56, 124,
+3,
+#ifndef MONOCHROME_VECTORS
+188, 211, 95,
+#endif
+43, 98,
+56, 124,
+43, 123,
+3,
+#ifndef MONOCHROME_VECTORS
+205, 222, 135,
+#endif
+1, 125,
+1, 125,
+1, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+205, 222, 135,
+#endif
+1, 125,
+1, 125,
+1, 108,
+3,
+#ifndef MONOCHROME_VECTORS
+205, 222, 135,
+#endif
+1, 108,
+26, 106,
+26, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+205, 222, 135,
+#endif
+1, 108,
+26, 125,
+1, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+205, 222, 135,
+#endif
+26, 106,
+36, 125,
+36, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+205, 222, 135,
+#endif
+26, 106,
+36, 125,
+26, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+27, 98,
+36, 98,
+36, 53,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+27, 98,
+36, 53,
+27, 98,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+36, 98,
+43, 55,
+43, 15,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+36, 98,
+43, 15,
+36, 53,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+43, 55,
+49, 18,
+49, 12,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+43, 55,
+49, 12,
+43, 15,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+49, 18,
+68, 7,
+68, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+49, 18,
+68, 1,
+49, 12,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+68, 7,
+77, 1,
+77, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+227, 226, 219,
+#endif
+68, 7,
+77, 1,
+68, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 138, 111,
+#endif
+1, 9,
+1, 9,
+1, 9,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 138, 111,
+#endif
+1, 9,
+1, 9,
+1, 21,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 138, 111,
+#endif
+43, 17,
+1, 9,
+1, 21,
+3,
+#ifndef MONOCHROME_VECTORS
+145, 138, 111,
+#endif
+43, 17,
+1, 21,
+43, 17,
+3,
+#ifndef MONOCHROME_VECTORS
+108, 93, 83,
+#endif
+1, 9,
+1, 9,
+1, 9,
+3,
+#ifndef MONOCHROME_VECTORS
+108, 93, 83,
+#endif
+1, 9,
+1, 9,
+1, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+108, 93, 83,
+#endif
+43, 17,
+1, 9,
+1, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+108, 93, 83,
+#endif
+43, 17,
+1, 1,
+43, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+108, 93, 83,
+#endif
+46, 1,
+43, 17,
+43, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+108, 93, 83,
+#endif
+46, 1,
+43, 1,
+46, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+34, 108,
+29, 125,
+29, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+34, 108,
+29, 125,
+34, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+46, 91,
+34, 108,
+34, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+46, 91,
+34, 125,
+46, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+60, 84,
+46, 91,
+46, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+60, 84,
+46, 125,
+60, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+60, 125,
+87, 125,
+87, 86,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+60, 125,
+87, 86,
+60, 84,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+87, 125,
+87, 125,
+87, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 0, 0,
+#endif
+87, 125,
+87, 125,
+87, 86,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+46, 125,
+50, 103,
+50, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+46, 125,
+50, 125,
+46, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+50, 103,
+74, 107,
+74, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+50, 103,
+74, 125,
+50, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+74, 107,
+87, 105,
+87, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+74, 107,
+87, 125,
+74, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+87, 105,
+87, 125,
+87, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+43, 0, 0,
+#endif
+87, 105,
+87, 125,
+87, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+56, 37,
+69, 40,
+69, 34,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+56, 37,
+69, 34,
+56, 37,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+69, 40,
+71, 40,
+71, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+69, 40,
+71, 33,
+69, 34,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+71, 40,
+87, 38,
+87, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+71, 40,
+87, 33,
+71, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+87, 38,
+87, 33,
+87, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+180, 0, 0,
+#endif
+87, 38,
+87, 33,
+87, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+51, 57,
+51, 57,
+51, 57,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+51, 57,
+51, 57,
+51, 86,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+55, 36,
+51, 57,
+51, 86,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+55, 36,
+51, 86,
+55, 91,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+62, 35,
+55, 36,
+55, 91,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+62, 35,
+55, 91,
+62, 98,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+71, 33,
+62, 35,
+62, 98,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+71, 33,
+62, 98,
+71, 96,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+87, 32,
+71, 33,
+71, 96,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+87, 32,
+71, 96,
+87, 92,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+87, 92,
+87, 92,
+87, 92,
+3,
+#ifndef MONOCHROME_VECTORS
+170, 0, 0,
+#endif
+87, 92,
+87, 92,
+87, 32,
+3,
+#ifndef MONOCHROME_VECTORS
+190, 0, 0,
+#endif
+52, 56,
+56, 63,
+56, 37,
+3,
+#ifndef MONOCHROME_VECTORS
+190, 0, 0,
+#endif
+52, 56,
+56, 37,
+52, 56,
+3,
+#ifndef MONOCHROME_VECTORS
+190, 0, 0,
+#endif
+56, 63,
+59, 67,
+59, 43,
+3,
+#ifndef MONOCHROME_VECTORS
+190, 0, 0,
+#endif
+56, 63,
+59, 43,
+56, 37,
+3,
+#ifndef MONOCHROME_VECTORS
+190, 0, 0,
+#endif
+59, 67,
+60, 47,
+60, 47,
+3,
+#ifndef MONOCHROME_VECTORS
+190, 0, 0,
+#endif
+59, 67,
+60, 47,
+59, 43,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 0, 0,
+#endif
+74, 69,
+78, 49,
+78, 68,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 0, 0,
+#endif
+74, 69,
+78, 68,
+74, 69,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 0, 0,
+#endif
+78, 49,
+86, 41,
+86, 64,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 0, 0,
+#endif
+78, 49,
+86, 64,
+78, 68,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 0, 0,
+#endif
+86, 41,
+87, 41,
+87, 41,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 0, 0,
+#endif
+86, 41,
+87, 41,
+86, 64,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+46, 92,
+38, 104,
+38, 104,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+46, 92,
+38, 104,
+46, 100,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+50, 91,
+46, 92,
+46, 100,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+50, 91,
+46, 100,
+50, 99,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+52, 89,
+50, 91,
+50, 99,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+52, 89,
+50, 99,
+52, 99,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+53, 93,
+52, 93,
+52, 93,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+53, 93,
+52, 93,
+53, 89,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+53, 89,
+52, 89,
+52, 99,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+53, 89,
+52, 99,
+53, 99,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+61, 101,
+53, 93,
+53, 99,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 0, 0,
+#endif
+61, 101,
+53, 99,
+61, 101,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 0,
+#endif
+54, 106,
+52, 125,
+52, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 0,
+#endif
+54, 106,
+52, 125,
+54, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 0,
+#endif
+58, 124,
+54, 106,
+54, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 0,
+#endif
+58, 124,
+54, 125,
+58, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 0,
+#endif
+58, 125,
+87, 125,
+87, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 0,
+#endif
+58, 125,
+87, 125,
+58, 124,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+61, 125,
+60, 125,
+60, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+61, 125,
+60, 125,
+61, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+61, 125,
+84, 125,
+84, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+61, 125,
+84, 125,
+61, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 255,
+#endif
+70, 125,
+64, 125,
+64, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+0, 0, 255,
+#endif
+70, 125,
+64, 125,
+70, 125,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+53, 84,
+58, 90,
+58, 67,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+53, 84,
+58, 67,
+53, 84,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+58, 90,
+62, 95,
+62, 95,
+3,
+#ifndef MONOCHROME_VECTORS
+128, 128, 0,
+#endif
+58, 90,
+62, 95,
+58, 67,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 150, 0,
+#endif
+53, 59,
+53, 84,
+53, 59,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 150, 0,
+#endif
+53, 59,
+53, 59,
+53, 59,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 150, 0,
+#endif
+53, 84,
+58, 67,
+58, 67,
+3,
+#ifndef MONOCHROME_VECTORS
+150, 150, 0,
+#endif
+53, 84,
+58, 67,
+53, 59,
+3,
+#ifndef MONOCHROME_VECTORS
+92, 92, 0,
+#endif
+74, 92,
+62, 95,
+62, 95,
+3,
+#ifndef MONOCHROME_VECTORS
+92, 92, 0,
+#endif
+74, 92,
+62, 95,
+74, 69,
+3,
+#ifndef MONOCHROME_VECTORS
+92, 92, 0,
+#endif
+86, 88,
+74, 92,
+74, 69,
+3,
+#ifndef MONOCHROME_VECTORS
+92, 92, 0,
+#endif
+86, 88,
+74, 69,
+86, 88,
+3,
+#ifndef MONOCHROME_VECTORS
+100, 100, 0,
+#endif
+62, 67,
+58, 67,
+58, 67,
+3,
+#ifndef MONOCHROME_VECTORS
+100, 100, 0,
+#endif
+62, 67,
+58, 67,
+62, 95,
+3,
+#ifndef MONOCHROME_VECTORS
+100, 100, 0,
+#endif
+74, 69,
+62, 67,
+62, 95,
+3,
+#ifndef MONOCHROME_VECTORS
+100, 100, 0,
+#endif
+74, 69,
+62, 95,
+74, 69,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 68, 0,
+#endif
+86, 88,
+74, 69,
+74, 69,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 68, 0,
+#endif
+86, 88,
+74, 69,
+86, 64,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 68, 0,
+#endif
+86, 64,
+86, 64,
+86, 64,
+3,
+#ifndef MONOCHROME_VECTORS
+85, 68, 0,
+#endif
+86, 64,
+86, 64,
+86, 88,
+3,
+#ifndef MONOCHROME_VECTORS
+68, 120, 33,
+#endif
+40, 72,
+39, 80,
+39, 80,
+3,
+#ifndef MONOCHROME_VECTORS
+68, 120, 33,
+#endif
+40, 72,
+39, 80,
+40, 80,
+3,
+#ifndef MONOCHROME_VECTORS
+68, 120, 33,
+#endif
+40, 80,
+51, 77,
+51, 73,
+3,
+#ifndef MONOCHROME_VECTORS
+68, 120, 33,
+#endif
+40, 80,
+51, 73,
+40, 72,
+3,
+#ifndef MONOCHROME_VECTORS
+68, 120, 33,
+#endif
+51, 77,
+51, 77,
+51, 77,
+3,
+#ifndef MONOCHROME_VECTORS
+68, 120, 33,
+#endif
+51, 77,
+51, 77,
+51, 73,
+3,
+#ifndef MONOCHROME_VECTORS
+183, 200, 183,
+#endif
+73, 22,
+70, 33,
+70, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+183, 200, 183,
+#endif
+73, 22,
+70, 33,
+73, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+183, 200, 183,
+#endif
+73, 33,
+87, 33,
+87, 21,
+3,
+#ifndef MONOCHROME_VECTORS
+183, 200, 183,
+#endif
+73, 33,
+87, 21,
+73, 22,
+3,
+#ifndef MONOCHROME_VECTORS
+183, 200, 183,
+#endif
+87, 33,
+87, 33,
+87, 33,
+3,
+#ifndef MONOCHROME_VECTORS
+183, 200, 183,
+#endif
+87, 33,
+87, 33,
+87, 21,
+3,
+#ifndef MONOCHROME_VECTORS
+172, 157, 147,
+#endif
+49, 18,
+43, 17,
+43, 17,
+3,
+#ifndef MONOCHROME_VECTORS
+172, 157, 147,
+#endif
+49, 18,
+43, 17,
+49, 13,
+3,
+#ifndef MONOCHROME_VECTORS
+172, 157, 147,
+#endif
+68, 7,
+49, 18,
+49, 13,
+3,
+#ifndef MONOCHROME_VECTORS
+172, 157, 147,
+#endif
+68, 7,
+49, 13,
+68, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+172, 157, 147,
+#endif
+78, 1,
+68, 7,
+68, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+172, 157, 147,
+#endif
+78, 1,
+68, 1,
+78, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+72, 62, 55,
+#endif
+45, 15,
+43, 17,
+43, 17,
+3,
+#ifndef MONOCHROME_VECTORS
+72, 62, 55,
+#endif
+45, 15,
+43, 17,
+45, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+72, 62, 55,
+#endif
+68, 1,
+45, 15,
+45, 1,
+3,
+#ifndef MONOCHROME_VECTORS
+72, 62, 55,
+#endif
+68, 1,
+45, 1,
+68, 1,
+0};
+
+
+
+
#endif
void MainMenu_initStateCallback(enum EGameMenuState tag) {
(void)tag;
- cursorPosition = 0;
}
void MainMenu_repaintCallback(void) {
if (firstFrameOnCurrentState) {
clearScreen();
#ifndef MONOCHROME_VECTORS
- fillRect(0, 0, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER, getPaletteEntry(0xFF00FF00), 0);
+ fillRect(0, 0, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER, getPaletteEntry(0xFF73ADA6), 0);
#endif
- drawGraphic(splashGraphics);
+ drawGraphic(0, 0, YRES_FRAMEBUFFER, YRES_FRAMEBUFFER, splashGraphics);
+ drawGraphic((XRES_FRAMEBUFFER / 2) + 8, 8, (XRES_FRAMEBUFFER / 2) - 16, (XRES_FRAMEBUFFER / 2) - 16, logoGraphics);
playSound(MAIN_MENU_THEME);
}
drawWindowWithOptions(
- (XRES_FRAMEBUFFER / 8) - (int) 9 - 3,
- (YRES_FRAMEBUFFER / 8) - 3 - kMainMenuOptionsCount,
+ (XRES_FRAMEBUFFER / 8) - (int) 9 - 4,
+ (YRES_FRAMEBUFFER / 8) - 4 - kMainMenuOptionsCount,
9 + 2,
kMainMenuOptionsCount + 2,
- "Episode 0",
+ "Derelict",
MainMenu_options,
kMainMenuOptionsCount,
cursorPosition);
diff --git a/common/src/MusicAGA.c b/common/src/MusicAGA.c
index 7591d1f1c..1b85c0fd4 100644
--- a/common/src/MusicAGA.c
+++ b/common/src/MusicAGA.c
@@ -122,8 +122,8 @@ void setupOPL2(int unused) {
goto killaudio;
}
- memcpy(waveptr[c], audio.data, samples[c]);
- free(audio.data);
+ memCopyToFrom(waveptr[c], audio.data, samples[c]);
+ disposeMem(audio.data);
}
return;
diff --git a/common/src/UI.c b/common/src/UI.c
index 4ed32a59a..4a66d00c6 100644
--- a/common/src/UI.c
+++ b/common/src/UI.c
@@ -51,16 +51,16 @@ drawWindowWithOptions(const int x,
int isCursor = (selectedOption == c);
if (isCursor) {
- fillRect(x * 8 - 8,
- (y + 2 + c) * 8 - 8,
+ fillRect((x) * 8,
+ (y + 2 + c) * 8,
dx * 8,
8,
getPaletteEntry(0xFF000000),
FALSE);
}
- drawTextAt(x,
- y + 1 + c,
+ drawTextAt(x + 1,
+ y + 2 + c,
&options[c][0],
isCursor ? getPaletteEntry(0xFFFFFFFF) : getPaletteEntry(0xFF000000));
}
@@ -69,13 +69,19 @@ drawWindowWithOptions(const int x,
void
drawWindow(const int x, const int y, const unsigned int dx, const unsigned int dy, const char *title) {
- fillRect((x) * 8, (y) * 8, dx * 8, dy * 8, getPaletteEntry(0xFF000000), TRUE);
- fillRect((x - 1) * 8, (y - 1) * 8, dx * 8, dy * 8, getPaletteEntry(0xFFFFFFFF), FALSE);
- drawRect((x - 1) * 8, (y - 1) * 8, dx * 8, dy * 8, getPaletteEntry(0xFF000000));
- fillRect((x - 1) * 8, (y - 1) * 8, dx * 8, 8, getPaletteEntry(0xFF000000), FALSE);
+ /* shadow */
+ fillRect((x + 1) * 8, (y + 1) * 8, dx * 8, dy * 8, getPaletteEntry(0xFF000000), TRUE);
+
+ /* background */
+ fillRect((x) * 8, (y) * 8, dx * 8, dy * 8, getPaletteEntry(0xFFFFFFFF), FALSE);
+ /* frame */
+ drawRect((x) * 8, (y) * 8, dx * 8, dy * 8, getPaletteEntry(0xFF000000));
+ /* title tab */
+ fillRect((x) * 8, (y) * 8, dx * 8, 8, getPaletteEntry(0xFF000000), FALSE);
+ /* title text */
if (title != NULL) {
- drawTextAt(x, y - 1, title, getPaletteEntry(0xFFFFFFFF));
+ drawTextAt(x + 1, y, title, getPaletteEntry(0xFFFFFFFF));
}
}
@@ -157,9 +163,8 @@ void redrawHUD(void) {
struct ObjectNode *head;
int c;
struct Item *itemPtr;
- drawTextAtWithMargin(1, 1, XRES, thisMissionName, getPaletteEntry(0xFFFFFFFF));
- drawTextAt(1 + (XRES / 8), 1, " Map:", getPaletteEntry(0xFFFFFFFF));
+ drawTextAt((XRES / 8), 0, thisMissionName, getPaletteEntry(0xFFFFFFFF));
#ifndef TILED_BITMAPS
if (mapTopLevel != NULL) {
@@ -168,7 +173,7 @@ void redrawHUD(void) {
#else
if (mapTopLevel[0] != NULL) {
for (c = 0; c < 8; ++c) {
- drawBitmap(((c & 3) * 32), 8 + (c >> 2) * 32, mapTopLevel[c], 1);
+ drawBitmap(XRES + ((c & 3) * 32), 72 + (c >> 2) * 32, mapTopLevel[c], 1);
}
}
#endif
@@ -188,9 +193,8 @@ void redrawHUD(void) {
drawBitmapRaw(XRES + 8, 199 - 32 - 16 - 16, 32, 32,
itemSprites[itemPtr->index]->rotations[0], 1);
*/
- drawTextAtWithMarginWithFiltering(2 + ((XRES) / 8), 23, XRES_FRAMEBUFFER, itemPtr->name,
- itemPtr->active ? getPaletteEntry(0xFFAAAAAA) : getPaletteEntry(
- 0xFFFFFFFF), '\n');
+ drawTextAtWithMarginWithFiltering(((XRES) / 8), 22, XRES_FRAMEBUFFER, itemPtr->name,
+ itemPtr->active ? getPaletteEntry(0xFFAAAAAA) : getPaletteEntry(0xFFFFFFFF), '\n');
}
++line;
}
@@ -228,7 +232,7 @@ enum EGameMenuState handleCursor(const enum EGameMenuState* options, uint8_t opt
return kResumeCurrentState;
}
-void drawGraphic(const uint8_t *graphic) {
+void drawGraphic(uint16_t x, uint8_t y, uint16_t dx, uint8_t dy, const uint8_t *graphic) {
const uint8_t *ptr = graphic;
int buffer[6];
@@ -244,43 +248,32 @@ void drawGraphic(const uint8_t *graphic) {
int centerY = 0;
if (npoints > 3) {
- for (c = 0; c < npoints; ++c) {
- centerX += shape[2 * c];
- centerY += shape[(2 * c) + 1];
- }
-
- centerX /= npoints;
- centerY /= npoints;
-
- buffer[4] = centerX;
- buffer[5] = centerY;
-
- for (c = 0; c < npoints - 1; ++c) {
-
- buffer[0] = shape[(2 * c) + 0];
- buffer[1] = shape[(2 * c) + 1];
- buffer[2] = shape[(2 * c) + 2];
- buffer[3] = shape[(2 * c) + 3];
-
- fillTriangle(&buffer[0], colour);
- }
ptr += 2 * npoints;
} else if (npoints == 3) {
- buffer[0] = shape[0];
- buffer[1] = shape[1];
- buffer[2] = shape[2];
- buffer[3] = shape[3];
- buffer[4] = shape[4];
- buffer[5] = shape[5];
+ buffer[0] = x + ((dx * shape[0]) / 128);
+ buffer[1] = y + ((dy * shape[1]) / 128);
+ buffer[2] = x + ((dx * shape[2]) / 128);
+ buffer[3] = y + ((dy * shape[3]) / 128);
+ buffer[4] = x + ((dx * shape[4]) / 128);
+ buffer[5] = y + ((dy * shape[5]) / 128);
fillTriangle(&buffer[0], colour);
ptr += 2 * npoints;
} else if (npoints == 2) {
- drawLine(shape[0], shape[1], shape[2], shape[3], colour);
+ drawLine(x + ((dx * shape[0]) / 128),
+ y + ((dy * shape[1]) / 128),
+ x + ((dx * shape[2]) / 128),
+ y + ((dy * shape[3]) / 128),
+ colour);
ptr += 2 * npoints;
} else if (npoints == 1) {
- fillRect(shape[0], shape[1], 1, 1, colour, FALSE);
+ fillRect(x + ((dx * shape[0]) / 128),
+ y + ((dy * shape[1]) / 128),
+ 1,
+ 1,
+ colour,
+ FALSE);
ptr += 2 * npoints;
}
}
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index d37cdc96e..d0ec27c83 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -9,7 +9,7 @@ SET(CMAKE_C_STANDARD_REQUIRED ON)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
-set(DERELICT_CORE_FEATURE_FLAGS "-DCLI_BUILD -DHAS_STDIO -DMOVE_TO_OBJECT_POSITION_WHEN_PICKING -DMORE_OBJECTS ")
+set(DERELICT_CORE_FEATURE_FLAGS "-D_FORTIFY_SOURCE=3 -DCLI_BUILD -DHAS_STDIO -DMOVE_TO_OBJECT_POSITION_WHEN_PICKING -DMORE_OBJECTS ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DERELICT_CORE_FEATURE_FLAGS} -W -Wall -Wextra -Wno-unused-parameter")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DERELICT_CORE_FEATURE_FLAGS} -Wno-writable-strings ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_LANG_CXX11=0")
diff --git a/core/src/Core.c b/core/src/Core.c
index f94b0dd1d..5f88c23d6 100644
--- a/core/src/Core.c
+++ b/core/src/Core.c
@@ -356,10 +356,14 @@ void moveBy(uint8_t direction) {
playerLocation = room->connections[direction];
room = &rooms[playerLocation];
- for (c = 0; c < 6; ++c) {
- if (room->connections[c] == previousLocation) {
- direction = c;
+ if (direction < 4) {
+ for (c = 0; c < 6; ++c) {
+ if (room->connections[c] == previousLocation) {
+ direction = c;
+ }
}
+ } else {
+ return;
}
switch (direction) {
diff --git a/core/src/Derelict.c b/core/src/Derelict.c
index 4c0608110..34c3ccaf6 100644
--- a/core/src/Derelict.c
+++ b/core/src/Derelict.c
@@ -193,7 +193,7 @@ void useCloggedFlush(struct Item *item) {
struct Item *highRankKeycard = getItemNamed("high-rank-keycard");
(void)item;
- if (highRankKeycard->roomId == 0) {
+ if (highRankKeycard->roomId == 0 && !playerHasObject("high-rank-keycard")) {
defaultLogger("Found something among the\n...stuff...");
addToRoom("wc", highRankKeycard);
}
diff --git a/core/tests/TestDerelict.cpp b/core/tests/TestDerelict.cpp
index 1d860e53c..f91743362 100644
--- a/core/tests/TestDerelict.cpp
+++ b/core/tests/TestDerelict.cpp
@@ -357,3 +357,25 @@ TEST_F(TestDerelict, cantUseKeyCard) {
parseCommand("use", "hacked-keycard");
ASSERT_FALSE(getItemNamed("hacked-keycard")->active);
}
+
+/* regression for https://github.com/TheFakeMontyOnTheRun/space-trashman-blues/issues/153 */
+TEST_F(TestDerelict, cantUseCloggedFlushTwice) {
+ setPlayerLocation(getRoomIdByName("wc"));
+
+ ASSERT_FALSE(playerHasObject("high-rank-keycard"));
+ ASSERT_EQ(0, getItemNamed("high-rank-keycard")->roomId);
+
+ parseCommand("use", "clogged-flush");
+ ASSERT_NE(0, getItemNamed("high-rank-keycard")->roomId);
+ ASSERT_FALSE(playerHasObject("high-rank-keycard"));
+
+ parseCommand("pick", "high-rank-keycard");
+
+ parseCommand("use", "clogged-flush");
+ ASSERT_TRUE(playerHasObject("high-rank-keycard"));
+ ASSERT_EQ(0, getItemNamed("high-rank-keycard")->roomId);
+
+ parseCommand("use", "clogged-flush");
+ ASSERT_TRUE(playerHasObject("high-rank-keycard"));
+ ASSERT_EQ(0, getItemNamed("high-rank-keycard")->roomId);
+}
diff --git a/ee_frontend/CMakeLists.txt b/ee_frontend/CMakeLists.txt
index 53509ddb7..fd0b1a717 100644
--- a/ee_frontend/CMakeLists.txt
+++ b/ee_frontend/CMakeLists.txt
@@ -16,7 +16,7 @@ include_directories(common/include)
include_directories(menu/include)
include_directories(SoundSystem)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCLI_BUILD -DSUPPORTS_HACKING_MINIGAME -DINCLUDE_ITEM_DESCRIPTIONS -DEMIT_QUIT_OPTION -DENDIANESS_AWARE -DTILED_BITMAPS -DSDLGL -DSDL_DISABLE_IMMINTRIN_H -DXRES_FRAMEBUFFER=320 -DYRES_FRAMEBUFFER=200" )
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=3 -DCLI_BUILD -DSUPPORTS_HACKING_MINIGAME -DINCLUDE_ITEM_DESCRIPTIONS -DEMIT_QUIT_OPTION -DENDIANESS_AWARE -DTILED_BITMAPS -DSDLGL -DSDL_DISABLE_IMMINTRIN_H -DXRES_FRAMEBUFFER=320 -DYRES_FRAMEBUFFER=200" )
find_package(SDL2 REQUIRED)
find_package(OpenGL REQUIRED)
diff --git a/ee_frontend/base3d/src/Renderer.c b/ee_frontend/base3d/src/Renderer.c
index 4ba3ab95c..b5d3d8cbc 100644
--- a/ee_frontend/base3d/src/Renderer.c
+++ b/ee_frontend/base3d/src/Renderer.c
@@ -190,9 +190,6 @@ void renderRoomTransition(void) {
enter2D();
- drawTextAtWithMargin(((XRES / 8) / 2) - (thisMissionNameLen / 2), 1, XRES, thisMissionName,
- getPaletteEntry(0xFFFFFFFF));
-
zCameraOffset -= Div(intToFix(1), intToFix(32));
if (zCameraOffset == 0) {
@@ -922,7 +919,7 @@ void render(const long ms) {
size_t len = strlen(focusItemName);
int lines = 1 + (len / 27);
fillRect(0, YRES - (8 * lines), XRES, lines * 8, 0, 1);
- drawTextAtWithMarginWithFiltering(1, 26 - lines, XRES, focusItemName, 255, ' ');
+ drawTextAtWithMarginWithFiltering(1, (YRES / 8) - lines, XRES, focusItemName, 255, ' ');
}
diff --git a/ee_frontend/base3d/src/ee/LoadBitmap.c b/ee_frontend/base3d/src/ee/LoadBitmap.c
index 619ddcaca..7a9730589 100644
--- a/ee_frontend/base3d/src/ee/LoadBitmap.c
+++ b/ee_frontend/base3d/src/ee/LoadBitmap.c
@@ -84,7 +84,7 @@ void bindTexture(struct Bitmap *bitmap) {
int submitBitmapToGPU(struct Bitmap *bitmap) {
- bitmap->nativeBuffer = (texbuffer_t *) calloc(1, sizeof(texbuffer_t));
+ bitmap->nativeBuffer = (texbuffer_t *) allocMem(sizeof(texbuffer_t), BITMAP_MEMORY, TRUE);
((texbuffer_t *) bitmap->nativeBuffer)->width = bitmap->width;
((texbuffer_t *) bitmap->nativeBuffer)->psm = GS_PSM_32;
((texbuffer_t *) bitmap->nativeBuffer)->address = graph_vram_allocate(bitmap->width, bitmap->height, GS_PSM_32,
@@ -119,7 +119,7 @@ struct Bitmap *loadBitmap(const char *filename) {
struct StaticBuffer src = loadBinaryFileFromPath(filename);
struct Bitmap *toReturn =
- (struct Bitmap *) calloc(1, sizeof(struct Bitmap));
+ (struct Bitmap *) allocMem(sizeof(struct Bitmap), BITMAP_MEMORY, TRUE);
size_t sizeInDisk = src.size - 4; //total size minus the header
@@ -138,11 +138,11 @@ struct Bitmap *loadBitmap(const char *filename) {
size_t size = toReturn->width * toReturn->height * sizeof(BitmapPixelFormat);
- uint8_t *buffer = (uint8_t *) calloc(1, sizeInDisk);
+ uint8_t *buffer = (uint8_t *) allocMem(sizeInDisk, BITMAP_MEMORY, TRUE);
memCopyToFrom(buffer, ptr, sizeInDisk);
- toReturn->data = (TexturePixelFormat *) calloc(1, size);
+ toReturn->data = (TexturePixelFormat *) allocMem(size, BITMAP_MEMORY, TRUE);
uint8_t repetitions;
int pixelIndex = 0;
diff --git a/ee_frontend/base3d/src/ee/Renderer.c b/ee_frontend/base3d/src/ee/Renderer.c
index 107ace434..9f96b5e29 100644
--- a/ee_frontend/base3d/src/ee/Renderer.c
+++ b/ee_frontend/base3d/src/ee/Renderer.c
@@ -1045,7 +1045,7 @@ void render(const long ms) {
size_t len = strlen(focusItemName);
int lines = 1 + (len / 27);
fillRect(0, YRES - (8 * lines), XRES, lines * 8, 0, 1);
- drawTextAtWithMarginWithFiltering(1, 26 - lines, XRES, focusItemName, 255, ' ');
+ drawTextAtWithMarginWithFiltering(1, (YRES / 8) - lines, XRES, focusItemName, 255, ' ');
}
diff --git a/ee_frontend/base3d/src/ee/RendererRasterization.c b/ee_frontend/base3d/src/ee/RendererRasterization.c
index 9174b73fe..399e4e1c9 100644
--- a/ee_frontend/base3d/src/ee/RendererRasterization.c
+++ b/ee_frontend/base3d/src/ee/RendererRasterization.c
@@ -347,7 +347,21 @@ void drawRepeatBitmap(
}
}
-void drawTextAt(const int _x, const int _y, const char *text, const FramebufferPixelFormat colour) {
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+
+}
+
+void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const FramebufferPixelFormat colour) {
+ drawTextAtWithMarginWithFiltering(x, y, margin, text, colour, '-');
+}
+
+void drawTextAt(const int x, const int y, const char *text, const FramebufferPixelFormat colour) {
+
+ drawTextAtWithMargin(x, y, (XRES_FRAMEBUFFER - 1), text, colour);
+}
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *__restrict__ text,
+ const uint8_t colour, char charToReplaceHifenWith) {
if (defaultFont == NULL) {
defaultFont = loadBitmap("font.img");
@@ -358,50 +372,62 @@ void drawTextAt(const int _x, const int _y, const char *text, const FramebufferP
}
size_t len = strlen(text);
- int32_t dstX = (_x) * 8;
- int32_t dstY = (_y) * 8;
- size_t c;
- uint32_t ascii;
- float line;
- float col;
-
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
float fontWidth = defaultFont->width;
float fontHeight = defaultFont->height;
float blockWidth = (8.0f / fontWidth) * 0.999f;
float blockHeight = (8.0f / fontHeight) * 0.999f;
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
for (c = 0; c < len; ++c) {
- if (text[c] == '\n' || dstX >= XRES_FRAMEBUFFER) {
- dstX = (_x - 1) * 8;
+ uint8_t ascii;
+ float line;
+ float col;
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
dstY += 8;
continue;
}
- if (text[c] == ' ' || text[c] == '\r') {
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
dstX += 8;
continue;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
}
- ascii = text[c] - ' ';
+ ascii = currentChar - ' ';
line = (((float) ((ascii >> 5))) * blockHeight);
col = (((ascii & 31)) * blockWidth);
- drawBitmapRegion(dstX, dstY, 8, 8, colour, defaultFont, 1, col, col + blockWidth, line, line + blockHeight);
+ drawBitmapRegion(dstX, dstY, 8, 8, colour, defaultFont, 1, col, col + blockWidth, line,
+ line + blockHeight);
dstX += 8;
}
}
-
-void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
-
-}
-
-void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *__restrict__ text,
- const uint8_t colour, char charToReplaceHifenWith) {
- drawTextAt(x, y, text, colour);
-}
-
-void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const FramebufferPixelFormat colour) {
- drawTextAt(x, y, text, colour);
-}
\ No newline at end of file
diff --git a/ee_frontend/base3d/src/ee/RendererTesselation.c b/ee_frontend/base3d/src/ee/RendererTesselation.c
index 15faa99b5..2534f9c1d 100644
--- a/ee_frontend/base3d/src/ee/RendererTesselation.c
+++ b/ee_frontend/base3d/src/ee/RendererTesselation.c
@@ -117,7 +117,7 @@ float clampf(float v0, float v1, float v) {
struct Texture *makeTextureFrom(const char *filename) {
struct Texture *toReturn =
- (struct Texture *) calloc(1, sizeof(struct Texture));
+ (struct Texture *) allocMem(sizeof(struct Texture), BITMAP_MEMORY, TRUE);
toReturn->raw = loadBitmap(filename);
submitBitmapToGPU(toReturn->raw);
diff --git a/ee_frontend/base3d/src/es/GLESCommon.c b/ee_frontend/base3d/src/es/GLESCommon.c
index f354a516f..ce61782eb 100644
--- a/ee_frontend/base3d/src/es/GLESCommon.c
+++ b/ee_frontend/base3d/src/es/GLESCommon.c
@@ -397,8 +397,7 @@ void initGL(void) {
GLint maxLength = 0;
glGetShaderiv(vs, GL_INFO_LOG_LENGTH, &maxLength);
- char *errorLog = (char *) malloc(maxLength);
- memset(errorLog, 0, maxLength);
+ char *errorLog = (char *) allocMem(maxLength, GENERAL_MEMORY, TRUE);
glGetShaderInfoLog(vs, maxLength, &maxLength, errorLog);
@@ -417,7 +416,7 @@ void initGL(void) {
glGetShaderiv(fs, GL_INFO_LOG_LENGTH, &maxLength);
char *errorLog = (char *) malloc(maxLength);
- memset(errorLog, 0, maxLength);
+ memFill(errorLog, 0, maxLength);
glGetShaderInfoLog(fs, maxLength, &maxLength, errorLog);
diff --git a/ee_frontend/base3d/src/es/LoadBitmap.c b/ee_frontend/base3d/src/es/LoadBitmap.c
index b8cc03f6c..ceb974763 100644
--- a/ee_frontend/base3d/src/es/LoadBitmap.c
+++ b/ee_frontend/base3d/src/es/LoadBitmap.c
@@ -28,7 +28,7 @@ struct Bitmap *loadBitmap(const char *filename) {
struct StaticBuffer src = loadBinaryFileFromPath(filename);
struct Bitmap *toReturn =
- (struct Bitmap *) calloc(1, sizeof(struct Bitmap));
+ (struct Bitmap *) allocMem(sizeof(struct Bitmap), BITMAP_MEMORY, TRUE);
size_t sizeInDisk = src.size - 4; //total size minus the header
@@ -47,11 +47,11 @@ struct Bitmap *loadBitmap(const char *filename) {
size_t size = toReturn->width * toReturn->height * sizeof(BitmapPixelFormat);
- uint8_t *buffer = (uint8_t *) calloc(1, sizeInDisk);
+ uint8_t *buffer = (uint8_t *) allocMem(sizeInDisk, BITMAP_MEMORY, TRUE);
memCopyToFrom(buffer, ptr, sizeInDisk);
- toReturn->data = (TexturePixelFormat *) calloc(1, size);
+ toReturn->data = (TexturePixelFormat *) allocMem(size, BITMAP_MEMORY, TRUE);
uint8_t repetitions;
int pixelIndex = 0;
diff --git a/ee_frontend/base3d/src/es/RendererRasterization.c b/ee_frontend/base3d/src/es/RendererRasterization.c
index 8cf184b10..a5ba1e5bf 100644
--- a/ee_frontend/base3d/src/es/RendererRasterization.c
+++ b/ee_frontend/base3d/src/es/RendererRasterization.c
@@ -125,48 +125,74 @@ void drawRepeatBitmap(
}
}
+void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const FramebufferPixelFormat colour) {
+ drawTextAtWithMarginWithFiltering(x, y, margin, text, colour, '-');
+}
+
void drawTextAt(const int x, const int y, const char *text, const FramebufferPixelFormat colour) {
- drawTextAtWithMargin(x, y, XRES_FRAMEBUFFER / 8, text, colour);
+
+ drawTextAtWithMargin(x, y, (XRES_FRAMEBUFFER - 1), text, colour);
}
-void drawTextAtWithMarginWithFiltering(const int _x, const int _y, int margin,
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin,
const char *__restrict__ text,
const uint8_t colour, char charToReplaceHifenWith) {
-
- if (defaultFont == NULL) {
+ if (defaultFont == NULL) {
defaultFont = loadBitmap("font.img");
}
- size_t len = strlen(text);
- int32_t dstX = (_x) * 8;
- int32_t dstY = (_y) * 8;
- size_t c;
- uint32_t ascii;
- float line;
- float col;
+ if (defaultFont->uploadId == -1) {
+ submitBitmapToGPU(defaultFont);
+ }
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
float fontWidth = defaultFont->width;
float fontHeight = defaultFont->height;
float blockWidth = (8.0f / fontWidth) * 0.999f;
float blockHeight = (8.0f / fontHeight) * 0.999f;
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
for (c = 0; c < len; ++c) {
+ uint8_t ascii;
+ float line;
+ float col;
+
char currentChar = text[c];
- if (currentChar == '-') {
- currentChar = charToReplaceHifenWith;
- }
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
- if (currentChar == '\n' || dstX >= XRES_FRAMEBUFFER) {
- dstX = (_x - 1) * 8;
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
dstY += 8;
continue;
}
- if (currentChar == ' ' || currentChar == '\r') {
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
dstX += 8;
continue;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
}
ascii = currentChar - ' ';
@@ -184,8 +210,3 @@ void drawTextAtWithMarginWithFiltering(const int _x, const int _y, int margin,
void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
}
-
-void drawTextAtWithMargin(const int x, const int y, int margin, const char *text,
- const FramebufferPixelFormat colour) {
- drawTextAtWithMarginWithFiltering(x, y, margin, text, colour, '-');
-}
diff --git a/ee_frontend/base3d/src/es/RendererTesselation.c b/ee_frontend/base3d/src/es/RendererTesselation.c
index 2616a1c61..20887f1ea 100644
--- a/ee_frontend/base3d/src/es/RendererTesselation.c
+++ b/ee_frontend/base3d/src/es/RendererTesselation.c
@@ -423,7 +423,7 @@ float clampf(float v0, float v1, float v) {
struct Texture *makeTextureFrom(const char *filename) {
struct Texture *toReturn =
- (struct Texture *) calloc(1, sizeof(struct Texture));
+ (struct Texture *) allocMem(sizeof(struct Texture), BITMAP_MEMORY, TRUE);
toReturn->raw = loadBitmap(filename);
@@ -929,9 +929,9 @@ void drawMesh(struct Mesh *mesh, const struct Vec3 center, enum EDirection rotat
if (mesh->nativeBuffer == NULL) {
- mesh->nativeVertexBuffer = calloc( 3 * 3 * count, sizeof(float));
- mesh->nativeTexCoordBuffer = calloc( 2 * 3 * count, sizeof(float));
- mesh->nativeIndicesBuffer = calloc( 3 * count, sizeof(unsigned short));
+ mesh->nativeVertexBuffer = allocMem( 3 * 3 * count * sizeof(float), GENERAL_MEMORY, TRUE);
+ mesh->nativeTexCoordBuffer = allocMem( 2 * 3 * count * sizeof(float), GENERAL_MEMORY, TRUE);
+ mesh->nativeIndicesBuffer = allocMem( 3 * count * sizeof(unsigned short), GENERAL_MEMORY, TRUE);
float* vP = mesh->nativeVertexBuffer;
float* tP = mesh->nativeTexCoordBuffer;
@@ -985,7 +985,7 @@ void drawMesh(struct Mesh *mesh, const struct Vec3 center, enum EDirection rotat
vertexData += 9;
}
- mesh->nativeBuffer = calloc(1, sizeof(struct VBORegister));
+ mesh->nativeBuffer = allocMem(sizeof(struct VBORegister), GENERAL_MEMORY, TRUE);
*((struct VBORegister*)mesh->nativeBuffer) = submitVBO((float *) mesh->nativeVertexBuffer, mesh->nativeTexCoordBuffer, count * 3,
(unsigned short *) mesh->nativeIndicesBuffer, count * 3);
diff --git a/ee_frontend/base3d/src/es/SDL2GL2Version.c b/ee_frontend/base3d/src/es/SDL2GL2Version.c
index 0e364b8ed..e70ca0598 100644
--- a/ee_frontend/base3d/src/es/SDL2GL2Version.c
+++ b/ee_frontend/base3d/src/es/SDL2GL2Version.c
@@ -33,7 +33,7 @@
void enterFullScreenMode(void) {
EmscriptenFullscreenStrategy s;
- memset(&s, 0, sizeof(s));
+ memFill(&s, 0, sizeof(s));
s.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT;
s.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_NONE;
s.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
diff --git a/ee_frontend/base3d/src/gx/GXRenderer.c b/ee_frontend/base3d/src/gx/GXRenderer.c
index 27d6df8c2..3aa1048ca 100644
--- a/ee_frontend/base3d/src/gx/GXRenderer.c
+++ b/ee_frontend/base3d/src/gx/GXRenderer.c
@@ -72,7 +72,7 @@ void graphicsInit(void) {
rmode = VIDEO_GetPreferredMode(NULL);
gpfifo = memalign(32, DEFAULT_FIFO_SIZE);
- memset(gpfifo, 0, DEFAULT_FIFO_SIZE);
+ memFill(gpfifo, 0, DEFAULT_FIFO_SIZE);
frameBuffer[0] = SYS_AllocateFramebuffer(rmode);
frameBuffer[1] = SYS_AllocateFramebuffer(rmode);
@@ -131,7 +131,7 @@ void graphicsInit(void) {
GX_SetAlphaCompare(GX_GREATER, 0, GX_AOP_AND, GX_ALWAYS, 0);
GX_SetZCompLoc(GX_FALSE);
- memset(&whiteTextureData[0], 0xFF, 32 * 32 * 4);
+ memFill(&whiteTextureData[0], 0xFF, 32 * 32 * 4);
GX_InitTexObj(&whiteTextureObj, &whiteTextureData[0], 32, 32, GX_TF_RGBA8, GX_REPEAT, GX_REPEAT, GX_FALSE);
}
diff --git a/ee_frontend/base3d/src/gx/LoadBitmap.c b/ee_frontend/base3d/src/gx/LoadBitmap.c
index 5d37dd4a7..9ece35e79 100644
--- a/ee_frontend/base3d/src/gx/LoadBitmap.c
+++ b/ee_frontend/base3d/src/gx/LoadBitmap.c
@@ -60,7 +60,7 @@ struct Bitmap *loadBitmap(const char *filename) {
struct StaticBuffer src = loadBinaryFileFromPath(filename);
struct Bitmap *toReturn =
- (struct Bitmap *) calloc(1, sizeof(struct Bitmap));
+ (struct Bitmap *) allocMem(sizeof(struct Bitmap), BITMAP_MEMORY, TRUE);
size_t sizeInDisk = src.size - 4; //total size minus the header
@@ -79,7 +79,7 @@ struct Bitmap *loadBitmap(const char *filename) {
size_t size = toReturn->width * toReturn->height * sizeof(BitmapPixelFormat);
- uint8_t *buffer = (uint8_t *) calloc(1, sizeInDisk);
+ uint8_t *buffer = (uint8_t *) allocMem(sizeInDisk, BITMAP_MEMORY, TRUE);
memCopyToFrom(buffer, ptr, sizeInDisk);
diff --git a/ee_frontend/base3d/src/gx/RendererRasterization.c b/ee_frontend/base3d/src/gx/RendererRasterization.c
index 2339574b8..81ceac826 100644
--- a/ee_frontend/base3d/src/gx/RendererRasterization.c
+++ b/ee_frontend/base3d/src/gx/RendererRasterization.c
@@ -161,62 +161,87 @@ void drawRepeatBitmap(
}
}
-void drawTextAt(const int _x, const int _y, const char *text, const FramebufferPixelFormat colour) {
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+
+}
+
+void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const FramebufferPixelFormat colour) {
+ drawTextAtWithMarginWithFiltering(x, y, margin, text, colour, '-');
+}
+
+void drawTextAt(const int x, const int y, const char *text, const FramebufferPixelFormat colour) {
+
+ drawTextAtWithMargin(x, y, (XRES_FRAMEBUFFER - 1), text, colour);
+}
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *__restrict__ text,
+ const uint8_t colour, char charToReplaceHifenWith) {
if (defaultFont == NULL) {
defaultFont = loadBitmap("font.img");
}
- if (defaultFont->nativeBuffer == NULL || defaultFont->uploadId == -1) {
+ if (defaultFont->uploadId == -1) {
submitBitmapToGPU(defaultFont);
}
- bindTexture(defaultFont);
size_t len = strlen(text);
- int32_t dstX = (_x) * 8;
- int32_t dstY = (_y) * 8;
- size_t c;
- uint32_t ascii;
- float line;
- float col;
-
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
float fontWidth = defaultFont->width;
- float fontHeight = 32.0f; //defaultFont->height;
+ float fontHeight = defaultFont->height;
float blockWidth = (8.0f / fontWidth) * 0.999f;
float blockHeight = (8.0f / fontHeight) * 0.999f;
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
for (c = 0; c < len; ++c) {
- if (text[c] == '\n' || dstX >= XRES_FRAMEBUFFER) {
- dstX = (_x - 1) * 8;
+ uint8_t ascii;
+ float line;
+ float col;
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
dstY += 8;
continue;
}
- if (text[c] == ' ' || text[c] == '\r') {
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
dstX += 8;
continue;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
}
- ascii = text[c] - ' ';
+ ascii = currentChar - ' ';
line = (((float) ((ascii >> 5))) * blockHeight);
col = (((ascii & 31)) * blockWidth);
- drawBitmapRegion(dstX, dstY, 8, 8, colour, defaultFont, 1, col, col + blockWidth, line, line + blockHeight);
+ drawBitmapRegion(dstX, dstY, 8, 8, colour, defaultFont, 1, col, col + blockWidth, line,
+ line + blockHeight);
dstX += 8;
}
-}
-
-void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
-
-}
-
-void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *__restrict__ text,
- const uint8_t colour, char charToReplaceHifenWith) {
- drawTextAt(x, y, text, colour);
-}
-
-void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const FramebufferPixelFormat colour) {
- drawTextAt(x, y, text, colour);
}
\ No newline at end of file
diff --git a/ee_frontend/base3d/src/gx/RendererTesselation.c b/ee_frontend/base3d/src/gx/RendererTesselation.c
index b5e44dfe7..5dc9c35bc 100644
--- a/ee_frontend/base3d/src/gx/RendererTesselation.c
+++ b/ee_frontend/base3d/src/gx/RendererTesselation.c
@@ -103,7 +103,7 @@ float clampf(float v0, float v1, float v) {
struct Texture *makeTextureFrom(const char *filename) {
struct Texture *toReturn =
- (struct Texture *) calloc(1, sizeof(struct Texture));
+ (struct Texture *) allocMem(sizeof(struct Texture), BITMAP_MEMORY, TRUE);
toReturn->raw = loadBitmap(filename);
diff --git a/gl_frontend/CMakeLists.txt b/gl_frontend/CMakeLists.txt
index a9e3de780..0f399782b 100644
--- a/gl_frontend/CMakeLists.txt
+++ b/gl_frontend/CMakeLists.txt
@@ -16,7 +16,7 @@ include_directories(../common/include)
include_directories(base3d/include)
include_directories(menu/include)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCLI_BUILD -DSUPPORTS_HACKING_MINIGAME -DTILED_BITMAPS -DINCLUDE_ITEM_DESCRIPTIONS -Wall -Wextra -Wno-unused-parameter -Wno-switch -Wno-unused-variable -pedantic -g -DENDIANESS_AWARE -DEMIT_QUIT_OPTION -DSDL_DISABLE_IMMINTRIN_H -DXRES_FRAMEBUFFER=320 -DYRES_FRAMEBUFFER=200 -DXRES_SCREEN=320 -DYRES_SCREEN=240")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=3 -DCLI_BUILD -DSUPPORTS_HACKING_MINIGAME -DTILED_BITMAPS -DINCLUDE_ITEM_DESCRIPTIONS -Wall -Wextra -Wno-unused-parameter -Wno-switch -Wno-unused-variable -pedantic -g -DENDIANESS_AWARE -DEMIT_QUIT_OPTION -DSDL_DISABLE_IMMINTRIN_H -DXRES_FRAMEBUFFER=320 -DYRES_FRAMEBUFFER=200 -DXRES_SCREEN=320 -DYRES_SCREEN=240")
find_package(SDL2 REQUIRED)
find_package(OpenGL REQUIRED)
diff --git a/gl_frontend/GL1Common/Renderer.c b/gl_frontend/GL1Common/Renderer.c
index 2e2f13a83..e300555fa 100644
--- a/gl_frontend/GL1Common/Renderer.c
+++ b/gl_frontend/GL1Common/Renderer.c
@@ -398,9 +398,6 @@ void renderRoomTransition(void) {
#endif
enter2D();
- drawTextAtWithMargin(((XRES / 8) / 2) - (thisMissionNameLen / 2), 1, XRES, thisMissionName,
- getPaletteEntry(0xFFFFFFFF));
-
zCameraOffset -= Div(intToFix(1), intToFix(32));
if (zCameraOffset == 0) {
@@ -1006,7 +1003,7 @@ void render(const long ms) {
size_t len = strlen(focusItemName);
int lines = 1 + (len / 27);
fillRect(0, YRES - (8 * lines), XRES, lines * 8, getPaletteEntry(0xFF000000), TRUE);
- drawTextAtWithMarginWithFiltering(1, 26 - lines, XRES, focusItemName, getPaletteEntry(0xFFFFFFFF), ' ');
+ drawTextAtWithMarginWithFiltering(1, (YRES / 8) - lines, XRES, focusItemName, getPaletteEntry(0xFFFFFFFF), ' ');
}
diff --git a/gl_frontend/GL1Common/RendererRasterization.c b/gl_frontend/GL1Common/RendererRasterization.c
index 1cd435637..319747f67 100644
--- a/gl_frontend/GL1Common/RendererRasterization.c
+++ b/gl_frontend/GL1Common/RendererRasterization.c
@@ -414,9 +414,13 @@ void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, con
if (currentChar == '-') {
currentChar = charToReplaceHifenWith;
}
- if (currentChar == '\n' || dstX >= XRES_FRAMEBUFFER) {
- dstX = (x - 1) * 8;
+ if (currentChar == '\n' || (dstX >= XRES_FRAMEBUFFER) || (dstX >= ((margin - 1) * 8)) ) {
+ dstX = (x) * 8;
+#ifndef N64
dstY += 8;
+#else
+ dstY += 9;
+#endif
continue;
}
diff --git a/gl_frontend/base3d/src/SDLVersion/CSDL2Renderer.c b/gl_frontend/base3d/src/SDLVersion/CSDL2Renderer.c
index 3099986a0..87b79e65b 100644
--- a/gl_frontend/base3d/src/SDLVersion/CSDL2Renderer.c
+++ b/gl_frontend/base3d/src/SDLVersion/CSDL2Renderer.c
@@ -27,7 +27,7 @@
#ifdef __EMSCRIPTEN__
void enterFullScreenMode(void) {
EmscriptenFullscreenStrategy s;
- memset(&s, 0, sizeof(s));
+ memFill(&s, 0, sizeof(s));
s.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT;
s.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_NONE;
s.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
diff --git a/mx_frontend/CMakeLists.txt b/mx_frontend/CMakeLists.txt
index 88df8afb2..c1080969d 100644
--- a/mx_frontend/CMakeLists.txt
+++ b/mx_frontend/CMakeLists.txt
@@ -15,7 +15,7 @@ include_directories(base3d/include)
include_directories(common/include)
include_directories(menu/include)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDLSW -DCLI_BUILD -DSUPPORTS_HACKING_MINIGAME -DPAGE_FLIP_ANIMATION -DINCLUDE_ITEM_DESCRIPTIONS -Wall -Wextra -pedantic -g -DENDIANESS_AWARE -DEMIT_QUIT_OPTION -DSDL_DISABLE_IMMINTRIN_H -DXRES_FRAMEBUFFER=320 -DYRES_FRAMEBUFFER=200")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=3 -DSDLSW -DCLI_BUILD -DSUPPORTS_HACKING_MINIGAME -DPAGE_FLIP_ANIMATION -DINCLUDE_ITEM_DESCRIPTIONS -Wall -Wextra -pedantic -g -DENDIANESS_AWARE -DEMIT_QUIT_OPTION -DSDL_DISABLE_IMMINTRIN_H -DXRES_FRAMEBUFFER=320 -DYRES_FRAMEBUFFER=200")
find_package(SDL2 REQUIRED)
diff --git a/mx_frontend/DerelictMacOSClassic/Derelict.xSYM b/mx_frontend/DerelictMacOSClassic/Derelict.xSYM
index 2c3b9c3a0..f094bd572 100644
Binary files a/mx_frontend/DerelictMacOSClassic/Derelict.xSYM and b/mx_frontend/DerelictMacOSClassic/Derelict.xSYM differ
diff --git a/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic b/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic
index db05bc95d..c493b961a 100644
Binary files a/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic and b/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic differ
diff --git a/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict Debug/TargetDataMacOS.tdt b/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict Debug/TargetDataMacOS.tdt
index 6efc93602..a8f567f06 100644
Binary files a/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict Debug/TargetDataMacOS.tdt and b/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict Debug/TargetDataMacOS.tdt differ
diff --git a/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict/TargetDataMacOS.tdt b/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict/TargetDataMacOS.tdt
index 7857b17a2..00df42ec9 100644
Binary files a/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict/TargetDataMacOS.tdt and b/mx_frontend/DerelictMacOSClassic/DerelictMacOSClassic Data/Derelict/TargetDataMacOS.tdt differ
diff --git a/mx_frontend/DerelictMacOSClassic/MacFileReader.c b/mx_frontend/DerelictMacOSClassic/MacFileReader.c
index 236de48b6..9f4e514b8 100644
--- a/mx_frontend/DerelictMacOSClassic/MacFileReader.c
+++ b/mx_frontend/DerelictMacOSClassic/MacFileReader.c
@@ -99,7 +99,7 @@ uint8_t* readFully(char *filename) {
assert(size);
- resultBuffer = (uint8_t*)calloc(1, size);
+ resultBuffer = (uint8_t*)allocMem(size, BITMAP_MEMORY, TRUE);
assert(resultBuffer);
rewind( filePtr );
@@ -200,7 +200,7 @@ struct StaticBuffer loadBinaryFileFromPath(const char * __restrict__ path) {
assert (fread(&size, 4, 1, mDataPack));
size = toNativeEndianess(size);
toReturn.size = size;
- toReturn.data = (uint8_t *) malloc(size);
+ toReturn.data = (uint8_t *) allocMem(size, GENERAL_MEMORY, 0);
assert (fread((void*)toReturn.data, sizeof(uint8_t), size, mDataPack));
fclose(mDataPack);
@@ -257,5 +257,5 @@ FILE *openBinaryFileFromPath(const char * __restrict__ path) {
}
void disposeDiskBuffer(struct StaticBuffer buffer) {
- free((void*)buffer.data);
-}
\ No newline at end of file
+ disposeMem((void*)buffer.data);
+}
diff --git a/mx_frontend/DerelictMacOSClassic/MacRenderer.c b/mx_frontend/DerelictMacOSClassic/MacRenderer.c
index 67338b9fe..221db4014 100644
--- a/mx_frontend/DerelictMacOSClassic/MacRenderer.c
+++ b/mx_frontend/DerelictMacOSClassic/MacRenderer.c
@@ -420,7 +420,7 @@ void flipRenderer(void) {
rowBytes = ((*pixmap)->rowBytes & 0x3FFF);
for (c = 0; c < YRES_FRAMEBUFFER; ++c ) {
- memcpy( baseAddr + offset, &stretchedBuffer[XRES_FRAMEBUFFER * c], XRES_FRAMEBUFFER);
+ memCopyToFrom( baseAddr + offset, &stretchedBuffer[XRES_FRAMEBUFFER * c], XRES_FRAMEBUFFER);
offset = offset + rowBytes;
}
diff --git a/mx_frontend/NDK-version/app/src/main/cpp/native-lib.c b/mx_frontend/NDK-version/app/src/main/cpp/native-lib.c
index 350d034ab..7e6fea0f9 100644
--- a/mx_frontend/NDK-version/app/src/main/cpp/native-lib.c
+++ b/mx_frontend/NDK-version/app/src/main/cpp/native-lib.c
@@ -152,7 +152,7 @@ Java_pt_b13h_spacetrashmanblues_DerelictJNI_getPixelsFromNative(JNIEnv *env, jcl
menuTick(33);
flipRenderer();
jbyte *narr = (*env)->GetByteArrayElements(env, array, NULL);
- memcpy(narr, &framebufferFinal[0], 320 * 240 * 4);
+ memCopyToFrom(narr, &framebufferFinal[0], 320 * 240 * 4);
}
int soundToPlay = -1;
diff --git a/mx_frontend/Xcode2/GameView.m b/mx_frontend/Xcode2/GameView.m
index 372fca1ab..2c277ae87 100644
--- a/mx_frontend/Xcode2/GameView.m
+++ b/mx_frontend/Xcode2/GameView.m
@@ -198,15 +198,15 @@ -(void) stopTimer {
void shutdownHW(void) {
CGColorSpaceRelease(rgb);
-
- free(textBuffer);
- free(messageLogBuffer);
- free(collisionMap);
- free(visMap);
- free(distances);
- free(textures);
- free(itemsInMap);
- free(map);
+
+ disposeMem(textBuffer);
+ disposeMem(messageLogBuffer);
+ disposeMem(collisionMap);
+ disposeMem(visMap);
+ disposeMem(distances);
+ disposeMem(textures);
+ disposeMem(itemsInMap);
+ disposeMem(map);
}
@@ -240,8 +240,8 @@ - (void)drawRect:(NSRect)rect {
++bufferPtr;
}
}
-
- memcpy( previousFrame, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
+
+ memCopyToFrom( previousFrame, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
/* MAC_OS_X_VERSION_10_10*/
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
diff --git a/mx_frontend/Xcode2/OSXRenderer.m b/mx_frontend/Xcode2/OSXRenderer.m
index 991fa3cb4..042bc3227 100644
--- a/mx_frontend/Xcode2/OSXRenderer.m
+++ b/mx_frontend/Xcode2/OSXRenderer.m
@@ -39,14 +39,14 @@
extern struct Texture* textures;
void initHW(int argc, char** argv) {
- textBuffer = (char*)calloc(TEXT_BUFFER_SIZE, 1);
- messageLogBuffer = (char*)calloc(256, 1);
- collisionMap = (uint8_t*)calloc(256, 1);
- visMap = (enum EVisibility*)calloc(MAP_SIZE * MAP_SIZE, sizeof(enum EVisibility));
- distances = (struct Vec2i*)calloc(2 * MAP_SIZE * MAP_SIZE, sizeof(struct Vec2i));
- textures = (struct Texture*)calloc(TOTAL_TEXTURES, sizeof(struct Texture));
- itemsInMap = (uint8_t*)calloc(MAP_SIZE * MAP_SIZE, sizeof(uint8_t*));
- map = (uint8_t*)calloc(MAP_SIZE * MAP_SIZE, sizeof(uint8_t*));
+ textBuffer = (char*)allocMem(TEXT_BUFFER_SIZE, GENERAL_MEMORY, TRUE);
+ messageLogBuffer = (char*)allocMem(256, GENERAL_MEMORY, TRUE);
+ collisionMap = (uint8_t*)allocMem(256, GENERAL_MEMORY, TRUE);
+ visMap = (enum EVisibility*)allocMem(MAP_SIZE * MAP_SIZE * sizeof(enum EVisibility), GENERAL_MEMORY, TRUE);
+ distances = (struct Vec2i*)allocMem(2 * MAP_SIZE * MAP_SIZE * sizeof(struct Vec2i), GENERAL_MEMORY, TRUE);
+ textures = (struct Texture*)allocMem(TOTAL_TEXTURES * sizeof(struct Texture), GENERAL_MEMORY, TRUE);
+ itemsInMap = (uint8_t*)allocMem(MAP_SIZE * MAP_SIZE * sizeof(uint8_t*), GENERAL_MEMORY, TRUE);
+ map = (uint8_t*)allocMem(MAP_SIZE * MAP_SIZE * sizeof(uint8_t*), GENERAL_MEMORY, TRUE);
NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"base.pfs"];
initFileReader([path UTF8String]);
diff --git a/mx_frontend/Xcode4-ios/Derelict32-ios/Derelict32-ios/ViewController.m b/mx_frontend/Xcode4-ios/Derelict32-ios/Derelict32-ios/ViewController.m
index ff6e0790c..101d4bfe8 100644
--- a/mx_frontend/Xcode4-ios/Derelict32-ios/Derelict32-ios/ViewController.m
+++ b/mx_frontend/Xcode4-ios/Derelict32-ios/Derelict32-ios/ViewController.m
@@ -60,14 +60,14 @@ uint8_t getPaletteEntry(const uint32_t origin) {
void initHW(int argc, char** argv) {
- textBuffer = (char*)calloc(TEXT_BUFFER_SIZE, 1);
- messageLogBuffer = (char*)calloc(256, 1);
- collisionMap = (uint8_t*)calloc(256, 1);
- visMap = (enum EVisibility*)calloc(MAP_SIZE * MAP_SIZE, sizeof(enum EVisibility));
- distances = (struct Vec2i*)calloc(2 * MAP_SIZE * MAP_SIZE, sizeof(struct Vec2i));
- textures = (struct Texture*)calloc(TOTAL_TEXTURES, sizeof(struct Texture));
- itemsInMap = (uint8_t*)calloc(MAP_SIZE * MAP_SIZE, sizeof(uint8_t*));
- map = (uint8_t*)calloc(MAP_SIZE * MAP_SIZE, sizeof(uint8_t*));
+ textBuffer = (char*)allocMem(TEXT_BUFFER_SIZE, GENERAL_MEMORY, TRUE);
+ messageLogBuffer = (char*)allocMem(256, GENERAL_MEMORY, TRUE);
+ collisionMap = (uint8_t*)allocMem(256, GENERAL_MEMORY, TRUE);
+ visMap = (enum EVisibility*)allocMem(MAP_SIZE * MAP_SIZE * sizeof(enum EVisibility), GENERAL_MEMORY, TRUE);
+ distances = (struct Vec2i*)allocMem(2 * MAP_SIZE * MAP_SIZE * sizeof(struct Vec2i), GENERAL_MEMORY, TRUE);
+ textures = (struct Texture*)allocMem(TOTAL_TEXTURES * sizeof(struct Texture), GENERAL_MEMORY, TRUE);
+ itemsInMap = (uint8_t*)allocMem(MAP_SIZE * MAP_SIZE * sizeof(uint8_t*), GENERAL_MEMORY, TRUE);
+ map = (uint8_t*)allocMem(MAP_SIZE * MAP_SIZE * sizeof(uint8_t*), GENERAL_MEMORY, TRUE);
NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"base.pfs"];
initFileReader([path UTF8String]);
@@ -160,14 +160,14 @@ -(void) stopTimer {
}
void shutdownHW(void) {
- free(textBuffer);
- free(messageLogBuffer);
- free(collisionMap);
- free(visMap);
- free(distances);
- free(textures);
- free(itemsInMap);
- free(map);
+ disposeMem(textBuffer);
+ disposeMem(messageLogBuffer);
+ disposeMem(collisionMap);
+ disposeMem(visMap);
+ disposeMem(distances);
+ disposeMem(textures);
+ disposeMem(itemsInMap);
+ disposeMem(map);
CGColorSpaceRelease(rgb);
}
@@ -205,8 +205,8 @@ - ( void ) draw {
++bufferPtr;
}
}
-
- memcpy( previousFrame, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
+
+ memCopyToFrom( previousFrame, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
CGContextRef context = UIGraphicsGetCurrentContext();
diff --git a/mx_frontend/base3d/src/AGSVersion/AGSRenderer.c b/mx_frontend/base3d/src/AGSVersion/AGSRenderer.c
index f0ac28f5a..a5d6c3bdd 100644
--- a/mx_frontend/base3d/src/AGSVersion/AGSRenderer.c
+++ b/mx_frontend/base3d/src/AGSVersion/AGSRenderer.c
@@ -70,8 +70,8 @@ void graphicsInit(void) {
SetMode( MODE_4 | BG2_ON ); // screen mode & background to display
- framebuffer = (uint8_t*)malloc(XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
- memset(palette, 0, sizeof(uint16_t) * 256);
+ framebuffer = (uint8_t*)allocMem(XRES_FRAMEBUFFER * YRES_FRAMEBUFFER, GENERAL_MEMORY, FALSE);
+ memFill(palette, 0, sizeof(uint16_t) * 256);
for (b = 0; b < 256; b += 16) {
for (g = 0; g < 256; g += 8) {
diff --git a/mx_frontend/base3d/src/LoadBitmap.c b/mx_frontend/base3d/src/LoadBitmap.c
index ef2463ea0..8f362584e 100644
--- a/mx_frontend/base3d/src/LoadBitmap.c
+++ b/mx_frontend/base3d/src/LoadBitmap.c
@@ -201,13 +201,13 @@ struct Bitmap *loadBitmap(const char *__restrict__ filename) {
tmp = *ptr++;
toReturn->height += tmp & 0xFF;
- uint8_t* buffer = (uint8_t*)calloc(1, sizeInDisk);
+ uint8_t* buffer = (uint8_t*)allocMem(sizeInDisk, BITMAP_MEMORY, TRUE);
memCopyToFrom((void*)buffer, (void*)ptr, sizeInDisk);
size = toReturn->width * toReturn->height * sizeof(BitmapPixelFormat);
- toReturn->data = (TexturePixelFormat*)calloc(1, size);
+ toReturn->data = (TexturePixelFormat*)allocMem(size, BITMAP_MEMORY, TRUE);
int pixelIndex = 0;
diff --git a/mx_frontend/base3d/src/Renderer.c b/mx_frontend/base3d/src/Renderer.c
index 4c5893801..4b4fb0567 100644
--- a/mx_frontend/base3d/src/Renderer.c
+++ b/mx_frontend/base3d/src/Renderer.c
@@ -230,8 +230,6 @@ void renderRoomTransition(void) {
center.mZ = intToFix(3);
drawCeilingAt(center, nativeTextures[0], kNorth);
- drawTextAtWithMargin(((XRES / 8) / 2) - (thisMissionNameLen / 2), 1, XRES, thisMissionName, getPaletteEntry(0xFFFFFFFF));
-
zCameraOffset -= Div(intToFix(1), intToFix(4));
if (zCameraOffset == 0) {
@@ -855,7 +853,7 @@ void render(const long ms) {
size_t len = strlen(focusItemName);
int lines = 1 + (len / 27);
fillRect(0, YRES - (8 * lines), XRES, lines * 8, 0, 1);
- drawTextAtWithMarginWithFiltering(1, 26 - lines, XRES, focusItemName, 255, ' ');
+ drawTextAtWithMarginWithFiltering(1, (YRES / 8) - lines, XRES, focusItemName, 255, ' ');
}
diff --git a/mx_frontend/base3d/src/RendererRasterization.c b/mx_frontend/base3d/src/RendererRasterization.c
index 1e214c7a5..c09a4e493 100644
--- a/mx_frontend/base3d/src/RendererRasterization.c
+++ b/mx_frontend/base3d/src/RendererRasterization.c
@@ -35,7 +35,7 @@
#define FIXP_YRES intToFix(YRES)
enum ECommand mTurnBuffer;
-uint16_t clippingY1 = YRES_FRAMEBUFFER;
+uint16_t clippingY1 = YRES_FRAMEBUFFER - 1;
/*
* /|x1y0
@@ -149,8 +149,8 @@ void maskWall(
ix = 0;
}
- if (limit > XRES) {
- limit = XRES;
+ if (limit >= XRES) {
+ limit = XRES - 1;
}
for (; ix < limit; ++ix) {
@@ -172,7 +172,7 @@ void maskWall(
}
if (iY1 >= YRES) {
- iY1 = YRES;
+ iY1 = YRES - 1;
continue;
}
@@ -316,8 +316,8 @@ void drawWall(FixP_t x0,
ix = 0;
}
- if (limit > XRES) {
- limit = XRES;
+ if (limit >= XRES) {
+ limit = XRES - 1;
}
for (; ix < limit; ++ix) {
@@ -352,7 +352,7 @@ void drawWall(FixP_t x0,
iy = iY0;
if (iY1 >= YRES) {
- iY1 = YRES;
+ iY1 = YRES - 1;
}
if (iy < 0) {
@@ -530,7 +530,7 @@ void drawFrontWall(FixP_t x0,
}
if (limit > YRES) {
- limit = YRES;
+ limit = YRES - 1;
}
for (; iy < limit; ++iy) {
@@ -570,7 +570,7 @@ void drawFrontWall(FixP_t x0,
}
if (iX1 >= XRES) {
- iX1 = XRES;
+ iX1 = XRES - 1;
}
stipple = (((ix + iy) & 1)) ? 0xFFFFFFFF : 0;
@@ -690,8 +690,8 @@ void maskFloor(FixP_t y0, FixP_t y1, FixP_t x0y0, FixP_t x1y0, FixP_t x0y1, FixP
x1 = upperX1;
iy = y;
- if (limit > YRES) {
- limit = YRES;
+ if (limit >= YRES) {
+ limit = YRES - 1;
}
if (iy < 0) {
@@ -876,8 +876,8 @@ void drawFloor(FixP_t y0,
iy = 0;
}
- if (limit > YRES) {
- limit = YRES;
+ if (limit >= YRES) {
+ limit = YRES - 1;
}
for (; iy < limit; ++iy) {
@@ -922,7 +922,7 @@ void drawFloor(FixP_t y0,
stipple = ((iX0 + iy) & 1) ? 0xFFFFFFFF : 0;
if (iX1 >= XRES) {
- iX1 = XRES;
+ iX1 = XRES - 1;
}
if (farEnoughForStipple == 2 || ( farEnoughForStipple == 1 && iy & 1) || (farEnoughForStipple == 3) ) {
@@ -1035,11 +1035,11 @@ void fillBottomFlat(const int *coords, FramebufferPixelFormat colour) {
fX1 = x0;
for (; y < yFinal; ++y) {
- if (y >= YRES) {
+ if (y >= YRES_FRAMEBUFFER) {
return;
} else if (y >= 0) {
- int iFX1 = max(min((XRES - 1), fixToInt(fX1)), 0);
- int iFX0 = max(min((XRES - 1), fixToInt(fX0)), 0);
+ int iFX1 = max(min((XRES_FRAMEBUFFER - 1), fixToInt(fX1)), 0);
+ int iFX0 = max(min((XRES_FRAMEBUFFER - 1), fixToInt(fX0)), 0);
FramebufferPixelFormat *destination = &framebuffer[(XRES_FRAMEBUFFER * y) + min(iFX0, iFX1)];
#ifdef RGBA32_FRAMEBUFFER
@@ -1096,9 +1096,9 @@ void fillTopFlat(int *coords, FramebufferPixelFormat colour) {
for (; y >= yFinal; --y) {
if (y < 0) {
return;
- } else if (y < YRES) {
- int iFX1 = max(min((XRES - 1), fixToInt(fX1)), 0);
- int iFX0 = max(min((XRES - 1), fixToInt(fX0)), 0);
+ } else if (y < YRES_FRAMEBUFFER) {
+ int iFX1 = max(min((XRES_FRAMEBUFFER - 1), fixToInt(fX1)), 0);
+ int iFX0 = max(min((XRES_FRAMEBUFFER - 1), fixToInt(fX0)), 0);
FramebufferPixelFormat *destination = &framebuffer[(XRES_FRAMEBUFFER * y) + min(iFX0, iFX1)];
#ifdef RGBA32_FRAMEBUFFER
@@ -1306,7 +1306,7 @@ void drawTexturedBottomFlatTriangle(int *coords, uint8_t *uvCoords, struct Textu
texelLineY = fV1;
}
- if (y >= 0 && y <= YRES) {
+ if (y >= 0 && y < YRES) {
int xPos = iFX0;
const int shouldStippleLine = (farEnoughForStipple == 2) || (farEnoughForStipple == 1 && y & 1) || (farEnoughForStipple == 3);
stipple = ((xPos + y) & 1) ? 0xFFFFFFFF : 0;
@@ -1317,7 +1317,7 @@ void drawTexturedBottomFlatTriangle(int *coords, uint8_t *uvCoords, struct Textu
u = abs(fixToInt(texelLineX)) % NATIVE_TEXTURE_SIZE;
v = abs(fixToInt(texelLineY)) % NATIVE_TEXTURE_SIZE;
- if (xPos >= 0 && xPos <= XRES) {
+ if (xPos >= 0 && xPos < XRES) {
if ((shouldStippleLine && stipple) || (farEnoughForStipple == 3 && (y & 1))) {
*destination = 0;
} else {
@@ -1474,7 +1474,7 @@ void drawTexturedTopFlatTriangle(int *coords, uint8_t *uvCoords, struct Texture
texelLineY = fV1;
}
- if (y >= 0 && y <= YRES) {
+ if (y >= 0 && y < YRES) {
int xPos = iFX0;
@@ -1484,7 +1484,7 @@ void drawTexturedTopFlatTriangle(int *coords, uint8_t *uvCoords, struct Texture
u = abs(fixToInt(texelLineX)) % NATIVE_TEXTURE_SIZE;
v = abs(fixToInt(texelLineY)) % NATIVE_TEXTURE_SIZE;
- if (xPos >= 0 && xPos <= XRES) {
+ if (xPos >= 0 && xPos < XRES) {
if ((shouldStippleLine && stipple) || (farEnoughForStipple == 3 && (y & 1))) {
*destination = 0;
} else {
@@ -1676,7 +1676,9 @@ void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, con
size_t fontWidth = defaultFont->width;
BitmapPixelFormat *fontPixelData = defaultFont->data;
size_t c;
+ size_t d;
int32_t srcX, srcY;
+ uint8_t lastSpacePos = 0xFF;
for (c = 0; c < len; ++c) {
uint8_t ascii;
@@ -1695,9 +1697,8 @@ void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, con
col = ascii & 31;
letter = fontPixelData + (col * 8) + (fontWidth * (line * 8));
-
- if (currentChar == '\n' || dstX >= margin) {
- dstX = (x - 1) * 8;
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
dstY += 8;
continue;
}
@@ -1707,8 +1708,19 @@ void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, con
}
if (currentChar == ' ') {
+ lastSpacePos = c;
dstX += 8;
continue;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
}
for (srcY = 0; srcY < 8; ++srcY) {
diff --git a/mx_frontend/base3d/src/SDLVersion/CSDL2Renderer.c b/mx_frontend/base3d/src/SDLVersion/CSDL2Renderer.c
index aa6bace02..ba9588145 100644
--- a/mx_frontend/base3d/src/SDLVersion/CSDL2Renderer.c
+++ b/mx_frontend/base3d/src/SDLVersion/CSDL2Renderer.c
@@ -26,7 +26,7 @@
#ifdef __EMSCRIPTEN__
void enterFullScreenMode(void) {
EmscriptenFullscreenStrategy s;
- memset(&s, 0, sizeof(s));
+ memFill(&s, 0, sizeof(s));
s.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT;
s.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_NONE;
s.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
diff --git a/mx_frontend/base3d/src/SDLVersion/SDL1Renderer.c b/mx_frontend/base3d/src/SDLVersion/SDL1Renderer.c
index 313ca353b..aaef0c972 100644
--- a/mx_frontend/base3d/src/SDLVersion/SDL1Renderer.c
+++ b/mx_frontend/base3d/src/SDLVersion/SDL1Renderer.c
@@ -23,7 +23,7 @@
void enterFullScreenMode(void) {
EmscriptenFullscreenStrategy s;
- memset(&s, 0, sizeof(s));
+ memFill(&s, 0, sizeof(s));
s.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT;
s.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_NONE;
s.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
diff --git a/mx_frontend/base3d/src/Win32Version/CGDIRenderer.c b/mx_frontend/base3d/src/Win32Version/CGDIRenderer.c
index 40aae7c58..cb6f78f73 100644
--- a/mx_frontend/base3d/src/Win32Version/CGDIRenderer.c
+++ b/mx_frontend/base3d/src/Win32Version/CGDIRenderer.c
@@ -42,7 +42,7 @@ COLORREF transparencyRef;
extern HWND HWnd;
extern HINSTANCE hInst;
float multiplier;
-enum ESoundDriver soundDriver;
+enum ESoundDriver soundDriver;
void setupOPL2(int port) {}
@@ -90,7 +90,7 @@ static HBITMAP Create8bppBitmap(HDC hdc, int width, int height, LPVOID pBits)
uint32_t pixel;
void *Pixels;
HBITMAP hbmp;
- BITMAPINFO *bmi = (BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
+ BITMAPINFO *bmi = (BITMAPINFO *)allocMem(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256, GENERAL_MEMORY, 0);
PBITMAPINFOHEADER bih;
@@ -110,7 +110,7 @@ static HBITMAP Create8bppBitmap(HDC hdc, int width, int height, LPVOID pBits)
- memcpy( &bmi->bmiColors[0], &paletteRef[0], 256 * sizeof(RGBQUAD));
+ memCopyToFrom( &bmi->bmiColors[0], &paletteRef[0], 256 * sizeof(RGBQUAD));
Pixels = NULL;
@@ -120,10 +120,10 @@ static HBITMAP Create8bppBitmap(HDC hdc, int width, int height, LPVOID pBits)
{
BYTE* pbBits = (BYTE*)pBits;
BYTE *Pix = (BYTE *)Pixels;
- memcpy(Pix, pbBits, width * height);
+ memCopyToFrom(Pix, pbBits, width * height);
}
- free(bmi);
+ disposeMem(bmi);
return hbmp;
}
@@ -157,7 +157,7 @@ static HBITMAP CreateBitmapFromPixels( HDC hDC, UINT uWidth, UINT uHeight, UINT
if ( !uWidth || !uHeight || !uBitsPerPixel )
return hBitmap;
lBmpSize = uWidth * uHeight * (uBitsPerPixel/8) ;
- memset(&bmpInfo, 0, sizeof(bmpInfo));
+ memFill(&bmpInfo, 0, sizeof(bmpInfo));
bmpInfo.bmiHeader.biBitCount = uBitsPerPixel;
bmpInfo.bmiHeader.biHeight = uHeight;
bmpInfo.bmiHeader.biWidth = uWidth;
@@ -172,7 +172,7 @@ static HBITMAP CreateBitmapFromPixels( HDC hDC, UINT uWidth, UINT uHeight, UINT
if ( !hBitmap )
return hBitmap;
- memcpy(pPixels, pBits, lBmpSize );
+ memCopyToFrom(pPixels, pBits, lBmpSize );
return hBitmap;
}
@@ -356,8 +356,8 @@ WindProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
if ( !enableSmoothMovement || turnTarget == turnStep ) {
- memcpy( slideBitmap, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
- memcpy( previousFrame, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
+ memCopyToFrom( slideBitmap, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
+ memCopyToFrom( previousFrame, framebuffer, XRES_FRAMEBUFFER * YRES_FRAMEBUFFER);
} else if ( turnStep < turnTarget ) {
for ( y = dirtyLineY0; y < dirtyLineY1; ++y ) {
diff --git a/mx_frontend/base3d/src/X11Version/X11Renderer.c b/mx_frontend/base3d/src/X11Version/X11Renderer.c
index b8924457b..bbb614c6a 100644
--- a/mx_frontend/base3d/src/X11Version/X11Renderer.c
+++ b/mx_frontend/base3d/src/X11Version/X11Renderer.c
@@ -38,7 +38,7 @@ void graphicsInit(void) {
root = RootWindow(display, screen_num);
visual = DefaultVisual(display, screen_num);
- data = (char *) malloc(320 * 240 * 4);
+ data = (char *) allocMem(320 * 240 * 4, GENERAL_MEMORY, FALSE);
img = XCreateImage(display, visual, DefaultDepth(display, screen_num), ZPixmap,
0, data, 320, 240, 32, 0);
diff --git a/mx_frontend/menu/src/Main.c b/mx_frontend/menu/src/Main.c
index 7accf9791..84ab4c0b5 100644
--- a/mx_frontend/menu/src/Main.c
+++ b/mx_frontend/menu/src/Main.c
@@ -135,7 +135,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
- int argc = 0;
+ int argc = 0;
char **argv = NULL;
WNDCLASSEX WndCls;
diff --git a/my_frontend/CMakeLists.txt b/my_frontend/CMakeLists.txt
index 78e75e35c..b810ca2e1 100644
--- a/my_frontend/CMakeLists.txt
+++ b/my_frontend/CMakeLists.txt
@@ -9,7 +9,7 @@ include_directories(src ../core/src ../core/include include ../common/include
${SDL2_INCLUDE_DIR}
)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDLW -DENDIANESS_AWARE -DMONOCHROME_VECTORS -DEMBEDDED_DATA -DRLE_COMPRESSED_MAPS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DRES128X128 -Wall -Wextra -pedantic -Wunused-parameter -DXRES_FRAMEBUFFER=256 -DYRES_FRAMEBUFFER=192 -ggdb3 -DEMIT_QUIT_OPTION -DENDIANESS_AWARE -DSDL_DISABLE_IMMINTRIN_H")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=3 -DUSE_OWN_MIN_MAX -DSDLW -DENDIANESS_AWARE -DMONOCHROME_VECTORS -DEMBEDDED_DATA -DRLE_COMPRESSED_MAPS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DRES128X128 -Wall -Wextra -pedantic -Wunused-parameter -DXRES_FRAMEBUFFER=256 -DYRES_FRAMEBUFFER=192 -ggdb3 -DEMIT_QUIT_OPTION -DENDIANESS_AWARE -DSDL_DISABLE_IMMINTRIN_H")
find_package(SDL2 REQUIRED)
diff --git a/my_frontend/Makefile.464 b/my_frontend/Makefile.464
index 6dac9f6d1..f6ac56ff3 100644
--- a/my_frontend/Makefile.464
+++ b/my_frontend/Makefile.464
@@ -18,6 +18,8 @@ CFLAGS = \
-pragma-export:CLIB_GENCON_CAPS=0 \
-pragma-define:CLIB_FIRMWARE_KEYBOARD_CLICK=0 \
-pragma-define:CRT_DISABLELOADER=1 \
+ -pragma-define:CLIB_DISABLE_MODE0=1 \
+ -pragma-define:CLIB_DISABLE_MODE2=1 \
-Iinclude \
-I../core/include \
-I../common/include \
@@ -29,7 +31,9 @@ CFLAGS = \
-DSUPPORTS_ROOM_TRANSITION_ANIMATION \
-DRLE_COMPRESSED_MAPS \
-DEMBEDDED_DATA \
- -DMONOCHROME_VECTORS
+ -DMONOCHROME_VECTORS \
+ -DNO_DYNAMIC_MEMORY_ALLOC \
+ -DUSE_OWN_MIN_MAX
TARGET = derelict.dsk
diff --git a/my_frontend/Makefile.ia16 b/my_frontend/Makefile.ia16
index 50c7f0ffc..1b3feae24 100644
--- a/my_frontend/Makefile.ia16
+++ b/my_frontend/Makefile.ia16
@@ -18,7 +18,8 @@ CFLAGS = \
-DSUPPORTS_ROOM_TRANSITION_ANIMATION \
-DSUPPORTS_HACKING_MINIGAME \
-DENDIANESS_AWARE \
- -DMONOCHROME_VECTORS
+ -DMONOCHROME_VECTORS \
+ -DUSE_OWN_MIN_MAX
CC = ia16-elf-gcc
STRIP = ia16-elf-strip
diff --git a/my_frontend/Makefile.msx b/my_frontend/Makefile.msx
index 8b1f2744c..6dbb62291 100644
--- a/my_frontend/Makefile.msx
+++ b/my_frontend/Makefile.msx
@@ -35,7 +35,9 @@ CFLAGS = \
-DSUPPORTS_ROOM_TRANSITION_ANIMATION \
-DRLE_COMPRESSED_MAPS \
-DEMBEDDED_DATA \
- -DMONOCHROME_VECTORS
+ -DMONOCHROME_VECTORS \
+ -DNO_DYNAMIC_MEMORY_ALLOC \
+ -DUSE_OWN_MIN_MAX
TARGET = derelict.rom
diff --git a/my_frontend/Makefile.sm3 b/my_frontend/Makefile.sm3
index 72929b847..2571e7647 100644
--- a/my_frontend/Makefile.sm3
+++ b/my_frontend/Makefile.sm3
@@ -34,7 +34,9 @@ CFLAGS = \
-DSUPPORTS_ROOM_TRANSITION_ANIMATION \
-DRLE_COMPRESSED_MAPS \
-DEMBEDDED_DATA \
- -DMONOCHROME_VECTORS
+ -DMONOCHROME_VECTORS \
+ -DNO_DYNAMIC_MEMORY_ALLOC \
+ -DUSE_OWN_MIN_MAX
TARGET = derelict.sms
diff --git a/my_frontend/Xcode2/Derelict8.xcodeproj/project.pbxproj b/my_frontend/Xcode2/Derelict8.xcodeproj/project.pbxproj
index 86c313880..684c03724 100644
--- a/my_frontend/Xcode2/Derelict8.xcodeproj/project.pbxproj
+++ b/my_frontend/Xcode2/Derelict8.xcodeproj/project.pbxproj
@@ -383,6 +383,7 @@
"YRES_FRAMEBUFFER=192",
"XRES_FRAMEBUFFER=256",
MONOCHROME_VECTORS,
+ USE_OWN_MIN_MAX,
);
INFOPLIST_FILE = "Derelict-Info.plist";
INSTALL_PATH = "$(HOME)/Applications";
@@ -405,6 +406,7 @@
"YRES_FRAMEBUFFER=192",
"XRES_FRAMEBUFFER=256",
MONOCHROME_VECTORS,
+ USE_OWN_MIN_MAX,
);
INFOPLIST_FILE = "Derelict-Info.plist";
INSTALL_PATH = "$(HOME)/Applications";
diff --git a/my_frontend/Xcode2/GameView.m b/my_frontend/Xcode2/GameView.m
index 8a39aa8b0..f945bdded 100644
--- a/my_frontend/Xcode2/GameView.m
+++ b/my_frontend/Xcode2/GameView.m
@@ -13,6 +13,7 @@
#include
#include
+#include "Common.h"
#include "Enums.h"
#include "UI.h"
#include "Engine.h"
@@ -88,7 +89,7 @@ void initHW(int argc, char** argv) {
updateDirection = 0;
mBufferedCommand = '.';
- memset(framebuffer, 0, 128 * 128);
+ memFill(framebuffer, 0, 128 * 128);
}
diff --git a/my_frontend/Xcode2/OSXRenderer.m b/my_frontend/Xcode2/OSXRenderer.m
index 227851c9f..a965619ee 100644
--- a/my_frontend/Xcode2/OSXRenderer.m
+++ b/my_frontend/Xcode2/OSXRenderer.m
@@ -13,6 +13,7 @@
#include
#include
+#include "Common.h"
#include "Enums.h"
#include "OSXRenderer.h"
#include "GameView.h"
@@ -125,10 +126,6 @@ void graphicsPutPointArray(uint8_t *y128Values) {
}
}
-void clearTextScreen(void) {
- fillRect(0, 129, 256, 192, 0, 0);
-}
-
void enterTextMode(void) {
}
@@ -154,7 +151,7 @@ void vLine(uint8_t x0, uint8_t y0, uint8_t y1, uint8_t shouldStipple) {
}
void clearGraphics(void) {
- memset(framebuffer, 0, 128 * 128);
+ memFill(framebuffer, 0, 128 * 128);
}
void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
@@ -197,57 +194,76 @@ void clearScreen(void) {
fillRect(0, 0, 255, 192, 0, 0);
}
-void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX, uint8_t fg, uint8_t bg) {
- uint8_t len = strlen(text);
- char *ptr = text;
- uint8_t c = 0;
- uint8_t x = _x;
- int d;
-
- for (; c < len && y < 64; ++c) {
-
- char cha = *ptr;
-
- if (x == limitX) {
- ++y;
- x = _x;
- } else if (cha == '\n') {
- ++y;
- x = _x;
- ++ptr;
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
+
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
+ for (c = 0; c < len; ++c) {
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
continue;
}
-
- if (cha >= 'a') {
- if (cha <= 'z') {
- cha = (cha - 'a') + 'A';
+
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
+ }
+
+
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
} else {
- cha -= ('z' - 'a');
+ currentChar -= ('z' - 'a');
}
}
-
- uint8_t *fontTop = &font[((cha - 32) << 3)];
-
-
- for (d = 0; d < 8; ++d) {
+
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
+
+ for (int f = 0; f < 8; ++f) {
int e;
uint8_t chunk = *fontTop;
-
+
for (e = 0; e < 8; ++e) {
if (chunk & 1) {
- realPut(8 * x + (7 - e), 8 * y + (d), 1, NULL);
+ realPut(dstX + (7 - e), dstY + (f), 1, NULL);
} else {
- realPut(8 * x + (7 - e), 8 * y + (d), 0, NULL);
+ realPut(dstX + (7 - e), dstY + (f), 0, NULL);
}
chunk = chunk >> 1;
}
-
-
+
fontTop++;
}
-
- ++x;
- ++ptr;
+ dstX += 8;
}
}
@@ -267,25 +283,7 @@ void flipRenderer(void) {
}
}
-void graphicsFlush(void) {
- if (updateDirection) {
- updateDirection = 0;
- switch (getPlayerDirection()) {
- case 0:
- writeStrWithLimit(12, 17, "N", 31, 2, 0);
- break;
- case 1:
- writeStrWithLimit(12, 17, "E", 31, 2, 0);
- break;
- case 2:
- writeStrWithLimit(12, 17, "S", 31, 2, 0);
- break;
- case 3:
- writeStrWithLimit(12, 17, "W", 31, 2, 0);
- break;
- }
- }
-
+void graphicsFlush(void) {
if (needsToRedrawVisibleMeshes) {
flipRenderer();
clearGraphics();
diff --git a/my_frontend/include/Renderer.h b/my_frontend/include/Renderer.h
index f19a15252..326e8ffab 100644
--- a/my_frontend/include/Renderer.h
+++ b/my_frontend/include/Renderer.h
@@ -59,8 +59,6 @@ struct CellPattern {
void clearGraphics(void);
-void clearTextScreen(void);
-
void dropItem(void);
void initMap(void);
@@ -111,7 +109,10 @@ void vLine(uint8_t x0, uint8_t y0, uint8_t y1, uint8_t shouldStipple);
void flush3DBuffer(void);
-void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX, uint8_t fg, uint8_t bg);
+void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const uint8_t colour);
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t colour,
+ char charToReplaceHifenWith);
uint8_t *realPut(uint16_t x, uint8_t y, uint8_t colour, uint8_t *ptr);
diff --git a/my_frontend/include/UI.h b/my_frontend/include/UI.h
index 8dac7f916..c0f6a0a99 100644
--- a/my_frontend/include/UI.h
+++ b/my_frontend/include/UI.h
@@ -25,7 +25,7 @@ drawWindowWithOptions(const uint8_t x,
const uint8_t optionsCount,
const uint8_t selectedOption);
-void drawGraphic(const uint8_t *graphic);
+void drawGraphic(uint16_t x, uint8_t y, uint16_t dx, uint8_t dy, const uint8_t *graphic);
void drawTextWindow(const uint8_t x, const uint8_t y, const uint8_t dx, const uint8_t dy, const char *title,
const char *content);
diff --git a/my_frontend/src/Crawler.c b/my_frontend/src/Crawler.c
index 1ec6882de..ca32dd93c 100644
--- a/my_frontend/src/Crawler.c
+++ b/my_frontend/src/Crawler.c
@@ -3,6 +3,7 @@
*/
#include
#include
+#include
#include "Common.h"
#include "Enums.h"
@@ -44,20 +45,29 @@ void HUD_refresh(void) {
(YRES_FRAMEBUFFER / 8) - 17,
"Status");
- writeStrWithLimit(1, YRES_TEXT - 7, "In room:", 16, 2, 0);
- writeStrWithLimit(1, YRES_TEXT - 4, "In hand:", 16, 2, 0);
+ drawTextAt(1, YRES_TEXT - 7, "In room:", 2);
+ drawTextAt(1, YRES_TEXT - 4, "In hand:", 2);
struct Item *item;
/* Display "In room" item */
if (roomItem != NULL) {
item = getItem(roomItem->item);
- if (item->active) {
- writeStrWithLimit(1, YRES_TEXT - 6, "*", 16, 2, 0);
+
+ if (strstr(item->name, "go-down")) {
+ drawTextAtWithMargin(2, YRES_TEXT - 6, (XRES_FRAMEBUFFER) / 2, "go down", 2);
+ } else {
+ if (strstr(item->name, "go-up")) {
+ drawTextAtWithMargin(2, YRES_TEXT - 6, (XRES_FRAMEBUFFER) / 2, "go up", 2);
+ } else {
+ if (item->active) {
+ drawTextAt(1, YRES_TEXT - 6, "*", 2);
+ }
+ drawTextAtWithMargin(2, YRES_TEXT - 6, (XRES_FRAMEBUFFER) / 2, item->name, 2);
+ }
}
- writeStrWithLimit(2, YRES_TEXT - 6, item->name, 16, 2, 0);
} else {
- writeStrWithLimit(2, YRES_TEXT - 6, "Nothing", 16, 2, 0);
+ drawTextAt(2, YRES_TEXT - 6, "Nothing", 2);
}
/* Display "In hand" item */
@@ -66,9 +76,9 @@ void HUD_refresh(void) {
if (item->active) {
drawTextAt(1, YRES_TEXT - 3, "*", 1);
}
- writeStrWithLimit(2, YRES_TEXT - 3, item->name, 16, 2, 0);
+ drawTextAtWithMargin(2, YRES_TEXT - 3, (XRES_FRAMEBUFFER) / 2, item->name, 2);
} else {
- writeStrWithLimit(2, YRES_TEXT - 3, "Nothing", 16, 2, 0);
+ drawTextAt(2, YRES_TEXT - 3, "Nothing", 2);
}
}
@@ -91,14 +101,6 @@ enum EGameMenuState Crawler_tickCallback(enum ECommand cmd, void* data) {
prevZ = cameraZ;
switch (cmd) {
- case kCommandFire5:
- nextItemInHand();
- break;
-
- case kCommandFire6:
- nextItemInRoom();
- break;
-
case kCommandFire1:
useItemInHand();
break;
@@ -109,11 +111,25 @@ enum EGameMenuState Crawler_tickCallback(enum ECommand cmd, void* data) {
case kCommandFire3:
pickItem();
+
+ if (playerLocation != previousLocation) {
+ redrawMap = needsToRedrawHUD = needsToRedrawVisibleMeshes = 1;
+ initMap();
+ }
break;
case kCommandFire4:
dropItem();
break;
+
+ case kCommandFire5:
+ nextItemInHand();
+ break;
+
+ case kCommandFire6:
+ nextItemInRoom();
+ break;
+
default:
goto handle_directions;
}
@@ -254,7 +270,11 @@ void Crawler_initStateCallback(enum EGameMenuState tag) {
(void)tag;
enteredFrom = 0;
cameraRotation = 0;
- initStation();
+
+ if (tag != kBackToGame) {
+ initStation();
+ }
+
focusedItem = getPlayerItems();
setErrorHandlerCallback(showMessage);
setLoggerDelegate(showMessage);
diff --git a/my_frontend/src/Events.c b/my_frontend/src/Events.c
index 81d9d823f..169792d2e 100755
--- a/my_frontend/src/Events.c
+++ b/my_frontend/src/Events.c
@@ -16,7 +16,7 @@
#ifndef EMBEDDED_DATA
#include "PackedFileReader.h"
#endif
-extern int8_t map[32][32];
+extern int8_t map[MAP_SIZE][MAP_SIZE];
extern int8_t stencilHigh[XRES];
@@ -40,7 +40,7 @@ void pickItem(void) {
struct Item *itemToPick = getItem(roomItem->item);
if (itemToPick != NULL) {
- if (!strcmp(itemToPick->name, "digital-safe")) {
+ if (!strcmp(itemToPick->name, "computer-terminal")) {
#ifdef SUPPORTS_HACKING_MINIGAME
enterState(kHackingGame);
@@ -134,6 +134,10 @@ void interactWithItemInRoom(void) {
struct Item *item = getItem(focusedItem->item);
if (itemToPick && item && item->useWithCallback) {
item->useWithCallback(item, itemToPick);
+
+ if (!playerHasObject(item->name)) {
+ focusedItem = getPlayerItems();
+ }
}
}
}
@@ -182,9 +186,9 @@ void initMap(void) {
roomItem = getRoom(playerLocation)->itemsPresent->next;
#ifdef OPTIMIZATION_BLOCK_CELL
- memset(map, BLOCK_CELL, MAP_SIZE_X * MAP_SIZE_Y);
+ memFill(map, BLOCK_CELL, MAP_SIZE_X * MAP_SIZE_Y);
#else
- memset(map, NEUTRAL_CELL, MAP_SIZE_X * MAP_SIZE_Y);
+ memFill(map, NEUTRAL_CELL, MAP_SIZE_X * MAP_SIZE_Y);
#endif
for (y = 0; y < MAP_SIZE_Y; ++y) {
for (x = 0; x < MAP_SIZE_X; ++x) {
diff --git a/my_frontend/src/GamepadUI.c b/my_frontend/src/GamepadUI.c
index 3afc9545c..7422ce524 100644
--- a/my_frontend/src/GamepadUI.c
+++ b/my_frontend/src/GamepadUI.c
@@ -20,7 +20,6 @@ const char *menuItems[] = {
};
void initGamepadUI(void) {
- cursorPosition = 0;
}
enum ECommand performActionJoypad(void) {
diff --git a/my_frontend/src/HackingMinigame.c b/my_frontend/src/HackingMinigame.c
index 98085c64c..f9aa7f8c9 100644
--- a/my_frontend/src/HackingMinigame.c
+++ b/my_frontend/src/HackingMinigame.c
@@ -46,47 +46,46 @@ void HackingScreen_repaintCallback(void) {
clearScreen();
needsToRedrawVisibleMeshes = 0;
drawTextAt(1, 1, "Stack trace:", getPaletteEntry(0xFF999999));
- drawTextAt((12 * 0), 11, " CPU0 ", getPaletteEntry(0xFF999999));
- drawTextAt((12 * 1), 11, " CPU1 ", getPaletteEntry(0xFF999999));
- drawTextAt((12 * 2), 11, " CPU2 ", getPaletteEntry(0xFF999999));
- }
- drawTextAt((12 * cursorPosition), 11, ">", getPaletteEntry(0xFF999999));
- drawTextAt((12 * cursorPosition) + 5, 11, "<", getPaletteEntry(0xFF999999));
+ drawTextAt((12 * cursorPosition), 11, "> <", getPaletteEntry(0xFF999999));
- drawLine(0, 80, XRES_FRAMEBUFFER - 1, 80, 2);
+ drawLine(0, 80, XRES_FRAMEBUFFER - 1, 80, 2);
- for (pin = 0; pin < 3; ++pin) {
- uint8_t disk;
+ for (pin = 0; pin < 3; ++pin) {
+ uint8_t disk;
- if (pin != 0) {
- uint8_t pinX = (10 * (pin) ) * 8;
- drawLine(pinX, 40, pinX, 80, 2);
- }
+ /* hack to save on some 30 bytes in the ROM size*/
+ drawTextAtWithMarginWithFiltering((12 * pin) + 1, 11, XRES_FRAMEBUFFER, "CPU-", getPaletteEntry(0xFF999999), '0' + pin);
+
+ if (pin != 0) {
+ uint8_t pinX = (10 * (pin) ) * 8;
+ drawLine(pinX, 40, pinX, 80, 2);
+ }
- for (disk = 0; disk < 5; ++disk) {
+ for (disk = 0; disk < 5; ++disk) {
- uint8_t diskIndex = getPositionForPin(pin, disk);
+ uint8_t diskIndex = getPositionForPin(pin, disk);
- const char *funcName = (disk >= getDisksForPin(pin)) ? NULL
- : functionNames[diskIndex];
+ const char *funcName = (disk >= getDisksForPin(pin)) ? NULL
+ : functionNames[diskIndex];
- if (funcName) {
- drawTextAt(
- 10 * (pin) + (pin == 0 ? 0 : 1), 4 + (4 - disk),
- funcName, getPaletteEntry(0xFF999999));
+ if (funcName) {
+ drawTextAt(
+ 10 * (pin) + (pin == 0 ? 0 : 1), 4 + (4 - disk),
+ funcName, getPaletteEntry(0xFF999999));
+ }
}
}
- }
- drawTextAt(1, 2, "Pointer:", getPaletteEntry(0xFF999999));
+ drawTextAt(1, 2, "Pointer:", getPaletteEntry(0xFF999999));
- holdingDisk = getHoldingDisk();
+ holdingDisk = getHoldingDisk();
- if (holdingDisk != 0xFF) {
- drawTextAt(19, 2, functionNames[holdingDisk], getPaletteEntry(0xFF999999));
- } else {
- drawTextAt(19, 2, "NULL", getPaletteEntry(0xFF999999));
+ if (holdingDisk != 0xFF) {
+ drawTextAt(19, 2, functionNames[holdingDisk], getPaletteEntry(0xFF999999));
+ } else {
+ drawTextAt(19, 2, "NULL", getPaletteEntry(0xFF999999));
+ }
}
}
diff --git a/my_frontend/src/KeyboardUI.c b/my_frontend/src/KeyboardUI.c
index 492d4d948..46382ad19 100644
--- a/my_frontend/src/KeyboardUI.c
+++ b/my_frontend/src/KeyboardUI.c
@@ -19,12 +19,12 @@ extern struct ObjectNode *roomItem;
extern uint8_t firstFrameOnCurrentState;
const char *menuItems[] = {
- "1) Use",
- "2) Use with",
- "3) Pick",
- "4) Drop",
- "5) Next(hand)",
- "6) Next(room)",
+ "1)Use/Toggle",
+ "2)Use with",
+ "3)Pick/Use",
+ "4)Drop",
+ "5)Next(hand)",
+ "6)Next(room)",
};
void initKeyboardUI(void) {
diff --git a/my_frontend/src/RendererRasterizer.c b/my_frontend/src/RendererRasterizer.c
index 04922acd7..330257181 100755
--- a/my_frontend/src/RendererRasterizer.c
+++ b/my_frontend/src/RendererRasterizer.c
@@ -4,6 +4,7 @@
#include "Core.h"
#include "Derelict.h"
#include "Renderer.h"
+#include "Common.h"
#ifdef MSDOS
#include "Common.h"
diff --git a/my_frontend/src/RendererScene.c b/my_frontend/src/RendererScene.c
index cd4cf74e8..5222f6d68 100755
--- a/my_frontend/src/RendererScene.c
+++ b/my_frontend/src/RendererScene.c
@@ -1,8 +1,8 @@
#include
-#include
#include "Renderer.h"
#include "map.h"
+#include "Common.h"
#ifdef MSDOS
#include "Common.h"
@@ -30,7 +30,7 @@ int8_t min(int8_t x1, int8_t x2) {
/* all those refactors are due to a SDCC bug with very long functions */
void renderScene(void) {
- memset(stencilHigh, 0, XRES);
+ memFill(stencilHigh, 0, XRES);
switch (cameraRotation) {
case DIRECTION_N:
diff --git a/my_frontend/src/TMS9918.c b/my_frontend/src/TMS9918.c
index 8d9e4a2a6..045643dd5 100644
--- a/my_frontend/src/TMS9918.c
+++ b/my_frontend/src/TMS9918.c
@@ -6,6 +6,7 @@
#include
+#include "Common.h"
#include "font.h"
#include "Enums.h"
@@ -73,7 +74,7 @@ void setColour(uint8_t colour) {
}
void clearGraphics(void) {
- memset(&buffer[0], 0, BUFFER_SIZEX * BUFFER_SIZEY);
+ memFill(&buffer[0], 0, BUFFER_SIZEX * BUFFER_SIZEY);
}
void flush3DBuffer(void) {
@@ -211,46 +212,63 @@ void shutdownGraphics(void) {
}
#endif
-void writeStrWithLimit(uint8_t _x, uint8_t y, char *text, uint8_t limitX) {
- uint8_t x = _x;
- char *ptr = text;
- char lastChar = 0xFF;
- uint8_t *fontTop;
-
- while (*ptr && y < (YRES_FRAMEBUFFER / 8)) {
- char cha = *ptr;
-
- if (x == limitX || cha == '\n') {
- ++y;
- x = _x;
- if (cha == '\n') {
- ++ptr;
- continue;
- }
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
+
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
+ for (c = 0; c < len; ++c) {
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
}
- if (cha >= 'a' && cha <= 'z') {
- cha -= ('a' - 'A');
- } else if (cha > 'z') {
- cha -= ('z' - 'a');
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
+ continue;
}
- if (cha != lastChar) {
- fontTop = &font[((cha - 32) << 3)];
- lastChar = cha;
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
}
- vwrite(fontTop, map_pixel(x << 3, y << 3), 8);
- ++x;
- ++ptr;
- }
-}
-void clearTextScreen(void) {
- uint8_t c, d;
- for (c = 16; c < 24; ++c) {
- for (d = 0; d < 32; ++d) {
- writeStrWithLimit(d, c, " ", 256 / 8);
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
}
+
+
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
+ } else {
+ currentChar -= ('z' - 'a');
+ }
+ }
+
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
+
+ vwrite(fontTop, map_pixel(dstX, dstY), 8);
+ dstX += 8;
}
}
diff --git a/my_frontend/src/UI.c b/my_frontend/src/UI.c
index 124082094..d25b239d9 100644
--- a/my_frontend/src/UI.c
+++ b/my_frontend/src/UI.c
@@ -9,6 +9,7 @@
#include "Renderer.h"
#include "Engine.h"
#include "SoundSystem.h"
+#include "Common.h"
extern uint8_t playerLocation;
@@ -24,7 +25,11 @@ uint8_t redrawMap;
uint8_t needsToRedrawHUD;
-void drawGraphic(const uint8_t *graphic) {
+uint16_t scale2DVertex( uint16_t offset, uint16_t scale, const uint8_t *shape, uint16_t index) {
+ return offset + ((scale * shape[index]) / 128);
+}
+
+void drawGraphic(uint16_t x, uint8_t y, uint16_t dx, uint8_t dy, const uint8_t *graphic) {
const uint8_t *ptr = graphic;
while (*ptr) {
@@ -36,20 +41,34 @@ void drawGraphic(const uint8_t *graphic) {
const uint8_t *shape = ptr;
for (c = 0; c < npoints - 1; ++c) {
- drawLine(shape[2 * c], shape[(2 * c) + 1], shape[(2 * c) + 2], shape[(2 * c) + 3], 2);
+ drawLine(scale2DVertex( x, dx, shape, (2 * c) + 0),
+ scale2DVertex( y, dy, shape, (2 * c) + 1),
+ scale2DVertex( x, dx, shape, (2 * c) + 2),
+ scale2DVertex( y, dy, shape, (2 * c) + 3),
+ 2);
}
- drawLine(shape[2 * npoints - 2], shape[2 * npoints - 1], shape[0], shape[1], 2);
+
+ drawLine(scale2DVertex( x, dx, shape, 2 * npoints - 2),
+ scale2DVertex( y, dy, shape, 2 * npoints - 1),
+ scale2DVertex( x, dx, shape, 0),
+ scale2DVertex( y, dy, shape, 1),
+ 2);
+
ptr += 2 * npoints;
}
}
void drawTextAt(uint8_t _x, uint8_t y, const char *text, uint8_t colour) {
- writeStrWithLimit(_x, y, text, (XRES_FRAMEBUFFER / 8), colour, 0);
+ drawTextAtWithMargin(_x, y, (XRES_FRAMEBUFFER), text, colour);
+}
+
+void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const uint8_t colour) {
+ drawTextAtWithMarginWithFiltering(x, y, margin, text, colour, '-');
}
void showMessage(const char *message) {
- clearTextScreen();
- drawTextWindow(1, 16, (XRES_FRAMEBUFFER / 8) - 3, (YRES_FRAMEBUFFER / 8) - 18, "", message);
+ uint8_t lines = countLines(message) + 3;
+ drawTextWindow( 0, (YRES / 8) + 1, (XRES_FRAMEBUFFER / 8) - 1, lines + 1, "Press 2 to continue", message);
waitForKey = 1;
}
@@ -72,12 +91,6 @@ void drawMap(void) {
(YRES_FRAMEBUFFER / 8) / 2 + 1,
"Map");
- for (y = 0; y < 12; ++y) {
- for (x = 0; x < 12; ++x) {
- drawTextAt(((XRES_FRAMEBUFFER / 8) / 2) + x + 2, 1 + y, " ", 0);
- }
- }
-
for (y = 0; y < 32; ++y) {
for (x = 0; x < 32; ++x) {
@@ -94,27 +107,41 @@ void drawMap(void) {
}
void performAction(void) {
+ const char *msg = NULL;
switch (getGameStatus()) {
case kBadVictory:
- showMessage("Victory! Too bad you didn't survive");
- while (1);
+ msg = "Victory! Too bad you didn't survive";
+ break;
+
case kBadGameOver:
- showMessage("You're dead! And so are the\n"
- "other people on the path of\n"
- "destruction faulty reactor");
- while (1);
+ msg = "You're dead! And so are the "
+ "other people on the path of "
+ "destruction faulty reactor";
+ break;
case kGoodVictory:
- showMessage("Victory! You managed to destroy the\nship and get out alive");
- while (1);
+ msg = "Victory! You managed to destroy the ship and get out alive";
+ break;
case kGoodGameOver:
- showMessage("You failed! While you're alive\n"
- "you failed to prevent the worst\n"
- "scenario and now EVERYBODY is\n"
- "dead!)");
- while (1);
+ msg = "You failed! While you're alive "
+ "you failed to prevent the worst "
+ "scenario and now EVERYBODY is "
+ "dead!)";
+ break;
+ }
+
+ if (msg) {
+ uint8_t lines = countLines(msg) + 3;
+ clearScreen();
+ drawTextWindow( 0, (YRES / 8) + 1, (XRES_FRAMEBUFFER / 8) - 1, lines + 1, "", msg);
+
+ while (1) {
+ if (soundDriver != kNoSound) {
+ soundTick();
+ }
+ }
}
}
@@ -127,7 +154,7 @@ void drawWindow(uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th, const char *titl
for (c = 0; c < th; ++c) {
for (d = 0; d < tw; ++d) {
- writeStrWithLimit( tx + d, ty + c, " ", 320 / 8, 2, 0);
+ drawTextAtWithMarginWithFiltering( tx + d, ty + c, XRES_FRAMEBUFFER, " ", 2, ' ');
}
}
@@ -181,7 +208,7 @@ void
drawTextWindow(const uint8_t x, const uint8_t y, const uint8_t dx, const uint8_t dy, const char *title,
const char *content) {
drawWindow(x, y, dx, dy, title);
- writeStrWithLimit(x + 1, y + 2, content, x + dx - 1, 1, 0);
+ drawTextAtWithMargin(x + 1, y + 2, (x + dx - 1) * 8, content, 1);
}
enum EGameMenuState handleCursor(const enum EGameMenuState* options, uint8_t optionsCount, const enum ECommand cmd, enum EGameMenuState backState) {
diff --git a/my_frontend/src/cpc.c b/my_frontend/src/cpc.c
index 96b68799e..80ac4c8ec 100644
--- a/my_frontend/src/cpc.c
+++ b/my_frontend/src/cpc.c
@@ -3,6 +3,7 @@
#include
#include
+#include "Common.h"
#include "Enums.h"
#include "Core.h"
#include "Renderer.h"
@@ -88,6 +89,7 @@ void initHW(int argc, char **argv) {
initAY38910();
initKeyboardUI();
needsToRedrawVisibleMeshes = 0;
+ waitForKey = 0;
}
void put_sprite_8(uint16_t x, uint8_t y, uint8_t *sprite, uint8_t colour) {
@@ -104,75 +106,72 @@ void put_sprite_8(uint16_t x, uint8_t y, uint8_t *sprite, uint8_t colour) {
}
}
-void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX, uint8_t fg, uint8_t bg) {
- (void)fg;
- (void)bg;
- uint8_t len = strlen(text);
- const char *ptr = text;
- uint8_t c = 0;
- uint8_t x = _x;
-
- uint8_t *lineBase = (unsigned char *) 0xC000 + ((((y * 8)) / 8) * 80) + ((((y * 8)) & 7) * 2048);
-
- for (; c < len && y < 64; ++c) {
-
- char cha = *ptr;
-
- if (x == limitX) {
- ++y;
- lineBase = (unsigned char *) 0xC000 + ((((y * 8)) / 8) * 80) + ((((y * 8)) & 7) * 2048);
- x = _x;
- } else if (cha == '\n') {
- ++y;
- lineBase = (unsigned char *) 0xC000 + ((((y * 8)) / 8) * 80) + ((((y * 8)) & 7) * 2048);
- x = _x;
- ++ptr;
- continue;
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+ size_t len = strlen(text);
+ uint16_t dstX = x * 8;
+ int8_t dstY = y * 8;
+
+ uint8_t c;
+ uint8_t d;
+ uint8_t lastSpacePos = 0xFF;
+
+ for (c = 0; c < len; ++c) {
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
}
- if (cha >= 'a') {
- if (cha <= 'z') {
- cha = (cha - 'a') + 'A';
- } else {
- cha -= ('z' - 'a');
- }
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
+ continue;
}
- uint8_t *fontTop = &font[((cha - 32) << 3)];
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
- uint8_t *line = lineBase + 2 * x + 1;
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
- for (uint8_t d = 0; d < 8; ++d) {
- uint8_t e;
- uint8_t chunk = *fontTop;
- uint8_t *pixel = line;
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
+ }
- *pixel = 0;
- for (e = 0; e < 4; ++e) {
- if (chunk & 1) {
- *pixel |= (16 << e);
- }
- chunk = chunk >> 1;
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
+ } else {
+ currentChar -= ('z' - 'a');
}
+ }
- --pixel;
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
- *pixel = 0;
+ for (uint8_t f = 0; f < 8; ++f) {
+ uint8_t e;
+ uint8_t chunk = *fontTop;
- for (e = 0; e < 4; ++e) {
- if (chunk & 1) {
- *pixel |= (16 << e);
- }
+ for (e = 0; e < 8; ++e) {
+ realPut(dstX + (7 - e), dstY + (f), (chunk & 1), NULL);
chunk = chunk >> 1;
}
fontTop++;
- line += 2048;
}
- ++x;
- ++ptr;
+ dstX += 8;
}
}
@@ -191,15 +190,6 @@ uint8_t *realPut(uint16_t x, uint8_t y, uint8_t colour, uint8_t *ptr) {
return ptr;
}
-void clearTextScreen(void) {
- uint8_t c, d;
- for (c = 16; c < 24; ++c) {
- for (d = 0; d < 40; ++d) {
- writeStrWithLimit(d, c, " ", 320 / 8, 2, 0);
- }
- }
-}
-
void handleSystemEvents(void) {}
enum ECommand getInput(void) {
@@ -220,7 +210,20 @@ enum ECommand getInput(void) {
performAction();
- switch (getch()) {
+ uint8_t toReturn = getch();
+
+ if (waitForKey) {
+ if (toReturn == '2') {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ return kCommandNone;
+ }
+
+ switch (toReturn) {
case 30:
case 'w':
return kCommandUp;
@@ -237,17 +240,7 @@ enum ECommand getInput(void) {
return kCommandStrafeLeft;
case 'x':
return kCommandStrafeRight;
- case 'm':
- drawMap();
- return '.';
case '1':
- if (waitForKey) {
- waitForKey = 0;
- firstFrameOnCurrentState = 1;
- needsToRedrawVisibleMeshes = 1;
- return kCommandNone;
- }
-
return kCommandFire1;
case '2':
return kCommandFire2;
@@ -264,11 +257,11 @@ enum ECommand getInput(void) {
}
void clearScreen(void) {
- memset((unsigned char *) 0xC000, 0, (320 / 4) * 200);
+ memFill((unsigned char *) 0xC000, 0, (320 / 4) * 200);
}
void clearGraphics(void) {
- memset(&buffer[0], 0, BUFFER_SIZEX * BUFFER_SIZEY);
+ memFill(&buffer[0], 0, BUFFER_SIZEX * BUFFER_SIZEY);
}
void startFrame(int x, int y, int width, int height) {
@@ -282,9 +275,9 @@ void endFrame(void) {
if (needsToRedrawVisibleMeshes) {
for (uint8_t y = 0; y < BUFFER_SIZEY; ++y) {
uint8_t *line = (unsigned char *) 0xC000 + ((y >> 3) * 80) + ((y & 7) * 2048);
- memcpy(line, buffer + (y * BUFFER_SIZEX), BUFFER_SIZEX);
+ memCopyToFrom(line, buffer + (y * BUFFER_SIZEX), BUFFER_SIZEX);
}
- memset(&buffer[0], 0, BUFFER_SIZEX * BUFFER_SIZEY);
+ clearGraphics();
#ifdef SUPPORTS_ROOM_TRANSITION_ANIMATION
if (roomTransitionAnimationStep) {
@@ -332,17 +325,6 @@ void vLine(uint8_t x0, uint8_t y0, uint8_t y1, uint8_t shouldStipple) {
}
}
-uint8_t *graphicsPutAddr(uint8_t x, uint8_t y, uint8_t colour, uint8_t *ptr) {
- (void)colour;
- if (ptr == NULL) {
- ptr = &buffer[(y * (BUFFER_SIZEX)) + (x / 4)]; /* skip to the line in pattern */
- }
-
- *ptr |= (8 >> (x & 3));
-
- return ptr;
-}
-
void graphicsPutPointArray(uint8_t *y128Values) {
uint8_t *stencilPtr = y128Values;
uint16_t x;
diff --git a/my_frontend/src/msdos.c b/my_frontend/src/msdos.c
index b91a8ac94..e1d9cdbb6 100644
--- a/my_frontend/src/msdos.c
+++ b/my_frontend/src/msdos.c
@@ -347,7 +347,7 @@ uint8_t *realPut(uint16_t x, uint8_t y, uint8_t value, uint8_t *ptr) {
}
void clearGraphics(void) {
- memset(imageBuffer, 0, 128 * 32);
+ memFill(imageBuffer, 0, 128 * 32);
}
void initHW(int argc, char **argv) {
@@ -405,6 +405,19 @@ enum ECommand getInput(void) {
);
}
+ if (waitForKey) {
+ if (toReturn == '2') {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ return kCommandNone;
+ }
+
+ performAction();
+
switch(toReturn) {
case 'q':
return kCommandLeft;
@@ -414,21 +427,13 @@ enum ECommand getInput(void) {
return kCommandDown;
case 'e':
return kCommandRight;
- case 'a':
+ case 'z':
return kCommandStrafeLeft;
- case 'd':
+ case 'x':
return kCommandStrafeRight;
case 'l':
return kCommandBack;
-
case '1':
- if (waitForKey) {
- waitForKey = 0;
- firstFrameOnCurrentState = 1;
- needsToRedrawVisibleMeshes = 1;
- return kCommandNone;
- }
-
return kCommandFire1;
case '2':
return kCommandFire2;
@@ -447,22 +452,28 @@ enum ECommand getInput(void) {
return kCommandNone;
}
-void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX, uint8_t fg, uint8_t bg) {
+void drawTextAtWithMarginWithFiltering(const int _x, const int _y, int limitX, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
const char *ptr = text;
uint16_t c = 0;
uint16_t chary = 0;
- uint16_t x = _x - 1;
+ uint16_t x = _x;
+ uint8_t y = _y;
char cha = *ptr;
for (; cha && y < 25; ++c) {
- if (x == limitX) {
+ if (cha == '-') {
+ cha = charToReplaceHifenWith;
+ }
+
+ if (x >= (limitX / 8) || x >= (XRES_TEXT)) {
++y;
- x = _x - 1;
+ x = _x + 1;
} else if (cha == '\n') {
++y;
- x = _x - 1;
+ x = _x + 1;
++ptr;
cha = *ptr;
continue;
@@ -470,6 +481,8 @@ void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX,
++x;
}
+ uint8_t biosX = x - 1;
+
asm volatile (
"movb $0x02, %%ah\n\t"
"movb %0, %%dl\n\t"
@@ -483,7 +496,7 @@ void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX,
"movb $0x03, %%bl\n"
"int $0x10\n\t"
:
- : "rm" (x), "rm" (y), "rm"(cha)
+ : "rm" (biosX), "rm" (y), "rm"(cha)
: "ax", "bx", "cx", "dx"
);
@@ -492,7 +505,6 @@ void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX,
}
}
-
void startFrame(int x, int y, int width, int height) {
}
@@ -570,19 +582,10 @@ void endFrame(void) {
);
}
- memset(imageBuffer, 0, 128 * 32);
+ memFill(imageBuffer, 0, 128 * 32);
}
-void clearTextScreen(void) {
- int c, d;
- for (c = 16; c < 24; ++c) {
- for (d = 0; d < 40; ++d) {
- writeStrWithLimit(d, c, " ", 320 / 8, 2, 0);
- }
- }
-}
-
void enterTextMode(void) {}
void exitTextMode(void) {
diff --git a/my_frontend/src/msx.c b/my_frontend/src/msx.c
index ca9dbceb0..dc64de43c 100644
--- a/my_frontend/src/msx.c
+++ b/my_frontend/src/msx.c
@@ -39,6 +39,16 @@ enum ECommand getInput(void) {
performAction();
+ if (waitForKey) {
+ if (input == '2') {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+ return kCommandNone;
+ }
+
switch (input) {
case 30:
return kCommandUp;
@@ -48,17 +58,11 @@ enum ECommand getInput(void) {
return kCommandLeft;
case 28:
return kCommandRight;
- case 'c':
+ case 'z':
return kCommandStrafeLeft;
- case 'v':
+ case 'x':
return kCommandStrafeRight;
case '1':
- if (waitForKey) {
- waitForKey = 0;
- firstFrameOnCurrentState = 1;
- needsToRedrawVisibleMeshes = 1;
- return kCommandNone;
- }
return kCommandFire1;
case '2':
return kCommandFire2;
@@ -70,7 +74,6 @@ enum ECommand getInput(void) {
return kCommandFire5;
case '6':
return kCommandFire6;
-
}
return input;
}
diff --git a/my_frontend/src/sdl2.c b/my_frontend/src/sdl2.c
index f9f2c599a..c39d85a20 100644
--- a/my_frontend/src/sdl2.c
+++ b/my_frontend/src/sdl2.c
@@ -13,6 +13,7 @@
#include "font.h"
#include "SDL.h"
+#include "Common.h"
extern uint8_t firstFrameOnCurrentState;
extern struct ObjectNode *focusedItem;
@@ -108,10 +109,6 @@ void graphicsPutPointArray(uint8_t *y128Values) {
}
}
-void clearTextScreen(void) {
- fillRect(0, 129, 256, 192, 0, 0);
-}
-
void enterTextMode(void) {
}
@@ -143,7 +140,7 @@ void shutdownGraphics(void) {
}
void clearGraphics(void) {
- memset(framebuffer, 0, 128 * 128);
+ memFill(framebuffer, 0, 128 * 128);
}
void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
@@ -209,12 +206,6 @@ enum ECommand getInput(void) {
switch (event.key.keysym.sym) {
case SDLK_RETURN:
case SDLK_1:
- if (waitForKey) {
- waitForKey = 0;
- firstFrameOnCurrentState = 1;
- needsToRedrawVisibleMeshes = 1;
- return kCommandNone;
- }
return kCommandFire1;
case SDLK_ESCAPE:
@@ -225,6 +216,12 @@ enum ECommand getInput(void) {
case SDLK_KP_7:
case SDLK_2:
+ if (waitForKey) {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
return kCommandFire2;
case SDLK_KP_8:
@@ -240,13 +237,9 @@ enum ECommand getInput(void) {
return kCommandFire5;
case SDLK_KP_9:
- case SDLK_9:
+ case SDLK_6:
return kCommandFire6;
- case SDLK_s:
- clearTextScreen();
- break;
-
case SDLK_LEFT:
return kCommandLeft;
@@ -276,60 +269,81 @@ enum ECommand getInput(void) {
return kCommandNone;
}
-void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX, uint8_t fg, uint8_t bg) {
- uint8_t len = strlen(text);
- char *ptr = text;
- uint8_t c = 0;
- uint8_t x = _x;
- for (; c < len && y < 64; ++c) {
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
+
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
- char cha = *ptr;
+ for (c = 0; c < len; ++c) {
- if (x == limitX) {
- ++y;
- x = _x;
- } else if (cha == '\n') {
- ++y;
- x = _x;
- ++ptr;
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
continue;
}
- if (cha >= 'a') {
- if (cha <= 'z') {
- cha = (cha - 'a') + 'A';
- } else {
- cha -= ('z' - 'a');
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
}
}
- uint8_t *fontTop = &font[((cha - 32) << 3)];
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
+ } else {
+ currentChar -= ('z' - 'a');
+ }
+ }
+
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
- for (int d = 0; d < 8; ++d) {
+ for (int f = 0; f < 8; ++f) {
int e;
uint8_t chunk = *fontTop;
for (e = 0; e < 8; ++e) {
if (chunk & 1) {
- realPut(8 * x + (7 - e), 8 * y + (d), 1, NULL);
+ realPut(dstX + (7 - e), dstY + (f), 1, NULL);
} else {
- realPut(8 * x + (7 - e), 8 * y + (d), 0, NULL);
+ realPut(dstX + (7 - e), dstY + (f), 0, NULL);
}
chunk = chunk >> 1;
}
-
fontTop++;
}
-
- ++x;
- ++ptr;
+ dstX += 8;
}
}
-void initHW(int, char **pString) {
+void initHW(int argc, char **pString) {
initKeyboardUI();
SDL_Init(SDL_INIT_EVERYTHING);
diff --git a/my_frontend/src/sms.c b/my_frontend/src/sms.c
index fd2477d60..25afec712 100755
--- a/my_frontend/src/sms.c
+++ b/my_frontend/src/sms.c
@@ -39,6 +39,7 @@ void initHW(int argc, char **argv) {
initSN76489();
cooldown = COOLDOWN_MAX;
needsToRedrawVisibleMeshes = 0;
+ waitForKey = 0;
}
void handleSystemEvents(void) {}
@@ -46,16 +47,26 @@ void handleSystemEvents(void) {}
enum ECommand getInput(void) {
int key = read_joypad1();
+ performAction();
+
if (cooldown) {
cooldown--;
}
if (key & JOY_UP && !cooldown) {
+ if (waitForKey) {
+ return kCommandNone;
+ }
+
cooldown = COOLDOWN_MAX;
return kCommandUp;
}
if (key & JOY_LEFT && !cooldown) {
+ if (waitForKey) {
+ return kCommandNone;
+ }
+
cooldown = COOLDOWN_MAX;
if (key & JOY_FIREB) {
return kCommandStrafeLeft;
@@ -65,6 +76,10 @@ enum ECommand getInput(void) {
}
if (key & JOY_RIGHT && !cooldown) {
+ if (waitForKey) {
+ return kCommandNone;
+ }
+
cooldown = COOLDOWN_MAX;
if (key & JOY_FIREB) {
return kCommandStrafeRight;
@@ -74,20 +89,24 @@ enum ECommand getInput(void) {
}
if (key & JOY_DOWN && !cooldown) {
+ if (waitForKey) {
+ return kCommandNone;
+ }
+
cooldown = COOLDOWN_MAX;
return kCommandDown;
}
if ((key & JOY_FIREA) && !cooldown ) {
+
+ if (waitForKey) {
+ return kCommandNone;
+ }
+
if (currentGameMenuState == kPlayGame) {
playSound(3);
cooldown = COOLDOWN_MAX;
- if (waitForKey) {
- waitForKey = 0;
- return kCommandNone;
- }
-
return performActionJoypad();
} else {
return kCommandFire1;
@@ -95,14 +114,15 @@ enum ECommand getInput(void) {
}
if ((key & JOY_FIREB) && !cooldown ) {
- if (currentGameMenuState == kPlayGame) {
- if (waitForKey) {
- waitForKey = 0;
- firstFrameOnCurrentState = 1;
- needsToRedrawVisibleMeshes = 1;
- return kCommandNone;
- }
+ if (waitForKey) {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ if (currentGameMenuState == kPlayGame) {
cursorPosition = (cursorPosition + 1);
playSound(2);
diff --git a/my_frontend/src/speccy.c b/my_frontend/src/speccy.c
index 0d020fd7a..058305682 100644
--- a/my_frontend/src/speccy.c
+++ b/my_frontend/src/speccy.c
@@ -92,10 +92,6 @@ uint8_t *realPut(uint16_t x, uint8_t y, uint8_t colour, uint8_t *ptr) {
return NULL;
}
-void clearTextScreen(void) {
- clga(0, 128, 256, 192);
-}
-
void handleSystemEvents(void) {}
uint8_t inputCounter = 0;
diff --git a/mz_frontend/AtariVersion/AtariRenderer.c b/mz_frontend/AtariVersion/AtariRenderer.c
deleted file mode 100644
index 84cf13825..000000000
--- a/mz_frontend/AtariVersion/AtariRenderer.c
+++ /dev/null
@@ -1,255 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "AtariInt.h"
-#include "Core.h"
-#include "Derelict.h"
-#include "Engine3D.h"
-
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-
-extern struct ObjectNode *focusedItem;
-extern struct ObjectNode *roomItem;
-extern int accessGrantedToSafe;
-
-char *menuItems[] = {
- "8) Use/Toggle",
- "5) Use with...",
- "9) Use/pick...",
- "6) Drop",
- "7) Next item",
- "4) Next in room",
-};
-
-void graphicsFlush(void);
-
-void nextItemInHand(void);
-
-void useItemInHand(void);
-
-void nextItemInRoom(void);
-
-void interactWithItemInRoom(void);
-
-void pickOrDrop(void);
-
-void dropItem(void);
-
-void pickItem(void);
-
-void clearGraphics(void);
-
-uint16_t *physBase;
-uint16_t *logBase;
-
-uint8_t *framebuffer;
-uint8_t bufferInput = '.';
-
-#define NORMALIZE(x) (((x * 8) / 256))
-
-void framebuffer_set_palette_entry(int index, int red, int green, int blue) {
- *(uint16_t *) (0xffff8240 + (index * 2)) = blue | (green << 4) | (red << 8);
-}
-
-void init(void) {
- framebuffer = (uint8_t *) calloc(1, 128 * 128);
-
- physBase = Physbase();
- logBase = Logbase();
- memset(logBase, 0, 32000);
- memset(physBase, 0, 32000);
- Setscreen(-1, -1, 0);
-
- framebuffer_set_palette_entry(0, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0x00));
- framebuffer_set_palette_entry(1, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0xAA));
- framebuffer_set_palette_entry(2, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0x00));
- framebuffer_set_palette_entry(3, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0xAA));
- framebuffer_set_palette_entry(4, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0x00));
- framebuffer_set_palette_entry(5, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0xAA));
- framebuffer_set_palette_entry(6, NORMALIZE(0xAA), NORMALIZE(0x55), NORMALIZE(0x00));
- framebuffer_set_palette_entry(7, NORMALIZE(0xAA), NORMALIZE(0xAA), NORMALIZE(0xAA));
- framebuffer_set_palette_entry(8, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0x55));
- framebuffer_set_palette_entry(9, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0xFF));
- framebuffer_set_palette_entry(10, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0x55));
- framebuffer_set_palette_entry(11, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0xFF));
- framebuffer_set_palette_entry(12, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0x55));
- framebuffer_set_palette_entry(13, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0xFF));
- framebuffer_set_palette_entry(14, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0x55));
- framebuffer_set_palette_entry(15, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0xFF));
-}
-
-/*Same as above*/
-void handleSystemEvents(void) {
- bufferInput = Cnecin();
-}
-
-uint8_t getKey(void) {
- handleSystemEvents();
- uint8_t toReturn = bufferInput;
- bufferInput = '.';
- return toReturn;
-}
-
-void clear(void) {}
-
-void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
- framebuffer[(128 * y) + x] = colour;
-}
-
-void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t pixel) {
- uint8_t *ptr;
- int16_t _y0 = y0;
- int16_t _y1 = y1;
-
- if (x0 < 0 || x0 >= 128) {
- return;
- }
-
- if (y0 > y1) {
- _y0 = y1;
- _y1 = y0;
- }
-
- if (_y0 >= 128 || _y1 < 0) {
- return;
- }
-
- if (_y0 < 0) {
- _y0 = 0;
- }
-
- if (_y1 >= 128) {
- _y1 = 127;
- }
-
- ptr = &framebuffer[(128 * _y0) + (x0)];
-
- for (int16_t y = _y0; y <= _y1; ++y) {
- *ptr = pixel;
- ptr += 128;
- }
-}
-
-void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
- if (y < 0 || y >= 128) {
- return;
- }
-
- int16_t _x0 = x0;
- int16_t _x1 = x1;
-
- if (x0 > x1) {
- _x0 = x1;
- _x1 = x0;
- }
-
- if (_x0 < 0) {
- _x0 = 0;
- }
-
- if (_x1 >= 128) {
- _x1 = 127;
- }
-
- uint8_t *ptr = &framebuffer[(128 * y) + _x0];
- for (int16_t x = _x0; x <= _x1; ++x) {
- *ptr++ = colour;
- }
-}
-
-void shutdownGraphics(void) {
-}
-
-void realPut(int x, int y, uint8_t value) {
-}
-
-void clearGraphics(void) {
- memset(framebuffer, 0, 128 * 128);
-}
-
-void clearScreen(void) {
-}
-
-void writeStrWithLimit(int _x, int y, const char *text, int limitX) {
-}
-
-void writeStr(int16_t _x, int16_t y, const char *text, uint16_t fg, uint16_t bg) {
- writeStrWithLimit(_x, y, text, 40);
-}
-
-void drawWindow(int tx, int ty, int tw, int th, const char *title) {}
-
-void graphicsFlush(void) {
-
- uint8_t *index = &framebuffer[0];
- uint16_t lineOffset = 0;
- uint16_t *words = (uint16_t *) logBase;
-
- for (uint16_t y = 127; y; y--) {
- memset(logBase + lineOffset, 0, 80);
- for (uint16_t x = 0; x < 128; ++x) {
-
- uint8_t value = *index++;
- uint16_t offset = lineOffset + ((x >> 4) << 2);
- uint16_t bitPattern = (1 << (15 - (x & 15)));
- uint16_t *ptr = &words[offset];
-
- if (value & 1) {
- *ptr |= bitPattern;
- }
-
- ptr++;
-
- if (value & 2) {
- *ptr |= bitPattern;
- }
-
- ptr++;
-
- if (value & 4) {
- *ptr |= bitPattern;
- }
-
- ptr++;
-
- if (value & 8) {
- *ptr |= bitPattern;
- }
- }
- lineOffset += 80;
- }
-
- uint16_t *tmp;
- tmp = physBase;
- physBase = logBase;
- logBase = tmp;
- Setscreen(logBase, physBase, -1);
-}
-
-void showMessage(const char *message) {
-}
-
-void titleScreen(void) {
-}
-
-void HUD_initialPaint(void) {
-}
-
-void sleepForMS(uint32_t ms) {
-}
-
-void HUD_refresh(void) {
-}
diff --git a/mz_frontend/CMakeLists.txt b/mz_frontend/CMakeLists.txt
index ac0998286..b8e36228f 100644
--- a/mz_frontend/CMakeLists.txt
+++ b/mz_frontend/CMakeLists.txt
@@ -1,31 +1,46 @@
cmake_minimum_required(VERSION 3.11)
project(derelict16)
-set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD 99)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../cmake-sdl2")
-include_directories( src ../core/src ../core/include ../common/include Engine3D
- ${SDL2_INCLUDE_DIR}
-)
+include_directories(src ../core/src ../core/include include ../common/include
+ ${SDL2_INCLUDE_DIR}
+ )
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDLSW -DRES128X128 -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DENDIANESS_AWARE -DSDL_DISABLE_IMMINTRIN_H")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDLW -DENDIANESS_AWARE -DMONOCHROME_VECTORS -DEMBEDDED_DATA -DUSE_OWN_MIN_MAX -DRLE_COMPRESSED_MAPS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DRES128X128 -Wall -Wextra -pedantic -Wunused-parameter -DXRES_FRAMEBUFFER=256 -DYRES_FRAMEBUFFER=160 -ggdb3 -DEMIT_QUIT_OPTION -DENDIANESS_AWARE -DSDL_DISABLE_IMMINTRIN_H")
find_package(SDL2 REQUIRED)
add_executable(derelict16
- Engine3D/Engine3D.c
- Engine3D/HackingMinigame.c
- SDLVersion/sdl2.c
- ../core/src/Derelict.c
- ../core/src/Core.c
- ../common/src/Common.c
- ../common/src/FixP.c
- ../common/src/Globals.c
- ../common/src/MapWithCharKey.c
- ../common/src/CTile3DProperties.c
- ../common/src/PackedFileReader.c
- )
+ src/RendererTesselation.c
+ src/Main.c
+ ../core/src/Derelict.c
+ ../core/src/Core.c
+ ../common/src/PackedFileReader.c
+ ../common/src/NullMusic.c
+ ../common/src/Common.c
+ ../common/src/Engine.c
+ ../common/src/CTile3DProperties.c
+ ../common/src/MapWithCharKey.c
+ src/HackingMinigame.c
+ include/HackingMinigame.h
+ src/SDLVersion/sdl2.c
+ src/UI.c
+ src/Events.c
+ src/RendererRasterizer.c
+ src/RendererTesselation.c
+ src/RendererScene.c
+ src/KeyboardUI.c
+ src/Crawler.c
+ src/GameMenu.c
+ ../common/src/HelpScreen.c
+ ../common/src/MainMenu.c
+ ../common/src/CreditsScreen.c
+ ../common/src/HackingMinigameRules.c
+ ../common/include/HackingMinigameRules.h
+ )
include(FindPkgConfig)
diff --git a/mz_frontend/MSDOSVersion/msdos.c b/mz_frontend/MSDOSVersion/msdos.c
deleted file mode 100644
index 0ad728cee..000000000
--- a/mz_frontend/MSDOSVersion/msdos.c
+++ /dev/null
@@ -1,251 +0,0 @@
-#include
-#include
-#include
-
-#include "Core.h"
-#include "Derelict.h"
-#include "Engine3D.h"
-
-extern struct ObjectNode *focusedItem;
-extern struct ObjectNode *roomItem;
-extern int accessGrantedToSafe;
-
-void graphicsFlush();
-
-void nextItemInHand();
-
-void useItemInHand();
-
-void nextItemInRoom();
-
-void interactWithItemInRoom();
-
-void pickOrDrop();
-
-void dropItem();
-
-void pickItem();
-
-void clearGraphics();
-
-unsigned char imageBuffer[128 * 128];
-
-void shutdownGraphics(void) {
-}
-
-void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour) {
-
- if (x0 < 0) {
- return;
- }
-
- int16_t y;
- int16_t _y0 = y0;
- int16_t _y1 = y1;
-
- if (y0 > y1) {
- _y0 = y1;
- _y1 = y0;
- }
-
- if (_y0 < 0) {
- _y0 = 0;
- }
-
- if (_y1 >= 128) {
- _y1 = 127;
- }
-
- for (y = _y0; y <= _y1; ++y) {
- imageBuffer[(128 * y) + x0] = colour;
- }
-}
-
-
-void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
- if (y < 0) {
- return;
- }
-
- int16_t _x0 = x0;
- int16_t _x1 = x1;
-
- if (x0 > x1) {
- _x0 = x1;
- _x1 = x0;
- }
-
- if (_x0 < 0) {
- _x0 = 0;
- }
-
- if (_x1 >= 128) {
- _x1 = 127;
- }
-
- for (int x = _x0; x <= _x1; ++x) {
- imageBuffer[(128 * y) + x] = colour;
- }
-}
-
-void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
- if (x < 0) {
- x = 0;
- }
-
- if (x >= 128) {
- x = 127;
- }
-
- if (y < 0) {
- y = 0;
- }
-
- if (y >= 128) {
- y = 127;
- }
-
- imageBuffer[(128 * y) + x] = colour;
-}
-
-void realPut(int x, int y, uint16_t value) {
-
- int pixel = value;
- int px = x;
- int py = y;
-
- asm volatile ("movb $0x0C, %%ah\n\t"
- "movb %0, %%al\n\t"
- "movb $0x0, %%bh\n\t"
- "movw %1, %%cx\n\t"
- "movw %2, %%dx\n\t"
- "int $0x10\n\t"
- :
- :"rm" (pixel), "rm" (px), "rm" (py)
- : "ax", "bx", "cx", "dx"
- );
-}
-
-void clearGraphics(void) {
- memset(imageBuffer, 0, 128 * 128);
-}
-
-void init(void) {
-
- asm volatile("movb $0x0, %%ah\n\t"
- "movb $0x0D, %%al\n\t"
- "int $0x10\n\t"
- :
- :
- : "ax"
- );
-}
-
-void clearScreen(void) {
- init();
-}
-
-uint8_t getKey(void) {
- unsigned char toReturn = 255;
-
-
- asm volatile ("movb $0x00, %%ah\n\t"
- "movb $0x00, %%al\n\t"
- "int $0x16 \n\t"
- "movb %%al, %0\n\t"
- : "=rm"(toReturn)
- :
- : "ax"
- );
-
- asm volatile("movb $0x0C, %%ah\n\t"
- "movb $0x00, %%al\n\t"
- "int $0x21\n\t"
- :
- :
- : "ax"
- );
-
- return toReturn;
-}
-
-void writeStrWithLimit(int _x, int y, const char *text, int limitX) {
-
- uint16_t len = strlen(text);
- const char *ptr = text;
- uint16_t c = 0;
- uint16_t chary = 0;
- uint16_t x = _x;
-
- for (; c < len && y < 25; ++c) {
-
- char cha = *ptr;
-
- if (x == limitX) {
- ++y;
- x = _x;
- } else if (cha == '\n') {
- ++y;
- x = _x;
- ++ptr;
- continue;
- } else {
- ++x;
- }
-
- asm volatile (
- "movb $0x02, %%ah\n\t"
- "movb %0, %%dl\n\t"
- "movb %1, %%dh\n\t"
- "movb $0x0, %%bh\n\t"
- "int $0x10\n\t"
- "movb $0x09, %%ah\n"
- "movb %2, %%al\n"
- "movw $0x01, %%cx\n"
- "movb $0x0, %%bh\n"
- "movb $0x03, %%bl\n"
- "int $0x10\n\t"
- :
- : "rm" (x), "rm" (y), "rm"(cha)
- : "ax", "bx", "cx", "dx"
- );
-
- ++ptr;
- }
-}
-
-void writeStr(int16_t _x, int16_t y, const char *text, uint16_t fg, uint16_t bg) {
- writeStrWithLimit(_x, y, text, 40);
-}
-
-void drawWindow(int tx, int ty, int tw, int th, const char *title) {}
-
-void graphicsFlush(void) {
- uint8_t *bufferPtr = &imageBuffer[0];
-
- for (int y = 0; y < 128; ++y) {
- for (int x = 0; x < 128; ++x) {
- uint16_t index = *bufferPtr;
-
- realPut(16 + x, 36 + y, index);
- bufferPtr++;
- }
- }
-}
-
-void showMessage(const char *message) {
- writeStr(1, 1, message, 2, 0);
-}
-
-void titleScreen(void) {
-}
-
-void HUD_initialPaint(void) {
-}
-
-void sleepForMS(uint32_t ms) {
- usleep(ms);
-}
-
-void HUD_refresh(void) {
-}
diff --git a/mz_frontend/Makefile.286 b/mz_frontend/Makefile.286
index b53379aaf..46e7dac83 100644
--- a/mz_frontend/Makefile.286
+++ b/mz_frontend/Makefile.286
@@ -1,19 +1,37 @@
CFLAGS = -fomit-frame-pointer -fno-exceptions -ffast-math \
- -I../core/include -I../common/include -IEngine3D \
- -DMSDOS -DRES128X128 -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DUSE_FILLED_POLYS \
- -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DENDIANESS_AWARE
+ -Iinclude -I../core/include -I../common/include -IEngine3D \
+ -DMSDOS -DCLI_BUILD -DRES128X128 -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DENDIANESS_AWARE -DXRES=128 -DYRES=128\
+ -DSDLW -DENDIANESS_AWARE -DMONOCHROME_VECTORS -DEMBEDDED_DATA -DRLE_COMPRESSED_MAPS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DRES128X128 -Wall -Wextra -pedantic -Wunused-parameter -DXRES_FRAMEBUFFER=256 -DYRES_FRAMEBUFFER=160 -DENDIANESS_AWARE \
+ -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DENDIANESS_AWARE -DUSE_OWN_MIN_MAX \
+ -Iinclude -I../common/include -I../core/include -I../common/include -IEngine3D -I../core/include \
+ -I../common/include -I../core/include -Imenu/include -ISoundSystem -I../core/include -IEngine3D
CC = i386-pc-msdosdjgpp-gcc
-OBJS = Engine3D/Engine3D.o MSDOSVersion/msdos.o \
- ../core/src/Core.o \
+OBJS = \
+ src/MSDOSVersion/msdos.o \
+ src/RendererTesselation.o \
+ src/RendererRasterizer.o \
+ src/RendererScene.o \
+ ../common/src/HelpScreen.o \
+ ../common/src/MainMenu.o \
+ ../common/src/CreditsScreen.o \
+ ../common/src/HackingMinigameRules.o \
+ src/Main.o \
../core/src/Derelict.o \
+ ../core/src/Core.o \
../common/src/PackedFileReader.o \
+ ../common/src/NullMusic.o \
+ ../common/src/Common.o \
+ ../common/src/Engine.o \
../common/src/CTile3DProperties.o \
../common/src/MapWithCharKey.o \
- ../common/src/FixP.o \
- ../common/src/Globals.o \
- ../common/src/Common.o
+ src/HackingMinigame.o \
+ src/UI.o \
+ src/Events.o \
+ src/KeyboardUI.o \
+ src/Crawler.o \
+ src/GameMenu.o
TARGET = derelict.exe
@@ -23,7 +41,7 @@ $(TARGET): $(OBJS)
all: $(TARGET)
clean:
- rm -f Engine3D/*.o
- rm -f MSDOSVersion/*.o
+ rm -f src/*.o
+ rm -f src/MSDOSVersion/*.o
rm -f ../core/src/*.o
rm -f ../common/src/*.o
diff --git a/mz_frontend/Makefile.atari b/mz_frontend/Makefile.atari
index 5d3c8c500..64863bdfd 100644
--- a/mz_frontend/Makefile.atari
+++ b/mz_frontend/Makefile.atari
@@ -2,24 +2,38 @@ CXX = m68k-atari-mint-g++
CC = m68k-atari-mint-gcc
STRIP=m68k-atari-mint-strip
CFLAGS = -std=c99 -c -m68000 -s -fexpensive-optimizations -fomit-frame-pointer -Ofast \
- -DATARIST -DCLI_BUILD -DAGA5BPP -DRES128X128 -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DENDIANESS_AWARE \
- -DSUPPORTS_ROOM_TRANSITION_ANIMATION \
- -I../common/include -I../core/include -Imenu/include -ISoundSystem -IAtariVersion -I../core/include -IEngine3D \
- -I../common/include
+ -DATARIST -DCLI_BUILD -DRES128X128 -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DENDIANESS_AWARE -DXRES=128 -DYRES=128\
+ -DSDLW -DENDIANESS_AWARE -DMONOCHROME_VECTORS -DEMBEDDED_DATA -DRLE_COMPRESSED_MAPS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DRES128X128 -Wall -Wextra -pedantic -Wunused-parameter -DXRES_FRAMEBUFFER=256 -DYRES_FRAMEBUFFER=160 -DENDIANESS_AWARE \
+ -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DUSE_OWN_MIN_MAX \
+ -Iinclude -I../common/include -IAmigaVersion -I../core/include -I../common/include -IEngine3D -I../core/include -Isrc/AtariVersion \
+ -I../common/include -I../core/include -Imenu/include -ISoundSystem -IAtariVersion -I../core/include -IEngine3D
MENU_TARGET=game.prg
MENU_OBJ= \
- Engine3D/Engine3D.o \
- AtariVersion/AtariRenderer.o \
- ../core/src/Core.o \
+ src/AtariVersion/AtariRenderer.o \
+ src/RendererTesselation.o \
+ src/RendererRasterizer.o \
+ src/RendererScene.o \
+ ../common/src/HelpScreen.o \
+ ../common/src/MainMenu.o \
+ ../common/src/CreditsScreen.o \
+ ../common/src/HackingMinigameRules.o \
+ src/Main.o \
../core/src/Derelict.o \
- ../common/src/FixP.o \
- ../common/src/Globals.o \
+ ../core/src/Core.o \
+ ../common/src/PackedFileReader.o \
+ ../common/src/NullMusic.o \
+ ../common/src/Common.o \
+ ../common/src/Engine.o \
../common/src/CTile3DProperties.o \
../common/src/MapWithCharKey.o \
- ../common/src/PackedFileReader.o \
- ../common/src/Common.o
+ src/HackingMinigame.o \
+ src/UI.o \
+ src/Events.o \
+ src/KeyboardUI.o \
+ src/Crawler.o \
+ src/GameMenu.o
$(MENU_TARGET): $(MENU_OBJ)
$(CC) -o$(MENU_TARGET) $(MENU_OBJ) $(LDFLAGS)
@@ -28,7 +42,7 @@ $(MENU_TARGET): $(MENU_OBJ)
all: $(MENU_TARGET)
clean:
- rm -f Engine3D/*.o
- rm -f AtariVersion/*.o
+ rm -f src/*.o
+ rm -f src/AtariVersion/*.o
rm -f ../core/src/*.o
rm -f ../common/src/*.o
diff --git a/mz_frontend/Makefile.ocs b/mz_frontend/Makefile.ocs
index a6686cd6a..0de71b4c5 100644
--- a/mz_frontend/Makefile.ocs
+++ b/mz_frontend/Makefile.ocs
@@ -4,9 +4,11 @@ STRIP=m68k-amigaos-strip
AS = vasmm68k_mot
CFLAGS = \
-c -m68000 -s -fexpensive-optimizations -fomit-frame-pointer -ffast-math -Ofast \
- -I../common/include -IAmigaVersion -I../core/include -I../common/include -IEngine3D -I../core/include \
+ -Isrc -I../core/src -I../core/include -Iinclude -I../common/include \
+ -I../common/include -IAmigaVersion -I../core/include -I../common/include -IEngine3D -I../core/include -Isrc/AmigaVersion \
-Imenu/include -ISoundSystem \
- -DCLI_BUILD -DINCLUDE_ITEM_DESCRIPTIONS -DAGA5BPP -DRES128X128 -DTRACE_OBJECTS_OVER_FLOOR \
+ -DSDLW -DENDIANESS_AWARE -DMONOCHROME_VECTORS -DEMBEDDED_DATA -DRLE_COMPRESSED_MAPS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DRES128X128 -Wall -Wextra -pedantic -Wunused-parameter -DXRES_FRAMEBUFFER=256 -DYRES_FRAMEBUFFER=160 -DENDIANESS_AWARE \
+ -DCLI_BUILD -DINCLUDE_ITEM_DESCRIPTIONS -DAGA5BPP -DRES128X128 -DTRACE_OBJECTS_OVER_FLOOR -DUSE_OWN_MIN_MAX \
-DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DUSE_FILLED_POLYS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DENDIANESS_AWARE
@@ -16,15 +18,29 @@ ASFLAGS = -phxass -Fhunk -m68000 -chklabels -no-fpu -wfail -I/opt/amiga/m68k-ami
MENU_TARGET=gameocs
MENU_OBJ= \
- Engine3D/Engine3D.o \
- AmigaVersion/AmigaRenderer.o \
- ../core/src/Core.o \
+ src/RendererTesselation.o \
+ src/RendererRasterizer.o \
+ src/RendererScene.o \
+ ../common/src/HelpScreen.o \
+ ../common/src/MainMenu.o \
+ ../common/src/CreditsScreen.o \
+ ../common/src/HackingMinigameRules.o \
+ src/AmigaVersion/AmigaRenderer.o \
+ src/Main.o \
../core/src/Derelict.o \
- ../common/src/MapWithCharKey.o \
+ ../core/src/Core.o \
../common/src/PackedFileReader.o \
- ../common/src/CTile3DProperties.o \
+ ../common/src/NullMusic.o \
../common/src/Common.o \
- ../common/src/Globals.o \
+ ../common/src/Engine.o \
+ ../common/src/CTile3DProperties.o \
+ ../common/src/MapWithCharKey.o \
+ src/HackingMinigame.o \
+ src/UI.o \
+ src/Events.o \
+ src/KeyboardUI.o \
+ src/Crawler.o \
+ src/GameMenu.o \
../common/src/c2p1x1_4_c5_bm.o
$(MENU_TARGET): $(MENU_OBJ)
@@ -39,7 +55,7 @@ adf: $(MENU_TARGET)
xdftool Derelict3D_ocs.adf list
clean:
- rm -f Engine3D/*.o
- rm -f AmigaVersion/*.o
+ rm -f src/*.o
+ rm -f src/AmigaVersion/*.o
rm -f ../core/src/*.o
rm -f ../common/src/*.o
diff --git a/mz_frontend/Makefile.sm4 b/mz_frontend/Makefile.sm4
index 83fd8bb2f..39b7b803f 100644
--- a/mz_frontend/Makefile.sm4
+++ b/mz_frontend/Makefile.sm4
@@ -46,8 +46,13 @@ LIBS += -u __modsi3 -u __divsi3 -u __mulsi3 -u __umodsi3 -u __udivsi3 -u __um
# Any C or C++ standard should be fine here as long as GCC support it
CCFLAGS = -m68000 -Wall -Wextra -std=c99 -ffreestanding -fcommon -Ofast -Wno-unused-parameter -Wno-char-subscripts \
- -DSMD -DRES128X128 -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR\
- -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DENDIANESS_AWARE -DGAMEPAD -DUSE_FILLED_POLYS -DRLE_COMPRESSED_MAPS
+ -DSMD -fomit-frame-pointer -fno-exceptions -ffast-math \
+ -Iinclude -I../core/include -I../common/include -IEngine3D \
+ -DRES128X128 -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DENDIANESS_AWARE -DXRES=128 -DYRES=128\
+ -DENDIANESS_AWARE -DMONOCHROME_VECTORS -DEMBEDDED_DATA -DRLE_COMPRESSED_MAPS -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_HACKING_MINIGAME -DTRACE_OBJECTS_OVER_FLOOR -DCAN_PICK_OBJECT_AT_ANY_DISTANCE -DRES128X128 -Wall -Wextra -pedantic -Wunused-parameter -DXRES_FRAMEBUFFER=256 -DYRES_FRAMEBUFFER=160 -DENDIANESS_AWARE \
+ -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DSUPPORTS_ROOM_TRANSITION_ANIMATION -DENDIANESS_AWARE \
+ -Iinclude -I../common/include -I../core/include -I../common/include -IEngine3D -I../core/include \
+ -I../common/include -I../core/include -Imenu/include -ISoundSystem -I../core/include -IEngine3D
# Extra options set by debug or release target
ASFLAGS = -m68000 --register-prefix-optional
@@ -59,7 +64,28 @@ RESS = $(wildcard res/*.res)
SS = $(wildcard src/*.s)
OBJS = $(RESS:.res=.o)
-OBJS += Engine3D/Engine3D.o ../common/src/FixP.o ../common/src/Globals.o ../common/src/CTile3DProperties.o ../common/src/MapWithCharKey.o MegaDriveVersion/megadrive.o Engine3D/HackingMinigame.o ../core/src/Core.o ../core/src/Derelict.o ../common/src/Common.o ../common/src/ArrayPackedFileReader.o
+OBJS += src/MegaDriveVersion/megadrive.o src/RendererTesselation.o \
+ src/RendererRasterizer.o \
+ src/RendererScene.o \
+ ../common/src/HelpScreen.o \
+ ../common/src/MainMenu.o \
+ ../common/src/CreditsScreen.o \
+ ../common/src/HackingMinigameRules.o \
+ src/Main.o \
+ ../core/src/Derelict.o \
+ ../core/src/Core.o \
+ ../common/src/ArrayPackedFileReader.o \
+ ../common/src/NullMusic.o \
+ ../common/src/Common.o \
+ ../common/src/Engine.o \
+ ../common/src/CTile3DProperties.o \
+ ../common/src/MapWithCharKey.o \
+ src/HackingMinigame.o \
+ src/UI.o \
+ src/Events.o \
+ src/GamepadUI.o \
+ src/Crawler.o \
+ src/GameMenu.o
OBJS += $(SS:.s=.o)
ASMO = $(RESS:.res=.o)
diff --git a/mz_frontend/SDLVersion/sdl2.c b/mz_frontend/SDLVersion/sdl2.c
deleted file mode 100644
index ba551038e..000000000
--- a/mz_frontend/SDLVersion/sdl2.c
+++ /dev/null
@@ -1,401 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-
-
-#include "SDL.h"
-#include "Engine3D.h"
-#include "Common.h"
-#include "Engine.h"
-
-extern struct ObjectNode *focusedItem;
-extern struct ObjectNode *roomItem;
-extern int accessGrantedToSafe;
-SDL_Window *window;
-SDL_Renderer *renderer;
-
-#define TRANSPARENCY_COLOR 17
-
-uint8_t mBufferedCommand;
-uint32_t palette[16];
-uint8_t framebuffer[256 * 160];
-
-void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
- if (x < 0) {
- x = 0;
- }
-
- if (x >= 128) {
- x = 127;
- }
-
- if (y < 0) {
- y = 0;
- }
-
- if (y >= 128) {
- y = 127;
- }
-
-
- framebuffer[(256 * y) + x] = colour;
-#ifdef PUTAFLIP
- graphicsFlush();
- SDL_Delay(100);
-#endif
-}
-
-void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
- if (y < 0) {
- return;
- }
-
- int16_t _x0 = x0;
- int16_t _x1 = x1;
-
- if (x0 > x1) {
- _x0 = x1;
- _x1 = x0;
- }
-
- if (_x0 < 0) {
- _x0 = 0;
- }
-
- if (_x1 >= 128) {
- _x1 = 127;
- }
-
- for (int x = _x0; x <= _x1; ++x) {
- framebuffer[(256 * y) + x] = colour;
- }
-}
-
-void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour) {
-
- if (x0 < 0 || x0 > XRESMINUSONE) {
- return;
- }
-
- int16_t y;
- int16_t _y0 = y0;
- int16_t _y1 = y1;
-
- if (y0 > y1) {
- _y0 = y1;
- _y1 = y0;
- }
-
- if (_y0 < 0) {
- _y0 = 0;
- }
-
- if (_y1 >= 128) {
- _y1 = 127;
- }
-
- for (y = _y0; y <= _y1; ++y) {
- framebuffer[(256 * y) + x0] = colour;
- }
-}
-
-void shutdownGraphics(void) {
- SDL_Quit();
-}
-
-void showMessage(const char *mesg) {
- puts(mesg);
-}
-
-void drawWindow(int tx, int ty, int tw, int th, const char *title) {}
-
-void clearGraphics(void) {
- memset(framebuffer, 0, 256 * 160);
-}
-
-void writeStr(int16_t nColumn, int16_t nLine, const char *str, uint16_t fg, uint16_t bg) {
- puts(str);
-}
-
-void printSituation(void) {
- struct ObjectNode *playerObjects = getPlayerItems();
- puts("---------------");
- puts("\nPlayer items:");
-
- while (playerObjects != NULL) {
- struct Item *item = getItem(playerObjects->item);
-
- printf("%c%c%s\n", (playerObjects == focusedItem) ? '>' : ' ', item->active ? '*' : '-', item->name);
-
- playerObjects = playerObjects->next;
- }
-
- puts("\nItems in room:");
-
- struct ObjectNode *roomItems = getRoom(getPlayerRoom())->itemsPresent->next;
-
- while (roomItems != NULL) {
- struct Item *item = getItem(roomItems->item);
-
- printf("%c%c%s\n", (roomItems == roomItem) ? '>' : ' ', item->active ? '*' : '-', item->name);
-
- roomItems = roomItems->next;
- }
-}
-
-void dropItem();
-
-void pickItem();
-
-void clearScreen(void) {}
-
-
-uint8_t getKey(void) {
- SDL_Event event;
-
- mBufferedCommand = '.';
-
- while (SDL_PollEvent(&event)) {
-
- if (event.type == SDL_QUIT) {
-
- mBufferedCommand = 'q';
- }
-
- if (event.type == SDL_KEYUP) {
-
- switch (event.key.keysym.sym) {
- case SDLK_RETURN:
- case SDLK_z:
- mBufferedCommand = 'a';
- break;
-
- case SDLK_ESCAPE:
- case SDLK_q:
- mBufferedCommand = 'l';
- break;
-
- case SDLK_SPACE:
- printSituation();
- break;
-
- case SDLK_KP_7:
- case SDLK_7:
- mBufferedCommand = '7';
- break;
-
- case SDLK_KP_8:
- case SDLK_8:
- mBufferedCommand = '8';
- break;
-
- case SDLK_KP_4:
- case SDLK_4:
- mBufferedCommand = '4';
- break;
-
- case SDLK_KP_5:
- case SDLK_5:
- mBufferedCommand = '5';
- break;
-
- case SDLK_KP_9:
- case SDLK_9:
- mBufferedCommand = '9';
- break;
-
- case SDLK_KP_6:
- case SDLK_6:
- mBufferedCommand = '6';
- break;
-
- case SDLK_s:
- break;
- case SDLK_d:
- break;
- case SDLK_v:
- break;
- case SDLK_b:
- break;
- case SDLK_j:
- break;
- case SDLK_k:
- break;
- case SDLK_x:
- mBufferedCommand = 'd';
- break;
- case SDLK_c:
- break;
- case SDLK_e:
- break;
-
- case SDLK_LEFT:
- mBufferedCommand = 'q';
- break;
- case SDLK_RIGHT:
- mBufferedCommand = 'e';
- break;
- case SDLK_UP:
- mBufferedCommand = 'w';
- break;
- case SDLK_DOWN:
- mBufferedCommand = 's';
- break;
-
- default:
- return '.';
- }
- }
- }
-
- return mBufferedCommand;
-}
-
-void sleepForMS(uint32_t unused) {
-}
-
-void init(void) {
- int r, g, b;
- mBufferedCommand = '.';
- SDL_Init(SDL_INIT_EVERYTHING);
- SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
- memset(framebuffer, 0, 256 * 160);
- window =
- SDL_CreateWindow("Derelict 16-bits SDL2 test", SDL_WINDOWPOS_CENTERED,
- SDL_WINDOWPOS_CENTERED, 512, 320, SDL_WINDOW_SHOWN);
-
- renderer = SDL_CreateRenderer(window, -1, 0);
-
- palette[0] = 0x000000;
- palette[1] = 0x0000AA;
- palette[2] = 0x00AA00;
- palette[3] = 0x00AAAA;
- palette[4] = 0xAA0000;
- palette[5] = 0xAA00AA;
- palette[6] = 0xAA5500;
- palette[7] = 0xAAAAAA;
- palette[8] = 0x555555;
- palette[9] = 0x5555FF;
- palette[10] = 0x55FF55;
- palette[11] = 0x55FFFF;
- palette[12] = 0xFF5555;
- palette[13] = 0xFF55FF;
- palette[14] = 0xFFFF55;
- palette[15] = 0xFFFFFF;
-
-#ifdef __EMSCRIPTEN__
- enterFullScreenMode ();
-#endif
-}
-
-
-void titleScreen(void) {
- int keepGoing = 1;
- clearGraphics();
-
- writeStr(1, 1, "Space Mare Imperium:", 2, 0);
- writeStr(1, 2, " Derelict", 2, 0);
- writeStr(1, 4, "by Daniel Monteiro", 2, 0);
- writeStr(1, 6, " Press B button ", 2, 0);
- writeStr(1, 7, " to start", 2, 0);
-
- while (keepGoing) {
- if (getKey() != '.') {
- keepGoing = 0;
- }
- }
-
- clearScreen();
-}
-
-void flipRenderer(void) {
- SDL_Rect rect;
- uint32_t pixel;
- int x, y;
-
- rect.x = 0;
- rect.y = 0;
- rect.w = 512;
- rect.h = 320;
-
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
- SDL_RenderFillRect(renderer, &rect);
-
- for (y = 0; y < 128; ++y) {
- for (x = 0; x < 128; ++x) {
- rect.x = 2 * x;
- rect.y = 2 * y;
- rect.w = 2;
- rect.h = 2;
- int index = framebuffer[(256 * y) + x];
- assert( !(index < 0 || index >= 16));
-
- pixel = palette[index];
-
- int r = (pixel & 0x00FF0000) >> 16;
- int g = ((pixel & 0x0000FF00) >> 8);
- int b = ((pixel & 0x000000FF));
-
- SDL_SetRenderDrawColor(renderer, r,
- g,
- b, 255);
- SDL_RenderFillRect(renderer, &rect);
- }
- }
-
- SDL_RenderPresent(renderer);
-
-#ifndef __EMSCRIPTEN__
- SDL_Delay(1000 / 60);
-#endif
-}
-
-void graphicsFlush(void) {
- flipRenderer();
-}
-
-
-void HUD_initialPaint(void) {
-}
-
-void HUD_refresh(void) {
-
-
- for (uint16_t i = 0; i < 6; ++i) {
- writeStr(16, 13 + i, (i == cursorPosition) ? ">" : " ", 2, 0);
- }
-
-
- writeStr(16, 5, "Object in hand:", 2, 0);
- if (focusedItem != NULL) {
- struct Item *item = getItem(focusedItem->item);
-
-
- if (item->active) {
- writeStr(16, 6, "*", 2, 0);
- }
-
- writeStr(17, 6, item->name, 2, 0);
- } else {
- writeStr(16, 6, "Nothing", 2, 0);
- }
-
- writeStr(16, 8, "Object in room:", 2, 0);
-
- if (roomItem != NULL) {
- struct Item *item = getItem(roomItem->item);
-
-
- if (item->active) {
- writeStr(16, 9, "*", 2, 0);
- }
-
- writeStr(17, 9, item->name, 2, 0);
- } else {
- writeStr(16, 9, "Nothing", 2, 0);
- }
-}
-
-
diff --git a/mz_frontend/Xcode2/Derelict-Info.plist b/mz_frontend/Xcode2/Derelict-Info.plist
new file mode 100644
index 000000000..d9a1182ed
--- /dev/null
+++ b/mz_frontend/Xcode2/Derelict-Info.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIconFile
+ helmet
+ CFBundleIdentifier
+ pt.b13h.Derelict
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ NSMainNibFile
+ MainMenu
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/mz_frontend/Xcode2/Derelict8.xcodeproj/project.pbxproj b/mz_frontend/Xcode2/Derelict8.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..86c313880
--- /dev/null
+++ b/mz_frontend/Xcode2/Derelict8.xcodeproj/project.pbxproj
@@ -0,0 +1,440 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ F13B51A22AA5F241006BE693 /* HackingMinigame.c in Sources */ = {isa = PBXBuildFile; fileRef = F13B519E2AA5F241006BE693 /* HackingMinigame.c */; };
+ F13B51A32AA5F241006BE693 /* KeyboardUI.c in Sources */ = {isa = PBXBuildFile; fileRef = F13B519F2AA5F241006BE693 /* KeyboardUI.c */; };
+ F13B51AD2AA613D4006BE693 /* Common.c in Sources */ = {isa = PBXBuildFile; fileRef = F13B51AC2AA613D4006BE693 /* Common.c */; };
+ F14601D92AC82536007A09B5 /* UI.c in Sources */ = {isa = PBXBuildFile; fileRef = F14601D42AC82536007A09B5 /* UI.c */; };
+ F14601DA2AC82536007A09B5 /* RendererRasterizer.c in Sources */ = {isa = PBXBuildFile; fileRef = F14601D52AC82536007A09B5 /* RendererRasterizer.c */; };
+ F14601DB2AC82536007A09B5 /* RendererScene.c in Sources */ = {isa = PBXBuildFile; fileRef = F14601D62AC82536007A09B5 /* RendererScene.c */; };
+ F14601DC2AC82536007A09B5 /* RendererTesselation.c in Sources */ = {isa = PBXBuildFile; fileRef = F14601D72AC82536007A09B5 /* RendererTesselation.c */; };
+ F14601DD2AC82536007A09B5 /* Events.c in Sources */ = {isa = PBXBuildFile; fileRef = F14601D82AC82536007A09B5 /* Events.c */; };
+ F149B82A263CB11700A3F597 /* Core.c in Sources */ = {isa = PBXBuildFile; fileRef = F149B829263CB11700A3F597 /* Core.c */; };
+ F17ABEC62BFBDEEB00B69054 /* CreditsScreen.c in Sources */ = {isa = PBXBuildFile; fileRef = F17ABEC32BFBDEEB00B69054 /* CreditsScreen.c */; };
+ F17ABEC72BFBDEEB00B69054 /* HelpScreen.c in Sources */ = {isa = PBXBuildFile; fileRef = F17ABEC42BFBDEEB00B69054 /* HelpScreen.c */; };
+ F17ABEC82BFBDEEB00B69054 /* MainMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F17ABEC52BFBDEEB00B69054 /* MainMenu.c */; };
+ F194EAD62610B51400E292ED /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
+ F1CA76BB2610A8E200FD1E04 /* GameView.m in Sources */ = {isa = PBXBuildFile; fileRef = F1277A26236DE6DD00478B2C /* GameView.m */; };
+ F1CA76BC2610A8ED00FD1E04 /* OSXRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = F1277A28236DE6DD00478B2C /* OSXRenderer.m */; };
+ F1CA76BD2610A8EE00FD1E04 /* GameWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = F1B679BD24E4AAE400FCEF8E /* GameWindow.m */; };
+ F1CA76C22610A91800FD1E04 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
+ F1CA76D02610A93600FD1E04 /* Derelict.c in Sources */ = {isa = PBXBuildFile; fileRef = F1D5B5D22531D2BF0094ED78 /* Derelict.c */; };
+ F1CA76D62610A93B00FD1E04 /* Parser.c in Sources */ = {isa = PBXBuildFile; fileRef = F1D5B5D32531D2BF0094ED78 /* Parser.c */; };
+ F1CA76DD2610A98800FD1E04 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D1107310486CEB800E47090 /* Info.plist */; };
+ F1CA76F22610A99900FD1E04 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+ F1CA774E2610AFA000FD1E04 /* Derelict-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F1CA76B52610A8BF00FD1E04 /* Derelict-Info.plist */; };
+ F1D4FFCD2AF8D85900F8A437 /* Engine.c in Sources */ = {isa = PBXBuildFile; fileRef = F1D4FFCC2AF8D85900F8A437 /* Engine.c */; };
+ F1D4FFD62AF8D8C000F8A437 /* Crawler.c in Sources */ = {isa = PBXBuildFile; fileRef = F1D4FFD02AF8D8C000F8A437 /* Crawler.c */; };
+ F1D4FFD82AF8D8C000F8A437 /* GameMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F1D4FFD22AF8D8C000F8A437 /* GameMenu.c */; };
+ F1D4FFDD2AF8D8E000F8A437 /* HackingMinigameRules.c in Sources */ = {isa = PBXBuildFile; fileRef = F1D4FFDC2AF8D8E000F8A437 /* HackingMinigameRules.c */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
+ 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; };
+ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+ 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; };
+ 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
+ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
+ 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ F1277A25236DE6DD00478B2C /* GameView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GameView.h; sourceTree = ""; };
+ F1277A26236DE6DD00478B2C /* GameView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = GameView.m; sourceTree = ""; };
+ F1277A27236DE6DD00478B2C /* OSXRenderer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OSXRenderer.h; sourceTree = ""; };
+ F1277A28236DE6DD00478B2C /* OSXRenderer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OSXRenderer.m; sourceTree = ""; };
+ F13B519E2AA5F241006BE693 /* HackingMinigame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = HackingMinigame.c; path = ../src/HackingMinigame.c; sourceTree = ""; };
+ F13B519F2AA5F241006BE693 /* KeyboardUI.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = KeyboardUI.c; path = ../src/KeyboardUI.c; sourceTree = ""; };
+ F13B51A62AA5F255006BE693 /* font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = font.h; path = ../include/font.h; sourceTree = ""; };
+ F13B51A72AA5F255006BE693 /* HackingMinigame.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HackingMinigame.h; path = ../include/HackingMinigame.h; sourceTree = ""; };
+ F13B51A82AA5F255006BE693 /* KeyboardUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyboardUI.h; path = ../include/KeyboardUI.h; sourceTree = ""; };
+ F13B51A92AA5F255006BE693 /* map-data.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "map-data.h"; path = "../include/map-data.h"; sourceTree = ""; };
+ F13B51AA2AA5F255006BE693 /* map.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = map.h; path = ../include/map.h; sourceTree = ""; };
+ F13B51AC2AA613D4006BE693 /* Common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Common.c; path = ../../common/src/Common.c; sourceTree = ""; };
+ F14601D42AC82536007A09B5 /* UI.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = UI.c; path = ../src/UI.c; sourceTree = SOURCE_ROOT; };
+ F14601D52AC82536007A09B5 /* RendererRasterizer.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = RendererRasterizer.c; path = ../src/RendererRasterizer.c; sourceTree = SOURCE_ROOT; };
+ F14601D62AC82536007A09B5 /* RendererScene.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = RendererScene.c; path = ../src/RendererScene.c; sourceTree = SOURCE_ROOT; };
+ F14601D72AC82536007A09B5 /* RendererTesselation.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = RendererTesselation.c; path = ../src/RendererTesselation.c; sourceTree = SOURCE_ROOT; };
+ F14601D82AC82536007A09B5 /* Events.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = Events.c; path = ../src/Events.c; sourceTree = SOURCE_ROOT; };
+ F14601E72AC82B5E007A09B5 /* Renderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Renderer.h; path = ../include/Renderer.h; sourceTree = SOURCE_ROOT; };
+ F14601E82AC82B69007A09B5 /* UI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UI.h; path = ../include/UI.h; sourceTree = SOURCE_ROOT; };
+ F149B829263CB11700A3F597 /* Core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Core.c; path = ../../core/src/Core.c; sourceTree = ""; };
+ F149B82B263CB12B00A3F597 /* Core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Core.h; path = ../../core/include/Core.h; sourceTree = ""; };
+ F17ABEC32BFBDEEB00B69054 /* CreditsScreen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = CreditsScreen.c; path = ../../common/src/CreditsScreen.c; sourceTree = ""; };
+ F17ABEC42BFBDEEB00B69054 /* HelpScreen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = HelpScreen.c; path = ../../common/src/HelpScreen.c; sourceTree = ""; };
+ F17ABEC52BFBDEEB00B69054 /* MainMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MainMenu.c; path = ../../common/src/MainMenu.c; sourceTree = ""; };
+ F1B679BC24E4AAE400FCEF8E /* GameWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameWindow.h; sourceTree = ""; };
+ F1B679BD24E4AAE400FCEF8E /* GameWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameWindow.m; sourceTree = ""; };
+ F1B8CB2F27CFCFE700C06E6F /* Common.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Common.h; path = ../../common/include/Common.h; sourceTree = SOURCE_ROOT; };
+ F1BD0D30236EF697002329C6 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = ""; };
+ F1BD0D31236EF697002329C6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; };
+ F1CA76B32610A8BF00FD1E04 /* Derelict.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Derelict.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ F1CA76B52610A8BF00FD1E04 /* Derelict-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Derelict-Info.plist"; sourceTree = ""; };
+ F1CD08C62450E41C00D4794D /* base.pfs */ = {isa = PBXFileReference; lastKnownFileType = file; name = base.pfs; path = ../base.pfs; sourceTree = SOURCE_ROOT; };
+ F1D4FFCA2AF8D82800F8A437 /* Engine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Engine.h; path = ../../common/include/Engine.h; sourceTree = ""; };
+ F1D4FFCB2AF8D83600F8A437 /* HackingMinigameRules.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HackingMinigameRules.h; path = ../../common/include/HackingMinigameRules.h; sourceTree = ""; };
+ F1D4FFCC2AF8D85900F8A437 /* Engine.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Engine.c; path = ../../common/src/Engine.c; sourceTree = ""; };
+ F1D4FFCE2AF8D87600F8A437 /* Enums.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Enums.h; path = ../../common/include/Enums.h; sourceTree = ""; };
+ F1D4FFCF2AF8D88800F8A437 /* SoundSystem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SoundSystem.h; path = ../../common/include/SoundSystem.h; sourceTree = ""; };
+ F1D4FFD02AF8D8C000F8A437 /* Crawler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Crawler.c; path = ../src/Crawler.c; sourceTree = ""; };
+ F1D4FFD22AF8D8C000F8A437 /* GameMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = GameMenu.c; path = ../src/GameMenu.c; sourceTree = ""; };
+ F1D4FFDC2AF8D8E000F8A437 /* HackingMinigameRules.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = HackingMinigameRules.c; path = ../../common/src/HackingMinigameRules.c; sourceTree = ""; };
+ F1D5B5D22531D2BF0094ED78 /* Derelict.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Derelict.c; path = ../../core/src/Derelict.c; sourceTree = ""; };
+ F1D5B5D32531D2BF0094ED78 /* Parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Parser.c; path = ../../core/src/Parser.c; sourceTree = ""; };
+ F1D5B5D62531D2C90094ED78 /* Parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Parser.h; path = ../../core/include/Parser.h; sourceTree = ""; };
+ F1D5B5D72531D2CA0094ED78 /* Derelict.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Derelict.h; path = ../../core/include/Derelict.h; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ F1CA76B12610A8BF00FD1E04 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F1CA76F22610A99900FD1E04 /* Cocoa.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 080E96DDFE201D6D7F000001 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ F1277A25236DE6DD00478B2C /* GameView.h */,
+ F1277A26236DE6DD00478B2C /* GameView.m */,
+ F1B679BC24E4AAE400FCEF8E /* GameWindow.h */,
+ F1B679BD24E4AAE400FCEF8E /* GameWindow.m */,
+ F1277A27236DE6DD00478B2C /* OSXRenderer.h */,
+ F1277A28236DE6DD00478B2C /* OSXRenderer.m */,
+ );
+ name = Classes;
+ sourceTree = "";
+ };
+ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+ );
+ name = "Linked Frameworks";
+ sourceTree = "";
+ };
+ 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ F1BD0D30236EF697002329C6 /* Quartz.framework */,
+ F1BD0D31236EF697002329C6 /* QuartzCore.framework */,
+ 29B97324FDCFA39411CA2CEA /* AppKit.framework */,
+ 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
+ 29B97325FDCFA39411CA2CEA /* Foundation.framework */,
+ );
+ name = "Other Frameworks";
+ sourceTree = "";
+ };
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ F1CA76B32610A8BF00FD1E04 /* Derelict.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 29B97314FDCFA39411CA2CEA /* The Mistral Report OSX */ = {
+ isa = PBXGroup;
+ children = (
+ 080E96DDFE201D6D7F000001 /* Classes */,
+ 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ 29B97317FDCFA39411CA2CEA /* Resources */,
+ 29B97323FDCFA39411CA2CEA /* Frameworks */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ F1CA76B52610A8BF00FD1E04 /* Derelict-Info.plist */,
+ );
+ name = "The Mistral Report OSX";
+ sourceTree = "";
+ };
+ 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ F14601D42AC82536007A09B5 /* UI.c */,
+ F14601D52AC82536007A09B5 /* RendererRasterizer.c */,
+ F14601D62AC82536007A09B5 /* RendererScene.c */,
+ F1D4FFCA2AF8D82800F8A437 /* Engine.h */,
+ F14601D72AC82536007A09B5 /* RendererTesselation.c */,
+ F14601D82AC82536007A09B5 /* Events.c */,
+ F1D4FFCB2AF8D83600F8A437 /* HackingMinigameRules.h */,
+ F13B519E2AA5F241006BE693 /* HackingMinigame.c */,
+ F17ABEC32BFBDEEB00B69054 /* CreditsScreen.c */,
+ F17ABEC42BFBDEEB00B69054 /* HelpScreen.c */,
+ F17ABEC52BFBDEEB00B69054 /* MainMenu.c */,
+ F14601E72AC82B5E007A09B5 /* Renderer.h */,
+ F1D4FFCE2AF8D87600F8A437 /* Enums.h */,
+ F1D4FFCF2AF8D88800F8A437 /* SoundSystem.h */,
+ F1D4FFD02AF8D8C000F8A437 /* Crawler.c */,
+ F1D4FFD22AF8D8C000F8A437 /* GameMenu.c */,
+ F1D4FFDC2AF8D8E000F8A437 /* HackingMinigameRules.c */,
+ F1D4FFCC2AF8D85900F8A437 /* Engine.c */,
+ F13B519F2AA5F241006BE693 /* KeyboardUI.c */,
+ F13B51A62AA5F255006BE693 /* font.h */,
+ F13B51A72AA5F255006BE693 /* HackingMinigame.h */,
+ F13B51A82AA5F255006BE693 /* KeyboardUI.h */,
+ F13B51A92AA5F255006BE693 /* map-data.h */,
+ F13B51AA2AA5F255006BE693 /* map.h */,
+ F14601E82AC82B69007A09B5 /* UI.h */,
+ F1B8CB2F27CFCFE700C06E6F /* Common.h */,
+ F13B51AC2AA613D4006BE693 /* Common.c */,
+ F149B82B263CB12B00A3F597 /* Core.h */,
+ F149B829263CB11700A3F597 /* Core.c */,
+ F1D5B5D22531D2BF0094ED78 /* Derelict.c */,
+ F1D5B5D72531D2CA0094ED78 /* Derelict.h */,
+ 29B97316FDCFA39411CA2CEA /* main.m */,
+ F1D5B5D32531D2BF0094ED78 /* Parser.c */,
+ F1D5B5D62531D2C90094ED78 /* Parser.h */,
+ );
+ name = "Other Sources";
+ sourceTree = "";
+ };
+ 29B97317FDCFA39411CA2CEA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 8D1107310486CEB800E47090 /* Info.plist */,
+ F1CD08C62450E41C00D4794D /* base.pfs */,
+ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+ 29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
+ );
+ name = Resources;
+ sourceTree = "";
+ };
+ 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
+ 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ F1CA76B22610A8BF00FD1E04 /* Derelict8 */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F1CA76B62610A8C100FD1E04 /* Build configuration list for PBXNativeTarget "Derelict8" */;
+ buildPhases = (
+ F1CA76AF2610A8BF00FD1E04 /* Resources */,
+ F1CA76B02610A8BF00FD1E04 /* Sources */,
+ F1CA76B12610A8BF00FD1E04 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Derelict8;
+ productName = Derelict;
+ productReference = F1CA76B32610A8BF00FD1E04 /* Derelict.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ };
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Derelict8" */;
+ compatibilityVersion = "Xcode 2.4";
+ developmentRegion = en;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ en,
+ Base,
+ English,
+ );
+ mainGroup = 29B97314FDCFA39411CA2CEA /* The Mistral Report OSX */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ F1CA76B22610A8BF00FD1E04 /* Derelict8 */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ F1CA76AF2610A8BF00FD1E04 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F1CA76DD2610A98800FD1E04 /* Info.plist in Resources */,
+ F1CA774E2610AFA000FD1E04 /* Derelict-Info.plist in Resources */,
+ F194EAD62610B51400E292ED /* MainMenu.nib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ F1CA76B02610A8BF00FD1E04 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F149B82A263CB11700A3F597 /* Core.c in Sources */,
+ F1CA76BB2610A8E200FD1E04 /* GameView.m in Sources */,
+ F17ABEC72BFBDEEB00B69054 /* HelpScreen.c in Sources */,
+ F1CA76BC2610A8ED00FD1E04 /* OSXRenderer.m in Sources */,
+ F1CA76BD2610A8EE00FD1E04 /* GameWindow.m in Sources */,
+ F1CA76C22610A91800FD1E04 /* main.m in Sources */,
+ F1CA76D02610A93600FD1E04 /* Derelict.c in Sources */,
+ F1CA76D62610A93B00FD1E04 /* Parser.c in Sources */,
+ F13B51A22AA5F241006BE693 /* HackingMinigame.c in Sources */,
+ F13B51A32AA5F241006BE693 /* KeyboardUI.c in Sources */,
+ F13B51AD2AA613D4006BE693 /* Common.c in Sources */,
+ F14601D92AC82536007A09B5 /* UI.c in Sources */,
+ F14601DA2AC82536007A09B5 /* RendererRasterizer.c in Sources */,
+ F14601DB2AC82536007A09B5 /* RendererScene.c in Sources */,
+ F14601DC2AC82536007A09B5 /* RendererTesselation.c in Sources */,
+ F17ABEC62BFBDEEB00B69054 /* CreditsScreen.c in Sources */,
+ F14601DD2AC82536007A09B5 /* Events.c in Sources */,
+ F17ABEC82BFBDEEB00B69054 /* MainMenu.c in Sources */,
+ F1D4FFCD2AF8D85900F8A437 /* Engine.c in Sources */,
+ F1D4FFD62AF8D8C000F8A437 /* Crawler.c in Sources */,
+ F1D4FFD82AF8D8C000F8A437 /* GameMenu.c in Sources */,
+ F1D4FFDD2AF8D8E000F8A437 /* HackingMinigameRules.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C165DFE840E0CC02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+ 29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 29B97319FDCFA39411CA2CEA /* English */,
+ );
+ name = MainMenu.nib;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ CLI_BUILD,
+ INCLUDE_ITEM_DESCRIPTIONS,
+ "XRES_FRAMEBUFFER=256",
+ "YRES_FRAMEBUFFER=192",
+ CAN_PICK_OBJECT_AT_ANY_DISTANCE,
+ SUPPORTS_HACKING_MINIGAME,
+ SUPPORTS_ROOM_TRANSITION_ANIMATION,
+ RLE_COMPRESSED_MAPS,
+ DEMBEDDED_DATA,
+ ENDIANESS_AWARE,
+ EMIT_QUIT_OPTION,
+ MONOCHROME_VECTORS,
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.4;
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ CLI_BUILD,
+ INCLUDE_ITEM_DESCRIPTIONS,
+ "XRES_FRAMEBUFFER=256",
+ "YRES_FRAMEBUFFER=192",
+ CAN_PICK_OBJECT_AT_ANY_DISTANCE,
+ SUPPORTS_HACKING_MINIGAME,
+ SUPPORTS_ROOM_TRANSITION_ANIMATION,
+ RLE_COMPRESSED_MAPS,
+ DEMBEDDED_DATA,
+ ENDIANESS_AWARE,
+ EMIT_QUIT_OPTION,
+ MONOCHROME_VECTORS,
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.4;
+ };
+ name = Release;
+ };
+ F1CA76B72610A8C100FD1E04 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ CLI_BUILD,
+ INCLUDE_ITEM_DESCRIPTIONS,
+ EMBEDDED_DATA,
+ RLE_COMPRESSED_MAPS,
+ SUPPORTS_ROOM_TRANSITION_ANIMATION,
+ SUPPORTS_HACKING_MINIGAME,
+ CAN_PICK_OBJECT_AT_ANY_DISTANCE,
+ "YRES_FRAMEBUFFER=192",
+ "XRES_FRAMEBUFFER=256",
+ MONOCHROME_VECTORS,
+ );
+ INFOPLIST_FILE = "Derelict-Info.plist";
+ INSTALL_PATH = "$(HOME)/Applications";
+ PRODUCT_NAME = Derelict;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ F1CA76B82610A8C100FD1E04 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ CLI_BUILD,
+ INCLUDE_ITEM_DESCRIPTIONS,
+ EMBEDDED_DATA,
+ RLE_COMPRESSED_MAPS,
+ SUPPORTS_ROOM_TRANSITION_ANIMATION,
+ SUPPORTS_HACKING_MINIGAME,
+ CAN_PICK_OBJECT_AT_ANY_DISTANCE,
+ "YRES_FRAMEBUFFER=192",
+ "XRES_FRAMEBUFFER=256",
+ MONOCHROME_VECTORS,
+ );
+ INFOPLIST_FILE = "Derelict-Info.plist";
+ INSTALL_PATH = "$(HOME)/Applications";
+ PRODUCT_NAME = Derelict;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Derelict8" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ F1CA76B62610A8C100FD1E04 /* Build configuration list for PBXNativeTarget "Derelict8" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F1CA76B72610A8C100FD1E04 /* Debug */,
+ F1CA76B82610A8C100FD1E04 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/mz_frontend/Xcode2/Derelict8.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mz_frontend/Xcode2/Derelict8.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 000000000..ca61a234e
--- /dev/null
+++ b/mz_frontend/Xcode2/Derelict8.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/mz_frontend/Xcode2/Derelict8.xcodeproj/xcshareddata/xcschemes/Derelict8.xcscheme b/mz_frontend/Xcode2/Derelict8.xcodeproj/xcshareddata/xcschemes/Derelict8.xcscheme
new file mode 100644
index 000000000..71af733ab
--- /dev/null
+++ b/mz_frontend/Xcode2/Derelict8.xcodeproj/xcshareddata/xcschemes/Derelict8.xcscheme
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mz_frontend/Xcode2/English.lproj/InfoPlist.strings b/mz_frontend/Xcode2/English.lproj/InfoPlist.strings
new file mode 100644
index 000000000..79a393bb7
Binary files /dev/null and b/mz_frontend/Xcode2/English.lproj/InfoPlist.strings differ
diff --git a/mz_frontend/Xcode2/English.lproj/MainMenu.nib/classes.nib b/mz_frontend/Xcode2/English.lproj/MainMenu.nib/classes.nib
new file mode 100644
index 000000000..3dfe3f26e
--- /dev/null
+++ b/mz_frontend/Xcode2/English.lproj/MainMenu.nib/classes.nib
@@ -0,0 +1,8 @@
+{
+ IBClasses = (
+ {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {CLASS = GameView; LANGUAGE = ObjC; SUPERCLASS = NSView; },
+ {CLASS = GameWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }
+ );
+ IBVersion = 1;
+}
\ No newline at end of file
diff --git a/mz_frontend/Xcode2/English.lproj/MainMenu.nib/info.nib b/mz_frontend/Xcode2/English.lproj/MainMenu.nib/info.nib
new file mode 100644
index 000000000..db2a93299
--- /dev/null
+++ b/mz_frontend/Xcode2/English.lproj/MainMenu.nib/info.nib
@@ -0,0 +1,24 @@
+
+
+
+
+ IBDocumentLocation
+ 47 69 589 354 0 0 1280 1002
+ IBEditorPositions
+
+ 29
+ 700 917 238 44 0 0 1280 1002
+
+ IBFramework Version
+ 489.0
+ IBOldestOS
+ 5
+ IBOpenObjects
+
+ 21
+ 29
+
+ IBSystem Version
+ 8S165
+
+
diff --git a/mz_frontend/Xcode2/English.lproj/MainMenu.nib/keyedobjects.nib b/mz_frontend/Xcode2/English.lproj/MainMenu.nib/keyedobjects.nib
new file mode 100644
index 000000000..0e93d7015
Binary files /dev/null and b/mz_frontend/Xcode2/English.lproj/MainMenu.nib/keyedobjects.nib differ
diff --git a/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/classes.nib b/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/classes.nib
new file mode 100644
index 000000000..3dfe3f26e
--- /dev/null
+++ b/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/classes.nib
@@ -0,0 +1,8 @@
+{
+ IBClasses = (
+ {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {CLASS = GameView; LANGUAGE = ObjC; SUPERCLASS = NSView; },
+ {CLASS = GameWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }
+ );
+ IBVersion = 1;
+}
\ No newline at end of file
diff --git a/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/info.nib b/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/info.nib
new file mode 100644
index 000000000..5f347eeeb
--- /dev/null
+++ b/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/info.nib
@@ -0,0 +1,24 @@
+
+
+
+
+ IBDocumentLocation
+ 47 69 589 354 0 0 1280 1002
+ IBEditorPositions
+
+ 29
+ 206 876 231 44 0 0 1280 1002
+
+ IBFramework Version
+ 489.0
+ IBOldestOS
+ 5
+ IBOpenObjects
+
+ 21
+ 29
+
+ IBSystem Version
+ 8S165
+
+
diff --git a/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/keyedobjects.nib b/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/keyedobjects.nib
new file mode 100644
index 000000000..65ad12926
Binary files /dev/null and b/mz_frontend/Xcode2/English.lproj/MainMenu~.nib/keyedobjects.nib differ
diff --git a/mz_frontend/Xcode2/GameView.h b/mz_frontend/Xcode2/GameView.h
new file mode 100644
index 000000000..688d45941
--- /dev/null
+++ b/mz_frontend/Xcode2/GameView.h
@@ -0,0 +1,23 @@
+//
+// GameView.h
+// The Mistral Report
+//
+// Created by Daniel Monteiro on 10/13/18.
+// Copyright (c) 2018 Daniel Monteiro. All rights reserved.
+//
+
+#import
+
+@interface GameView : NSView {
+ NSTimer* timer;
+ int bufferedInput;
+}
+-(void) initTimer;
+-(void) stopTimer;
+- (void)drawRect:(NSRect)rect;
+- (int) getInput;
+
+-(void)keyUp:(NSEvent*)event;
+-(void)keyDown:(NSEvent*)event;
+- (BOOL)acceptsFirstResponder;
+@end
diff --git a/mz_frontend/Xcode2/GameView.m b/mz_frontend/Xcode2/GameView.m
new file mode 100644
index 000000000..92bc679a0
--- /dev/null
+++ b/mz_frontend/Xcode2/GameView.m
@@ -0,0 +1,247 @@
+//
+// GameView.m
+// Sub Mare Imperium: Derelict
+//
+// Created by Daniel Monteiro on 2023-09-04.
+// Copyright (c) 2018 Daniel Monteiro. All rights reserved.
+//
+
+#import "GameView.h"
+
+#include
+#include
+#include
+#include
+
+#include "Enums.h"
+#include "UI.h"
+#include "Engine.h"
+#include "SoundSystem.h"
+#include "Core.h"
+#include "Derelict.h"
+#include "KeyboardUI.h"
+#include "Renderer.h"
+
+const char *mainText;
+
+long timeUntilNextState;
+enum EPresentationState currentPresentationState;
+enum EGameMenuState currentGameMenuState;
+int8_t cameraRotation = 0;
+int8_t cursorPosition;
+enum EGameMenuState nextNavigationSelection;
+enum EGameMenuState menuStateToReturn;
+enum ESoundDriver soundDriver = kNoSound;
+
+extern GameView* osxview;
+
+@implementation GameView
+
+uint32_t palette[16];
+uint32_t stretchedBuffer[ 256 * 192 ];
+uint8_t framebuffer[128 * 128];
+uint8_t vfb[256 * 192];
+
+CGColorSpaceRef rgb;
+CGDataProviderRef provider;
+CGImageRef ref;
+extern uint8_t mBufferedCommand;
+float multiplier = 1.0f;
+extern uint8_t updateDirection;
+id delegate;
+
+
+void graphicsFlush(void);
+
+void stopSounds(void) {
+
+}
+
+void soundTick(void) {
+
+}
+
+void startFrame(int x, int y, int width, int height) {
+ (void)x;
+ (void)y;
+ (void)width;
+ (void)height;
+}
+
+void endFrame(void) {
+ if (needsToRedrawVisibleMeshes) {
+ graphicsFlush();
+ }
+ flushVirtualFramebuffer();
+}
+
+void playSound(uint8_t unused) {
+
+}
+
+void handleSystemEvents(void) {
+
+}
+
+void initHW(int argc, char** argv) {
+ initKeyboardUI();
+ updateDirection = 0;
+
+ mBufferedCommand = '.';
+ memFill(framebuffer, 0, 128 * 128);
+}
+
+
+void shutdownGraphics(void) {
+}
+
+- (void) repaintGame:(NSTimer *)timer
+{
+ startFrame(0, 0, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER);
+ menuTick(10);
+ endFrame();
+
+
+ [self setNeedsDisplay: YES ];
+}
+
+void setMultiplier(CGSize size) {
+
+ if (((320.0f / 240.0f ) * size.height) < size.width ) {
+ multiplier = (((float)size.height) / 240.0f);
+ } else {
+ multiplier = (((float)size.width) / 320.0f);
+ }
+}
+
+- (id)initWithFrame:(NSRect)frame
+{
+ int r, g, b;
+
+ self = [super initWithFrame:frame];
+ if (self) {
+
+ bufferedInput = -1;
+ delegate = self;
+ rgb = CGColorSpaceCreateDeviceRGB();
+
+
+ osxview = self;
+ palette[0] = 0xFF000099;
+ palette[1] = 0xFFFFFFBF;
+ palette[2] = 0xFFE0FFFF;
+ palette[3] = 0xFFFF0000;
+ palette[4] = 0xFFFFFFFF;
+ palette[5] = 0xFF000000;
+ palette[6] = 0xFF0000FF;
+ palette[7] = 0xFFFF00FF;
+ palette[8] = 0xFF00b7eb;
+ palette[9] = 0xFFFFFF00;
+ palette[10] = 0xFFAFEEEE;
+ palette[11] = 0xFFffc0cb;
+ palette[12] = 0xFF00FF00;
+ palette[13] = 0xFFAAFFAA;
+ palette[14] = 0xFF0000FF;
+ palette[15] = 0xFFAAAAFF;
+
+
+ initHW(0, NULL);
+ enterState(kMainMenu);
+
+
+ [self initTimer];
+ }
+
+ return self;
+}
+
+-(void)keyDown:(NSEvent *)theEvent
+{
+}
+
+-(void)keyUp:(NSEvent*)event
+{
+
+ bufferedInput = [ event keyCode ];
+}
+
+- (BOOL)acceptsFirstResponder {
+ return YES;
+}
+
+-(void) initTimer {
+ [NSTimer scheduledTimerWithTimeInterval:0.05f
+ target:self selector:@selector(repaintGame:) userInfo:nil repeats:YES];
+
+}
+
+- (int) getInput {
+ int toReturn = bufferedInput;
+
+ bufferedInput = -1;
+
+ return toReturn;
+}
+
+-(void) stopTimer {
+}
+
+void shutdownHW(void) {
+ CGColorSpaceRelease(rgb);
+}
+
+void flushVirtualFramebuffer() {
+ int x,y;
+ uint32_t pixel;
+ uint32_t *bufferPtr = &stretchedBuffer[0];
+ for ( y = 0; y < 192; ++y ) {
+ for ( x = 0; x < 256; ++x ) {
+ int index = vfb[(256 * y) + x];
+
+ if (index < 0 || index >= 16) {
+ continue;
+ }
+
+ pixel = palette[index];
+
+ *bufferPtr = pixel;
+ ++bufferPtr;
+ }
+ }
+}
+
+- (void)drawRect:(NSRect)rect {
+
+ CGRect bounds;
+ //NSRectToCGRect is not available on 10.4
+ bounds.origin.x = rect.origin.x;
+ bounds.origin.y = rect.origin.y;
+ bounds.size.width = rect.size.width;
+ bounds.size.height = rect.size.height;
+
+ float yMultiplier = ( (240.0f * multiplier) / 200.0f );
+
+ setMultiplier(bounds.size);
+
+ /* MAC_OS_X_VERSION_10_10*/
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
+ CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] CGContext];
+#else
+ CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
+#endif
+
+ CGContextSaveGState(context);
+
+ CGContextSetRGBFillColor(context, 0.0f, 0.0f, 0.0f, 1.0f);
+ CGContextFillRect(context, bounds);
+
+ provider = CGDataProviderCreateWithData( NULL, &stretchedBuffer[0], 4 * XRES_FRAMEBUFFER * YRES_FRAMEBUFFER, NULL );
+ ref = CGImageCreate( XRES_FRAMEBUFFER, YRES_FRAMEBUFFER, 8, 32, 4 * XRES_FRAMEBUFFER, rgb, kCGBitmapByteOrder32Host | kCGImageAlphaNoneSkipLast, provider, NULL, 0, kCGRenderingIntentDefault );
+ CGContextScaleCTM(context, multiplier, yMultiplier);
+ CGContextDrawImage(context, CGRectMake( ((bounds.size.width / multiplier) - XRES_FRAMEBUFFER) / 2, ((bounds.size.height / yMultiplier) - YRES_FRAMEBUFFER) / 2, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER), ref);
+ CGImageRelease(ref);
+ CGDataProviderRelease(provider);
+
+ CGContextRestoreGState(context);
+}
+@end
diff --git a/mz_frontend/Xcode2/GameWindow.h b/mz_frontend/Xcode2/GameWindow.h
new file mode 100644
index 000000000..6ad06f724
--- /dev/null
+++ b/mz_frontend/Xcode2/GameWindow.h
@@ -0,0 +1,16 @@
+//
+// GameWindow.h
+// The Mistral Report OSX
+//
+// Created by Daniel Monteiro on 6/15/20.
+// Copyright 2020 __MyCompanyName__. All rights reserved.
+//
+
+#import
+
+
+@interface GameWindow : NSWindow {
+
+}
+
+@end
diff --git a/mz_frontend/Xcode2/GameWindow.m b/mz_frontend/Xcode2/GameWindow.m
new file mode 100644
index 000000000..22333ce89
--- /dev/null
+++ b/mz_frontend/Xcode2/GameWindow.m
@@ -0,0 +1,39 @@
+//
+// GameWindow.m
+// The Mistral Report OSX
+//
+// Created by Daniel Monteiro on 6/15/20.
+// Copyright 2020 __MyCompanyName__. All rights reserved.
+//
+
+#import "GameWindow.h"
+#import "GameView.h"
+
+@implementation GameWindow
+
+-(BOOL)makeFirstResponder:(NSResponder *)aResponder {
+
+ /* UGLY HACK */
+ if ([self respondsToSelector:@selector(setCollectionBehavior:) ]) {
+
+ //NSWindowCollectionBehaviorFullScreenPrimary is not available on 10.4 SDK
+ [self setCollectionBehavior: (1 << 7)];
+ }
+
+ return [super makeFirstResponder: aResponder];
+}
+
+/* UGLY HACK */
+- (void)zoom:(id)sender {
+ [super zoom: sender ];
+
+ NSView *view = [[[self contentView] subviews ] objectAtIndex: 0 ];
+
+ if ( [ view isKindOfClass: [GameView class] ]) {
+ GameView *gv = (GameView*)view;
+ [gv viewDidEndLiveResize];
+ }
+}
+
+
+@end
diff --git a/mz_frontend/Xcode2/Info.plist b/mz_frontend/Xcode2/Info.plist
new file mode 100644
index 000000000..aef04efe8
--- /dev/null
+++ b/mz_frontend/Xcode2/Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+ NSMainNibFile
+ MainMenu
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/mz_frontend/Xcode2/OSXRenderer.h b/mz_frontend/Xcode2/OSXRenderer.h
new file mode 100644
index 000000000..241c9adb9
--- /dev/null
+++ b/mz_frontend/Xcode2/OSXRenderer.h
@@ -0,0 +1,13 @@
+//
+// OSXRenderer.h
+// The Mistral Report
+//
+// Created by Daniel Monteiro on 10/13/18.
+// Copyright (c) 2018 Daniel Monteiro. All rights reserved.
+//
+
+#ifndef __The_Mistral_Report__OSXRenderer__
+#define __The_Mistral_Report__OSXRenderer__
+
+
+#endif /* defined(__The_Mistral_Report__OSXRenderer__) */
diff --git a/mz_frontend/Xcode2/OSXRenderer.m b/mz_frontend/Xcode2/OSXRenderer.m
new file mode 100644
index 000000000..af47b9acf
--- /dev/null
+++ b/mz_frontend/Xcode2/OSXRenderer.m
@@ -0,0 +1,307 @@
+//
+// OSXRenderer.cpp
+// The Mistral Report
+//
+// Created by Daniel Monteiro on 10/13/18.
+// Copyright (c) 2018 Daniel Monteiro. All rights reserved.
+//
+
+#import
+
+#include
+#include
+#include
+#include
+
+#include "Enums.h"
+#include "OSXRenderer.h"
+#include "GameView.h"
+
+#include "Core.h"
+#include "Derelict.h"
+#include "Renderer.h"
+#include "KeyboardUI.h"
+#include "font.h"
+
+
+GameView* osxview;
+uint8_t mPalette[256];
+struct Bitmap *mFont;
+uint8_t mBufferedCommand = '.';
+
+void performAction();
+
+void flushVirtualFramebuffer(void);
+
+void graphicsInit() {
+}
+
+void graphicsShutdown() {
+}
+
+enum ECommand getInput(void) {
+ int code = [ osxview getInput ];
+
+ mBufferedCommand = kCommandNone;
+
+ switch (code) {
+ case 0: //a
+ case 6: //z
+ case 36: //enter
+ mBufferedCommand = kCommandFire1;
+ break;
+
+ case 7: //x
+ mBufferedCommand = kCommandFire2;
+ break;
+
+ case 8: //c
+ mBufferedCommand = kCommandFire3;
+ break;
+
+ case 9: //v
+ mBufferedCommand = kCommandFire4;
+ break;
+
+ case 1: //s
+ mBufferedCommand = kCommandStrafeLeft;
+ break;
+ case 2: //d
+ mBufferedCommand = kCommandStrafeRight;
+ break;
+
+#ifdef EMIT_QUIT_OPTION
+ case 53: //esc
+ mBufferedCommand = kCommandQuit;
+ break;
+#endif
+
+ case 126:
+ mBufferedCommand = kCommandUp;
+ break;
+ case 125:
+ mBufferedCommand = kCommandDown;
+ break;
+
+ case 123:
+ mBufferedCommand = kCommandLeft;
+ break;
+
+ case 124:
+ mBufferedCommand = kCommandRight;
+ break;
+ case -1:
+ break;
+ default:
+ break;
+ }
+
+ performAction();
+
+ return mBufferedCommand;
+}
+
+extern struct ObjectNode *focusedItem;
+extern struct ObjectNode *roomItem;
+extern int accessGrantedToSafe;
+uint8_t updateDirection = 0;
+
+uint8_t mBufferedCommand;
+uint32_t palette[16];
+uint8_t framebuffer[128 * 128];
+uint8_t vfb[256 * 192];
+
+void graphicsPut(uint8_t x, uint8_t y) {
+ framebuffer[(128 * y) + x] = 1;
+}
+
+void graphicsPutPointArray(uint8_t *y128Values) {
+ uint8_t *stencilPtr = y128Values;
+ int x;
+
+ for (x = 0; x < XRES; ++x) {
+ graphicsPut(x, *stencilPtr);
+ ++stencilPtr;
+ }
+}
+
+void clearTextScreen(void) {
+ fillRect(0, 129, 256, 192, 0, 0);
+}
+
+void enterTextMode(void) {
+}
+
+void exitTextMode(void) {
+}
+
+void vLine(uint8_t x0, uint8_t y0, uint8_t y1, uint8_t shouldStipple) {
+ int16_t y;
+ int16_t _y0 = y0;
+ int16_t _y1 = y1;
+
+ if (y0 > y1) {
+ _y0 = y1;
+ _y1 = y0;
+ }
+
+
+ for (y = _y0; y <= _y1; ++y) {
+ if (!shouldStipple || (y & 1)) {
+ graphicsPut(x0, y);
+ }
+ }
+}
+
+void clearGraphics(void) {
+ memFill(framebuffer, 0, 128 * 128);
+}
+
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+ int dx = abs(x1 - x0);
+ int sx = x0 < x1 ? 1 : -1;
+ int dy = abs(y1 - y0);
+ int sy = y0 < y1 ? 1 : -1;
+ int err = (dx > dy ? dx : -dy) >> 1;
+ int e2;
+ for (;;) {
+
+ if (x0 == x1 && y0 == y1) break;
+
+ realPut(x0, y0, colour, NULL);
+
+ e2 = err;
+ if (e2 > -dx) {
+ err -= dy;
+ x0 += sx;
+ }
+ if (e2 < dy) {
+ err += dx;
+ y0 += sy;
+ }
+ }
+}
+
+uint8_t *realPut(uint16_t x, uint8_t y, uint8_t colour, uint8_t *ptr) {
+ assert(y >= 0);
+ assert(x >= 0);
+ assert(x < 256);
+ assert(y < 192);
+
+ vfb[(256 * y) + x] = colour;
+
+ return NULL;
+}
+
+void clearScreen(void) {
+ fillRect(0, 0, 255, 192, 0, 0);
+}
+
+void writeStrWithLimit(uint8_t _x, uint8_t y, const char *text, uint8_t limitX, uint8_t fg, uint8_t bg) {
+ uint8_t len = strlen(text);
+ char *ptr = text;
+ uint8_t c = 0;
+ uint8_t x = _x;
+ int d;
+
+ for (; c < len && y < 64; ++c) {
+
+ char cha = *ptr;
+
+ if (x == limitX) {
+ ++y;
+ x = _x;
+ } else if (cha == '\n') {
+ ++y;
+ x = _x;
+ ++ptr;
+ continue;
+ }
+
+ if (cha >= 'a') {
+ if (cha <= 'z') {
+ cha = (cha - 'a') + 'A';
+ } else {
+ cha -= ('z' - 'a');
+ }
+ }
+
+ uint8_t *fontTop = &font[((cha - 32) << 3)];
+
+
+ for (d = 0; d < 8; ++d) {
+ int e;
+ uint8_t chunk = *fontTop;
+
+ for (e = 0; e < 8; ++e) {
+ if (chunk & 1) {
+ realPut(8 * x + (7 - e), 8 * y + (d), 1, NULL);
+ } else {
+ realPut(8 * x + (7 - e), 8 * y + (d), 0, NULL);
+ }
+ chunk = chunk >> 1;
+ }
+
+
+ fontTop++;
+ }
+
+ ++x;
+ ++ptr;
+ }
+}
+
+
+void flipRenderer(void) {
+ int x, y;
+ for (y = 0; y < 128; ++y) {
+ for (x = 0; x < 128; ++x) {
+ int index = framebuffer[(128 * y) + x];
+
+ if (index < 0 || index >= 16) {
+ continue;
+ }
+
+ realPut(x, y, index, NULL);
+ }
+ }
+}
+
+void graphicsFlush(void) {
+ if (updateDirection) {
+ updateDirection = 0;
+ switch (getPlayerDirection()) {
+ case 0:
+ writeStrWithLimit(12, 17, "N", 31, 2, 0);
+ break;
+ case 1:
+ writeStrWithLimit(12, 17, "E", 31, 2, 0);
+ break;
+ case 2:
+ writeStrWithLimit(12, 17, "S", 31, 2, 0);
+ break;
+ case 3:
+ writeStrWithLimit(12, 17, "W", 31, 2, 0);
+ break;
+ }
+ }
+
+ if (needsToRedrawVisibleMeshes) {
+ flipRenderer();
+ clearGraphics();
+ }
+ flushVirtualFramebuffer();
+}
+
+void fillRect(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour, uint8_t stipple) {
+ uint8_t x, y;
+ for (y = y0; y < y1; ++y) {
+ for (x = x0; x < x1; ++x) {
+ if (!stipple || ((x + y) & 1 )) {
+ realPut(x, y, colour, NULL);
+ }
+ }
+ }
+}
+
+
diff --git a/mz_frontend/Xcode2/main.m b/mz_frontend/Xcode2/main.m
new file mode 100644
index 000000000..c470bd7a1
--- /dev/null
+++ b/mz_frontend/Xcode2/main.m
@@ -0,0 +1,20 @@
+//
+// main.m
+// The Mistral Report
+//
+// Created by Daniel Monteiro on 10/13/18.
+// Copyright (c) 2018 Daniel Monteiro. All rights reserved.
+//
+
+#import
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+int main(int argc, char **argv) {
+ return NSApplicationMain(argc, (const char **)argv);
+}
diff --git a/mz_frontend/data/Makefile b/mz_frontend/data/Makefile
index fd5e01329..bb73b6a32 100644
--- a/mz_frontend/data/Makefile
+++ b/mz_frontend/data/Makefile
@@ -3,21 +3,14 @@
CRUNCHER=wobj-compiler/dist/wobj-compiler-1.0-SNAPSHOT-jar-with-dependencies.jar
PACKAGER=packer
-#$(CRUNCHER):
-# mvn -q -f wobj-compiler/pom.xml clean compile package install
-# mkdir -p wobj-compiler/dist
-# cp wobj-compiler/target/wobj-compiler-1.0-SNAPSHOT-jar-with-dependencies.jar wobj-compiler/dist
-
$(PACKAGER):
rm -f $(PACKAGER)
$(CXX) -std=c++14 -o$(PACKAGER) packer.cpp
-#data: $(PACKAGER) $(CRUNCHER)
data: $(PACKAGER)
rm -f ./base.pfs
-# ls -r src/*.obj | xargs java -jar wobj-compiler/dist/wobj-compiler-1.0-SNAPSHOT-jar-with-dependencies.jar
ls -r assets/*.* | xargs ./packer
- bin2c ../base.pfs ../Engine3D/basepfs.h basepfs
+ bin2c ../base.pfs ../include/basepfs.h basepfs
mv ./data.pfs ../base.pfs
images:
diff --git a/mz_frontend/include/GamepadUI.h b/mz_frontend/include/GamepadUI.h
new file mode 100644
index 000000000..c86a6e074
--- /dev/null
+++ b/mz_frontend/include/GamepadUI.h
@@ -0,0 +1,8 @@
+#ifndef GAMEPADUI_H
+#define GAMEPADUI_H
+
+enum ECommand performActionJoypad(void);
+
+void initGamepadUI(void);
+
+#endif
\ No newline at end of file
diff --git a/mz_frontend/include/HackingMinigame.h b/mz_frontend/include/HackingMinigame.h
new file mode 100644
index 000000000..ee54fbc3e
--- /dev/null
+++ b/mz_frontend/include/HackingMinigame.h
@@ -0,0 +1,9 @@
+/*
+ Created by Daniel Monteiro on 2021-11-01.
+*/
+
+#ifndef DERELICT8_HACKINGMINIGAME_H
+#define DERELICT8_HACKINGMINIGAME_H
+
+
+#endif /* DERELICT8_HACKINGMINIGAME_H */
diff --git a/mz_frontend/include/KeyboardUI.h b/mz_frontend/include/KeyboardUI.h
new file mode 100644
index 000000000..ef0538a84
--- /dev/null
+++ b/mz_frontend/include/KeyboardUI.h
@@ -0,0 +1,10 @@
+/*
+ Created by Daniel Monteiro on 12/07/2023.
+*/
+
+#ifndef DERELICT8_KEYBOARDUI_H
+#define DERELICT8_KEYBOARDUI_H
+
+void initKeyboardUI(void);
+
+#endif //DERELICT8_KEYBOARDUI_H
diff --git a/mz_frontend/include/Renderer.h b/mz_frontend/include/Renderer.h
new file mode 100644
index 000000000..3de08007d
--- /dev/null
+++ b/mz_frontend/include/Renderer.h
@@ -0,0 +1,128 @@
+/*
+ Created by Daniel Monteiro on 2021-10-22.
+*/
+
+#ifndef DERELICT8_RENDERER_H
+#define DERELICT8_RENDERER_H
+
+#define XRES 127
+#define YRES 127
+
+#define XRESMINUSONE (XRES - 1)
+#define YRESMINUSONE (YRES - 1)
+
+#define CAMERA_HEIGHT 4
+
+enum DIRECTION {
+ DIRECTION_N,
+ DIRECTION_E,
+ DIRECTION_S,
+ DIRECTION_W
+};
+
+#define IN_RANGE(V0, V1, V) ((V0) <= (V) && (V) <= (V1))
+
+#define RLE_THRESHOLD 32
+#define MAP_SIZE_X 32
+#define MAP_SIZE_Y 32
+#define VISIBILITY_LIMIT_X (MAP_SIZE_X - 1)
+#define VISIBILITY_LIMIT_Y (MAP_SIZE_Y - 1)
+#define FAR_PLANE_Z 32
+#define NEAR_PLANE_Z 6
+#define RENDER_SCALE_X 1
+#define RENDER_SCALE_Z 1
+
+/* Not rendered, but won't block visibility */
+#define NEUTRAL_CELL '.'
+
+#define STIPPLE_DISTANCE 13
+
+#define STIPPLE_COLOUR_THRESHOLD 8
+
+#define getPaletteEntry(c) (( (c) - 0xFF000000 ) % 3)
+
+void clearGraphics(void);
+
+void clearTextScreen(void);
+
+void dropItem(void);
+
+void initMap(void);
+
+#ifdef EMIT_QUIT_OPTION
+void shutdownGraphics(void);
+#endif
+
+enum ECommand getInput(void);
+
+void endFrame(void);
+
+void startFrame(int x, int y, int width, int height);
+
+void graphicsPut(int16_t x, int16_t y, uint16_t colour);
+
+void graphicsPutPointArray(uint8_t *y128Values);
+
+void HUD_initialPaint(void);
+
+void HUD_refresh(void);
+
+void initHW(int, char **pString);
+
+void interactWithItemInRoom(void);
+
+void nextItemInHand(void);
+
+void nextItemInRoom(void);
+
+void pickItem(void);
+
+void renderCameraNorth(void);
+
+void renderCameraEast(void);
+
+void renderCameraSouth(void);
+
+void renderCameraWest(void);
+
+void renderScene(void);
+
+void updateMapItems(void);
+
+void useItemInHand(void);
+
+void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour);
+
+void flush3DBuffer(void);
+
+void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const uint8_t colour);
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t colour,
+ char charToReplaceHifenWith);
+
+void realPut(int x, int y, uint8_t value);
+
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour);
+
+void fillRect(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour, uint8_t stipple);
+
+void drawFloorAt(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dZ);
+
+void drawCubeAt(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dY, int16_t dZ);
+
+void
+drawWedge(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dY, int16_t dZ, uint16_t elementMask, uint16_t type);
+
+void drawSquare(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dY, uint16_t elementMask);
+
+void drawObjectAt(int16_t x0, int16_t z0);
+
+void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour);
+
+void repaintMapItems(void);
+
+void drawPattern(uint16_t _pattern, int16_t x0, int16_t x1, int16_t z);
+
+extern uint8_t needsToRedrawVisibleMeshes;
+
+#endif /* DERELICT8_RENDERER_H */
diff --git a/mz_frontend/include/UI.h b/mz_frontend/include/UI.h
new file mode 100644
index 000000000..e5719c557
--- /dev/null
+++ b/mz_frontend/include/UI.h
@@ -0,0 +1,48 @@
+/*
+ Created by Daniel Monteiro on 14/07/2023.
+*/
+
+#ifndef DERELICT8_MENU_H
+#define DERELICT8_MENU_H
+
+void drawTextAt(uint8_t _x, uint8_t y, const char *text, uint8_t colour);
+
+void showMessage(const char *message);
+
+void drawMap(void);
+
+void performAction(void);
+
+void drawWindow(uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th, const char *title);
+
+void
+drawWindowWithOptions(const uint8_t x,
+ const uint8_t y,
+ const uint8_t dx,
+ const uint8_t dy,
+ const char *title,
+ const char **options,
+ const uint8_t optionsCount,
+ const uint8_t selectedOption);
+
+void drawGraphic(int x, int y, int dx, int dy, const uint8_t *graphic);
+
+void drawTextWindow(const uint8_t x, const uint8_t y, const uint8_t dx, const uint8_t dy, const char *title,
+ const char *content);
+
+enum EGameMenuState handleCursor(const enum EGameMenuState* options, uint8_t optionsCount, const enum ECommand cmd, enum EGameMenuState backState);
+
+void clearScreen(void);
+
+#define XRES_TEXT (XRES_FRAMEBUFFER / 8)
+#define YRES_TEXT (YRES_FRAMEBUFFER / 8)
+
+extern uint8_t waitForKey;
+
+extern int8_t cursorPosition;
+
+extern uint8_t redrawMap;
+
+extern uint8_t needsToRedrawHUD;
+
+#endif //DERELICT8_MENU_H
diff --git a/mz_frontend/include/basepfs.h b/mz_frontend/include/basepfs.h
new file mode 100644
index 000000000..a225fd774
--- /dev/null
+++ b/mz_frontend/include/basepfs.h
@@ -0,0 +1,2482 @@
+#ifndef __basepfs__
+#define __basepfs__
+
+unsigned int size_basepfs = 39577;
+unsigned char basepfs[] __attribute__((aligned(16))) = {
+ 0x4d, 0x00, 0xcb, 0x04, 0x00, 0x00, 0x0b, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x2e, 0x74,
+ 0x78, 0x74, 0x00, 0x06, 0x05, 0x00, 0x00, 0x08, 0x48, 0x65, 0x6c, 0x70, 0x2e, 0x74, 0x78, 0x74,
+ 0x00, 0xb5, 0x06, 0x00, 0x00, 0x0c, 0x67, 0x61, 0x6d, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x2e, 0x74,
+ 0x78, 0x74, 0x00, 0xb7, 0x08, 0x00, 0x00, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x2e, 0x74, 0x78,
+ 0x74, 0x00, 0xc4, 0x08, 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70, 0x30, 0x2e, 0x74, 0x78, 0x74, 0x00,
+ 0xe8, 0x0c, 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70, 0x31, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x0c, 0x11,
+ 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x31, 0x30, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x30, 0x15, 0x00,
+ 0x00, 0x09, 0x6d, 0x61, 0x70, 0x31, 0x31, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x54, 0x19, 0x00, 0x00,
+ 0x09, 0x6d, 0x61, 0x70, 0x31, 0x32, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x78, 0x1d, 0x00, 0x00, 0x09,
+ 0x6d, 0x61, 0x70, 0x31, 0x33, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x9c, 0x21, 0x00, 0x00, 0x09, 0x6d,
+ 0x61, 0x70, 0x31, 0x34, 0x2e, 0x74, 0x78, 0x74, 0x00, 0xc0, 0x25, 0x00, 0x00, 0x09, 0x6d, 0x61,
+ 0x70, 0x31, 0x35, 0x2e, 0x74, 0x78, 0x74, 0x00, 0xe4, 0x29, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70,
+ 0x31, 0x36, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x08, 0x2e, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x31,
+ 0x37, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x2c, 0x32, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x31, 0x38,
+ 0x2e, 0x74, 0x78, 0x74, 0x00, 0x50, 0x36, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x31, 0x39, 0x2e,
+ 0x74, 0x78, 0x74, 0x00, 0x74, 0x3a, 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70, 0x32, 0x2e, 0x74, 0x78,
+ 0x74, 0x00, 0x98, 0x3e, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x32, 0x30, 0x2e, 0x74, 0x78, 0x74,
+ 0x00, 0xbc, 0x42, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x32, 0x31, 0x2e, 0x74, 0x78, 0x74, 0x00,
+ 0xe0, 0x46, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x32, 0x32, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x04,
+ 0x4b, 0x00, 0x00, 0x09, 0x6d, 0x61, 0x70, 0x32, 0x33, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x28, 0x4f,
+ 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70, 0x33, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x4c, 0x53, 0x00, 0x00,
+ 0x08, 0x6d, 0x61, 0x70, 0x34, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x70, 0x57, 0x00, 0x00, 0x08, 0x6d,
+ 0x61, 0x70, 0x35, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x94, 0x5b, 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70,
+ 0x36, 0x2e, 0x74, 0x78, 0x74, 0x00, 0xb8, 0x5f, 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70, 0x37, 0x2e,
+ 0x74, 0x78, 0x74, 0x00, 0xdc, 0x63, 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70, 0x38, 0x2e, 0x74, 0x78,
+ 0x74, 0x00, 0x00, 0x68, 0x00, 0x00, 0x08, 0x6d, 0x61, 0x70, 0x39, 0x2e, 0x74, 0x78, 0x74, 0x00,
+ 0x24, 0x6c, 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x30, 0x2e, 0x62, 0x69, 0x6e, 0x00,
+ 0x72, 0x6d, 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x31, 0x2e, 0x62, 0x69, 0x6e, 0x00,
+ 0xf4, 0x6f, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x31, 0x30, 0x2e, 0x62, 0x69, 0x6e,
+ 0x00, 0xbe, 0x70, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x31, 0x31, 0x2e, 0x62, 0x69,
+ 0x6e, 0x00, 0xb4, 0x71, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x31, 0x32, 0x2e, 0x62,
+ 0x69, 0x6e, 0x00, 0xaa, 0x72, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x31, 0x33, 0x2e,
+ 0x62, 0x69, 0x6e, 0x00, 0x74, 0x73, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x31, 0x34,
+ 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x30, 0x75, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x31,
+ 0x35, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x52, 0x76, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73,
+ 0x31, 0x36, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0xa0, 0x77, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70,
+ 0x73, 0x31, 0x37, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x46, 0x79, 0x00, 0x00, 0x0b, 0x70, 0x72, 0x6f,
+ 0x70, 0x73, 0x31, 0x38, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x68, 0x7a, 0x00, 0x00, 0x0b, 0x70, 0x72,
+ 0x6f, 0x70, 0x73, 0x31, 0x39, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x32, 0x7b, 0x00, 0x00, 0x0a, 0x70,
+ 0x72, 0x6f, 0x70, 0x73, 0x32, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x72, 0x7d, 0x00, 0x00, 0x0b, 0x70,
+ 0x72, 0x6f, 0x70, 0x73, 0x32, 0x30, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x18, 0x7f, 0x00, 0x00, 0x0b,
+ 0x70, 0x72, 0x6f, 0x70, 0x73, 0x32, 0x31, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0xd4, 0x80, 0x00, 0x00,
+ 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x32, 0x32, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x38, 0x82, 0x00,
+ 0x00, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x32, 0x33, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0xb2, 0x83,
+ 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x33, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x58, 0x85,
+ 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x34, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x22, 0x86,
+ 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x35, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x86, 0x87,
+ 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x36, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0xea, 0x88,
+ 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x37, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0xb4, 0x89,
+ 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x38, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0xaa, 0x8a,
+ 0x00, 0x00, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x39, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x0e, 0x8c,
+ 0x00, 0x00, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x4c, 0x8c, 0x00,
+ 0x00, 0x0a, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x30, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xd0, 0x8c, 0x00,
+ 0x00, 0x0a, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x53, 0x8d, 0x00,
+ 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x30, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xe7, 0x8d,
+ 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x31, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x7b,
+ 0x8e, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x32, 0x2e, 0x6c, 0x73, 0x74, 0x00,
+ 0x0f, 0x8f, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x33, 0x2e, 0x6c, 0x73, 0x74,
+ 0x00, 0xbc, 0x8f, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x34, 0x2e, 0x6c, 0x73,
+ 0x74, 0x00, 0x57, 0x90, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x35, 0x2e, 0x6c,
+ 0x73, 0x74, 0x00, 0xeb, 0x90, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x36, 0x2e,
+ 0x6c, 0x73, 0x74, 0x00, 0x7f, 0x91, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31, 0x37,
+ 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x34, 0x92, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x31,
+ 0x38, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xd2, 0x92, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65, 0x73,
+ 0x31, 0x39, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x7f, 0x93, 0x00, 0x00, 0x0a, 0x74, 0x69, 0x6c, 0x65,
+ 0x73, 0x32, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xeb, 0x93, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c, 0x65,
+ 0x73, 0x32, 0x30, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x86, 0x94, 0x00, 0x00, 0x0b, 0x74, 0x69, 0x6c,
+ 0x65, 0x73, 0x32, 0x31, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x25, 0x95, 0x00, 0x00, 0x0b, 0x74, 0x69,
+ 0x6c, 0x65, 0x73, 0x32, 0x32, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xc3, 0x95, 0x00, 0x00, 0x0b, 0x74,
+ 0x69, 0x6c, 0x65, 0x73, 0x32, 0x33, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x57, 0x96, 0x00, 0x00, 0x0a,
+ 0x74, 0x69, 0x6c, 0x65, 0x73, 0x33, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xf2, 0x96, 0x00, 0x00, 0x0a,
+ 0x74, 0x69, 0x6c, 0x65, 0x73, 0x34, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x9d, 0x97, 0x00, 0x00, 0x0a,
+ 0x74, 0x69, 0x6c, 0x65, 0x73, 0x35, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x38, 0x98, 0x00, 0x00, 0x0a,
+ 0x74, 0x69, 0x6c, 0x65, 0x73, 0x36, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xd6, 0x98, 0x00, 0x00, 0x0a,
+ 0x74, 0x69, 0x6c, 0x65, 0x73, 0x37, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x6a, 0x99, 0x00, 0x00, 0x0a,
+ 0x74, 0x69, 0x6c, 0x65, 0x73, 0x38, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0xfe, 0x99, 0x00, 0x00, 0x0a,
+ 0x74, 0x69, 0x6c, 0x65, 0x73, 0x39, 0x2e, 0x6c, 0x73, 0x74, 0x00, 0x37, 0x00, 0x00, 0x00, 0x44,
+ 0x61, 0x6e, 0x69, 0x65, 0x6c, 0x20, 0x28, 0x4d, 0x6f, 0x6e, 0x74, 0x79, 0x4f, 0x6e, 0x54, 0x68,
+ 0x65, 0x52, 0x75, 0x6e, 0x29, 0x20, 0x4d, 0x6f, 0x6e, 0x74, 0x65, 0x69, 0x72, 0x6f, 0x20, 0x2d,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63,
+ 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0xab, 0x01, 0x00, 0x00, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x45, 0x4d, 0x50, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x0a, 0x76,
+ 0x61, 0x6c, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x69, 0x74,
+ 0x20, 0x74, 0x6f, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x20, 0x66, 0x75, 0x65, 0x6c, 0x20, 0x72, 0x6f,
+ 0x64, 0x73, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x20, 0x28, 0x62, 0x65,
+ 0x73, 0x69, 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20,
+ 0x6b, 0x65, 0x79, 0x73, 0x29, 0x3a, 0x0a, 0x0a, 0x5a, 0x3a, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f,
+ 0x75, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x69, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x0a, 0x79, 0x6f, 0x75,
+ 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x68, 0x61, 0x74, 0x27, 0x73, 0x20, 0x79, 0x6f, 0x75,
+ 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x69, 0x74, 0x2e, 0x20,
+ 0x0a, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x68, 0x61,
+ 0x74, 0x27, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64,
+ 0x2e, 0x0a, 0x0a, 0x58, 0x3a, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e,
+ 0x27, 0x74, 0x20, 0x70, 0x69, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x0a, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x79, 0x6f, 0x75, 0x2c, 0x20, 0x64, 0x6f, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x79,
+ 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x2c, 0x20, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x61, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x72, 0x65, 0x27, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2c,
+ 0x20, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x2e, 0x0a,
+ 0x0a, 0x43, 0x3a, 0x20, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x68,
+ 0x61, 0x6e, 0x64, 0x2e, 0x0a, 0x0a, 0x56, 0x3a, 0x20, 0x4e, 0x65, 0x78, 0x74, 0x20, 0x69, 0x74,
+ 0x65, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74,
+ 0x6f, 0x72, 0x79, 0x2e, 0x0a, 0xfe, 0x01, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x2d, 0x20, 0x45, 0x70, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x20, 0x2d, 0x20, 0x20, 0x20,
+ 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x64, 0x65,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x6f, 0x75, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66,
+ 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x77, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68,
+ 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x61,
+ 0x72, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x27, 0x73, 0x20, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x44, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x65, 0x65, 0x6c, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x72, 0x61, 0x67, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x61, 0x74, 0x65, 0x76, 0x65, 0x72,
+ 0x20, 0x73, 0x65, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
+ 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x65, 0x79, 0x2e, 0x0a,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
+ 0x61, 0x72, 0x6b, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x44, 0x4f, 0x53, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x6e, 0x6f, 0x77, 0x2e, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+ 0x62, 0x6c, 0x61, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58,
+ 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58,
+ 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x45, 0x41, 0x42, 0x43, 0x44, 0x45, 0x5a, 0x57, 0x2e, 0x2e, 0x2e, 0x2e, 0x4a,
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x73, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x49,
+ 0x49, 0x44, 0x44, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x3e, 0x49, 0x46, 0x46, 0x49, 0x3c, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x50, 0x5b,
+ 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x64,
+ 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x46, 0x30, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x64, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x46, 0x30, 0x2e, 0x2e, 0x6e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x64, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x46, 0x30, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x73, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x50, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x7c, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x5c, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x7c, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x49, 0x49, 0x49, 0x49, 0x2e, 0x2e, 0x3c, 0x3e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x5c,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x28, 0x45, 0x45, 0x29, 0x2e, 0x7b, 0x2e, 0x2e, 0x7d, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x7c, 0x2e, 0x2e, 0x2e, 0x28, 0x45, 0x45, 0x29, 0x7e, 0x54, 0x2e, 0x2e, 0x54, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x5c, 0x53, 0x5a, 0x2e, 0x28, 0x45, 0x45, 0x29, 0x2e, 0x54, 0x2e, 0x2e, 0x54, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x7c, 0x5a, 0x53, 0x2e, 0x28, 0x45, 0x45, 0x29, 0x2e, 0x54, 0x2e, 0x2e, 0x54,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
+ 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x73, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x32, 0x32, 0x32, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x49, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x20, 0x04, 0x00, 0x00, 0x49, 0x2e, 0x2e, 0x2e, 0x4c, 0x49, 0x58, 0x58, 0x58, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x30, 0x30, 0x30, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x6e, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x52, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2e, 0x2e, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2e, 0x2e, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x54, 0x2e,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x33, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x33, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x33, 0x2e, 0x2e,
+ 0x77, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x5c, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x49, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x49, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34,
+ 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x54, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34,
+ 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34,
+ 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x49, 0x49, 0x44, 0x55,
+ 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46,
+ 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46,
+ 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49,
+ 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x49, 0x46, 0x46, 0x73, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x32, 0x32, 0x32, 0x32, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x49, 0x58, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x58, 0x58,
+ 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x50, 0x46,
+ 0x46, 0x46, 0x46, 0x50, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x5a, 0x4c, 0x53, 0x2e, 0x2e, 0x2e, 0x5c, 0x49,
+ 0x46, 0x46, 0x46, 0x46, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x6e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x2f, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x46, 0x33, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x5c, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x46, 0x33, 0x2e,
+ 0x77, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x31, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x46, 0x33,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x31, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49,
+ 0x5c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e,
+ 0x2e, 0x65, 0x2e, 0x2e, 0x2e, 0x31, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x73, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x31, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x5c, 0x32, 0x32, 0x32,
+ 0x32, 0x32, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x58,
+ 0x58, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x20, 0x04, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x0a, 0x49, 0x46, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x49, 0x46, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x54, 0x54, 0x49, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x4d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x42, 0x49, 0x49, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x4d, 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x54, 0x49, 0x49, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x4d, 0x2e, 0x54, 0x43, 0x2e, 0x2e, 0x54,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x49, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x4d, 0x2e, 0x54, 0x2e, 0x2e, 0x2e,
+ 0x54, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x49, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x4d, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2f, 0x58, 0x56, 0x56, 0x0a, 0x4d, 0x2e, 0x2e, 0x54,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x31, 0x58, 0x56, 0x56, 0x0a, 0x4d, 0x2e, 0x2e,
+ 0x54, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x31, 0x58, 0x56, 0x56, 0x0a, 0x4d, 0x2e,
+ 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x65, 0x46, 0x46, 0x31, 0x58, 0x56, 0x56, 0x0a, 0x4d,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x31, 0x58, 0x56, 0x56, 0x0a,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x5c, 0x58, 0x56, 0x56,
+ 0x0a, 0x49, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x49, 0x49, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0a,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x0a, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x49, 0x42, 0x42, 0x42, 0x42, 0x42, 0x49, 0x0a, 0x49, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x49, 0x30, 0x30, 0x30, 0x30, 0x30, 0x49, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5f, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x6e, 0x2e, 0x2e, 0x49, 0x0a, 0x49, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x53, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x0a, 0x49, 0x2e, 0x2e,
+ 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x44, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x0a, 0x49, 0x2e,
+ 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x0a, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x5c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x50, 0x50, 0x50, 0x50, 0x50, 0x49, 0x0a,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x50, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49,
+ 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x50, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x49, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x54, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x50, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x49, 0x0a, 0x49, 0x2e, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x43, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x50, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x49, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x0a, 0x49, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x2c, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x0a, 0x2c, 0x49,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x0a, 0x2c,
+ 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x0a,
+ 0x2c, 0x49, 0x50, 0x50, 0x50, 0x50, 0x50, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x46, 0x46,
+ 0x46, 0x46, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x50, 0x50, 0x50, 0x50, 0x49, 0x2c,
+ 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x49, 0x50,
+ 0x50, 0x50, 0x50, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x4d, 0x4d, 0x4d,
+ 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x53, 0x53,
+ 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x49, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x49,
+ 0x49, 0x49, 0x53, 0x53, 0x53, 0x49, 0x54, 0x49, 0x49, 0x53, 0x53, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x31, 0x42, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x53, 0x53, 0x23, 0x53, 0x53, 0x53, 0x23, 0x53, 0x53, 0x49, 0x53, 0x53, 0x23, 0x53, 0x53, 0x53,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x65, 0x2e, 0x31, 0x42, 0x0a, 0x2c, 0x2f, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x49, 0x53, 0x53, 0x23, 0x53, 0x53, 0x53, 0x23, 0x53, 0x53, 0x49, 0x53, 0x53, 0x23, 0x53, 0x53,
+ 0x53, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x0a, 0x42, 0x33, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x49, 0x53, 0x53, 0x49, 0x53, 0x53, 0x53, 0x49, 0x53, 0x53, 0x49, 0x53, 0x53, 0x49, 0x53,
+ 0x53, 0x53, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x42, 0x33, 0x46, 0x46, 0x77,
+ 0x46, 0x46, 0x49, 0x53, 0x53, 0x23, 0x53, 0x53, 0x53, 0x23, 0x53, 0x53, 0x49, 0x53, 0x53, 0x23,
+ 0x53, 0x53, 0x53, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x42, 0x33, 0x46, 0x46,
+ 0x73, 0x46, 0x46, 0x49, 0x53, 0x53, 0x23, 0x53, 0x53, 0x53, 0x23, 0x53, 0x53, 0x49, 0x53, 0x53,
+ 0x23, 0x53, 0x53, 0x53, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x5c, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x49, 0x53, 0x53, 0x49, 0x53, 0x53, 0x53, 0x49, 0x4c, 0x45, 0x49, 0x53,
+ 0x53, 0x49, 0x53, 0x53, 0x53, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x53, 0x53, 0x23, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x49,
+ 0x53, 0x53, 0x23, 0x53, 0x53, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x53, 0x53, 0x23, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
+ 0x49, 0x53, 0x53, 0x23, 0x53, 0x53, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00,
+ 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
+ 0x23, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x6e, 0x73, 0x65,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x33, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x33, 0x2e, 0x77, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x33, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x33, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x5c, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x20, 0x04, 0x00, 0x00, 0x49, 0x49, 0x44, 0x55, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x73, 0x46, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x32, 0x32, 0x32, 0x32, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x58, 0x58, 0x58, 0x58,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x2c, 0x49, 0x49, 0x49, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x53, 0x53, 0x53, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2f, 0x5c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x4d, 0x49, 0x2e, 0x2e, 0x2e,
+ 0x49, 0x30, 0x30, 0x30, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x7c, 0x2e, 0x5c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x4d, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x3d, 0x3d, 0x3d, 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x7c, 0x2e, 0x2e, 0x7c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x3c, 0x4c, 0x52, 0x4c, 0x4c,
+ 0x4c, 0x49, 0x49, 0x46, 0x46, 0x46, 0x49, 0x50, 0x7c, 0x2c, 0x2c, 0x2f, 0x2e, 0x2e, 0x2e, 0x7c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x7c, 0x4c, 0x5f, 0x5f,
+ 0x5f, 0x4c, 0x43, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x7c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x7c, 0x4c, 0x5f,
+ 0x5f, 0x5f, 0x4c, 0x4c, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2d, 0x5c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x7c, 0x4c,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x7c,
+ 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x43, 0x2e, 0x2e, 0x2e, 0x6e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x5c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x7c, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7c, 0x2c, 0x2c,
+ 0x0a, 0x7c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x43,
+ 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x2e, 0x2e, 0x5c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x49, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x43, 0x2e, 0x2e, 0x31,
+ 0x58, 0x2c, 0x0a, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x43, 0x65, 0x2e,
+ 0x31, 0x58, 0x2c, 0x0a, 0x58, 0x32, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x43, 0x2e,
+ 0x2e, 0x31, 0x58, 0x2c, 0x0a, 0x58, 0x32, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x43,
+ 0x2e, 0x2e, 0x2f, 0x2c, 0x2c, 0x0a, 0x58, 0x32, 0x2e, 0x2e, 0x73, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c,
+ 0x43, 0x43, 0x43, 0x7c, 0x2c, 0x2c, 0x0a, 0x2d, 0x5c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x43, 0x43, 0x43, 0x43, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c, 0x7c, 0x2e, 0x2e, 0x2e, 0x43, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c, 0x7c, 0x2e, 0x2e, 0x2e, 0x43,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c, 0x7c, 0x2e, 0x2e, 0x2e,
+ 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c, 0x7c, 0x2e, 0x2e,
+ 0x2e, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c, 0x7c, 0x2e,
+ 0x2e, 0x2e, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c, 0x7c,
+ 0x2e, 0x2e, 0x2e, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x5c, 0x2e, 0x2e, 0x2e, 0x43, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x43, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x7c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x5c, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2d, 0x2d, 0x2d, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49,
+ 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x58, 0x58, 0x58, 0x58, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x50, 0x46, 0x46, 0x46, 0x46, 0x50,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x49, 0x2e, 0x2e, 0x5a, 0x4c, 0x53, 0x2e, 0x2e, 0x2e, 0x5c, 0x49, 0x46, 0x46, 0x46, 0x46,
+ 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x6e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x46, 0x33, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x49,
+ 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x46, 0x33, 0x2e, 0x77, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x31,
+ 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x46, 0x33, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x31, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x5c, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x65, 0x2e, 0x2e,
+ 0x2e, 0x31, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x73, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x31, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2f, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00,
+ 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c,
+ 0x0a, 0x2c, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49,
+ 0x2c, 0x0a, 0x2c, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x50, 0x50,
+ 0x50, 0x50, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x5c, 0x49, 0x50, 0x50, 0x50, 0x50, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x4c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x4c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x49, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x49, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d,
+ 0x4d, 0x4d, 0x4d, 0x4d, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x31, 0x42, 0x0a, 0x2c, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
+ 0x53, 0x53, 0x53, 0x53, 0x53, 0x49, 0x5c, 0x2e, 0x65, 0x2e, 0x31, 0x42, 0x0a, 0x2c, 0x2f, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x49, 0x58, 0x58, 0x58, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
+ 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x0a, 0x42, 0x33,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x58, 0x58, 0x58, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
+ 0x7d, 0x53, 0x53, 0x53, 0x7d, 0x53, 0x53, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x42,
+ 0x33, 0x46, 0x46, 0x77, 0x46, 0x46, 0x46, 0x49, 0x58, 0x58, 0x58, 0x53, 0x53, 0x53, 0x53, 0x53,
+ 0x53, 0x53, 0x7d, 0x53, 0x53, 0x53, 0x7d, 0x53, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x42, 0x33, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x53, 0x53, 0x53, 0x49, 0x23, 0x23, 0x23,
+ 0x49, 0x53, 0x53, 0x53, 0x49, 0x53, 0x53, 0x53, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x5c, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x53, 0x54, 0x53, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x53, 0x54, 0x53, 0x49, 0x53, 0x54, 0x53, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x53, 0x52, 0x53, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x53, 0x52, 0x53, 0x49, 0x53, 0x52, 0x53, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x53, 0x53, 0x53, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x53, 0x53, 0x53, 0x49, 0x53, 0x53, 0x53, 0x49, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x20, 0x04, 0x00, 0x00, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x6e, 0x73, 0x65, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2f, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x5c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x0a, 0x58, 0x33, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x0a, 0x58, 0x33, 0x2e,
+ 0x77, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x5d, 0x5b, 0x49, 0x0a, 0x58, 0x33,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x5b, 0x5d, 0x49, 0x0a, 0x58,
+ 0x33, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x0a,
+ 0x49, 0x5c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x4c, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x0a, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x5b, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x5b, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x5b, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x5b, 0x2e, 0x2e, 0x7d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x5b, 0x2e, 0x2e, 0x2e, 0x4c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x5d, 0x2e, 0x2e, 0x2e, 0x7b, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x5c, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x31, 0x46, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x31, 0x46, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x65, 0x2e, 0x31, 0x46, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5d, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x31, 0x46, 0x46, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x6e, 0x73, 0x77, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x50, 0x46, 0x46, 0x46, 0x46, 0x50, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x49, 0x2e, 0x2e, 0x5a, 0x4c, 0x53, 0x2e, 0x2e, 0x2e, 0x5c, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49,
+ 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x6e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x33, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x49, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x33, 0x2e, 0x77, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x31, 0x46,
+ 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x58, 0x46, 0x33, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x31,
+ 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x5c, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x2e, 0x2e, 0x2e, 0x65, 0x2e, 0x2e, 0x2e,
+ 0x31, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x49, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x73, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x31, 0x46, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2f, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00,
+ 0x49, 0x49, 0x44, 0x55, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46, 0x73, 0x46, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x32, 0x32, 0x32, 0x32, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x58, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x20, 0x04, 0x00, 0x00, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x30, 0x30, 0x30, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x4c, 0x6e, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x2f, 0x4c, 0x4c, 0x4c, 0x5c, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x33, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x31, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x23, 0x33, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x31, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x33, 0x46, 0x77, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x65, 0x46, 0x31, 0x23, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x33, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x31, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x5c, 0x4c,
+ 0x4c, 0x4c, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49,
+ 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x49, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x49, 0x4c, 0x73, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x49, 0x32, 0x32, 0x32, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x49, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x34, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x49, 0x49, 0x49, 0x2f, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5c, 0x49, 0x49, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x49, 0x49, 0x49, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x49, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x49, 0x49, 0x49, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x7d, 0x7b, 0x2e, 0x28, 0x29, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x49, 0x49, 0x49, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x49,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x49, 0x49, 0x49,
+ 0x5c, 0x2e, 0x2e, 0x77, 0x6e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x49,
+ 0x49, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x5c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x33, 0x33, 0x33, 0x33, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x58, 0x58, 0x58, 0x58, 0x49, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
+ 0x23, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c, 0x49,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x73, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49, 0x32, 0x32, 0x32, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x58, 0x58, 0x58,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x20, 0x04, 0x00, 0x00,
+ 0x49, 0x2e, 0x2e, 0x2e, 0x4c, 0x49, 0x58, 0x58, 0x58, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x30, 0x30, 0x30, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2e,
+ 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x49,
+ 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x6e, 0x5f, 0x5f, 0x5f, 0x5f, 0x4c,
+ 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x4c, 0x49, 0x52, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
+ 0x5f, 0x5f, 0x5f, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x2e, 0x2e, 0x2e, 0x2e,
+ 0x2e, 0x2e, 0x2e, 0x46, 0x46, 0x46, 0x46, 0x46, 0x49, 0x2e, 0x2e, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x54, 0x2e, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x20, 0x04, 0x00, 0x00, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x30, 0x30, 0x30, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x4c, 0x6e, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x2f, 0x4c, 0x4c, 0x4c, 0x5c, 0x49, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x33, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x31, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x23, 0x33, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x31, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x33, 0x46, 0x77, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x65, 0x46, 0x31, 0x23, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x58, 0x33, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
+ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x31, 0x58, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49, 0x49, 0x49, 0x49, 0x5c, 0x4c,
+ 0x4c, 0x4c, 0x2f, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x49,
+ 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x49, 0x4c, 0x4c, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x49, 0x4c, 0x73, 0x4c, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x49, 0x32, 0x32, 0x32, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x49, 0x58, 0x58, 0x58, 0x49, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x0a,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x0a, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
+ 0x2c, 0x2c, 0x2c, 0x0a, 0x4a, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06,
+ 0x03, 0x01, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x57, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x01, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x41, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x01, 0xff, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x05, 0x06, 0x03, 0x01, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x01, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x01,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x05, 0x06, 0x03, 0x01, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x46, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0xff, 0x01, 0x03, 0x03, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06,
+ 0xff, 0x01, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0xff, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0xff, 0x01, 0x03, 0x03,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x05, 0x06, 0xff, 0x01, 0x03, 0x03, 0x02, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0xff, 0x01, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x02, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0x03, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x02, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x44, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x03, 0x04, 0x02, 0x02,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06,
+ 0xff, 0x00, 0x03, 0xff, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x03, 0x02, 0xff, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x03, 0x04,
+ 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0x02, 0x03, 0x07, 0xff, 0xff, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5d, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0x02, 0x03, 0x05, 0xff, 0xff, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x03,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x05, 0x06, 0x03, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x07, 0x02, 0x07, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06,
+ 0x03, 0x02, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x03, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x07, 0x03, 0xff, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x07, 0xff, 0x07, 0x08, 0x03, 0x07, 0x01, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x28, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07, 0xff, 0x07, 0x06, 0x03, 0x07, 0x01, 0x01, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x45, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07, 0xff, 0x03, 0x00,
+ 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x54, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x05, 0xff, 0xff, 0x00, 0xff, 0x07, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x53, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x02, 0xff, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06,
+ 0x03, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x09, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x05, 0x06, 0x03, 0x0a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x03, 0x0b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0x07, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xff, 0xff, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0xff, 0x00, 0x02, 0x04, 0x02, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf2, 0x00,
+ 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x52, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x54, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x08,
+ 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xff, 0xff,
+ 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0x07, 0x00, 0x01,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xff, 0xff, 0x58, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x02, 0x02, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x02, 0x02, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0xff, 0x00,
+ 0xff, 0x09, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2e, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x01, 0x00, 0x01, 0x05, 0x0b,
+ 0x0a, 0x06, 0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x0b, 0x0a, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04,
+ 0x03, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x49, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x03, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xff, 0x00, 0x03, 0xff,
+ 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x08, 0x0a, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x0a, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0x05, 0x01, 0x04, 0x04, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x44, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x06, 0x01, 0x04, 0x04, 0x00, 0x01,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0x02, 0x01, 0x04, 0x04, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x58, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x03, 0x07, 0x03, 0x02, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x00, 0x05, 0x02, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff,
+ 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x06, 0x08, 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x03, 0x02,
+ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x06, 0x08, 0x03, 0x03, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x00, 0x01, 0x06, 0x08, 0x0b, 0x01, 0x03, 0x03,
+ 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x1e, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0x02, 0x05, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0xff, 0x03, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x02, 0x03,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x05, 0x07, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x01, 0x02, 0x00, 0x02, 0x08, 0x00, 0x01,
+ 0x00, 0x00, 0x05, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x54, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x01,
+ 0xff, 0x00, 0xff, 0x08, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x43, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0x02, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
+ 0x99, 0x99, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0x02,
+ 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x03, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x4a, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07,
+ 0x0a, 0x06, 0x02, 0x07, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x53, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0x0a, 0x01, 0x02, 0x07, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0x07,
+ 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x05, 0x07, 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x01, 0xff, 0x00,
+ 0xff, 0x08, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x43, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0x02, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x99, 0x99,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa2, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x04, 0x01, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0x01, 0x01, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x45, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0x04, 0x04, 0x01, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x54, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x04, 0x01,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x07, 0x09, 0xff, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x09, 0xff, 0x00, 0x04, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x09,
+ 0xff, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x07, 0x09, 0xff, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x09, 0xff, 0x00, 0x04, 0xff,
+ 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x07, 0x09, 0x04, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07, 0x09, 0x04, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x09, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01,
+ 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x09, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x09,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x07, 0xff, 0xff, 0x00, 0xff, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x09, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x07, 0x09, 0xff, 0x00, 0x0a, 0xff, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x04, 0x06, 0x02, 0x03, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0x03, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x03, 0x03,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x06, 0x08, 0x03, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x02, 0x01, 0x03, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01,
+ 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x03, 0x05, 0x03, 0x02,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0x05, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xff, 0x00, 0x05, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x0a,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x08, 0x0a, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0x03, 0x01, 0x06, 0x06, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x44, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x04, 0x01, 0x06, 0x06, 0x00, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01,
+ 0x06, 0x06, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x58, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x05, 0x07, 0x03, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x3c, 0x02, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x05, 0x06, 0x02, 0x09, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x02, 0x0a, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06,
+ 0x02, 0x0b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00,
+ 0x00, 0x01, 0x01, 0x00, 0x02, 0x02, 0x07, 0x01, 0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00,
+ 0xcc, 0xcc, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0xff, 0x00, 0x02, 0x02,
+ 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x05, 0x06, 0xff, 0x00, 0x02, 0xff, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x45, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x06, 0xff, 0x00, 0x02, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0xff, 0x00,
+ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x04, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06, 0x02, 0x03, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x06,
+ 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x02, 0x02, 0xff, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0x06, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x06, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x80, 0xff, 0xff, 0x43, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x05, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x52, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x02, 0xff, 0x00, 0xff, 0x06, 0x00, 0x01, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00,
+ 0x02, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x05, 0x06, 0x04, 0x0a, 0x02, 0x04, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xa2, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0x02, 0x00, 0x05, 0x02, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08,
+ 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x03, 0x02, 0xff, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x06, 0x08, 0x03, 0x03, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0x06, 0x08, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x00, 0x02,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0xff,
+ 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x05, 0x07, 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01,
+ 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0xff, 0xff, 0x00, 0xff, 0x08, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x80, 0x01, 0x00, 0x54, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x0c, 0xff, 0x00, 0xff, 0x08,
+ 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x66, 0x66, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x05, 0xff, 0xff, 0x00, 0xff, 0x08, 0x00, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x58, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x08, 0x03,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0x08, 0xff, 0x02, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x0c,
+ 0xff, 0x00, 0xff, 0x08, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x60, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0x03, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x03, 0x03, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x06, 0x08, 0x0b, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x03, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x0b, 0x02,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x06, 0x08, 0x02, 0x01, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0x08, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x03, 0x05, 0x03, 0x02,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x76, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07,
+ 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x03, 0x03, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x05, 0x07, 0x03, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7b, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x03, 0x02, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x07, 0x03, 0x03,
+ 0xff, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0x03, 0x01,
+ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x03, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0xa2, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0x02, 0x00, 0x05, 0x02, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08,
+ 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x03, 0x02, 0xff, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x06, 0x08, 0x03, 0x03, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00,
+ 0x02, 0x04, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x00, 0x01, 0x06, 0x08, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xff, 0x00, 0x02, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0x03, 0x01, 0x06, 0x06, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x04, 0x01, 0x06, 0x06, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x05, 0x01, 0x06, 0x06,
+ 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x08, 0x0a, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x0a, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x07, 0x03, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x60, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x08, 0xff, 0x00, 0x02, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08,
+ 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x02, 0x02, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08,
+ 0xff, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0xff, 0x00, 0x05, 0x04, 0x03, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x03, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0xff, 0x00, 0xff, 0x03, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x04, 0x00, 0x04, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5c, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x06, 0x08, 0x03, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x03, 0x02, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x09,
+ 0xff, 0x01, 0xff, 0x09, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x66, 0x66, 0x00, 0x00, 0x7d, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x06, 0x09, 0xff, 0x01, 0xff, 0x09, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x29, 0x00, 0x00, 0x01, 0x01, 0x01, 0x09, 0x09, 0x05, 0x01, 0x03, 0x09,
+ 0x01, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x28, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x09, 0x0b, 0xff, 0x01, 0x03, 0x09, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0xcc, 0xcc, 0x00, 0x00,
+ 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x03, 0xff, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x49, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0x02,
+ 0x01, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xff, 0xff,
+ 0x32, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01,
+ 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0x07, 0x00, 0x01,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xff, 0xff, 0x58, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04, 0x02, 0x02, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x05, 0x07, 0xff, 0x00, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x52, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0x02,
+ 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x54, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xff, 0xff, 0xff, 0x00, 0xff, 0x08, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x80, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01,
+ 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x07,
+ 0xff, 0x00, 0xff, 0x07, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x07, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x80, 0xff, 0xff, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x02, 0x04,
+ 0x02, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x01, 0x00, 0x00, 0x49, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0x02, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x08, 0xff, 0x00, 0x02, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x02, 0x08, 0xff, 0x00, 0x02, 0xff, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x02, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x08, 0x02, 0x02,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08,
+ 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x77, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x01,
+ 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x05, 0x04, 0x03, 0x02,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x58, 0x00, 0x00, 0x01, 0x01, 0x01, 0xff, 0xff,
+ 0xff, 0x00, 0x02, 0x04, 0x03, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3a, 0x00,
+ 0x00, 0x00, 0x59, 0x6f, 0x75, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72,
+ 0x20, 0x6c, 0x75, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x73,
+ 0x74, 0x2e, 0x20, 0x59, 0x6f, 0x75, 0x27, 0x72, 0x65, 0x20, 0x6f, 0x62, 0x76, 0x69, 0x6f, 0x75,
+ 0x73, 0x6c, 0x79, 0x20, 0x66, 0x75, 0x63, 0x6b, 0x65, 0x64, 0x2e, 0x0a, 0x80, 0x00, 0x00, 0x00,
+ 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72,
+ 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e,
+ 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72,
+ 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x7f, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f,
+ 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e,
+ 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68,
+ 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72,
+ 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x69, 0x6d, 0x67, 0x90, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69,
+ 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67,
+ 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d,
+ 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x90, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72,
+ 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69,
+ 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70,
+ 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68,
+ 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x90, 0x00, 0x00, 0x00, 0x61,
+ 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69,
+ 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0xa9,
+ 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f,
+ 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6c, 0x31, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69,
+ 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x75, 0x70, 0x6e, 0x6f, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x64, 0x6f, 0x77,
+ 0x6e, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65,
+ 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73,
+ 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63,
+ 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x97, 0x00, 0x00, 0x00,
+ 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72,
+ 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e,
+ 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6c, 0x31, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69,
+ 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67,
+ 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d,
+ 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x90, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72,
+ 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69,
+ 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70,
+ 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68,
+ 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x90, 0x00, 0x00, 0x00, 0x61,
+ 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69,
+ 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0xb1,
+ 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x65, 0x6c, 0x6c,
+ 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x73, 0x74, 0x64, 0x6d, 0x61, 0x74, 0x74, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63,
+ 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63,
+ 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69,
+ 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61,
+ 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65,
+ 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76,
+ 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x6f, 0x69, 0x6c, 0x65, 0x74, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x9a, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x6c, 0x61, 0x73, 0x73,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e,
+ 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0xa9, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66,
+ 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6c, 0x33, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x75, 0x70, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6e, 0x6f, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69,
+ 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x68,
+ 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f,
+ 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68,
+ 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x97, 0x00, 0x00, 0x00, 0x61,
+ 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69,
+ 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6c, 0x33, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c,
+ 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62,
+ 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61,
+ 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63,
+ 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x9b, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69,
+ 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c,
+ 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68,
+ 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65,
+ 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x6f, 0x69, 0x6c, 0x65, 0x74,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x9a, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x6c, 0x61, 0x73,
+ 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69,
+ 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69,
+ 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x90, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69,
+ 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67,
+ 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d,
+ 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x97, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72,
+ 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x6c, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e,
+ 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0xa7, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66,
+ 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x75, 0x70, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x6c, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b,
+ 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63,
+ 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61,
+ 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x97, 0x00, 0x00,
+ 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62,
+ 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x70, 0x31, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65,
+ 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e,
+ 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c,
+ 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72,
+ 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x9a, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62,
+ 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73,
+ 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x67, 0x6c, 0x61, 0x73, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c,
+ 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62,
+ 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61,
+ 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63,
+ 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x90, 0x00, 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69,
+ 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69,
+ 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c,
+ 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68,
+ 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d,
+ 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65,
+ 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x90, 0x00, 0x00, 0x00, 0x61, 0x72,
+ 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63,
+ 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x61, 0x73, 0x70, 0x68, 0x61, 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e,
+ 0x69, 0x6d, 0x67, 0x0a, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x97, 0x00,
+ 0x00, 0x00, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x72,
+ 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+ 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x70, 0x32, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63,
+ 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x65, 0x69, 0x6c, 0x69,
+ 0x6e, 0x67, 0x62, 0x61, 0x72, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x61, 0x73, 0x70, 0x68, 0x61,
+ 0x6c, 0x74, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x67,
+ 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x65,
+ 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x69, 0x6d, 0x67, 0x0a, 0x63, 0x68, 0x65, 0x76,
+ 0x72, 0x6f, 0x6e, 0x73, 0x2e, 0x69, 0x6d, 0x67, 0x0a,
+};
+
+#endif
diff --git a/mz_frontend/include/font.h b/mz_frontend/include/font.h
new file mode 100644
index 000000000..1d6c67427
--- /dev/null
+++ b/mz_frontend/include/font.h
@@ -0,0 +1,49 @@
+/*
+ Created by Daniel Monteiro on 11/07/2023.
+*/
+
+#ifndef DERELICT8_FONT_H
+#define DERELICT8_FONT_H
+
+/* Adding const here actually doubles the ROM size! */
+static uint8_t font[] = {
+ /* ASCII table starting on SPACE. */
+ /* Being on line 32 is no accident. */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* space */
+ , 0x10, 0x38, 0x38, 0x10, 0x10, 0x00, 0x10, 0x00, 0x6c, 0x6c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
+ 0x7c, 0x28, 0x28, 0x7c, 0x28, 0x00, 0x20, 0x38, 0x40, 0x30, 0x08, 0x70, 0x10, 0x00, 0x64, 0x64, 0x08, 0x10,
+ 0x20, 0x4c, 0x4c, 0x00, 0x20, 0x50, 0x50, 0x20, 0x54, 0x48, 0x34, 0x00, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x00, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x00,
+ 0x00, 0x28, 0x38, 0x7c, 0x38, 0x28, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00 /* space - 15 */
+ , 0x38, 0x44, 0x4c, 0x54, 0x64, 0x44, 0x38, 0x00 /* 0 */
+ , 0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x38, 0x44, 0x04, 0x18, 0x20, 0x40, 0x7c, 0x00, 0x38, 0x44,
+ 0x04, 0x38, 0x04, 0x44, 0x38, 0x00, 0x08, 0x18, 0x28, 0x48, 0x7c, 0x08, 0x08, 0x00, 0x7c, 0x40, 0x40, 0x78,
+ 0x04, 0x44, 0x38, 0x00, 0x18, 0x20, 0x40, 0x78, 0x44, 0x44, 0x38, 0x00, 0x7c, 0x04, 0x08, 0x10, 0x20, 0x20,
+ 0x20, 0x00, 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00, 0x38, 0x44, 0x44, 0x3c, 0x04, 0x08, 0x30, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x20, 0x08, 0x10,
+ 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04,
+ 0x08, 0x10, 0x20, 0x00, 0x38, 0x44, 0x04, 0x18, 0x10, 0x00, 0x10, 0x00, 0x38, 0x44, 0x5c, 0x54, 0x5c, 0x40,
+ 0x38, 0x00 /* 0 */
+ , 0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x00 /* a */
+ , 0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x78, 0x00, 0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x00, 0x78, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x78, 0x00, 0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x7c, 0x00, 0x7c, 0x40, 0x40, 0x78,
+ 0x40, 0x40, 0x40, 0x00, 0x38, 0x44, 0x40, 0x5c, 0x44, 0x44, 0x3c, 0x00, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44,
+ 0x44, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 0x00,
+ 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x00, 0x44, 0x6c,
+ 0x54, 0x44, 0x44, 0x44, 0x44, 0x00, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 0x44, 0x00, 0x38, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x38, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00, 0x38, 0x44, 0x44, 0x44, 0x54, 0x48,
+ 0x34, 0x00, 0x78, 0x44, 0x44, 0x78, 0x48, 0x44, 0x44, 0x00, 0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x38, 0x00,
+ 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, 0x44, 0x44, 0x54, 0x54, 0x54, 0x54, 0x28, 0x00, 0x44, 0x44, 0x28, 0x10,
+ 0x28, 0x44, 0x44, 0x00, 0x44, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x00, 0x78, 0x08, 0x10, 0x20, 0x40, 0x40,
+ 0x78, 0x00, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
+ 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x30, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x08,
+ 0x30, 0x40, 0x78, 0x00, 0x18, 0x20, 0x20, 0x60, 0x20, 0x20, 0x18, 0x00, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10,
+ 0x10, 0x00, 0x30, 0x08, 0x08, 0x0c, 0x08, 0x08, 0x30, 0x00, 0x28, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x38, 0x6c, 0x44, 0x44, 0x7c, 0x00, 0x00
+};
+
+#endif /* DERELICT8_FONT_H */
diff --git a/mz_frontend/include/map.h b/mz_frontend/include/map.h
new file mode 100755
index 000000000..257426c87
--- /dev/null
+++ b/mz_frontend/include/map.h
@@ -0,0 +1,6 @@
+#ifndef MAP_H
+#define MAP_H
+
+extern int8_t map[32][32];
+
+#endif
diff --git a/mz_frontend/AmigaVersion/AmigaInt.h b/mz_frontend/src/AmigaVersion/AmigaInt.h
similarity index 100%
rename from mz_frontend/AmigaVersion/AmigaInt.h
rename to mz_frontend/src/AmigaVersion/AmigaInt.h
diff --git a/mz_frontend/AmigaVersion/AmigaRenderer.c b/mz_frontend/src/AmigaVersion/AmigaRenderer.c
similarity index 58%
rename from mz_frontend/AmigaVersion/AmigaRenderer.c
rename to mz_frontend/src/AmigaVersion/AmigaRenderer.c
index 22e3226c7..9ba03f481 100644
--- a/mz_frontend/AmigaVersion/AmigaRenderer.c
+++ b/mz_frontend/src/AmigaVersion/AmigaRenderer.c
@@ -1,9 +1,10 @@
+#include
+#include
+#include
#include
#include
#include
-#include
#include
-#include
#include
#include
@@ -14,47 +15,22 @@
#include
#include
+#include "Common.h"
#include "AmigaInt.h"
+
+#include "Enums.h"
#include "Core.h"
#include "Derelict.h"
-#include "Engine3D.h"
+#include "Renderer.h"
+#include "UI.h"
+#include "KeyboardUI.h"
+#include "font.h"
#define REG(xn, parm) parm __asm(#xn)
#define REGARGS __regargs
#define NORMALIZE(x) (((x * 16) / 256))
-extern struct ObjectNode *focusedItem;
-extern struct ObjectNode *roomItem;
-extern int accessGrantedToSafe;
-
-char *menuItems[] = {
- "8) Use/Toggle",
- "5) Use with...",
- "9) Use/pick...",
- "6) Drop",
- "7) Next item",
- "4) Next in room",
-};
-
-void graphicsFlush(void);
-
-void nextItemInHand(void);
-
-void useItemInHand(void);
-
-void nextItemInRoom(void);
-
-void interactWithItemInRoom(void);
-
-void pickOrDrop(void);
-
-void dropItem(void);
-
-void pickItem(void);
-
-void clearGraphics(void);
-
extern void REGARGS
c2p1x1_4_c5_bm(
REG(d0, UWORD chunky_x),
@@ -75,6 +51,17 @@ struct Screen *screen;
uint8_t *framebuffer;
uint8_t bufferInput = '.';
+extern uint8_t firstFrameOnCurrentState;
+extern enum EGameMenuState currentGameMenuState;
+
+#ifdef SUPPORTS_ROOM_TRANSITION_ANIMATION
+extern uint8_t roomTransitionAnimationStep;
+#endif
+
+extern enum EDirection playerDirection;
+extern int8_t cameraX;
+extern int8_t cameraZ;
+
struct NewScreen xnewscreen = {
0, /* LeftEdge*/
0, /* TopEdge */
@@ -115,8 +102,6 @@ struct NewWindow my_new_window = {
CUSTOMSCREEN /* Type */
};
-long frame = 0;
-
/*
* Code lifted (and heavily modified) from the Strife AGA port by Lantus
* https://github.com/lantus/Strife/blob/master/i_video.c
@@ -128,52 +113,6 @@ static UWORD emptypointer[] = {
0x0000, 0x0000 /* reserved, must be NULL */
};
-void init(void) {
-
- framebuffer = (uint8_t *) calloc(1, 128 * 128);
-
- IntuitionBase =
- (struct IntuitionBase *) OpenLibrary("intuition.library", 0);
-
- if (IntuitionBase == NULL) {
- puts("nope 1!");
- exit(0);
- }
-
- if ((screen = OpenScreen(&xnewscreen)) == NULL) {
- }
-
- my_new_window.Screen = screen;
-
- my_window = (struct Window *) OpenWindow(&my_new_window);
-
- if (my_window == NULL) {
- puts("nope 2!");
- CloseLibrary((struct Library *) IntuitionBase);
- exit(0);
- }
-
- SetRGB4(&screen->ViewPort, 0, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0x00));
- SetRGB4(&screen->ViewPort, 1, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0xAA));
- SetRGB4(&screen->ViewPort, 2, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0x00));
- SetRGB4(&screen->ViewPort, 3, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0xAA));
- SetRGB4(&screen->ViewPort, 4, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0x00));
- SetRGB4(&screen->ViewPort, 5, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0xAA));
- SetRGB4(&screen->ViewPort, 6, NORMALIZE(0xAA), NORMALIZE(0x55), NORMALIZE(0x00));
- SetRGB4(&screen->ViewPort, 7, NORMALIZE(0xAA), NORMALIZE(0xAA), NORMALIZE(0xAA));
- SetRGB4(&screen->ViewPort, 8, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0x55));
- SetRGB4(&screen->ViewPort, 9, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0xFF));
- SetRGB4(&screen->ViewPort, 10, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0x55));
- SetRGB4(&screen->ViewPort, 11, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0xFF));
- SetRGB4(&screen->ViewPort, 12, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0x55));
- SetRGB4(&screen->ViewPort, 13, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0xFF));
- SetRGB4(&screen->ViewPort, 14, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0x55));
- SetRGB4(&screen->ViewPort, 15, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0xFF));
-
-
- SetPointer(my_window, emptypointer, 1, 16, 0, 0);
-}
-
/*
* Code lifted (and heavily modified) from the Strife AGA port by Lantus
* https://github.com/lantus/Strife/blob/master/i_video.c
@@ -264,6 +203,15 @@ void handleSystemEvents(void) {
bufferInput = 'q';
break;
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ bufferInput = code;
+ break;
+
case '\n':
case '\r':
case 'i':
@@ -316,18 +264,10 @@ void handleSystemEvents(void) {
}
}
-uint8_t getKey(void) {
- handleSystemEvents();
- uint8_t toReturn = bufferInput;
- bufferInput = '.';
- return toReturn;
-}
-
-void clear(void) {}
void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
- framebuffer[(128 * y) + x] = colour;
+ framebuffer[(256 * y) + x] = colour;
}
void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour) {
@@ -356,11 +296,11 @@ void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour) {
_y1 = 127;
}
- ptr = &framebuffer[(128 * _y0) + (x0)];
+ ptr = &framebuffer[(256 * _y0) + (x0)];
for (int16_t y = _y0; y <= _y1; ++y) {
*ptr = colour;
- ptr += 128;
+ ptr += 256;
}
}
@@ -385,7 +325,7 @@ void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
_x1 = 127;
}
- uint8_t *ptr = &framebuffer[(128 * y) + _x0];
+ uint8_t *ptr = &framebuffer[(256 * y) + _x0];
for (int16_t x = _x0; x <= _x1; ++x) {
*ptr++ = colour;
}
@@ -399,42 +339,334 @@ void shutdownGraphics(void) {
}
void realPut(int x, int y, uint8_t value) {
+ if (x < 0) {
+ x = 0;
+ }
+
+ if (x >= 256) {
+ x = 255;
+ }
+
+ if (y < 0) {
+ y = 0;
+ }
+
+ if (y >= 160) {
+ y = 159;
+ }
+ framebuffer[(256 * y) + x] = value;
}
void clearGraphics(void) {
- memset(framebuffer, 0, 128 * 128);
+ memFill(framebuffer, 0, 256 * 160);
}
void clearScreen(void) {
}
+void graphicsFlush(void) {
+ c2p1x1_4_c5_bm(256, 160, 0, 0, &framebuffer[0], my_window->RPort->BitMap);
+}
+
+char playerPositionSprite[4][8]={
+ {
+ 0b00011000,
+ 0b00111100,
+ 0b01111110,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000
+ },
+ {
+ 0b00100000,
+ 0b01100000,
+ 0b11100000,
+ 0b11100000,
+ 0b01100000,
+ 0b00100000,
+ 0b00000000,
+ 0b00000000
+ },
+ {
+ 0b01111110,
+ 0b00111100,
+ 0b00011000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000
+ },
+ {
+ 0b00000100,
+ 0b00000110,
+ 0b00000111,
+ 0b00000111,
+ 0b00000110,
+ 0b00000100,
+ 0b00000000,
+ 0b00000000
+ },
+};
+
+void put_sprite_8(uint16_t x, uint8_t y, uint8_t *sprite, uint8_t colour) {
-void writeStrWithLimit(int _x, int y, const char *text, int limitX) {
+ for(uint8_t c = 0; c < 8; ++c) {
+ uint8_t line = *sprite;
+ for (uint16_t d = 0; d < 8; ++d) {
+ if (line & 1) {
+ realPut( x + d, y + c, colour);
+ }
+ line = line >> 1;
+ }
+ ++sprite;
+ }
}
-void writeStr(int16_t _x, int16_t y, const char *text, uint16_t fg, uint16_t bg) {
- writeStrWithLimit(_x, y, text, 40);
+uint8_t *graphicsPutAddr(uint8_t x, uint8_t y, uint8_t colour, uint8_t *ptrToByte) {
+
}
-void drawWindow(int tx, int ty, int tw, int th, const char *title) {}
+void graphicsPutPointArray(uint8_t *y128Values) {
-void graphicsFlush(void) {
- c2p1x1_4_c5_bm(128, 128, 0, 0, &framebuffer[0], my_window->RPort->BitMap);
}
-void showMessage(const char *message) {
+
+void initHW(int argc, char **argv) {
+
+ framebuffer = (uint8_t *) allocMem(256 * 160, GENERAL_MEMORY, TRUE);
+
+ IntuitionBase =
+ (struct IntuitionBase *) OpenLibrary("intuition.library", 0);
+
+ if (IntuitionBase == NULL) {
+ puts("nope 1!");
+ exit(0);
+ }
+
+ if ((screen = OpenScreen(&xnewscreen)) == NULL) {
+ }
+
+ my_new_window.Screen = screen;
+
+ my_window = (struct Window *) OpenWindow(&my_new_window);
+
+ if (my_window == NULL) {
+ puts("nope 2!");
+ CloseLibrary((struct Library *) IntuitionBase);
+ exit(0);
+ }
+
+ SetRGB4(&screen->ViewPort, 0, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0x00));
+ SetRGB4(&screen->ViewPort, 1, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0xAA));
+ SetRGB4(&screen->ViewPort, 2, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0x00));
+ SetRGB4(&screen->ViewPort, 3, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0xAA));
+ SetRGB4(&screen->ViewPort, 4, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0x00));
+ SetRGB4(&screen->ViewPort, 5, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0xAA));
+ SetRGB4(&screen->ViewPort, 6, NORMALIZE(0xAA), NORMALIZE(0x55), NORMALIZE(0x00));
+ SetRGB4(&screen->ViewPort, 7, NORMALIZE(0xAA), NORMALIZE(0xAA), NORMALIZE(0xAA));
+ SetRGB4(&screen->ViewPort, 8, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0x55));
+ SetRGB4(&screen->ViewPort, 9, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0xFF));
+ SetRGB4(&screen->ViewPort, 10, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0x55));
+ SetRGB4(&screen->ViewPort, 11, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0xFF));
+ SetRGB4(&screen->ViewPort, 12, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0x55));
+ SetRGB4(&screen->ViewPort, 13, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0xFF));
+ SetRGB4(&screen->ViewPort, 14, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0x55));
+ SetRGB4(&screen->ViewPort, 15, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0xFF));
+
+
+ SetPointer(my_window, emptypointer, 1, 16, 0, 0);
+
+ initKeyboardUI();
+ clearGraphics();
+}
+
+enum ECommand getInput(void) {
+
+
+ switch(bufferInput) {
+ case 'q':
+ return kCommandLeft;
+ case 'w':
+ return kCommandUp;
+ case 's':
+ return kCommandDown;
+ case 'e':
+ return kCommandRight;
+ case 'a':
+ return kCommandStrafeLeft;
+ case 'd':
+ return kCommandStrafeRight;
+ case 'l':
+ return kCommandBack;
+
+ case '1':
+ if (waitForKey) {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ return kCommandFire1;
+ case '2':
+ return kCommandFire2;
+ case '3':
+ return kCommandFire3;
+ case '4':
+ return kCommandFire4;
+ case '5':
+ return kCommandFire5;
+ case '6':
+ return kCommandFire6;
+ case 'k':
+ exit(0);
+ }
+
+ return kCommandNone;
+}
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
+
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
+ for (c = 0; c < len; ++c) {
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
+ continue;
+ }
+
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
+ }
+
+
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
+ } else {
+ currentChar -= ('z' - 'a');
+ }
+ }
+
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
+
+ for (int f = 0; f < 8; ++f) {
+ int e;
+ uint8_t chunk = *fontTop;
+
+ for (e = 0; e < 8; ++e) {
+ if (chunk & 1) {
+ realPut(dstX + (7 - e), dstY + (f), 1);
+ } else {
+ realPut(dstX + (7 - e), dstY + (f), 0);
+ }
+ chunk = chunk >> 1;
+ }
+
+ fontTop++;
+ }
+ dstX += 8;
+ }
+}
+
+
+void startFrame(int x, int y, int width, int height) {
}
-void titleScreen(void) {
+void endFrame(void) {
+
+ if (currentGameMenuState == kPlayGame) {
+ put_sprite_8(
+ (XRES_FRAMEBUFFER / 2) + ((cameraX + 6) * 3) - 1,
+ (cameraZ * 3) + 10,
+ &playerPositionSprite[playerDirection][0],
+ 1
+ );
+ }
+ graphicsFlush();
}
-void HUD_initialPaint(void) {
+
+void clearTextScreen(void) {
+ int c, d;
+ for (c = 16; c < 24; ++c) {
+ for (d = 0; d < 32; ++d) {
+ drawTextAtWithMarginWithFiltering(d, c, 256, " ", 2, ' ');
+ }
+ }
}
-void sleepForMS(uint32_t ms) {
+void enterTextMode(void) {}
+
+void exitTextMode(void) {
+ clearScreen();
}
-void HUD_refresh(void) {
+
+void fillRect(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour, uint8_t stipple) {
+ int x, y;
+ for (y = y0; y < y1; ++y) {
+ for (x = x0; x < x1; ++x) {
+ realPut(x, y, colour);
+ }
+ }
+}
+
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+ int dx = abs(x1 - x0);
+ int sx = x0 < x1 ? 1 : -1;
+ int dy = abs(y1 - y0);
+ int sy = y0 < y1 ? 1 : -1;
+ int err = (dx > dy ? dx : -dy) >> 1;
+ int e2;
+ for (;;) {
+
+ if (x0 == x1 && y0 == y1) break;
+
+ realPut(x0, y0, colour);
+
+ e2 = err;
+ if (e2 > -dx) {
+ err -= dy;
+ x0 += sx;
+ }
+ if (e2 < dy) {
+ err += dx;
+ y0 += sy;
+ }
+ }
}
diff --git a/mz_frontend/AtariVersion/AtariInt.h b/mz_frontend/src/AtariVersion/AtariInt.h
similarity index 100%
rename from mz_frontend/AtariVersion/AtariInt.h
rename to mz_frontend/src/AtariVersion/AtariInt.h
diff --git a/mz_frontend/src/AtariVersion/AtariRenderer.c b/mz_frontend/src/AtariVersion/AtariRenderer.c
new file mode 100644
index 000000000..d912be8d7
--- /dev/null
+++ b/mz_frontend/src/AtariVersion/AtariRenderer.c
@@ -0,0 +1,360 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include "Common.h"
+#include "AtariInt.h"
+#include "Enums.h"
+#include "Core.h"
+#include "Derelict.h"
+#include "Renderer.h"
+#include "UI.h"
+#include "KeyboardUI.h"
+#include "font.h"
+
+uint16_t *physBase;
+uint16_t *logBase;
+
+extern struct ObjectNode *focusedItem;
+extern struct ObjectNode *roomItem;
+extern int accessGrantedToSafe;
+
+uint8_t *framebuffer;
+uint8_t bufferInput = '.';
+extern uint8_t firstFrameOnCurrentState;
+
+#define NORMALIZE(x) (((x * 8) / 256))
+
+void framebuffer_set_palette_entry(int index, int red, int green, int blue) {
+ *(uint16_t *) (0xffff8240 + (index * 2)) = blue | (green << 4) | (red << 8);
+}
+
+void initHW(int argc, char** argv) {
+ framebuffer = (uint8_t *) allocMem(256 * 160, GENERAL_MEMORY, TRUE);
+
+ physBase = Physbase();
+ logBase = Logbase();
+ memFill(logBase, 0, 32000);
+ memFill(physBase, 0, 32000);
+ Setscreen(-1, -1, 0);
+
+ framebuffer_set_palette_entry(0, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0x00));
+ framebuffer_set_palette_entry(1, NORMALIZE(0x00), NORMALIZE(0x00), NORMALIZE(0xAA));
+ framebuffer_set_palette_entry(2, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0x00));
+ framebuffer_set_palette_entry(3, NORMALIZE(0x00), NORMALIZE(0xAA), NORMALIZE(0xAA));
+ framebuffer_set_palette_entry(4, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0x00));
+ framebuffer_set_palette_entry(5, NORMALIZE(0xAA), NORMALIZE(0x00), NORMALIZE(0xAA));
+ framebuffer_set_palette_entry(6, NORMALIZE(0xAA), NORMALIZE(0x55), NORMALIZE(0x00));
+ framebuffer_set_palette_entry(7, NORMALIZE(0xAA), NORMALIZE(0xAA), NORMALIZE(0xAA));
+ framebuffer_set_palette_entry(8, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0x55));
+ framebuffer_set_palette_entry(9, NORMALIZE(0x55), NORMALIZE(0x55), NORMALIZE(0xFF));
+ framebuffer_set_palette_entry(10, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0x55));
+ framebuffer_set_palette_entry(11, NORMALIZE(0x55), NORMALIZE(0xFF), NORMALIZE(0xFF));
+ framebuffer_set_palette_entry(12, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0x55));
+ framebuffer_set_palette_entry(13, NORMALIZE(0xFF), NORMALIZE(0x55), NORMALIZE(0xFF));
+ framebuffer_set_palette_entry(14, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0x55));
+ framebuffer_set_palette_entry(15, NORMALIZE(0xFF), NORMALIZE(0xFF), NORMALIZE(0xFF));
+}
+
+void handleSystemEvents(void) {
+ bufferInput = Cnecin();
+}
+
+void endFrame(void) {
+
+ uint8_t *index = &framebuffer[0];
+ uint16_t lineOffset = 0;
+ uint16_t *words = (uint16_t *) logBase;
+
+ for (uint16_t y = 160; y; y--) {
+ memFill(logBase + lineOffset, 0, 80);
+ for (uint16_t x = 0; x < 256; ++x) {
+
+ uint8_t value = *index++;
+ uint16_t offset = lineOffset + ((x >> 4) << 2);
+ uint16_t bitPattern = (1 << (15 - (x & 15)));
+ uint16_t *ptr = &words[offset];
+
+ if (value & 1) {
+ *ptr |= bitPattern;
+ }
+
+ ptr++;
+
+ if (value & 2) {
+ *ptr |= bitPattern;
+ }
+
+ ptr++;
+
+ if (value & 4) {
+ *ptr |= bitPattern;
+ }
+
+ ptr++;
+
+ if (value & 8) {
+ *ptr |= bitPattern;
+ }
+ }
+ lineOffset += 80;
+ }
+
+ uint16_t *tmp;
+ tmp = physBase;
+ physBase = logBase;
+ logBase = tmp;
+ Setscreen(logBase, physBase, -1);
+}
+
+enum ECommand getInput(void) {
+
+ switch(bufferInput) {
+ case 'q':
+ return kCommandLeft;
+ case 'w':
+ return kCommandUp;
+ case 's':
+ return kCommandDown;
+ case 'e':
+ return kCommandRight;
+ case 'a':
+ return kCommandStrafeLeft;
+ case 'd':
+ return kCommandStrafeRight;
+ case 'l':
+ return kCommandBack;
+
+ case '1':
+ if (waitForKey) {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ return kCommandFire1;
+ case '2':
+ return kCommandFire2;
+ case '3':
+ return kCommandFire3;
+ case '4':
+ return kCommandFire4;
+ case '5':
+ return kCommandFire5;
+ case '6':
+ return kCommandFire6;
+ case 'k':
+ exit(0);
+ }
+
+ return kCommandNone;
+}
+
+void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
+ framebuffer[(256 * y) + x] = colour;
+}
+
+void realPut(int x, int y, uint8_t colour) {
+ framebuffer[(256 * y) + x] = colour;
+}
+
+void clearTextScreen(void) {
+ int c, d;
+ for (c = 16; c < 24; ++c) {
+ for (d = 0; d < 32; ++d) {
+ drawTextAtWithMarginWithFiltering(d, c, 256, " ", 2, ' ');
+ }
+ }
+}
+
+void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t pixel) {
+ uint8_t *ptr;
+ int16_t _y0 = y0;
+ int16_t _y1 = y1;
+
+ if (x0 < 0 || x0 >= 128) {
+ return;
+ }
+
+ if (y0 > y1) {
+ _y0 = y1;
+ _y1 = y0;
+ }
+
+ if (_y0 >= 128 || _y1 < 0) {
+ return;
+ }
+
+ if (_y0 < 0) {
+ _y0 = 0;
+ }
+
+ if (_y1 >= 128) {
+ _y1 = 127;
+ }
+
+ ptr = &framebuffer[(256 * _y0) + (x0)];
+
+ for (int16_t y = _y0; y <= _y1; ++y) {
+ *ptr = pixel;
+ ptr += 256;
+ }
+}
+
+void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
+ if (y < 0 || y >= 128) {
+ return;
+ }
+
+ int16_t _x0 = x0;
+ int16_t _x1 = x1;
+
+ if (x0 > x1) {
+ _x0 = x1;
+ _x1 = x0;
+ }
+
+ if (_x0 < 0) {
+ _x0 = 0;
+ }
+
+ if (_x1 >= 128) {
+ _x1 = 127;
+ }
+
+ uint8_t *ptr = &framebuffer[(256 * y) + _x0];
+ for (int16_t x = _x0; x <= _x1; ++x) {
+ *ptr++ = colour;
+ }
+}
+
+void clearScreen(void) {
+ memFill(framebuffer, 0, 256 * 160);
+}
+
+void clearGraphics(void) {
+ memFill(framebuffer, 0, 256 * 160);
+}
+
+void startFrame(int x, int y, int width, int height) {
+
+}
+
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+ int dx = abs(x1 - x0);
+ int sx = x0 < x1 ? 1 : -1;
+ int dy = abs(y1 - y0);
+ int sy = y0 < y1 ? 1 : -1;
+ int err = (dx > dy ? dx : -dy) >> 1;
+ int e2;
+ for (;;) {
+
+ if (x0 == x1 && y0 == y1) break;
+
+ realPut(x0, y0, colour);
+
+ e2 = err;
+ if (e2 > -dx) {
+ err -= dy;
+ x0 += sx;
+ }
+ if (e2 < dy) {
+ err += dx;
+ y0 += sy;
+ }
+ }
+}
+
+void fillRect(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour, uint8_t stipple) {
+ int x, y;
+ for (y = y0; y < y1; ++y) {
+ for (x = x0; x < x1; ++x) {
+ realPut(x, y, colour);
+ }
+ }
+}
+
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
+
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
+ for (c = 0; c < len; ++c) {
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
+ continue;
+ }
+
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
+ }
+
+
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
+ } else {
+ currentChar -= ('z' - 'a');
+ }
+ }
+
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
+
+ for (int f = 0; f < 8; ++f) {
+ int e;
+ uint8_t chunk = *fontTop;
+
+ for (e = 0; e < 8; ++e) {
+ if (chunk & 1) {
+ realPut(dstX + (7 - e), dstY + (f), 1);
+ } else {
+ realPut(dstX + (7 - e), dstY + (f), 0);
+ }
+ chunk = chunk >> 1;
+ }
+
+ fontTop++;
+ }
+ dstX += 8;
+ }
+}
diff --git a/mz_frontend/src/Crawler.c b/mz_frontend/src/Crawler.c
new file mode 100644
index 000000000..b96400479
--- /dev/null
+++ b/mz_frontend/src/Crawler.c
@@ -0,0 +1,270 @@
+/*
+ Created by monty on 01-10-2023.
+*/
+#include
+#include
+
+#include "Common.h"
+#include "Enums.h"
+#include "UI.h"
+#include "Renderer.h"
+#include "Core.h"
+#include "Derelict.h"
+#include "map.h"
+#include "Engine.h"
+#include "map.h"
+#include "MapWithCharKey.h"
+#include "FixP.h"
+#include "CTile3DProperties.h"
+
+
+int8_t map[32][32];
+
+extern int8_t stencilHigh[XRES];
+extern struct ObjectNode *focusedItem;
+extern struct ObjectNode *roomItem;
+extern uint8_t accessGrantedToSafe;
+extern int8_t cameraX;
+extern int8_t cameraZ;
+extern int8_t cameraRotation;
+extern uint8_t enteredFrom;
+extern uint8_t playerLocation;
+extern struct MapWithCharKey tileProperties;
+
+uint8_t needsToRedrawVisibleMeshes;
+
+#ifdef SUPPORTS_ROOM_TRANSITION_ANIMATION
+uint8_t roomTransitionAnimationStep = 0;
+#endif
+
+void HUD_refresh(void) {
+ if (!needsToRedrawHUD) {
+ return;
+ }
+
+ needsToRedrawHUD = 0;
+
+ drawWindow(0,
+ (YRES / 8) + 1,
+ (XRES_FRAMEBUFFER / 8) / 2,
+ 5,
+ "In hand:");
+
+ struct Item *item;
+
+ /* Display "In room" item */
+ if (roomItem != NULL) {
+ item = getItem(roomItem->item);
+ if (item->active) {
+ drawTextAt(1, YRES_TEXT - 6, "*", 2);
+ }
+ drawTextAtWithMarginWithFiltering(2, YRES_TEXT - 6, (XRES_FRAMEBUFFER) / 2, item->name, 2, ' ');
+ } else {
+ drawTextAt(2, YRES_TEXT - 6, "Nothing", 2);
+ }
+
+ /* Display "In hand" item */
+ if (focusedItem != NULL) {
+ item = getItem(focusedItem->item);
+ if (item->active) {
+ drawTextAt(1, YRES_TEXT - 3, "*", 1);
+ }
+ drawTextAtWithMarginWithFiltering(2, YRES_TEXT - 3, (XRES_FRAMEBUFFER) / 2, item->name, 2, ' ');
+ } else {
+ drawTextAt(2, YRES_TEXT - 3, "Nothing", 2);
+ }
+}
+
+enum EGameMenuState Crawler_tickCallback(enum ECommand cmd, void* data) {
+ (void)data;
+ uint8_t prevX;
+ uint8_t prevZ;
+ struct WorldPosition *pos;
+ uint8_t previousLocation = playerLocation;
+ uint8_t newCell = 0;
+
+#ifdef SUPPORTS_ROOM_TRANSITION_ANIMATION
+ if (roomTransitionAnimationStep) {
+ needsToRedrawVisibleMeshes = 1;
+ return kResumeCurrentState;
+ }
+#endif
+
+ prevX = cameraX;
+ prevZ = cameraZ;
+
+ switch (cmd) {
+ case kCommandFire5:
+ nextItemInHand();
+ break;
+
+ case kCommandFire6:
+ nextItemInRoom();
+ break;
+
+ case kCommandFire1:
+ useItemInHand();
+ break;
+
+ case kCommandFire2:
+ interactWithItemInRoom();
+ break;
+
+ case kCommandFire3:
+ pickItem();
+ break;
+
+ case kCommandFire4:
+ dropItem();
+ break;
+ default:
+ goto handle_directions;
+ }
+ updateMapItems();
+ needsToRedrawVisibleMeshes = 1;
+
+ if (!waitForKey) {
+ needsToRedrawHUD = 1;
+ }
+
+ return kResumeCurrentState;
+handle_directions:
+ switch (cmd) {
+ case kCommandLeft:
+ turnLeft();
+ break;
+
+ case kCommandRight:
+ turnRight();
+ break;
+
+ case kCommandStrafeLeft:
+ walkBy(3);
+ break;
+ case kCommandStrafeRight:
+ walkBy(1);
+ break;
+ case kCommandDown:
+ walkBy(2);
+ break;
+ case kCommandUp:
+ walkBy(0);
+ break;
+ case kCommandNone:
+ return kResumeCurrentState;
+ }
+ needsToRedrawVisibleMeshes = 1;
+ cameraRotation = getPlayerDirection();
+ pos = getPlayerPosition();
+
+ cameraX = pos->x;
+ cameraZ = pos->y;
+
+ switch (cameraRotation) {
+ case 0:
+ newCell = map[cameraZ - 2][cameraX];
+ break;
+ case 1:
+ newCell = map[cameraZ][cameraX + 2];
+ break;
+ case 2:
+ newCell = map[cameraZ + 2][cameraX];
+ break;
+ case 3:
+ newCell = map[cameraZ][cameraX - 2];
+ break;
+ }
+
+ newCell = newCell & 127;
+
+ struct CTile3DProperties *prop =
+ (struct CTile3DProperties *) getFromMap(&tileProperties, newCell);
+
+
+ if (prop->mBlockMovement) {
+ pos->x = cameraX = prevX;
+ pos->y = cameraZ = prevZ;
+ setPlayerPosition(pos);
+ }
+
+ /* unlike MX, we are signaling from the origin into the new room. MX allows for the movement and then searches where
+ * did the player came from - hence the "opposite direction" there */
+
+ if (newCell > ('0' - 1) && newCell < ('3' + 1)) {
+ enteredFrom = newCell - '0';
+ moveBy(enteredFrom);
+ }
+
+ if (playerLocation != previousLocation) {
+ initMap();
+
+ if (newCell == NEUTRAL_CELL) {
+ newCell = '0';
+#ifdef SUPPORTS_ROOM_TRANSITION_ANIMATION
+ } else {
+ roomTransitionAnimationStep = 30;
+#endif
+ }
+ setPlayerDirection(cameraRotation = (newCell - '0'));
+ } else {
+ enteredFrom = 0xFF;
+ }
+ return kResumeCurrentState;
+}
+
+void Crawler_repaintCallback(void) {
+
+ if (firstFrameOnCurrentState) {
+ clearScreen();
+ redrawMap = needsToRedrawHUD = 1;
+ HUD_initialPaint();
+ }
+
+ HUD_refresh();
+ drawMap();
+
+ if (!needsToRedrawVisibleMeshes) {
+ return;
+ }
+#ifdef SUPPORTS_ROOM_TRANSITION_ANIMATION
+ if (roomTransitionAnimationStep) {
+ roomTransitionAnimationStep = 0;
+ for (uint16_t y = 32; y >= 2; --y) {
+ clearGraphics();
+
+ vLine(y, y, 95 + (32 - y), 1);
+ vLine(95 + (32 - y), y, 95 + (32 - y), 1);
+
+ for (uint16_t x = y; x < (95 + (32 - y)); ++x) {
+ graphicsPut(x, y, 7);
+ graphicsPut(x, 95 + (32 - y), 7);
+
+ //door opening
+ vLine(x, y, 95 - 3 * (32 - y), 7);
+ }
+ }
+ } else
+#endif
+ {
+ renderScene();
+ }
+}
+
+void Crawler_initStateCallback(enum EGameMenuState tag) {
+ (void)tag;
+
+ enteredFrom = 0;
+ cameraRotation = 0;
+ initStation();
+ focusedItem = getPlayerItems();
+ setErrorHandlerCallback(showMessage);
+ setLoggerDelegate(showMessage);
+ initMap();
+ needsToRedrawVisibleMeshes = 1;
+}
+
+void Crawler_unloadStateCallback(enum EGameMenuState newState) {
+ (void)newState;
+ needsToRedrawVisibleMeshes = 0;
+}
+
diff --git a/mz_frontend/Engine3D/Engine3D.c b/mz_frontend/src/Engine3D/Engine3D.c
similarity index 99%
rename from mz_frontend/Engine3D/Engine3D.c
rename to mz_frontend/src/Engine3D/Engine3D.c
index 522cd051e..b813d4767 100644
--- a/mz_frontend/Engine3D/Engine3D.c
+++ b/mz_frontend/src/Engine3D/Engine3D.c
@@ -14,12 +14,10 @@
#endif
#ifndef SMD
-
#include
#include
#include
#include
-
#else
#include
int puts( const char* str );
@@ -1067,7 +1065,7 @@ void pickItem(void) {
struct Item *itemToPick = getItem(roomItem->item);
if (itemToPick != NULL) {
- if (!strcmp(itemToPick->name, "digital-safe")) {
+ if (!strcmp(itemToPick->name, "computer-terminal")) {
#ifdef SUPPORTS_HACKING_MINIGAME
runHackingMinigame();
@@ -1470,7 +1468,7 @@ int main(int argc, char **argv) {
initFileReader("base.pfs");
init();
-
+
Crawler_initStateCallback(0);
diff --git a/mz_frontend/Engine3D/Engine3D.h b/mz_frontend/src/Engine3D/Engine3D.h
similarity index 100%
rename from mz_frontend/Engine3D/Engine3D.h
rename to mz_frontend/src/Engine3D/Engine3D.h
diff --git a/mz_frontend/Engine3D/HackingMinigame.c b/mz_frontend/src/Engine3D/HackingMinigame.c
similarity index 98%
rename from mz_frontend/Engine3D/HackingMinigame.c
rename to mz_frontend/src/Engine3D/HackingMinigame.c
index 1b853d7b4..b77db9bdc 100644
--- a/mz_frontend/Engine3D/HackingMinigame.c
+++ b/mz_frontend/src/Engine3D/HackingMinigame.c
@@ -33,7 +33,7 @@ uint8_t pinTop[3];
void HackingScreen_initStateCallback(void) {
cursorPosition = 1;
- memset(&pins[0][0], 0xFF, sizeof(pins));
+ memFill(&pins[0][0], 0xFF, sizeof(pins));
pins[0][0] = 4;
pins[0][1] = 2;
diff --git a/mz_frontend/Engine3D/HackingMinigame.h b/mz_frontend/src/Engine3D/HackingMinigame.h
similarity index 100%
rename from mz_frontend/Engine3D/HackingMinigame.h
rename to mz_frontend/src/Engine3D/HackingMinigame.h
diff --git a/mz_frontend/Engine3D/basepfs.h b/mz_frontend/src/Engine3D/basepfs.h
similarity index 100%
rename from mz_frontend/Engine3D/basepfs.h
rename to mz_frontend/src/Engine3D/basepfs.h
diff --git a/mz_frontend/Engine3D/map.h b/mz_frontend/src/Engine3D/map.h
similarity index 100%
rename from mz_frontend/Engine3D/map.h
rename to mz_frontend/src/Engine3D/map.h
diff --git a/mz_frontend/src/Events.c b/mz_frontend/src/Events.c
new file mode 100755
index 000000000..5f72d7306
--- /dev/null
+++ b/mz_frontend/src/Events.c
@@ -0,0 +1,210 @@
+#ifdef WIN32
+#include "Win32Int.h"
+#else
+#ifndef SMD
+#include
+#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
+#endif
+
+#include
+#include
+
+#include "Common.h"
+#include "FixP.h"
+#include "Core.h"
+#include "Enums.h"
+#include "Renderer.h"
+#include "Engine.h"
+#include "PackedFileReader.h"
+#include "CTile3DProperties.h"
+
+extern int8_t map[32][32];
+
+extern int8_t stencilHigh[XRES];
+
+struct ObjectNode *focusedItem = NULL;
+struct ObjectNode *roomItem = NULL;
+
+extern uint8_t accessGrantedToSafe;
+
+extern struct MapWithCharKey tileProperties;
+extern struct MapWithCharKey customMeshes;
+
+
+int8_t cameraX = 33;
+int8_t cameraZ = 22;
+extern int8_t cameraRotation;
+
+uint8_t enteredFrom = 0xFF;
+
+extern uint8_t playerLocation;
+
+void pickItem(void) {
+ struct Room *room = getRoom(getPlayerRoom());
+
+ if (roomItem && roomItem->item) {
+ struct Item *itemToPick = getItem(roomItem->item);
+ if (itemToPick != NULL) {
+
+ if (!strcmp(itemToPick->name, "computer-terminal")) {
+
+#ifdef SUPPORTS_HACKING_MINIGAME
+ enterState(kHackingGame);
+#else
+ accessGrantedToSafe = TRUE;
+#endif
+ return;
+ }
+
+ if (itemToPick->pickable) {
+
+ uint8_t pattern = map[itemToPick->position.y][itemToPick->position.x];
+ map[itemToPick->position.y][itemToPick->position.x] = pattern & 127;
+
+ pickObject(itemToPick);
+ focusedItem = roomItem;
+ roomItem = room->itemsPresent->next;
+
+ } else {
+ useObjectNamed(itemToPick->name);
+ }
+ }
+ }
+}
+
+void dropItem(void) {
+
+ struct Item *item = NULL;
+
+ if (focusedItem != NULL) {
+ item = getItem(focusedItem->item);
+ }
+
+ if (item != NULL) {
+ uint8_t pattern;
+ struct WorldPosition *pos = getPlayerPosition();
+
+ dropObjectToRoom(getPlayerRoom(), item);
+
+ focusedItem = getPlayerItems();
+
+ roomItem = &objectNodes[item->index];
+
+ switch (cameraRotation) {
+ case 0:
+ item->position.x = pos->x;
+ item->position.y = pos->y - 3;
+ break;
+
+ case 1:
+ item->position.x = pos->x + 3;
+ item->position.y = pos->y;
+ break;
+
+ case 2:
+ item->position.x = pos->x;
+ item->position.y = pos->y + 3;
+ break;
+
+ case 3:
+ item->position.x = pos->x - 3;
+ item->position.y = pos->y;
+ break;
+ }
+ pattern = map[item->position.y][item->position.x];
+ map[item->position.y][item->position.x] = pattern | 128;
+ }
+}
+
+void nextItemInRoom(void) {
+ struct Room *room = getRoom(getPlayerRoom());
+
+ if (roomItem == NULL) {
+ return;
+ }
+
+ roomItem = roomItem->next;
+
+ if (!roomItem) {
+ roomItem = room->itemsPresent;
+ }
+
+ if (roomItem->item == 0) {
+ roomItem = roomItem->next;
+ }
+}
+
+void interactWithItemInRoom(void) {
+ if (roomItem && focusedItem) {
+ struct Item *itemToPick = getItem(roomItem->item);
+ struct Item *item = getItem(focusedItem->item);
+ if (itemToPick && item && item->useWithCallback) {
+ item->useWithCallback(item, itemToPick);
+ }
+ }
+}
+
+void useItemInHand(void) {
+ useObjectNamed(getItem(focusedItem->item)->name);
+}
+
+void nextItemInHand(void) {
+ focusedItem = focusedItem->next;
+
+ if (!focusedItem) {
+ focusedItem = getPlayerItems();
+ }
+}
+
+void initMap(void) {
+ int x, y;
+ const uint8_t *head;
+ char buffer[32];
+ uint16_t current;
+
+ roomItem = getRoom(getPlayerRoom())->itemsPresent->next;
+
+ sprintf(&buffer[0], "map%d.txt", getPlayerRoom());
+
+ struct StaticBuffer datafile = loadBinaryFileFromPath(&buffer[0]);
+ head = datafile.data;
+
+ for (y = 0; y < 32; ++y) {
+ for (x = 0; x < 32; ++x) {
+
+ current = *head;
+
+
+ if ((current == 's' && enteredFrom == 0) ||
+ (current == 'w' && enteredFrom == 1) ||
+ (current == 'n' && enteredFrom == 2) ||
+ (current == 'e' && enteredFrom == 3)) {
+
+ struct WorldPosition newPos;
+ cameraX = x;
+ cameraZ = y;
+ newPos.x = x;
+ newPos.y = y;
+ setPlayerPosition(&newPos);
+ enteredFrom = 0xFF;
+ current = '.';
+ }
+
+ map[y][x] = current;
+ ++head;
+ }
+ ++head; // line break
+ }
+
+ disposeDiskBuffer(datafile);
+
+ sprintf(&buffer[0], "props%d.bin", getPlayerRoom());
+ loadPropertyList(&buffer[0], &tileProperties, &customMeshes);
+
+ //updateMapItems();
+ HUD_initialPaint();
+}
diff --git a/mz_frontend/src/GameMenu.c b/mz_frontend/src/GameMenu.c
new file mode 100644
index 000000000..d050bf62e
--- /dev/null
+++ b/mz_frontend/src/GameMenu.c
@@ -0,0 +1,22 @@
+/*
+ Created by monty on 01-10-2023.
+*/
+
+#include "Enums.h"
+
+void GameMenu_initStateCallback(enum EGameMenuState tag) {
+ (void)tag;
+}
+
+void GameMenu_repaintCallback(void) {}
+
+enum EGameMenuState GameMenu_tickCallback(enum ECommand cmd, void* data) {
+ (void)cmd;
+ (void)data;
+ /* This never gets executed, so not a problem for not having the return value */
+}
+
+void GameMenu_unloadStateCallback(enum EGameMenuState newState) {
+ (void)newState;
+}
+
diff --git a/mz_frontend/src/GamepadUI.c b/mz_frontend/src/GamepadUI.c
new file mode 100644
index 000000000..3afc9545c
--- /dev/null
+++ b/mz_frontend/src/GamepadUI.c
@@ -0,0 +1,41 @@
+/*
+ Created by monty on 18-07-2023.
+*/
+#include
+
+#include "Enums.h"
+#include "Renderer.h"
+#include "UI.h"
+#include "GamepadUI.h"
+
+extern uint8_t firstFrameOnCurrentState;
+
+const char *menuItems[] = {
+ "Use/Toggle",
+ "Use with",
+ "Use/pick",
+ "Drop",
+ "Next(item)",
+ "Next(room)",
+};
+
+void initGamepadUI(void) {
+ cursorPosition = 0;
+}
+
+enum ECommand performActionJoypad(void) {
+ return kCommandFire1 + cursorPosition;
+}
+
+void HUD_initialPaint(void) {
+
+ drawWindowWithOptions(
+ 1 + (XRES_FRAMEBUFFER / 2) / 8,
+ (YRES_FRAMEBUFFER / 8) - 3 - /*kMainMenuOptionsCount*/ 6,
+ (XRES_FRAMEBUFFER / 8) - (1 + (XRES_FRAMEBUFFER / 2) / 8) - 1,
+ (YRES_FRAMEBUFFER / 8) - ((YRES_FRAMEBUFFER / 8) - 3 - /*kMainMenuOptionsCount*/ 6 - 1) - 2,
+ "Actions",
+ menuItems,
+ 6,
+ cursorPosition);
+}
diff --git a/mz_frontend/src/HackingMinigame.c b/mz_frontend/src/HackingMinigame.c
new file mode 100644
index 000000000..f9b5a939a
--- /dev/null
+++ b/mz_frontend/src/HackingMinigame.c
@@ -0,0 +1,150 @@
+/*
+ Created by Daniel Monteiro on 2021-11-01.
+*/
+
+#ifdef WIN32
+#include "Win32Int.h"
+#else
+#ifndef SMD
+#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
+#endif
+
+#include
+
+#include "Common.h"
+#include "Enums.h"
+#include "UI.h"
+#include "Derelict.h"
+#include "Renderer.h"
+#include "HackingMinigame.h"
+#include "HackingMinigameRules.h"
+#include "Engine.h"
+
+#ifdef PAGE_FLIP_ANIMATION
+int wasSmoothMovementPreviouslyEnabled;
+#endif
+
+const char *functionNames[5] = {
+ "???",
+ "writeB",
+ "snprintf",
+ "hackLogin",
+ "LoadDBReg"
+};
+
+void HackingScreen_initStateCallback(enum EGameMenuState tag) {
+ (void)tag;
+ cursorPosition = 1;
+ needsToRedrawVisibleMeshes = 0;
+
+ initHackingMinigame();
+}
+
+void HackingScreen_repaintCallback(void) {
+ uint8_t pin;
+ uint8_t holdingDisk;
+
+ if (firstFrameOnCurrentState) {
+ clearScreen();
+ needsToRedrawVisibleMeshes = 0;
+ drawTextAt(1, 1, "Stack trace:", getPaletteEntry(0xFF999999));
+ drawTextAt((12 * 0), 11, " CPU0 ", getPaletteEntry(0xFF999999));
+ drawTextAt((12 * 1), 11, " CPU1 ", getPaletteEntry(0xFF999999));
+ drawTextAt((12 * 2), 11, " CPU2 ", getPaletteEntry(0xFF999999));
+ }
+
+ drawTextAt((12 * cursorPosition), 11, ">", getPaletteEntry(0xFF999999));
+ drawTextAt((12 * cursorPosition) + 5, 11, "<", getPaletteEntry(0xFF999999));
+
+ drawLine(0, 80, XRES_FRAMEBUFFER - 1, 80, 2);
+
+ for (pin = 0; pin < 3; ++pin) {
+ uint8_t disk;
+
+ if (pin != 0) {
+ uint8_t pinX = (10 * (pin) ) * 8;
+ drawLine(pinX, 40, pinX, 80, 2);
+ }
+
+ for (disk = 0; disk < 5; ++disk) {
+
+ uint8_t diskIndex = getPositionForPin(pin, disk);
+
+ const char *funcName = (disk >= getDisksForPin(pin)) ? NULL
+ : functionNames[diskIndex];
+
+ if (funcName) {
+ drawTextAt(
+ 10 * (pin) + (pin == 0 ? 0 : 1), 4 + (4 - disk),
+ funcName, getPaletteEntry(0xFF999999));
+ }
+ }
+ }
+
+ drawTextAt(1, 2, "Pointer:", getPaletteEntry(0xFF999999));
+
+ holdingDisk = getHoldingDisk();
+
+ if (holdingDisk != 0xFF) {
+ drawTextAt(19, 2, functionNames[holdingDisk], getPaletteEntry(0xFF999999));
+ } else {
+ drawTextAt(19, 2, "NULL", getPaletteEntry(0xFF999999));
+ }
+}
+
+void HackingScreen_unloadStateCallback(enum EGameMenuState newState) {
+ (void)newState;
+#ifdef PAGE_FLIP_ANIMATION
+ enableSmoothMovement = wasSmoothMovementPreviouslyEnabled;
+#endif
+}
+
+enum EGameMenuState HackingScreen_tickCallback(enum ECommand cmd, void* data) {
+ (void)data;
+ uint8_t holdingDisk = getHoldingDisk();
+
+ if (isHackingMinigameCompleted()) {
+ grantAccessToSafe();
+ }
+
+ switch (cmd) {
+ case kCommandLeft:
+ if (cursorPosition > 0) {
+ cursorPosition--;
+ firstFrameOnCurrentState = 1;
+ }
+#ifdef PAGE_FLIP_ANIMATION
+ turnTarget = turnStep;
+#endif
+ break;
+ case kCommandRight:
+ if (cursorPosition < 2) {
+ cursorPosition++;
+ firstFrameOnCurrentState = 1;
+ }
+#ifdef PAGE_FLIP_ANIMATION
+ turnTarget = turnStep;
+#endif
+ break;
+ case kCommandBack:
+ case kCommandDown:
+ return kBackToGame;
+ case kCommandFire1:
+ if (holdingDisk == 0xFF) {
+ pickDisk(cursorPosition);
+ } else {
+ dropDisk(cursorPosition);
+ }
+ firstFrameOnCurrentState = 1;
+ break;
+
+ default:
+ break;
+ }
+
+ return kResumeCurrentState;
+}
diff --git a/mz_frontend/src/KeyboardUI.c b/mz_frontend/src/KeyboardUI.c
new file mode 100644
index 000000000..45164383a
--- /dev/null
+++ b/mz_frontend/src/KeyboardUI.c
@@ -0,0 +1,46 @@
+/*
+ Created by Daniel Monteiro on 11/07/2023.
+*/
+#include
+#include
+
+#include "Common.h"
+#include "Enums.h"
+#include "Core.h"
+#include "Derelict.h"
+#include "Renderer.h"
+#include "UI.h"
+#include "KeyboardUI.h"
+
+extern struct ObjectNode *focusedItem;
+
+extern struct ObjectNode *roomItem;
+
+extern uint8_t firstFrameOnCurrentState;
+
+const char *menuItems[] = {
+ "1) Use",
+ "2) Use with",
+ "3) Pick",
+ "4) Drop",
+ "5) Next(hand)",
+ "6) Next(room)",
+};
+
+void initKeyboardUI(void) {
+}
+
+
+void HUD_initialPaint(void) {
+
+ drawWindowWithOptions(
+ 1 + (XRES_FRAMEBUFFER / 2) / 8,
+ (YRES_FRAMEBUFFER / 8) - 3 - 5,
+ (XRES_FRAMEBUFFER / 8) - (1 + (XRES_FRAMEBUFFER / 2) / 8) - 1,
+ (YRES_FRAMEBUFFER / 8) - ((YRES_FRAMEBUFFER / 8) - 3 - /*kMainMenuOptionsCount*/ 6 - 1) - 2,
+ "Actions",
+ menuItems,
+ 6,
+ 0xFF);
+}
+
diff --git a/mz_frontend/src/MSDOSVersion/msdos.c b/mz_frontend/src/MSDOSVersion/msdos.c
new file mode 100644
index 000000000..118d5121f
--- /dev/null
+++ b/mz_frontend/src/MSDOSVersion/msdos.c
@@ -0,0 +1,360 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "Enums.h"
+#include "Core.h"
+#include "Derelict.h"
+#include "Renderer.h"
+#include "UI.h"
+#include "KeyboardUI.h"
+#include "font.h"
+
+extern struct ObjectNode *focusedItem;
+extern struct ObjectNode *roomItem;
+extern int accessGrantedToSafe;
+
+uint8_t *framebuffer;
+uint8_t bufferInput = '.';
+extern uint8_t firstFrameOnCurrentState;
+
+unsigned char imageBuffer[XRES_FRAMEBUFFER * YRES_FRAMEBUFFER];
+
+void shutdownGraphics(void) {
+}
+
+void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour) {
+
+ if (x0 < 0) {
+ return;
+ }
+
+ int16_t y;
+ int16_t _y0 = y0;
+ int16_t _y1 = y1;
+
+ if (y0 > y1) {
+ _y0 = y1;
+ _y1 = y0;
+ }
+
+ if (_y0 < 0) {
+ _y0 = 0;
+ }
+
+ if (_y1 >= 128) {
+ _y1 = 127;
+ }
+
+ for (y = _y0; y <= _y1; ++y) {
+ imageBuffer[(256 * y) + x0] = colour;
+ }
+}
+
+
+void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
+ if (y < 0) {
+ return;
+ }
+
+ int16_t _x0 = x0;
+ int16_t _x1 = x1;
+
+ if (x0 > x1) {
+ _x0 = x1;
+ _x1 = x0;
+ }
+
+ if (_x0 < 0) {
+ _x0 = 0;
+ }
+
+ if (_x1 >= 128) {
+ _x1 = 127;
+ }
+
+ for (int x = _x0; x <= _x1; ++x) {
+ imageBuffer[(256 * y) + x] = colour;
+ }
+}
+
+void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
+ if (x < 0) {
+ x = 0;
+ }
+
+ if (x >= 128) {
+ x = 127;
+ }
+
+ if (y < 0) {
+ y = 0;
+ }
+
+ if (y >= 128) {
+ y = 127;
+ }
+
+ imageBuffer[(256 * y) + x] = colour;
+}
+
+void realPut(int x, int y, uint8_t value) {
+ if (x < 0) {
+ x = 0;
+ }
+
+ if (x >= 256) {
+ x = 255;
+ }
+
+ if (y < 0) {
+ y = 0;
+ }
+
+ if (y >= 160) {
+ y = 159;
+ }
+
+ imageBuffer[(256 * y) + x] = value;
+
+}
+
+void clearGraphics(void) {
+ memFill(imageBuffer, 0, 256 * 160);
+}
+
+void initHW(int argc, char** argv) {
+ clearScreen();
+}
+
+void clearScreen(void) {
+ asm volatile("movb $0x0, %%ah\n\t"
+ "movb $0x0D, %%al\n\t"
+ "int $0x10\n\t"
+ :
+ :
+ : "ax"
+ );
+}
+
+void handleSystemEvents(void) {
+ unsigned char toReturn = 255;
+
+
+ asm volatile ("movb $0x00, %%ah\n\t"
+ "movb $0x00, %%al\n\t"
+ "int $0x16 \n\t"
+ "movb %%al, %0\n\t"
+ : "=rm"(toReturn)
+ :
+ : "ax"
+ );
+
+ asm volatile("movb $0x0C, %%ah\n\t"
+ "movb $0x00, %%al\n\t"
+ "int $0x21\n\t"
+ :
+ :
+ : "ax"
+ );
+
+ bufferInput = toReturn;
+}
+
+enum ECommand getInput(void) {
+
+ switch(bufferInput) {
+ case 'q':
+ return kCommandLeft;
+ case 'w':
+ return kCommandUp;
+ case 's':
+ return kCommandDown;
+ case 'e':
+ return kCommandRight;
+ case 'a':
+ return kCommandStrafeLeft;
+ case 'd':
+ return kCommandStrafeRight;
+ case 'l':
+ return kCommandBack;
+
+ case '1':
+ if (waitForKey) {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ return kCommandFire1;
+ case '2':
+ return kCommandFire2;
+ case '3':
+ return kCommandFire3;
+ case '4':
+ return kCommandFire4;
+ case '5':
+ return kCommandFire5;
+ case '6':
+ return kCommandFire6;
+ case 'k':
+ exit(0);
+ }
+
+ return kCommandNone;
+}
+
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+ int dx = abs(x1 - x0);
+ int sx = x0 < x1 ? 1 : -1;
+ int dy = abs(y1 - y0);
+ int sy = y0 < y1 ? 1 : -1;
+ int err = (dx > dy ? dx : -dy) >> 1;
+ int e2;
+ for (;;) {
+
+ if (x0 == x1 && y0 == y1) break;
+
+ realPut(x0, y0, colour);
+
+ e2 = err;
+ if (e2 > -dx) {
+ err -= dy;
+ x0 += sx;
+ }
+ if (e2 < dy) {
+ err += dx;
+ y0 += sy;
+ }
+ }
+}
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
+
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
+ for (c = 0; c < len; ++c) {
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
+ continue;
+ }
+
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
+ }
+
+
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
+ } else {
+ currentChar -= ('z' - 'a');
+ }
+ }
+
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
+
+ for (int f = 0; f < 8; ++f) {
+ int e;
+ uint8_t chunk = *fontTop;
+
+ for (e = 0; e < 8; ++e) {
+ if (chunk & 1) {
+ realPut(dstX + (7 - e), dstY + (f), 1);
+ } else {
+ realPut(dstX + (7 - e), dstY + (f), 0);
+ }
+ chunk = chunk >> 1;
+ }
+
+ fontTop++;
+ }
+ dstX += 8;
+ }
+}
+
+void clearTextScreen(void) {
+ int c, d;
+ for (c = 16; c < 24; ++c) {
+ for (d = 0; d < 32; ++d) {
+ drawTextAtWithMarginWithFiltering(d, c, 256, " ", 2, ' ');
+ }
+ }
+}
+
+void startFrame(int x, int y, int width, int height) {
+
+}
+
+void fillRect(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour, uint8_t stipple) {
+ int x, y;
+ for (y = y0; y < y1; ++y) {
+ for (x = x0; x < x1; ++x) {
+ realPut(x, y, colour);
+ }
+ }
+}
+
+
+void endFrame(void) {
+
+ uint8_t *bufferPtr = &imageBuffer[0];
+
+ for (int y = 0; y < 160; ++y) {
+ for (int x = 0; x < 256; ++x) {
+ uint16_t index = *bufferPtr;
+
+ int pixel = index;
+ int px = x;
+ int py = y;
+
+ asm volatile ("movb $0x0C, %%ah\n\t"
+ "movb %0, %%al\n\t"
+ "movb $0x0, %%bh\n\t"
+ "movw %1, %%cx\n\t"
+ "movw %2, %%dx\n\t"
+ "int $0x10\n\t"
+ :
+ :"rm" (pixel), "rm" (px), "rm" (py)
+ : "ax", "bx", "cx", "dx"
+ );
+ bufferPtr++;
+ }
+ }
+}
diff --git a/mz_frontend/src/Main.c b/mz_frontend/src/Main.c
new file mode 100644
index 000000000..47ea47823
--- /dev/null
+++ b/mz_frontend/src/Main.c
@@ -0,0 +1,65 @@
+#ifdef WIN32
+#include "Win32Int.h"
+#else
+#ifndef SMD
+#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
+#endif
+
+#ifdef ATARIST
+#include
+#include
+#include
+#include
+#include
+#include
+#endif
+
+#include "Common.h"
+#include "Enums.h"
+#include "Renderer.h"
+#include "Engine.h"
+#include "Core.h"
+#include "UI.h"
+#include "PackedFileReader.h"
+
+int8_t cameraRotation = 0;
+
+#ifdef ATARIST
+int doMain(void);
+
+int main(int argc, char **argv) {
+ Supexec(&doMain);
+ return 0;
+}
+
+int doMain(void) {
+ int argc = 0;
+ char **argv = NULL;
+#else
+int main(int argc, char **argv) {
+#endif
+ initFileReader("base.pfs");
+ initHW(argc, argv);
+
+
+ enterState(kMainMenu);
+
+#ifdef EMIT_QUIT_OPTION
+ while (isRunning) {
+#else
+ while (1) {
+#endif
+ startFrame(0, 0, XRES_FRAMEBUFFER, YRES_FRAMEBUFFER);
+ menuTick(10);
+ endFrame();
+ }
+
+#ifdef EMIT_QUIT_OPTION
+ unloadStateCallback(1);
+ return 0;
+#endif
+}
diff --git a/mz_frontend/MegaDriveVersion/megadrive.c b/mz_frontend/src/MegaDriveVersion/megadrive.c
similarity index 58%
rename from mz_frontend/MegaDriveVersion/megadrive.c
rename to mz_frontend/src/MegaDriveVersion/megadrive.c
index be9c3d89e..91d92aeab 100644
--- a/mz_frontend/MegaDriveVersion/megadrive.c
+++ b/mz_frontend/src/MegaDriveVersion/megadrive.c
@@ -3,41 +3,16 @@
#include "Enums.h"
#include "Core.h"
#include "Derelict.h"
-#include "Engine3D.h"
-#include "Engine.h"
-
-void graphicsFlush(void);
-
-void nextItemInHand(void);
-
-void useItemInHand(void);
-
-void nextItemInRoom(void);
-
-void interactWithItemInRoom(void);
-
-void pickOrDrop(void);
-
-void dropItem(void);
-
-void pickItem(void);
-
-void clearGraphics(void);
-
-void renderScene(void);
-
-void enterTextMode(void);
-
-void exitTextMode(void);
-
-
-extern int8_t map[32][32];
+#include "Renderer.h"
+#include "UI.h"
+#include "GamepadUI.h"
+#include "font.h"
extern struct ObjectNode *focusedItem;
-
extern struct ObjectNode *roomItem;
+extern int accessGrantedToSafe;
-extern uint8_t accessGrantedToSafe;
+extern uint8_t firstFrameOnCurrentState;
#define COOLDOWN_MAX 0x2EF
@@ -45,24 +20,7 @@ int16_t buffered = '.';
uint16_t cooldown;
uint16_t movementCooldown = 0;
-
-void refreshJustGraphics(void) {
- renderScene();
- graphicsFlush();
-}
-
-void backToGraphics(void) {
- clearScreen();
- HUD_initialPaint();
- refreshJustGraphics();
-}
-
-void performAction(void) {
-
-}
-
-
-static void handleInput(void) {
+void handleSystemEvents(void) {
u16 value;
buffered = '.';
@@ -74,7 +32,7 @@ static void handleInput(void) {
movementCooldown--;
}
- // need to call it manually as we don't use SYS_doVBlankProcess() here
+ /* need to call it manually as we don't use SYS_doVBlankProcess() here */
JOY_update();
value = JOY_readJoypad(JOY_1);
@@ -107,81 +65,49 @@ static void handleInput(void) {
buffered = 'k';
}
+ if ((value & BUTTON_A) && !cooldown) {
+ cooldown = COOLDOWN_MAX;
+ buffered = '1';
+ }
+
if ((value & BUTTON_B) && !cooldown) {
- performAction();
- HUD_refresh();
cooldown = COOLDOWN_MAX;
- buffered = 'p';
+ buffered = '2';
}
if ((value & BUTTON_C) && !cooldown) {
- cursorPosition = (cursorPosition + 1);
-
- if (cursorPosition >= 6) {
- cursorPosition = 0;
- }
-
- HUD_refresh();
cooldown = COOLDOWN_MAX;
- buffered = 'p';
+ buffered = '3';
}
}
}
-void shutdownGraphics(void) {
+void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
+ BMP_setPixelFast(x, y, colour);
}
+void realPut(int x, int y, uint8_t colour) {
+ BMP_setPixelFast(x, y, colour);
+}
-void writeStrWithLimit(int16_t _x, int16_t y, char *str, int16_t limitX) {
-
- char textBuffer[2];
- char *charPtr = &textBuffer[0];
-
- int16_t len = strlen(str);
- int16_t x = _x;
- textBuffer[1] = 0;
-
- for (int16_t c = 0; c < len && y < 19; ++c) {
-
- char cha = *str;
-
- if (x == limitX) {
- ++y;
- x = _x;
- } else if (cha == '\n') {
- ++y;
- x = _x;
- ++str;
- continue;
+void fillRect(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour, uint8_t stipple) {
+ int x, y;
+ for (y = y0; y < y1; ++y) {
+ for (x = x0; x < x1; ++x) {
+ realPut(x, y, colour);
}
-
- *charPtr = ' ';
- VDP_drawText(charPtr, x, y);
- *charPtr = cha;
- VDP_drawText(charPtr, x, y);
- ++x;
- ++str;
}
}
-void writeStr(int16_t _x, int16_t y, const char *text, uint16_t fg, uint16_t bg) {
- writeStrWithLimit(_x, y, text, 31);
-}
-
-void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
- BMP_setPixelFast(x, 16 + y, colour);
-}
-
void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour) {
-
if (y0 > y1) {
int16_t tmp = y0;
y0 = y1;
y1 = tmp;
}
- colour += (colour << 4); //double the pixel
+ colour += (colour << 4); /* double the pixel */
for (int16_t y = y0; y < y1; ++y) {
BMP_setPixelFast(x0, 16 + y, colour);
}
@@ -209,7 +135,7 @@ void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
_x1 = 127;
}
- colour += (colour << 4); //double the pixel
+ colour += (colour << 4); /* double the pixel */
for (int16_t x = _x0; x <= _x1; ++x) {
BMP_setPixelFast(x, 16 + y, colour);
@@ -220,40 +146,15 @@ static void joyEvent(u16 joy, u16 changed, u16 state) {
}
-void showMessage(const char *message) {
- enterTextMode();
- int16_t keepGoing = 1;
-
- for (int16_t i = 0; i < 19; ++i) {
- VDP_clearText(16, i, 16);
- }
-
- writeStrWithLimit(1, 5, message, 31);
- writeStrWithLimit(6, 17, "Press Start to continue", 31);
-
- while (keepGoing) {
- if (getKey() == 'k') {
- keepGoing = 0;
- }
- }
-
- clearScreen();
-
- for (int16_t i = 0; i < 19; ++i) {
- VDP_clearText(16, i, 16);
- }
-
- exitTextMode();
- backToGraphics();
+void clearGraphics(void) {
+ BMP_clear();
}
void clearScreen(void) {
-}
-
-void clearGraphics(void) {
BMP_clear();
}
+
void clearTextScreen(void) {
for (int16_t c = 0; c < 23; ++c) {
VDP_clearText(0, c, 256 / 8);
@@ -262,40 +163,7 @@ void clearTextScreen(void) {
movementCooldown = COOLDOWN_MAX;
}
-void enterTextMode(void) {
- clearGraphics();
- BMP_flip(1);
- clearTextScreen();
-}
-
-void exitTextMode(void) {
- clearTextScreen();
-}
-
-void drawWindow(int tx, int ty, int tw, int th, const char *title) {}
-
-uint8_t getKey(void) {
- handleInput();
- return buffered;
-}
-
-void sleepForMS(uint32_t ms) {
- //we cant afford to sleep
-}
-
-void titleScreen(void) {
-
-}
-
-void puts(char *unused) {
-
-}
-
-void assert(int unused) {
-
-}
-
-void init(void) {
+void initHW(int argc, char** argv) {
JOY_setEventHandler(joyEvent);
VDP_setScreenWidth256();
VDP_setHInterrupt(0);
@@ -322,15 +190,119 @@ void init(void) {
PAL_setColor(13, RGB24_TO_VDPCOLOR(0xFF55FF));
PAL_setColor(14, RGB24_TO_VDPCOLOR(0xFFFF55));
PAL_setColor(15, RGB24_TO_VDPCOLOR(0xFFFFFF));
+
+ firstFrameOnCurrentState = 1;
+
+ initGamepadUI();
}
-void graphicsFlush(void) {
+void endFrame(void) {
BMP_flip(1);
}
-void HUD_initialPaint(void) {
+enum ECommand getInput(void) {
+
+ switch(buffered) {
+ case 'q':
+ return kCommandLeft;
+ case 'w':
+ return kCommandUp;
+ case 's':
+ return kCommandDown;
+ case 'e':
+ return kCommandRight;
+ case 'a':
+ return kCommandStrafeLeft;
+ case 'd':
+ return kCommandStrafeRight;
+ case 'l':
+ return kCommandBack;
+
+ case '1':
+ if (waitForKey) {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ return kCommandFire1;
+ case '2':
+ return kCommandFire2;
+ case '3':
+ return kCommandFire3;
+ case '4':
+ return kCommandFire4;
+ case '5':
+ return kCommandFire5;
+ case '6':
+ return kCommandFire6;
+ }
+
+ return kCommandNone;
+}
+
+
+void startFrame(int x, int y, int width, int height) {
+
+}
+
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+ int dx = abs(x1 - x0);
+ int sx = x0 < x1 ? 1 : -1;
+ int dy = abs(y1 - y0);
+ int sy = y0 < y1 ? 1 : -1;
+ int err = (dx > dy ? dx : -dy) >> 1;
+ int e2;
+ for (;;) {
+
+ if (x0 == x1 && y0 == y1) break;
+
+ realPut(x0, y0, colour);
+
+ e2 = err;
+ if (e2 > -dx) {
+ err -= dy;
+ x0 += sx;
+ }
+ if (e2 < dy) {
+ err += dx;
+ y0 += sy;
+ }
+ }
}
-void HUD_refresh(void) {
+void drawTextAtWithMarginWithFiltering(const int _x, const int _y, int limitX, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ char textBuffer[2];
+ char *charPtr = &textBuffer[0];
+
+ int16_t len = strlen(text);
+ int16_t x = _x;
+ int16_t y = _y;
+ textBuffer[1] = 0;
+ char* str= text;
+
+ for (int16_t c = 0; c < len && y < 19; ++c) {
+
+ char cha = *str;
+
+ if (x == limitX) {
+ ++y;
+ x = _x;
+ } else if (cha == '\n') {
+ ++y;
+ x = _x;
+ ++str;
+ continue;
+ }
+ *charPtr = ' ';
+ VDP_drawText(charPtr, x, y);
+ *charPtr = cha;
+ VDP_drawText(charPtr, x, y);
+ ++x;
+ ++str;
+ }
}
diff --git a/mz_frontend/src/RendererRasterizer.c b/mz_frontend/src/RendererRasterizer.c
new file mode 100755
index 000000000..62be469d5
--- /dev/null
+++ b/mz_frontend/src/RendererRasterizer.c
@@ -0,0 +1,726 @@
+#ifdef WIN32
+#include "Win32Int.h"
+#else
+#ifndef SMD
+#include
+#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
+#endif
+
+#include "Core.h"
+#include "Derelict.h"
+#include "Renderer.h"
+#include "FixP.h"
+#include "CTile3DProperties.h"
+
+#ifdef MSDOS
+#include "Common.h"
+#endif
+
+extern int16_t cameraHeight;
+
+struct Projection {
+ uint8_t px;
+ uint8_t py;
+ int8_t dx;
+};
+
+const struct Projection projections[32] =
+ {
+ {0, 128, -128}, // 1
+ {0, 127, -64}, // 2
+ {20, 105, -42}, // 3
+ {31, 95, -32}, // 4
+ {37, 88, -25}, // 5
+ {41, 84, -21}, // 6
+ {44, 81, -18}, // 7
+ {47, 79, -16}, // 8
+ {48, 77, -14}, // 9
+ {50, 75, -12}, // 10
+ {51, 74, -11}, // 11
+ {52, 73, -10}, // 12
+ {53, 72, -9}, // 13
+ {53, 72, -9}, // 14
+ {54, 71, -8}, // 15
+ {55, 71, -8}, // 16
+ {55, 70, -7}, // 17
+ {55, 70, -7}, // 18
+ {56, 69, -6}, // 19
+ {56, 69, -6}, // 20
+ {56, 69, -6}, // 21
+ {57, 68, -5}, // 22
+ {57, 68, -5}, // 23
+ {57, 68, -5}, // 24
+ {57, 68, -5}, // 25
+ {58, 67, -4}, // 26
+ {58, 67, -4}, // 27
+ {58, 67, -4}, // 28
+ {58, 67, -4}, // 29
+ {58, 67, -4}, // 30
+ {58, 67, -4}, // 31
+ };
+
+#ifdef USE_OWN_MIN_MAX
+int8_t max(int8_t x1, int8_t x2);
+
+int8_t min(int8_t x1, int8_t x2);
+#endif
+
+void
+drawWedge(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dY, int16_t dZ, uint16_t elementMask, uint16_t type) {
+
+ int16_t z1;
+
+ int16_t z0px;
+ int16_t z1px;
+ int16_t z0py;
+ int16_t z1py;
+ int16_t z0dx;
+ int16_t z1dx;
+
+ int16_t px0z0;
+ int16_t py0z0;
+ int16_t py0z1;
+ int16_t py1z0;
+ int16_t py1z1;
+ int16_t px1z1;
+
+ uint16_t shouldStippleFill = (z0 >= STIPPLE_DISTANCE) ? 6 : (6 + STIPPLE_COLOUR_THRESHOLD);
+ uint16_t shouldStippleBorder = (z0 >= STIPPLE_DISTANCE) ? 0 : (0 + STIPPLE_COLOUR_THRESHOLD);
+
+ if (z0 >= 32) {
+ return;
+ }
+
+ z1 = z0 + dZ;
+
+ if (z0 <= 2) {
+ return;
+ }
+
+ if (z1 <= 2) {
+ return;
+ }
+
+ if (z1 >= 32) {
+ return;
+ }
+
+
+ if (type == kRightNearWall) {
+ z0px = (projections[z0].px);
+ z1px = (projections[z1].px);
+ z0dx = ((projections[z0].dx));
+ z1dx = ((projections[z1].dx));
+
+ px0z0 = z0px - (x0 * z0dx);
+ px1z1 = z1px - ((dX + x0) * z1dx);
+
+ z1py = (projections[z1].py);
+ z0py = (projections[z0].py);
+
+ py0z0 = z0py + ((y0) * z0dx);
+ py0z1 = z1py + ((y0) * z1dx);
+
+ py1z0 = z0py + ((y0 + dY) * z0dx);
+ py1z1 = z1py + ((y0 + dY) * z1dx);
+
+ } else {
+ z0px = (projections[z1].px);
+ z1px = (projections[z0].px);
+ z0dx = ((projections[z1].dx));
+ z1dx = ((projections[z0].dx));
+
+ px0z0 = z0px - ((x0) * z0dx);
+ px1z1 = z1px - ((x0 + dX) * z1dx); //extra operations to avoid overflow
+
+ z1py = (projections[z0].py);
+ z0py = (projections[z1].py);
+
+ py0z0 = z0py + ((y0) * z0dx);
+ py0z1 = z1py + ((y0) * z1dx);
+
+ py1z0 = z0py + ((y0 + dY) * z0dx);
+ py1z1 = z1py + ((y0 + dY) * z1dx);
+ }
+
+
+ int16_t lineX0, lineX1;
+
+ if (py1z0 < 0) {
+ py1z0 = 0;
+ }
+
+ if (py0z0 < 0) {
+ py0z0 = 0;
+ }
+
+ if (py1z0 >= YRES) {
+ py1z0 = YRESMINUSONE;
+ }
+
+ if (py0z0 >= YRES) {
+ py0z0 = YRESMINUSONE;
+ }
+
+
+ if (py1z1 < 0) {
+ py1z1 = 0;
+ }
+
+ if (py0z1 < 0) {
+ py0z1 = 0;
+ }
+
+ if (py1z1 >= YRES) {
+ py1z1 = YRESMINUSONE;
+ }
+
+ if (py0z1 >= YRES) {
+ py0z1 = YRESMINUSONE;
+ }
+
+ /* The upper segment */
+ lineX0 = px0z0;
+ lineX1 = px1z1;
+
+ if (lineX0 != lineX1) {
+ int16_t upperY0 = py1z0;
+ int16_t upperY1 = py1z1;
+ int16_t upperDx = abs(lineX1 - lineX0);
+ int16_t upperDy = -abs(upperY1 - upperY0);
+ int16_t upperSy = upperY0 < upperY1 ? 1 : -1;
+ int16_t upperErr = upperDx + upperDy; /* error value e_xy */
+ int16_t upperErr2;
+ int16_t lowerY0 = py0z0;
+ int16_t lowerY1 = py0z1;
+ int16_t lowerDx = abs(lineX1 - lineX0);
+ int16_t lowerSx = lineX0 < lineX1 ? 1 : -1;
+ int16_t lowerDy = -abs(lowerY1 - lowerY0);
+ int16_t lowerSy = lowerY0 < lowerY1 ? 1 : -1;
+ int16_t lowerErr = lowerDx + lowerDy; /* error value e_xy */
+ int16_t lowerErr2 = 0;
+
+ while (lineX0 != lineX1) {
+ if (IN_RANGE(0, XRESMINUSONE, lineX0)) {
+ vLine(lineX0, upperY0, lowerY0, shouldStippleFill);
+ graphicsPut(lineX0, upperY0, shouldStippleBorder);
+ }
+
+ /* loop */
+ upperErr2 = upperErr * 2;
+
+ if (upperErr2 >= upperDy || lowerErr2 >= lowerDy) {
+ upperErr += upperDy; /* e_xy+e_x > 0 */
+ lowerErr += lowerDy; /* e_xy+e_x > 0 */
+ lineX0 += lowerSx;
+ }
+
+ if (lineX0 >= XRES) {
+ return;
+ }
+
+ if (upperErr2 <= upperDx) {
+ /* e_xy+e_y < 0 */
+ upperErr += upperDx;
+ upperY0 += upperSy;
+ }
+
+ /* loop */
+ lowerErr2 = lowerErr * 2;
+
+ if (lowerErr2 <= lowerDx) {
+ /* e_xy+e_y < 0 */
+ lowerErr += lowerDx;
+ lowerY0 += lowerSy;
+ }
+ }
+ }
+
+
+ if (elementMask & 2) {
+ if (IN_RANGE(0, XRESMINUSONE, px0z0)) {
+ vLine(px0z0, py0z0, py1z0, shouldStippleBorder);
+ }
+ }
+
+ if (elementMask & 1) {
+ if (IN_RANGE(0, XRESMINUSONE, px1z1)) {
+ vLine(px1z1, py0z1, py1z1, shouldStippleBorder);
+ }
+ }
+}
+
+void drawSquare(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dY, uint16_t elementMask) {
+
+ int16_t z0px;
+ int16_t z0py;
+ int16_t z0dx;
+
+ int16_t px0z0;
+ int16_t py0z0;
+ int16_t px1z0;
+ int16_t py1z0;
+
+ int16_t x;
+
+ uint16_t drawContour;
+
+ if (z0 >= 32) {
+ return;
+ }
+
+ z0px = (projections[z0].px);
+ z0dx = ((projections[z0].dx));
+
+ px0z0 = z0px - ((x0) * z0dx);
+ px1z0 = px0z0 - (dX * z0dx);
+
+ z0py = (projections[z0].py);
+
+ py0z0 = z0py + ((y0) * z0dx);
+ py1z0 = py0z0 + (dY * z0dx);
+
+ if (px1z0 < 0 || px0z0 > XRESMINUSONE) {
+ return;
+ }
+
+ uint16_t shouldStippleBorder = (z0 >= STIPPLE_DISTANCE) ? 0 : (0 + STIPPLE_COLOUR_THRESHOLD);
+ uint16_t shouldStippleFill = (z0 >= STIPPLE_DISTANCE) ? 4: (4 + STIPPLE_COLOUR_THRESHOLD);
+
+ drawContour = (dY);
+
+ /* Draw the horizontal outlines of z0 and z1 */
+ /* Ceiling is lower than camera */
+ if (drawContour) {
+ if (elementMask & 2) {
+ if ((elementMask != 255) && IN_RANGE(0, XRESMINUSONE, px0z0)) {
+ vLine(px0z0, py0z0, py1z0, shouldStippleBorder);
+ }
+
+ if ((elementMask != 127) && IN_RANGE(0, XRESMINUSONE, px1z0)) {
+ vLine(px1z0, py0z0, py1z0, shouldStippleBorder);
+ }
+ }
+
+ for (x = px0z0; x < px1z0; ++x) {
+ if ( x < 0 ) {
+ continue;
+ }
+
+ if (x >= XRES ) {
+ return;
+ }
+
+ vLine(x, py0z0, py1z0, shouldStippleFill);
+ }
+ }
+}
+
+void drawObjectAt(int16_t x0, int16_t z0) {
+
+ int16_t z1;
+ uint16_t z0px;
+ uint16_t z0py;
+ uint16_t z1px;
+ uint16_t z1py;
+ int16_t z0dx;
+ int16_t z1dx;
+
+ int16_t px0z0;
+ int16_t py0z0;
+ int16_t px1z0;
+ int16_t px0z1;
+ int16_t py0z1;
+ int16_t px1z1;
+ uint16_t shouldStippleBorder = (z0 >= STIPPLE_DISTANCE) ? 0 : (0 + STIPPLE_COLOUR_THRESHOLD);
+
+ if (z0 >= 32 || z0 <= 4) {
+ return;
+ }
+
+ z1 = z0 + 1;
+
+ if (z1 >= 32) {
+ return;
+ }
+
+
+ z0px = (projections[z0].px);
+ z1px = (projections[z1].px);
+ z0dx = ((projections[z0].dx));
+ z1dx = ((projections[z1].dx));
+
+ px0z0 = z0px - ((x0) * z0dx);
+ px0z1 = z1px - ((x0) * z1dx);
+
+ px1z0 = px0z0 - (1 * z0dx);
+ px1z1 = px0z1 - (1 * z1dx);
+
+ z1py = (projections[z1].py);
+ z0py = (projections[z0].py);
+
+ py0z0 = z0py + ((-cameraHeight) * z0dx);
+ py0z1 = z1py + ((-cameraHeight) * z1dx);
+
+
+ int16_t lineX0, lineX1;
+
+ /* Draw the horizontal outlines of z0 and z1 */
+ for (lineX0 = px0z0; lineX0 <= px1z0; ++lineX0) {
+ if (IN_RANGE(0, XRESMINUSONE, lineX0)) {
+ graphicsPut(lineX0, py0z0, shouldStippleBorder);
+ }
+ }
+
+ for (lineX0 = px0z1; lineX0 <= px1z1; ++lineX0) {
+ if (IN_RANGE(0, XRESMINUSONE, lineX0)) {
+ graphicsPut(lineX0, py0z1, shouldStippleBorder);
+ }
+ }
+
+ /* The left segment */
+ lineX0 = px0z0;
+ lineX1 = px0z1;
+
+ if (lineX0 != lineX1) {
+ int16_t y0 = py0z0;
+ int16_t y1 = py0z1;
+ int16_t dx = abs(lineX1 - lineX0);
+ int16_t sx = lineX0 < lineX1 ? 1 : -1;
+ int16_t dy = -abs(y1 - y0);
+ int16_t sy = y0 < y1 ? 1 : -1;
+ int16_t err = dx + dy; /* error value e_xy */
+ int16_t e2;
+
+ while ((lineX0 != lineX1 || y0 != y1)) {
+
+ if (IN_RANGE(0, XRESMINUSONE, lineX0)) {
+ graphicsPut(lineX0, y0, shouldStippleBorder);
+ }
+
+ /* loop */
+ e2 = err << 2;
+
+ if (e2 >= dy) {
+ err += dy; /* e_xy+e_x > 0 */
+ lineX0 += sx;
+ }
+
+ if (lineX0 >= XRES) {
+ goto right_stroke;
+ }
+
+ if (e2 <= dx) {
+ /* e_xy+e_y < 0 */
+ err += dx;
+ y0 += sy;
+ }
+ }
+ }
+
+ right_stroke:
+
+ lineX0 = px1z0;
+ lineX1 = px1z1;
+
+ if (lineX0 != lineX1) {
+ int16_t y0 = py0z0;
+ int16_t y1 = py0z1;
+ int16_t dx = abs(lineX1 - lineX0);
+ int16_t sx = lineX0 < lineX1 ? 1 : -1;
+ int16_t dy = -abs(y1 - y0);
+ int16_t sy = y0 < y1 ? 1 : -1;
+ int16_t err = dx + dy; /* error value e_xy */
+ int16_t e2;
+
+ while ((lineX0 != lineX1 || y0 != y1)) {
+
+ if (IN_RANGE(0, XRESMINUSONE, lineX0)) {
+ graphicsPut(lineX0, y0, shouldStippleBorder);
+ }
+
+ e2 = err << 2;
+
+ if (e2 >= dy) {
+ err += dy; /* e_xy+e_x > 0 */
+ lineX0 += sx;
+ }
+
+ if (lineX0 >= XRES) {
+ return;
+ }
+
+ if (e2 <= dx) {
+ /* e_xy+e_y < 0 */
+ err += dx;
+ y0 += sy;
+ }
+ }
+ }
+}
+
+
+
+void drawCubeAt(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dY, int16_t dZ) {
+
+ int16_t y1 = y0 + dY;
+ int16_t z1;
+
+ int16_t z0px;
+ int16_t z0py;
+ int16_t z1px;
+ int16_t z1py;
+ int16_t z0dx;
+ int16_t z1dx;
+ int16_t py1z0;
+ int16_t px0z0;
+ int16_t py0z0;
+ int16_t px1z0;
+ int16_t px0z1;
+ int16_t py0z1;
+ int16_t px1z1;
+
+ uint16_t shouldStippleFill = (z0 >= STIPPLE_DISTANCE) ? 7 : (7 + STIPPLE_COLOUR_THRESHOLD);
+ uint16_t shouldStippleBorder = (z0 >= STIPPLE_DISTANCE) ? 0 : (0 + STIPPLE_COLOUR_THRESHOLD);
+
+ uint16_t drawContour;
+
+ if (z0 >= 32 || z0 <= 4) {
+ return;
+ }
+
+ z1 = z0 + dZ;
+
+ if (z1 >= 32) {
+ return;
+ }
+
+ z0px = (projections[z0].px);
+ z1px = (projections[z1].px);
+ z0dx = ((projections[z0].dx));
+ z1dx = ((projections[z1].dx));
+
+ z1py = (projections[z1].py);
+ z0py = (projections[z0].py);
+
+ px0z0 = z0px - ((x0) * z0dx);
+ px0z1 = z1px - ((x0) * z1dx);
+ px1z0 = px0z0 - (dX * z0dx);
+ px1z1 = px0z1 - (dX * z1dx);
+ py0z0 = z0py + ((y0) * z0dx);
+ py0z1 = z1py + ((y0) * z1dx);
+ py1z0 = z0py + ((y1) * z0dx);
+ drawContour = (dY);
+
+
+ int16_t x, lineX0, lineX1;
+
+ lineX0 = px0z0;
+ lineX1 = px0z1;
+
+ if (lineX0 != lineX1) {
+ int16_t lineY0 = py0z0;
+ int16_t lineY1 = py0z1;
+ int16_t lineDx = abs(lineX1 - lineX0);
+ int16_t lineSx = lineX0 < lineX1 ? 1 : -1;
+ int16_t lineDy = -abs(lineY1 - lineY0);
+ int16_t lineSy = lineY0 < lineY1 ? 1 : -1;
+ int16_t lineErr = lineDx + lineDy;
+ int16_t lineE2;
+
+ while ((lineX0 != lineX1 || lineY0 != lineY1)) {
+
+ if (drawContour) {
+ if (IN_RANGE(0, XRESMINUSONE, lineX0)) {
+ vLine(lineX0, lineY0, py1z0, shouldStippleFill);
+ graphicsPut(lineX0, lineY0, shouldStippleBorder);
+ }
+ }
+
+ lineE2 = lineErr << 2;
+
+ if (lineE2 >= lineDy) {
+ lineErr += lineDy;
+ lineX0 += lineSx;
+ }
+
+ if (lineX0 >= XRES) {
+ goto right_stroke;
+ }
+
+ if (lineE2 <= lineDx) {
+ lineErr += lineDx;
+ lineY0 += lineSy;
+ }
+ }
+ }
+
+ right_stroke:
+
+ lineX0 = px1z0;
+ lineX1 = px1z1;
+
+ if (lineX0 != lineX1) {
+ int16_t lineY0 = py0z0;
+ int16_t lineY1 = py0z1;
+ int16_t lineDx = abs(lineX1 - lineX0);
+ int16_t lineSx = lineX0 < lineX1 ? 1 : -1;
+ int16_t lineDy = -abs(lineY1 - lineY0);
+ int16_t lineSy = lineY0 < lineY1 ? 1 : -1;
+ int16_t lineErr = lineDx + lineDy;
+ int16_t lineE2;
+
+ while ((lineX0 != lineX1 || lineY0 != lineY1)) {
+
+ if (drawContour) {
+ if (IN_RANGE(0, XRESMINUSONE, lineX0)) {
+ vLine(lineX0, lineY0, py1z0, shouldStippleFill);
+ graphicsPut(lineX0, lineY0, shouldStippleBorder);
+ }
+ }
+
+ lineE2 = lineErr << 2;
+
+ if (lineE2 >= lineDy) {
+ lineErr += lineDy;
+ lineX0 += lineSx;
+ }
+
+ if (lineX0 >= XRES) {
+ goto final_stroke;
+ }
+
+ if (lineE2 <= lineDx) {
+
+ lineErr += lineDx;
+ lineY0 += lineSy;
+ }
+ }
+ }
+
+ final_stroke:
+
+ if (drawContour) {
+ for (x = px0z0; x <= px1z0; ++x) {
+ if (IN_RANGE(0, XRESMINUSONE, x)) {
+ vLine(x, py0z0, py1z0, shouldStippleFill);
+ graphicsPut(x, py0z0, shouldStippleBorder);
+ }
+ }
+ }
+
+ if (IN_RANGE(0, XRESMINUSONE, px0z0)) {
+ vLine(px0z0, py0z0, py1z0, shouldStippleBorder);
+ }
+
+ if (IN_RANGE(0, XRESMINUSONE, px1z0)) {
+ vLine(px1z0, py0z0, py1z0, shouldStippleBorder);
+ }
+}
+
+
+
+void drawFloorAt(int16_t x0, int16_t y0, int16_t z0, int16_t dX, int16_t dZ) {
+
+ int16_t z1;
+
+ int16_t z0px;
+ int16_t z0py;
+ int16_t z1px;
+ int16_t z1py;
+ int16_t z0dx;
+ int16_t z1dx;
+ int16_t px0z0;
+ int16_t py0z0;
+ int16_t px1z0;
+ int16_t px0z1;
+ int16_t py0z1;
+ int16_t px1z1;
+
+ uint16_t shouldStipple = (z0 >= STIPPLE_DISTANCE) ? 2 : (2 + STIPPLE_COLOUR_THRESHOLD);
+
+ if (z0 >= 32 || z0 < 1) {
+ return;
+ }
+
+ z1 = z0 + dZ;
+
+ if (z1 >= 32) {
+ return;
+ }
+
+ z0px = (projections[z0].px);
+ z1px = (projections[z1].px);
+ z0dx = ((projections[z0].dx));
+ z1dx = ((projections[z1].dx));
+
+ z1py = (projections[z1].py);
+ z0py = (projections[z0].py);
+
+ px0z0 = z0px - ((x0) * z0dx);
+ px0z1 = z1px - ((x0) * z1dx);
+ px1z0 = px0z0 - (dX * z0dx);
+ px1z1 = px0z1 - (dX * z1dx);
+ py0z0 = z0py + ((y0) * z0dx);
+ py0z1 = z1py + ((y0) * z1dx);
+
+
+ int16_t leftX0, leftX1, rightX0, rightX1;
+
+ leftX0 = px0z0;
+ leftX1 = px0z1;
+ rightX0 = px1z0;
+ rightX1 = px1z1;
+ int16_t dy = -abs(py0z1 - py0z0);
+ int16_t sy = py0z0 < py0z1 ? 1 : -1;
+
+ int16_t currentY0 = py0z0;
+ int16_t leftDx = abs(leftX1 - leftX0);
+ int16_t leftSx = leftX0 < leftX1 ? 1 : -1;
+ int16_t leftErr = leftDx + dy;
+ int16_t leftE2;
+
+ int16_t rightDx = abs(rightX1 - rightX0);
+ int16_t rightSx = rightX0 < rightX1 ? 1 : -1;
+ int16_t rightErr = rightDx + dy;
+ int16_t rightE2;
+
+ while (currentY0 != py0z1) {
+ if (leftX0 >= XRES) {
+ return;
+ }
+
+ if (rightX1 < 0) {
+ return;
+ }
+
+ if (IN_RANGE(0, XRESMINUSONE, leftX0) || IN_RANGE(0, XRESMINUSONE, rightX0)) {
+ hLine(leftX0, rightX0, currentY0, shouldStipple);
+ }
+
+ leftE2 = leftErr << 2;
+
+ if (leftE2 >= dy) {
+ leftErr += dy;
+ leftX0 += leftSx;
+ }
+
+ rightE2 = rightErr << 2;
+
+ if (rightE2 >= dy) {
+ rightErr += dy;
+ rightX0 += rightSx;
+ }
+
+ if (rightE2 <= rightDx || leftE2 <= leftDx) {
+ rightErr += rightDx;
+ leftErr += leftDx;
+ currentY0 += sy;
+ }
+ }
+}
+
diff --git a/mz_frontend/src/RendererScene.c b/mz_frontend/src/RendererScene.c
new file mode 100755
index 000000000..403c8b6d0
--- /dev/null
+++ b/mz_frontend/src/RendererScene.c
@@ -0,0 +1,153 @@
+#ifndef SMD
+#include
+#include
+#include
+#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
+
+#include "Common.h"
+#include "Renderer.h"
+#include "map.h"
+#include "MapWithCharKey.h"
+#include "FixP.h"
+#include "CTile3DProperties.h"
+#include "PackedFileReader.h"
+
+extern int8_t cameraX;
+extern int8_t cameraZ;
+extern int8_t cameraRotation;
+extern int16_t cameraHeight;
+extern struct MapWithCharKey tileProperties;
+extern struct MapWithCharKey customMeshes;
+
+extern uint8_t playerLocation;
+
+#ifdef USE_OWN_MIN_MAX
+int8_t max(int8_t x1, int8_t x2) {
+ return x1 > x2 ? x1 : x2;
+}
+
+int8_t min(int8_t x1, int8_t x2) {
+ return x1 < x2 ? x1 : x2;
+}
+#endif
+
+void renderScene(void) {
+
+ uint16_t pattern = map[cameraZ][cameraX];
+
+ struct CTile3DProperties *prop =
+ (struct CTile3DProperties *) getFromMap(&tileProperties, pattern);
+
+ cameraHeight = fixToInt(prop->mFloorHeight) + 1;
+
+
+ switch (cameraRotation) {
+ case DIRECTION_N:
+ renderCameraNorth();
+ break;
+
+ case DIRECTION_E:
+ renderCameraEast();
+ break;
+
+ case DIRECTION_S:
+ renderCameraSouth();
+ break;
+
+ case DIRECTION_W:
+ default:
+ renderCameraWest();
+ break;
+ }
+ return;
+ repaintMapItems();
+}
+
+void renderCameraWest(void) {
+ int16_t x;
+ int16_t y;
+
+ for (x = 0; x < cameraX; ++x) {
+
+ int16_t minZ = max(cameraZ - ((cameraX) - x) - 2, 0);
+ int16_t maxZ = min(cameraZ + ((cameraX) - x) + 1, 31);
+
+ for (y = minZ; y < cameraZ; ++y) {
+ drawPattern(map[y][x], -(y - cameraZ) + 1, -(y - cameraZ) + 2, cameraX - x);
+ }
+
+ for (y = maxZ; y >= cameraZ; --y) {
+ drawPattern(map[y][x], -(y - cameraZ) + 1, -(y - cameraZ) + 2, cameraX - x);
+ }
+ }
+}
+
+void
+renderCameraSouth(void) {
+ int16_t y;
+ int16_t x;
+
+ for (y = 31; y > cameraZ; --y) {
+
+ int16_t maxX = min(cameraX + (y - cameraZ) + 1, 31);
+ int16_t minX = max(cameraX - (y - cameraZ) - 3, 0);
+
+ for (x = minX; x < cameraX - 1; ++x) {
+ drawPattern(map[y][x], cameraX - x, cameraX - x + 1, y - cameraZ);
+ }
+
+
+ for (x = maxX - 1; x >= cameraX - 1; --x) {
+ drawPattern(map[y][x], cameraX - x, cameraX - x + 1, y - cameraZ);
+ }
+
+ }
+}
+
+void renderCameraEast(void) {
+ int16_t x;
+
+ int16_t y;
+
+
+ for (x = 31; x > cameraX; --x) {
+
+ int16_t maxZ = min(cameraZ + (x - cameraX) + 2, 31);
+ int16_t minZ = max(cameraZ - (x - cameraX) - 2, 0);
+
+ for (y = minZ; y < cameraZ; ++y) {
+ drawPattern(map[y][x], (y - cameraZ) + 2, (y - cameraZ) + 3, x - cameraX);
+ }
+
+ for (y = maxZ - 1; y >= cameraZ; --y) {
+ drawPattern(map[y][x], (y - cameraZ) + 2, (y - cameraZ) + 3, x - cameraX);
+ }
+ }
+}
+
+void loadMesh(struct Mesh *mesh, char *filename) {
+ /* Dummy, just to satisfy the linker */
+}
+
+void renderCameraNorth(void) {
+
+ int16_t y;
+ int16_t x;
+
+ for (y = 0; y < cameraZ; ++y) {
+ int16_t maxX = min(cameraX + ((cameraZ) - y + 3), 31);
+ int16_t minX = max(cameraX - ((cameraZ) - y), 0);
+
+ for (x = maxX; x > cameraX - 1; --x) {
+ drawPattern(map[y][x], x - cameraX, x - cameraX + 1, cameraZ - y);
+ }
+
+ for (x = minX; x <= cameraX + 1; ++x) {
+ drawPattern(map[y][x], x - cameraX, x - cameraX + 1, cameraZ - y);
+ }
+ }
+}
diff --git a/mz_frontend/src/RendererTesselation.c b/mz_frontend/src/RendererTesselation.c
new file mode 100755
index 000000000..1cace95fb
--- /dev/null
+++ b/mz_frontend/src/RendererTesselation.c
@@ -0,0 +1,207 @@
+#include
+#ifdef WIN32
+#include "Win32Int.h"
+#else
+#ifndef SMD
+#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
+#endif
+
+#include "Common.h"
+#include "Core.h"
+#include "Renderer.h"
+#include "map.h"
+#include "MapWithCharKey.h"
+#include "FixP.h"
+#include "CTile3DProperties.h"
+#include "PackedFileReader.h"
+
+#include "map.h"
+
+extern int8_t cameraX;
+extern int8_t cameraZ;
+extern int8_t cameraRotation;
+extern uint8_t playerLocation;
+struct MapWithCharKey tileProperties;
+struct MapWithCharKey customMeshes;
+int16_t cameraHeight = 1;
+
+void drawPattern(uint16_t _pattern, int16_t x0, int16_t x1, int16_t z) {
+ int16_t diff;
+ uint16_t pattern = (_pattern) & 127;
+ uint16_t type;
+
+ /* 127 = 01111111 - the first bit is used for indicating the presence of an object.
+ * And since there are only 127 patterns anyway...
+ * */
+ if (_pattern & 128) {
+ drawObjectAt(x0 - 1, z + 2);
+ }
+
+ struct CTile3DProperties *prop =
+ (struct CTile3DProperties *) getFromMap(&tileProperties, pattern);
+
+ int ceilingHeight = fixToInt(prop->mCeilingHeight);
+ int floorHeight = fixToInt(prop->mFloorHeight);
+
+
+ diff = ceilingHeight - floorHeight;
+
+ type = prop->mGeometryType;
+
+ if (prop->mCeilingRepeatedTextureIndex != 0xFF && prop->mCeilingRepetitions > 0) {
+ drawCubeAt(x0 - 1, ceilingHeight - cameraHeight, z + 2, x1 - x0,
+ prop->mCeilingRepetitions, 1);
+ }
+
+ if (prop->mFloorRepeatedTextureIndex != 0xFF && prop->mFloorRepetitions > 0) {
+ drawCubeAt(x0 - 1, floorHeight - prop->mFloorRepetitions - cameraHeight, z + 2, x1 - x0,
+ prop->mFloorRepetitions, 1);
+ }
+
+
+ if (prop->mCeilingTextureIndex != 0xFF) {
+ drawFloorAt(x0 - 1, ceilingHeight - cameraHeight, z + 2, x1 - x0, 1);
+ }
+
+ if (prop->mFloorTextureIndex != 0xFF) {
+ drawFloorAt(x0 - 1, floorHeight - cameraHeight, z + 2, x1 - x0, 1);
+ }
+
+
+ if (type == kCube) {
+ drawCubeAt(x0 - 1, floorHeight - cameraHeight, z + 2, x1 - x0,
+ diff, 1);
+ } else if (type == kRightNearWall || type == kLeftNearWall) {
+
+ if (cameraRotation == 0 || cameraRotation == 2) {
+
+ if (type == kRightNearWall) {
+ type = kLeftNearWall;
+ } else {
+ type = kRightNearWall;
+ }
+ }
+
+ drawWedge(x0 - 1, floorHeight - cameraHeight, z + 2, x1 - x0,
+ diff, 1, 0xFF, type);
+
+ } else if (type == kWallWest) {
+
+ switch (cameraRotation) {
+ case 0:
+ case 2:
+ drawWedge(x0 - (cameraRotation == 0 ? 1 : 0), floorHeight - cameraHeight, z + 2,
+ 0, diff, 1, 0xFF, kLeftNearWall);
+ break;
+ case 1:
+ case 3:
+ default:
+ drawSquare(x0 - 1, floorHeight - cameraHeight,
+ z + (cameraRotation == 3 ? 1 : 0) + 2,
+ x1 - x0, diff, 0xFF);
+ }
+ } else if (type == kWallNorth) {
+
+
+ switch (cameraRotation) {
+ case 0:
+ case 2:
+ drawSquare(x0 - 1, floorHeight - cameraHeight,
+ z + (cameraRotation == 0 ? 1 : 0) + 2,
+ x1 - x0, diff, 0xFF);
+ break;
+ case 1:
+ case 3:
+ default:
+ drawWedge(x0 - (cameraRotation == 1 ? 1 : 0),
+ floorHeight - cameraHeight, z + 2,
+ 0, diff, 1, 0xFF, kLeftNearWall);
+ break;
+ }
+ } else if (type == kWallCorner) {
+
+ switch (cameraRotation) {
+
+ case 3:
+ case 0:
+ drawWedge(x0 - (cameraRotation == 3 ? 0 : 1),
+ floorHeight - cameraHeight, z + 2,
+ 0, diff, 1, 0xFF, kLeftNearWall);
+
+ drawSquare(x0 - 1, floorHeight - cameraHeight, z + 1 + 2,
+ x1 - x0, diff, 0xFF);
+ break;
+
+ case 1:
+ case 2:
+ default:
+ drawSquare(x0 - 1, floorHeight - cameraHeight, z + 2,
+ x1 - x0, diff, 0xFF);
+
+ drawWedge(x0 - (cameraRotation == 1 ? 1 : 0), floorHeight - cameraHeight, z + 2,
+ 0, diff, 1, 0xFF, kLeftNearWall);
+
+ break;
+ }
+ }
+}
+
+void repaintMapItems(void) {
+ struct ObjectNode *node;
+
+ /* ignore header node */
+ node = getRoom(playerLocation)->itemsPresent->next;
+
+ switch (cameraRotation) {
+ case 0:
+ while (node != NULL) {
+ struct Item *item = getItem(node->item);
+ drawObjectAt(item->position.x - cameraX + 2 - 1, cameraZ - item->position.y + 2);
+ node = node->next;
+ }
+ break;
+
+ case 1:
+ while (node != NULL) {
+ struct Item *item = getItem(node->item);
+ drawObjectAt((item->position.y - cameraZ) + 1, (item->position.x - cameraX) + 2);
+ node = node->next;
+ }
+ break;
+
+ case 2:
+ while (node != NULL) {
+ struct Item *item = getItem(node->item);
+ drawObjectAt(-(item->position.x - cameraX) + 1, (item->position.y - cameraZ) + 2);
+ node = node->next;
+ }
+ break;
+
+ case 3:
+ default:
+ while (node != NULL) {
+ struct Item *item = getItem(node->item);
+ drawObjectAt(-(item->position.y - cameraZ) + 1, (cameraX - item->position.x) + 2);
+ node = node->next;
+ }
+ break;
+ }
+}
+
+void updateMapItems(void) {
+ struct ObjectNode *node;
+
+ /* ignore header node */
+ node = getRoom(playerLocation)->itemsPresent->next;
+
+ while (node != NULL) {
+ struct Item *item = getItem(node->item);
+ uint16_t pattern = map[item->position.y][item->position.x];
+ map[item->position.y][item->position.x] = pattern;
+ node = node->next;
+ }
+}
diff --git a/mz_frontend/src/SDLVersion/sdl2.c b/mz_frontend/src/SDLVersion/sdl2.c
new file mode 100644
index 000000000..0d08ae739
--- /dev/null
+++ b/mz_frontend/src/SDLVersion/sdl2.c
@@ -0,0 +1,587 @@
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include "Common.h"
+#include "Enums.h"
+#include "Core.h"
+#include "Derelict.h"
+#include "Renderer.h"
+#include "UI.h"
+#include "KeyboardUI.h"
+
+#include "SDL.h"
+#include "font.h"
+
+extern struct ObjectNode *focusedItem;
+extern struct ObjectNode *roomItem;
+extern int accessGrantedToSafe;
+SDL_Window *window;
+SDL_Renderer *renderer;
+
+#define TRANSPARENCY_COLOR 17
+
+uint8_t mBufferedCommand;
+uint32_t palette[16];
+uint8_t framebuffer[256 * 160];
+
+extern uint8_t firstFrameOnCurrentState;
+extern enum EGameMenuState currentGameMenuState;
+
+#ifdef SUPPORTS_ROOM_TRANSITION_ANIMATION
+extern uint8_t roomTransitionAnimationStep;
+#endif
+
+extern enum EDirection playerDirection;
+extern int8_t cameraX;
+extern int8_t cameraZ;
+
+char playerPositionSprite[4][8]={
+ {
+ 0b00011000,
+ 0b00111100,
+ 0b01111110,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000
+ },
+ {
+ 0b00100000,
+ 0b01100000,
+ 0b11100000,
+ 0b11100000,
+ 0b01100000,
+ 0b00100000,
+ 0b00000000,
+ 0b00000000
+ },
+ {
+ 0b01111110,
+ 0b00111100,
+ 0b00011000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000
+ },
+ {
+ 0b00000100,
+ 0b00000110,
+ 0b00000111,
+ 0b00000111,
+ 0b00000110,
+ 0b00000100,
+ 0b00000000,
+ 0b00000000
+ },
+};
+
+void graphicsPut(int16_t x, int16_t y, uint16_t colour) {
+ if (x < 0) {
+ x = 0;
+ }
+
+ if (x >= 128) {
+ x = 127;
+ }
+
+ if (y < 0) {
+ y = 0;
+ }
+
+ if (y >= 128) {
+ y = 127;
+ }
+
+ assert( !(colour < 0 || colour >= 16));
+ framebuffer[(256 * y) + x] = colour;
+#ifdef PUTAFLIP
+ graphicsFlush();
+ SDL_Delay(100);
+#endif
+}
+
+void hLine(int16_t x0, int16_t x1, int16_t y, uint16_t colour) {
+ if (y < 0) {
+ return;
+ }
+
+ int16_t _x0 = x0;
+ int16_t _x1 = x1;
+
+ if (x0 > x1) {
+ _x0 = x1;
+ _x1 = x0;
+ }
+
+ if (_x0 < 0) {
+ _x0 = 0;
+ }
+
+ if (_x1 >= 128) {
+ _x1 = 127;
+ }
+
+ for (int x = _x0; x <= _x1; ++x) {
+ framebuffer[(256 * y) + x] = colour;
+ }
+}
+
+void vLine(int16_t x0, int16_t y0, int16_t y1, uint16_t colour) {
+
+ if (x0 < 0 || x0 > XRESMINUSONE) {
+ return;
+ }
+
+ int16_t y;
+ int16_t _y0 = y0;
+ int16_t _y1 = y1;
+
+ if (y0 > y1) {
+ _y0 = y1;
+ _y1 = y0;
+ }
+
+ if (_y0 < 0) {
+ _y0 = 0;
+ }
+
+ if (_y1 >= 128) {
+ _y1 = 127;
+ }
+
+ for (y = _y0; y <= _y1; ++y) {
+ framebuffer[(256 * y) + x0] = colour;
+ }
+}
+
+void shutdownGraphics(void) {
+ SDL_Quit();
+}
+
+void realPut(int x, int y, uint8_t value) {
+ if (x < 0) {
+ x = 0;
+ }
+
+ if (x >= 256) {
+ x = 255;
+ }
+
+ if (y < 0) {
+ y = 0;
+ }
+
+ if (y >= 160) {
+ y = 159;
+ }
+ assert( !(value < 0 || value >= 16));
+ framebuffer[(256 * y) + x] = value;
+}
+
+void clearGraphics(void) {
+ memFill(framebuffer, 0, 256 * 160);
+}
+
+void clearScreen(void) {}
+
+void put_sprite_8(uint16_t x, uint8_t y, uint8_t *sprite, uint8_t colour) {
+
+ for(uint8_t c = 0; c < 8; ++c) {
+ uint8_t line = *sprite;
+ for (uint16_t d = 0; d < 8; ++d) {
+ if (line & 1) {
+ realPut( x + d, y + c, colour);
+ }
+ line = line >> 1;
+ }
+ ++sprite;
+ }
+}
+
+void handleSystemEvents(void) {
+ SDL_Event event;
+
+ mBufferedCommand = '.';
+
+ while (SDL_PollEvent(&event)) {
+
+ if (event.type == SDL_QUIT) {
+
+ mBufferedCommand = 'q';
+ }
+
+ if (event.type == SDL_KEYUP) {
+
+ switch (event.key.keysym.sym) {
+ case SDLK_RETURN:
+ case SDLK_z:
+ mBufferedCommand = 'a';
+ break;
+
+ case SDLK_ESCAPE:
+ case SDLK_q:
+ SDL_Quit();
+ exit(0);
+ break;
+
+ case SDLK_SPACE:
+ break;
+
+ case SDLK_KP_7:
+ case SDLK_7:
+ mBufferedCommand = '7';
+ break;
+
+ case SDLK_KP_8:
+ case SDLK_8:
+ mBufferedCommand = '8';
+ break;
+
+
+ case SDLK_KP_9:
+ case SDLK_9:
+ mBufferedCommand = '9';
+ break;
+
+
+ case SDLK_s:
+ break;
+ case SDLK_d:
+ break;
+ case SDLK_v:
+ break;
+ case SDLK_b:
+ break;
+ case SDLK_j:
+ break;
+ case SDLK_k:
+ break;
+ case SDLK_x:
+ mBufferedCommand = 'd';
+ break;
+ case SDLK_c:
+ break;
+ case SDLK_e:
+ break;
+
+ case SDLK_1:
+ mBufferedCommand = '1';
+ break;
+
+ case SDLK_2:
+ mBufferedCommand = '2';
+ break;
+
+ case SDLK_3:
+ mBufferedCommand = '3';
+ break;
+
+ case SDLK_4:
+ mBufferedCommand = '4';
+ break;
+
+ case SDLK_5:
+ mBufferedCommand = '5';
+ break;
+
+ case SDLK_6:
+ mBufferedCommand = '6';
+ break;
+
+
+ case SDLK_LEFT:
+ mBufferedCommand = 'q';
+ break;
+ case SDLK_RIGHT:
+ mBufferedCommand = 'e';
+ break;
+ case SDLK_UP:
+ mBufferedCommand = 'w';
+ break;
+ case SDLK_DOWN:
+ mBufferedCommand = 's';
+ break;
+ default:
+ mBufferedCommand = '.';
+ }
+ }
+ }
+}
+
+enum ECommand getInput(void) {
+
+ if (currentGameMenuState == kPlayGame) {
+ put_sprite_8(
+ (XRES_FRAMEBUFFER / 2) + ((cameraX + 6) * 3) - 1,
+ (cameraZ * 3) + 10,
+ &playerPositionSprite[playerDirection][0],
+ 0
+ );
+ }
+
+ switch(mBufferedCommand) {
+ case 'q':
+ return kCommandLeft;
+ case 'w':
+ return kCommandUp;
+ case 's':
+ return kCommandDown;
+ case 'e':
+ return kCommandRight;
+ case 'a':
+ return kCommandStrafeLeft;
+ case 'd':
+ return kCommandStrafeRight;
+ case 'l':
+ return kCommandBack;
+
+ case '1':
+ if (waitForKey) {
+ waitForKey = 0;
+ firstFrameOnCurrentState = 1;
+ needsToRedrawVisibleMeshes = 1;
+ return kCommandNone;
+ }
+
+ return kCommandFire1;
+ case '2':
+ return kCommandFire2;
+ case '3':
+ return kCommandFire3;
+ case '4':
+ return kCommandFire4;
+ case '5':
+ return kCommandFire5;
+ case '6':
+ return kCommandFire6;
+ case 'k':
+ exit(0);
+ }
+
+ return kCommandNone;
+}
+
+void initHW(int argc, char **argv) {
+ renderer = NULL;
+ int r, g, b;
+ mBufferedCommand = '.';
+ SDL_Init(SDL_INIT_EVERYTHING);
+ SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
+ memFill(framebuffer, 0, 256 * 160);
+ window =
+ SDL_CreateWindow("Derelict 16-bits SDL2 test", SDL_WINDOWPOS_CENTERED,
+ SDL_WINDOWPOS_CENTERED, 512, 320, SDL_WINDOW_SHOWN);
+
+ renderer = SDL_CreateRenderer(window, -1, 0);
+
+ palette[0] = 0x000000;
+ palette[1] = 0x0000AA;
+ palette[2] = 0x00AA00;
+ palette[3] = 0x00AAAA;
+ palette[4] = 0xAA0000;
+ palette[5] = 0xAA00AA;
+ palette[6] = 0xAA5500;
+ palette[7] = 0xAAAAAA;
+ palette[8] = 0x555555;
+ palette[9] = 0x5555FF;
+ palette[10] = 0x55FF55;
+ palette[11] = 0x55FFFF;
+ palette[12] = 0xFF5555;
+ palette[13] = 0xFF55FF;
+ palette[14] = 0xFFFF55;
+ palette[15] = 0xFFFFFF;
+
+#ifdef __EMSCRIPTEN__
+ enterFullScreenMode ();
+#endif
+
+ initKeyboardUI();
+ clearGraphics();
+}
+
+
+void flipRenderer(void) {
+ SDL_Rect rect;
+ uint32_t pixel;
+ int x, y;
+
+ rect.x = 0;
+ rect.y = 0;
+ rect.w = 512;
+ rect.h = 320;
+
+ SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
+ SDL_RenderFillRect(renderer, &rect);
+
+ for (y = 0; y < 160; ++y) {
+ for (x = 0; x < 255; ++x) {
+ rect.x = 2 * x;
+ rect.y = 2 * y;
+ rect.w = 2;
+ rect.h = 2;
+ int index = framebuffer[(256 * y) + x];
+ assert( !(index < 0 || index >= 16));
+
+ pixel = palette[index];
+
+ int r = (pixel & 0x00FF0000) >> 16;
+ int g = ((pixel & 0x0000FF00) >> 8);
+ int b = ((pixel & 0x000000FF));
+
+ SDL_SetRenderDrawColor(renderer, r,
+ g,
+ b, 255);
+ SDL_RenderFillRect(renderer, &rect);
+ }
+ }
+
+ SDL_RenderPresent(renderer);
+
+#ifndef __EMSCRIPTEN__
+ SDL_Delay(1000 / 60);
+#endif
+}
+
+void drawTextAtWithMarginWithFiltering(const int x, const int y, int margin, const char *text, const uint8_t fg,
+ char charToReplaceHifenWith) {
+
+ size_t len = strlen(text);
+ int32_t dstX = x * 8;
+ int32_t dstY = y * 8;
+
+ size_t c;
+ size_t d;
+ uint8_t lastSpacePos = 0xFF;
+
+ for (c = 0; c < len; ++c) {
+
+ char currentChar = text[c];
+
+ if (currentChar == '-') {
+ currentChar = charToReplaceHifenWith;
+ }
+
+ if (currentChar == '\n' || dstX >= (margin)) {
+ dstX = x * 8;
+ dstY += 8;
+ continue;
+ }
+
+ if (dstY >= YRES_FRAMEBUFFER) {
+ return;
+ }
+
+ if (currentChar == ' ') {
+ lastSpacePos = c;
+ } else {
+ if ((c - 1) == lastSpacePos) {
+ d = c;
+ while (d < len && text[d] != ' ') ++d;
+
+ if ((dstX + ((d - c ) * 8)) >= margin ) {
+ dstX = x * 8;
+ dstY += 8;
+ }
+ }
+ }
+
+
+ if (currentChar >= 'a') {
+ if (currentChar <= 'z') {
+ currentChar = (currentChar - 'a') + 'A';
+ } else {
+ currentChar -= ('z' - 'a');
+ }
+ }
+
+ uint8_t *fontTop = &font[((currentChar - 32) << 3)];
+
+ for (int f = 0; f < 8; ++f) {
+ int e;
+ uint8_t chunk = *fontTop;
+
+ for (e = 0; e < 8; ++e) {
+ if (chunk & 1) {
+ realPut(dstX + (7 - e), dstY + (f), 1);
+ } else {
+ realPut(dstX + (7 - e), dstY + (f), 0);
+ }
+ chunk = chunk >> 1;
+ }
+
+ fontTop++;
+ }
+ dstX += 8;
+ }
+}
+
+void startFrame(int x, int y, int width, int height) {
+
+}
+
+void endFrame(void) {
+ if (currentGameMenuState == kPlayGame) {
+ put_sprite_8(
+ (XRES_FRAMEBUFFER / 2) + ((cameraX + 6) * 3) - 1,
+ (cameraZ * 3) + 10,
+ &playerPositionSprite[playerDirection][0],
+ 1
+ );
+ }
+ flipRenderer();
+}
+
+
+void clearTextScreen(void) {
+ int c, d;
+ for (c = 16; c < 24; ++c) {
+ for (d = 0; d < 32; ++d) {
+ drawTextAtWithMarginWithFiltering(d, c, 256, " ", 2, ' ');
+ }
+ }
+}
+
+void fillRect(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour, uint8_t stipple) {
+ int x, y;
+ for (y = y0; y < y1; ++y) {
+ for (x = x0; x < x1; ++x) {
+ realPut(x, y, colour);
+ }
+ }
+}
+
+void drawLine(uint16_t x0, uint8_t y0, uint16_t x1, uint8_t y1, uint8_t colour) {
+ int dx = abs(x1 - x0);
+ int sx = x0 < x1 ? 1 : -1;
+ int dy = abs(y1 - y0);
+ int sy = y0 < y1 ? 1 : -1;
+ int err = (dx > dy ? dx : -dy) >> 1;
+ int e2;
+ for (;;) {
+
+ if (x0 == x1 && y0 == y1) break;
+
+ realPut(x0, y0, colour);
+
+ e2 = err;
+ if (e2 > -dx) {
+ err -= dy;
+ x0 += sx;
+ }
+ if (e2 < dy) {
+ err += dx;
+ y0 += sy;
+ }
+ }
+}
+
diff --git a/mz_frontend/src/UI.c b/mz_frontend/src/UI.c
new file mode 100644
index 000000000..06e6cdfee
--- /dev/null
+++ b/mz_frontend/src/UI.c
@@ -0,0 +1,244 @@
+/*
+ Created by Daniel Monteiro on 11/07/2023.
+*/
+#ifdef WIN32
+#include "Win32Int.h"
+#else
+#ifndef SMD
+#include
+#include
+#else
+#include
+typedef unsigned long size_t;
+#endif
+#endif
+
+#include "Enums.h"
+#include "UI.h"
+#include "Core.h"
+#include "Renderer.h"
+#include "Engine.h"
+#include "SoundSystem.h"
+#include "Common.h"
+#include "MapWithCharKey.h"
+#include "FixP.h"
+#include "CTile3DProperties.h"
+
+extern uint8_t playerLocation;
+
+extern int8_t cursorPosition;
+
+extern int8_t map[32][32];
+
+uint8_t waitForKey = 0;
+
+uint8_t redrawMap;
+
+uint8_t needsToRedrawHUD;
+
+extern struct MapWithCharKey tileProperties;
+
+void drawGraphic(int x, int y, int dx, int dy, const uint8_t *graphic) {
+ const uint8_t *ptr = graphic;
+
+ while (*ptr) {
+ uint8_t c;
+ const uint8_t npoints = *ptr++;
+#ifndef MONOCHROME_VECTORS
+ ptr += 3; /* skip colours */
+#endif
+ const uint8_t *shape = ptr;
+
+ for (c = 0; c < npoints - 1; ++c) {
+ drawLine(x + ((dx * shape[2 * c]) / 128),
+ y + ((dy * shape[(2 * c) + 1]) / 128),
+ x + ((dx * shape[(2 * c) + 2]) / 128),
+ y + ((dy * shape[(2 * c) + 3]) / 128),
+ 2);
+ }
+ drawLine(x + ((dx * shape[2 * npoints - 2]) / 128),
+ y + ((dy * shape[2 * npoints - 1]) / 128),
+ x + ((dx * shape[0]) / 128),
+ y + ((dy * shape[1]) / 128),
+ 2);
+ ptr += 2 * npoints;
+ }
+}
+
+void drawTextAt(uint8_t _x, uint8_t y, const char *text, uint8_t colour) {
+ drawTextAtWithMargin(_x, y, (XRES_FRAMEBUFFER), text, colour);
+}
+
+void drawTextAtWithMargin(const int x, const int y, int margin, const char *text, const uint8_t colour) {
+ drawTextAtWithMarginWithFiltering(x, y, margin, text, colour, '-');
+}
+
+void showMessage(const char *message) {
+ clearTextScreen();
+ drawTextWindow(1, 16, (XRES_FRAMEBUFFER / 8) - 3, (YRES_FRAMEBUFFER / 8) - 18, "", message);
+ waitForKey = 1;
+}
+
+uint8_t isPositionAllowed(int8_t x, int8_t y) {
+ uint8_t pattern = map[y][x];
+ struct CTile3DProperties *prop =
+ (struct CTile3DProperties *) getFromMap(&tileProperties, pattern);
+
+ return prop->mBlockMovement;
+}
+
+
+void drawMap(void) {
+ uint8_t x, y;
+
+ if (!redrawMap) {
+ return;
+ }
+
+ if (playerLocation == 0) {
+ return;
+ }
+
+ redrawMap = 0;
+
+ drawWindow((XRES_FRAMEBUFFER / 8) / 2,
+ 0,
+ (XRES_FRAMEBUFFER / 8) / 2 - 1,
+ (YRES_FRAMEBUFFER / 8) / 2 + 1,
+ "");
+
+ for (y = 0; y < 32; ++y) {
+ for (x = 0; x < 32; ++x) {
+
+ if (isPositionAllowed(x, y)) {
+ fillRect((XRES_FRAMEBUFFER / 2) + (x * 3),
+ (y * 3),
+ (XRES_FRAMEBUFFER / 2) + (x * 3) + 3,
+ (y * 3) + 3,
+ 2,
+ 0);
+ }
+ }
+ }
+}
+
+void performAction(void) {
+ switch (getGameStatus()) {
+ case kBadVictory:
+ showMessage("Victory! Too bad you didn't survive");
+ while (1);
+
+ case kBadGameOver:
+ showMessage("You're dead! And so are the\n"
+ "other people on the path of\n"
+ "destruction faulty reactor");
+ while (1);
+
+ case kGoodVictory:
+ showMessage("Victory! You managed to destroy the\nship and get out alive");
+ while (1);
+
+ case kGoodGameOver:
+ showMessage("You failed! While you're alive\n"
+ "you failed to prevent the worst\n"
+ "scenario and now EVERYBODY is\n"
+ "dead!)");
+ while (1);
+ }
+}
+
+void drawWindow(uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th, const char *title) {
+ uint16_t x0 = tx * 8;
+ uint16_t x1 = (tx + tw) * 8;
+ uint8_t y0 = ty * 8;
+ uint8_t y1 = (ty + th) * 8;
+ uint8_t c, d;
+
+ for (c = 0; c < th; ++c) {
+ for (d = 0; d < tw; ++d) {
+ drawTextAtWithMarginWithFiltering( tx + d, ty + c, XRES_FRAMEBUFFER, " ", 2, ' ');
+ }
+ }
+
+ drawLine(x0, y0, x1, y0, 2);
+
+ drawLine(x0, y1, x1, y1, 2);
+
+ drawLine(x0, y0, x0, y1, 2);
+
+ drawLine(x1, y0, x1, y1, 2);
+
+ drawTextAt(tx + 1, ty, title, 1);
+}
+
+
+void
+drawWindowWithOptions(const uint8_t x,
+ const uint8_t y,
+ const uint8_t dx,
+ const uint8_t dy,
+ const char *title,
+ const char **options,
+ const uint8_t optionsCount,
+ const uint8_t selectedOption) {
+ uint8_t c;
+
+ if (firstFrameOnCurrentState || selectedOption == 0xFF) {
+ drawWindow(x - 1,
+ y - 1,
+ dx + 1,
+ dy + 1,
+ title);
+ }
+
+ for (c = 0; c < optionsCount; ++c) {
+ drawTextAt(x,
+ y + 1 + c,
+ (selectedOption == c) ? ">" : " ",
+ 1);
+
+ if (firstFrameOnCurrentState || selectedOption == 0xFF) {
+ drawTextAt(x + 1,
+ y + 1 + c,
+ &options[c][0],
+ 1);
+ }
+ }
+}
+
+void
+drawTextWindow(const uint8_t x, const uint8_t y, const uint8_t dx, const uint8_t dy, const char *title,
+ const char *content) {
+ drawWindow(x, y, dx, dy, title);
+ drawTextAtWithMargin(x + 1, y + 2, (x + dx - 1) * 8, content, 1);
+}
+
+enum EGameMenuState handleCursor(const enum EGameMenuState* options, uint8_t optionsCount, const enum ECommand cmd, enum EGameMenuState backState) {
+
+ switch (cmd) {
+ case kCommandBack:
+ return backState;
+ case kCommandUp:
+ playSound(2);
+ --cursorPosition;
+ break;
+ case kCommandDown:
+ playSound(2);
+ ++cursorPosition;
+ break;
+ case kCommandFire1:
+ case kCommandFire2:
+ case kCommandFire3:
+ return options[cursorPosition];
+ }
+
+ if (cursorPosition >= optionsCount) {
+ cursorPosition = optionsCount - 1;
+ }
+
+ if (cursorPosition < 0) {
+ cursorPosition = 0;
+ }
+
+ return kResumeCurrentState;
+}
diff --git a/tools/svg-triangulator/newtitle.svg b/tools/svg-triangulator/newtitle.svg
index 24374f656..e0b6b2370 100644
--- a/tools/svg-triangulator/newtitle.svg
+++ b/tools/svg-triangulator/newtitle.svg
@@ -26,16 +26,16 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="2.375346"
- inkscape:cx="23.575513"
- inkscape:cy="62.306712"
+ inkscape:zoom="4.0346656"
+ inkscape:cx="75.347013"
+ inkscape:cy="57.625594"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
- inkscape:window-width="1312"
- inkscape:window-height="449"
- inkscape:window-x="75"
- inkscape:window-y="25"
+ inkscape:window-width="1440"
+ inkscape:window-height="872"
+ inkscape:window-x="0"
+ inkscape:window-y="28"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true"
@@ -114,183 +114,126 @@
inkscape:groupmode="layer"
id="layer1">
-
-
-
-
-
+ sodipodi:nodetypes="cccccc" />
-
+ sodipodi:nodetypes="cccccc" />
+ sodipodi:nodetypes="cccc" />
-
-
-
-
-
+
+
+
-
+ id="path3031"
+ d="M 1.34075 9.69841 L 1.44119 21.1627 L 43.3161 17.2753 Z"
+ style="opacity:1;fill:#918a6f;stroke:none;stroke-width:0.117774;stroke-opacity:1" />
-
+
+ sodipodi:nodetypes="ccccccc" />
+ sodipodi:nodetypes="ccccc" />
+ d="M 62.8037 95.7691 L 58.7016 67.3665 L 53.4743 84.92 Z"
+ style="opacity:1;fill:#808000;stroke:none;stroke-width:0.485158;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ d="M 53.5138 84.9797 L 58.7259 67.3832 L 53.4918 59.2398 Z"
+ style="opacity:1;fill:#969600;fill-opacity:1;stroke:none;stroke-width:0.485158;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-
+
+
+
+
+