diff --git a/README.txt b/README.txt index 3749006..e2a05ed 100644 --- a/README.txt +++ b/README.txt @@ -1,6 +1,6 @@ REminiscence README -Release version: 0.3.6 +Release version: 0.3.7 ------------------------------------------------------------------------------- diff --git a/collision.cpp b/collision.cpp index 7769d94..9e542eb 100644 --- a/collision.cpp +++ b/collision.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "game.h" diff --git a/cutscene.cpp b/cutscene.cpp index ca090bf..a90dff0 100644 --- a/cutscene.cpp +++ b/cutscene.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include @@ -117,31 +117,31 @@ uint16_t Cutscene::findTextSeparators(const uint8_t *p) { return ret; } -void Cutscene::drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, uint8_t n) { - debug(DBG_CUT, "Cutscene::drawText(x=%d, y=%d, c=%d)", x, y, color); +void Cutscene::drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, int textJustify) { + debug(DBG_CUT, "Cutscene::drawText(x=%d, y=%d, c=%d, justify=%d)", x, y, color, textJustify); Video::drawCharFunc dcf = _vid->_drawChar; const uint8_t *fnt = (_res->_lang == LANG_JP) ? Video::_font8Jp : _res->_fnt; uint16_t last_sep = 0; - if (n != 0) { + if (textJustify != kTextJustifyLeft) { last_sep = findTextSeparators(p); - if (n != 2) { - last_sep = 30; + if (textJustify != kTextJustifyCenter) { + last_sep = (_res->_lang == LANG_JP) ? 20 : 30; } } const uint8_t *sep = _textSep; y += 50; - x += 8; + x += (_res->_lang == LANG_JP) ? 0 : 8; int16_t yy = y; int16_t xx = x; - if (n != 0) { - xx += ((last_sep - *sep++) & 0xFE) * 4; + if (textJustify != kTextJustifyLeft) { + xx += ((last_sep - *sep++) / 2) * 8; } for (; *p != 0xA && *p; ++p) { if (isNewLineChar(*p, _res)) { yy += 8; xx = x; - if (n != 0) { - xx += ((last_sep - *sep++) & 0xFE) * 4; + if (textJustify != kTextJustifyLeft) { + xx += ((last_sep - *sep++) / 2) * 8; } } else if (*p == 0x20) { xx += 8; @@ -199,7 +199,7 @@ void Cutscene::drawCreditsText() { } else { _creditsTextCounter -= 10; } - drawText((_creditsTextPosX - 1) * 8, _creditsTextPosY * 8, _textBuf, 0xEF, _page1, 0); + drawText((_creditsTextPosX - 1) * 8, _creditsTextPosY * 8, _textBuf, 0xEF, _page1, kTextJustifyLeft); } } @@ -397,8 +397,8 @@ void Cutscene::op_drawStringAtBottom() { if (strId != 0xFFFF) { const uint8_t *str = _res->getCineString(strId); if (str) { - drawText(0, 129, str, 0xEF, _page1, 1); - drawText(0, 129, str, 0xEF, _pageC, 1); + drawText(0, 129, str, 0xEF, _page1, kTextJustifyAlign); + drawText(0, 129, str, 0xEF, _pageC, kTextJustifyAlign); } } } @@ -843,7 +843,7 @@ void Cutscene::op_drawStringAtPos() { const uint8_t *str = _res->getCineString(strId & 0xFFF); if (str) { uint8_t color = 0xD0 + (strId >> 0xC); - drawText(x, y, str, color, _page1, 2); + drawText(x, y, str, color, _page1, kTextJustifyCenter); } // 'voyage' - cutscene script redraws the string to refresh the screen if (_id == 0x34 && (strId & 0xFFF) == 0x45) { @@ -961,7 +961,7 @@ void Cutscene::mainLoop(uint16_t offset) { } } -void Cutscene::load(uint16_t cutName) { +bool Cutscene::load(uint16_t cutName) { assert(cutName != 0xFFFF); const char *name = _namesTable[cutName & 0xFF]; switch (_res->_type) { @@ -994,6 +994,19 @@ void Cutscene::load(uint16_t cutName) { break; } _res->load_CINE(); + return _res->_cmd && _res->_pol; +} + +void Cutscene::unload() { + switch (_res->_type) { + case kResourceTypeAmiga: + _res->unload(Resource::OT_CMP); + break; + case kResourceTypeDOS: + _res->unload(Resource::OT_CMD); + _res->unload(Resource::OT_POL); + break; + } } void Cutscene::prepare() { @@ -1027,8 +1040,10 @@ void Cutscene::playCredits() { prepare(); uint16_t cutName = _offsetsTable[cut_id * 2 + 0]; uint16_t cutOff = _offsetsTable[cut_id * 2 + 1]; - load(cutName); - mainLoop(cutOff); + if (load(cutName)) { + mainLoop(cutOff); + unload(); + } } _creditsSequence = false; } @@ -1050,7 +1065,7 @@ void Cutscene::playText(const char *str) { } const int y = (128 - lines * 8) / 2; memset(_page1, 0xC0, _vid->_layerSize); - drawText(0, y, (const uint8_t *)str, 0xC1, _page1, 1); + drawText(0, y, (const uint8_t *)str, 0xC1, _page1, kTextJustifyAlign); _stub->copyRect(0, 0, _vid->_w, _vid->_h, _page1, 256); _stub->updateScreen(0); @@ -1106,8 +1121,12 @@ void Cutscene::play() { } } } else if (cutName != 0xFFFF) { - load(cutName); - mainLoop(cutOff); + if (load(cutName)) { + mainLoop(cutOff); + unload(); + } + } else if (_id == 8 && g_options.play_stone_cutscene) { + playSet(_caillouSetData, 0x5E4); } _vid->fullRefresh(); if (_id != 0x3D) { @@ -1115,3 +1134,138 @@ void Cutscene::play() { } } } + +static void readSetPalette(const uint8_t *p, uint16_t offset, uint16_t *palette) { + offset += 12; + for (int i = 0; i < 16; ++i) { + const uint16_t color = READ_BE_UINT16(p + offset); offset += 2; + palette[i] = color; + } +} + +void Cutscene::drawSetShape(const uint8_t *p, uint16_t offset, int x, int y, uint8_t *paletteLut) { + const int count = READ_BE_UINT16(p + offset); offset += 2; + for (int i = 0; i < count - 1; ++i) { + offset += 5; // shape_marker + const int verticesCount = p[offset++]; + const int ix = (int16_t)READ_BE_UINT16(p + offset); offset += 2; + const int iy = (int16_t)READ_BE_UINT16(p + offset); offset += 2; + uint8_t color = paletteLut[p[offset]]; offset += 2; + + if (verticesCount == 255) { + int rx = (int16_t)READ_BE_UINT16(p + offset); offset += 2; + int ry = (int16_t)READ_BE_UINT16(p + offset); offset += 2; + Point pt; + pt.x = x + ix; + pt.y = y + iy; + _gfx.drawEllipse(color, false, &pt, rx, ry); + } else { + for (int i = 0; i < verticesCount; ++i) { + _vertices[i].x = x + (int16_t)READ_BE_UINT16(p + offset); offset += 2; + _vertices[i].y = y + (int16_t)READ_BE_UINT16(p + offset); offset += 2; + } + _gfx.drawPolygon(color, false, _vertices, verticesCount); + } + } +} + +static uint16_t readSetShapeOffset(const uint8_t *p, int offset) { + const int count = READ_BE_UINT16(p + offset); offset += 2; + for (int i = 0; i < count - 1; ++i) { + offset += 5; // shape_marker + const int verticesCount = p[offset++]; + offset += 6; + if (verticesCount == 255) { + offset += 4; // ellipse + } else { + offset += verticesCount * 4; // polygon + } + } + return offset; +} + +static const int kMaxShapesCount = 16; +static const int kMaxPaletteSize = 32; + +void Cutscene::playSet(const uint8_t *p, int offset) { + SetShape backgroundShapes[kMaxShapesCount]; + const int bgCount = READ_BE_UINT16(p + offset); offset += 2; + assert(bgCount <= kMaxShapesCount); + for (int i = 0; i < bgCount; ++i) { + uint16_t nextOffset = readSetShapeOffset(p, offset); + backgroundShapes[i].offset = offset; + backgroundShapes[i].size = nextOffset - offset; + offset = nextOffset + 45; + } + SetShape foregroundShapes[kMaxShapesCount]; + const int fgCount = READ_BE_UINT16(p + offset); offset += 2; + assert(fgCount <= kMaxShapesCount); + for (int i = 0; i < fgCount; ++i) { + uint16_t nextOffset = readSetShapeOffset(p, offset); + foregroundShapes[i].offset = offset; + foregroundShapes[i].size = nextOffset - offset; + offset = nextOffset + 45; + } + + prepare(); + _gfx._layer = _page1; + + offset = 10; + const int frames = READ_BE_UINT16(p + offset); offset += 2; + for (int i = 0; i < frames && !_stub->_pi.quit; ++i) { + const uint32_t timestamp = _stub->getTimeStamp(); + + memset(_page1, 0xC0, _vid->_layerSize); + + const int shapeBg = READ_BE_UINT16(p + offset); offset += 2; + const int count = READ_BE_UINT16(p + offset); offset += 2; + + uint16_t paletteBuffer[kMaxPaletteSize]; + memset(paletteBuffer, 0, sizeof(paletteBuffer)); + readSetPalette(p, backgroundShapes[shapeBg].offset + backgroundShapes[shapeBg].size, paletteBuffer); + int paletteLutSize = 16; + + uint8_t paletteLut[kMaxPaletteSize]; + for (int j = 0; j < 16; ++j) { + paletteLut[j] = 0xC0 + j; + } + + drawSetShape(p, backgroundShapes[shapeBg].offset, 0, 0, paletteLut); + for (int j = 0; j < count; ++j) { + const int shapeFg = READ_BE_UINT16(p + offset); offset += 2; + const int shapeX = (int16_t)READ_BE_UINT16(p + offset); offset += 2; + const int shapeY = (int16_t)READ_BE_UINT16(p + offset); offset += 2; + + uint16_t tempPalette[16]; + readSetPalette(p, foregroundShapes[shapeFg].offset + foregroundShapes[shapeFg].size, tempPalette); + for (int k = 0; k < 16; ++k) { + bool found = false; + for (int l = 0; l < paletteLutSize; ++l) { + if (tempPalette[k] == paletteBuffer[l]) { + found = true; + paletteLut[k] = 0xC0 + l; + break; + } + } + if (!found) { + assert(paletteLutSize < kMaxPaletteSize); + paletteLut[k] = 0xC0 + paletteLutSize; + paletteBuffer[paletteLutSize++] = tempPalette[k]; + } + } + + drawSetShape(p, foregroundShapes[shapeFg].offset, shapeX, shapeY, paletteLut); + } + + for (int j = 0; j < paletteLutSize; ++j) { + Color c = Video::AMIGA_convertColor(paletteBuffer[j]); + _stub->setPaletteEntry(0xC0 + j, &c); + } + + _stub->copyRect(0, 0, _vid->_w, _vid->_h, _page1, 256); + _stub->updateScreen(0); + const int diff = 6 * TIMER_SLICE - (_stub->getTimeStamp() - timestamp); + _stub->sleep((diff < 16) ? 16 : diff); + _stub->processEvents(); + } +} diff --git a/cutscene.h b/cutscene.h index 34ce937..f0d7bb1 100644 --- a/cutscene.h +++ b/cutscene.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef CUTSCENE_H__ @@ -22,6 +22,17 @@ struct Cutscene { TIMER_SLICE = 15 }; + enum { + kTextJustifyLeft = 0, + kTextJustifyAlign = 1, + kTextJustifyCenter = 2, + }; + + struct SetShape { + uint16_t offset; + uint16_t size; + }; + struct Text { int num; const char *str; @@ -41,6 +52,7 @@ struct Cutscene { static const uint8_t _protectionShapeData[]; static const Text _frTextsTable[]; static const Text _enTextsTable[]; + static const uint8_t _caillouSetData[]; Graphics _gfx; Resource *_res; @@ -99,7 +111,7 @@ struct Cutscene { void setPalette(); void setRotationTransform(uint16_t a, uint16_t b, uint16_t c); uint16_t findTextSeparators(const uint8_t *p); - void drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, uint8_t n); + void drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, int textJustify); void swapLayers(); void drawCreditsText(); void drawProtectionShape(uint8_t shapeNum, int16_t zoom); @@ -125,11 +137,15 @@ struct Cutscene { uint8_t fetchNextCmdByte(); uint16_t fetchNextCmdWord(); void mainLoop(uint16_t offset); - void load(uint16_t cutName); + bool load(uint16_t cutName); + void unload(); void prepare(); void playCredits(); void playText(const char *str); void play(); + + void drawSetShape(const uint8_t *p, uint16_t offset, int x, int y, uint8_t *paletteLut); + void playSet(const uint8_t *p, int offset); }; #endif // CUTSCENE_H__ diff --git a/file.cpp b/file.cpp index 26a3598..19100e6 100644 --- a/file.cpp +++ b/file.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include diff --git a/file.h b/file.h index 47d4a10..a80b996 100644 --- a/file.h +++ b/file.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef FILE_H__ diff --git a/fs.cpp b/fs.cpp index b5c4b0f..7621424 100644 --- a/fs.cpp +++ b/fs.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifdef _WIN32 diff --git a/fs.h b/fs.h index 4af3591..84c4b1b 100644 --- a/fs.h +++ b/fs.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef FS_H__ diff --git a/game.cpp b/game.cpp index 5404acb..8467647 100644 --- a/game.cpp +++ b/game.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include @@ -19,7 +19,7 @@ Game::Game(SystemStub *stub, FileSystem *fs, const char *savePath, int level, Re _stub(stub), _fs(fs), _savePath(savePath) { _stateSlot = 1; _inp_demPos = 0; - _skillLevel = _menu._skill = 1; + _skillLevel = _menu._skill = kSkillNormal; _currentLevel = _menu._level = level; _demoBin = -1; } @@ -96,7 +96,7 @@ void Game::run() { if (_res._demLen == 0) { continue; } - _skillLevel = 1; + _skillLevel = kSkillNormal; _currentLevel = _demoInputs[_demoBin].level; _randSeed = 0; _mix.stopMusic(); @@ -1460,6 +1460,7 @@ void Game::loadLevelData() { } else { _inp_demPos = 1; } + _printLevelCodeCounter = 0; } for (uint16_t i = 0; i < _res._pgeNum; ++i) { diff --git a/game.h b/game.h index 39d4539..01a563f 100644 --- a/game.h +++ b/game.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef GAME_H__ diff --git a/graphics.cpp b/graphics.cpp index 29a173a..b7b4832 100644 --- a/graphics.cpp +++ b/graphics.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "graphics.h" diff --git a/graphics.h b/graphics.h index f838855..2027a6e 100644 --- a/graphics.h +++ b/graphics.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef GRAPHICS_H__ diff --git a/intern.h b/intern.h index a4849db..cf54b79 100644 --- a/intern.h +++ b/intern.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef INTERN_H__ @@ -83,6 +83,12 @@ enum ResourceType { kResourceTypeDOS }; +enum Skill { + kSkillEasy = 0, + kSkillNormal, + kSkillExpert, +}; + struct Options { bool bypass_protection; bool play_disabled_cutscenes; @@ -91,6 +97,7 @@ struct Options { bool use_tiledata; bool use_text_cutscenes; bool use_seq_cutscenes; + bool play_stone_cutscene; }; struct Color { diff --git a/main.cpp b/main.cpp index 4bcd7a1..b57e4d7 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include @@ -35,6 +35,7 @@ static int detectVersion(FileSystem *fs) { { "DEMO_UK.ABA", kResourceTypeDOS, "DOS (Demo)" }, { "INTRO.SEQ", kResourceTypeDOS, "DOS CD" }, { "LEVEL1.MAP", kResourceTypeDOS, "DOS" }, + { "LEVEL1.BNQ", kResourceTypeDOS, "DOS (Demo)" }, { "LEVEL1.LEV", kResourceTypeAmiga, "Amiga" }, { "DEMO.LEV", kResourceTypeAmiga, "Amiga (Demo)" }, { 0, -1, 0 } @@ -96,6 +97,7 @@ static void initOptions() { { "use_tiledata", &g_options.use_tiledata }, { "use_text_cutscenes", &g_options.use_text_cutscenes }, { "use_seq_cutscenes", &g_options.use_seq_cutscenes }, + { "play_stone_cutscene", &g_options.play_stone_cutscene }, { 0, 0 } }; static const char *filename = "rs.cfg"; diff --git a/menu.cpp b/menu.cpp index 08d91b3..c788b10 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "game.h" @@ -13,7 +13,7 @@ Menu::Menu(Resource *res, SystemStub *stub, Video *vid) : _res(res), _stub(stub), _vid(vid) { - _skill = 1; + _skill = kSkillNormal; _level = 0; } @@ -120,11 +120,11 @@ void Menu::handleSkillScreen() { loadPicture("menu3"); _vid->fullRefresh(); drawString(_res->getMenuString(LocaleData::LI_12_SKILL_LEVEL), 12, 4, 3); - int skill_level = _skill; + int currentSkill = _skill; do { - drawString(_res->getMenuString(LocaleData::LI_13_EASY), 15, 14, colors[skill_level][0]); - drawString(_res->getMenuString(LocaleData::LI_14_NORMAL), 17, 14, colors[skill_level][1]); - drawString(_res->getMenuString(LocaleData::LI_15_EXPERT), 19, 14, colors[skill_level][2]); + drawString(_res->getMenuString(LocaleData::LI_13_EASY), 15, 14, colors[currentSkill][0]); + drawString(_res->getMenuString(LocaleData::LI_14_NORMAL), 17, 14, colors[currentSkill][1]); + drawString(_res->getMenuString(LocaleData::LI_15_EXPERT), 19, 14, colors[currentSkill][2]); _vid->updateScreen(); _stub->sleep(EVENTS_DELAY); @@ -132,18 +132,24 @@ void Menu::handleSkillScreen() { if (_stub->_pi.dirMask & PlayerInput::DIR_UP) { _stub->_pi.dirMask &= ~PlayerInput::DIR_UP; - if (skill_level != 0) { - --skill_level; - } else { - skill_level = 2; + switch (currentSkill) { + case kSkillNormal: + currentSkill = kSkillEasy; + break; + case kSkillExpert: + currentSkill = kSkillNormal; + break; } } if (_stub->_pi.dirMask & PlayerInput::DIR_DOWN) { _stub->_pi.dirMask &= ~PlayerInput::DIR_DOWN; - if (skill_level != 2) { - ++skill_level; - } else { - skill_level = 0; + switch (currentSkill) { + case kSkillEasy: + currentSkill = kSkillNormal; + break; + case kSkillNormal: + currentSkill = kSkillExpert; + break; } } if (_stub->_pi.escape) { @@ -152,7 +158,7 @@ void Menu::handleSkillScreen() { } if (_stub->_pi.enter) { _stub->_pi.enter = false; - _skill = skill_level; + _skill = currentSkill; return; } } while (!_stub->_pi.quit); @@ -272,18 +278,24 @@ bool Menu::handleLevelScreen() { } if (_stub->_pi.dirMask & PlayerInput::DIR_LEFT) { _stub->_pi.dirMask &= ~PlayerInput::DIR_LEFT; - if (currentSkill != 0) { - --currentSkill; - } else { - currentSkill = 2; + switch (currentSkill) { + case kSkillNormal: + currentSkill = kSkillEasy; + break; + case kSkillExpert: + currentSkill = kSkillNormal; + break; } } if (_stub->_pi.dirMask & PlayerInput::DIR_RIGHT) { _stub->_pi.dirMask &= ~PlayerInput::DIR_RIGHT; - if (currentSkill != 2) { - ++currentSkill; - } else { - currentSkill = 0; + switch (currentSkill) { + case kSkillEasy: + currentSkill = kSkillNormal; + break; + case kSkillNormal: + currentSkill = kSkillExpert; + break; } } if (_stub->_pi.escape) { diff --git a/menu.h b/menu.h index 292dd01..1b1b95b 100644 --- a/menu.h +++ b/menu.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef MENU_H__ diff --git a/mixer.cpp b/mixer.cpp index ead0224..f647416 100644 --- a/mixer.cpp +++ b/mixer.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "mixer.h" diff --git a/mixer.h b/mixer.h index de72779..c633659 100644 --- a/mixer.h +++ b/mixer.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef MIXER_H__ diff --git a/mod_player.cpp b/mod_player.cpp index bdfa1f3..8ff6786 100644 --- a/mod_player.cpp +++ b/mod_player.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "file.h" diff --git a/mod_player.h b/mod_player.h index 195d1e9..9862b37 100644 --- a/mod_player.h +++ b/mod_player.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef MOD_PLAYER_H__ diff --git a/ogg_player.cpp b/ogg_player.cpp index dc6a0a5..45a1f0e 100644 --- a/ogg_player.cpp +++ b/ogg_player.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifdef USE_TREMOR diff --git a/ogg_player.h b/ogg_player.h index 6e5e2a6..d06e422 100644 --- a/ogg_player.h +++ b/ogg_player.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef OGG_PLAYER_H__ diff --git a/piege.cpp b/piege.cpp index ab149b0..52da2d4 100644 --- a/piege.cpp +++ b/piege.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "cutscene.h" diff --git a/resource.cpp b/resource.cpp index 6bf5a38..9840682 100644 --- a/resource.cpp +++ b/resource.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "file.h" @@ -59,10 +59,12 @@ void Resource::init() { _isDemo = _fs->exists("demo.lev"); break; case kResourceTypeDOS: - if (_fs->exists(ResourceAba::FILENAME)) { + if (_fs->exists(ResourceAba::FILENAME)) { // fbdemous _aba = new ResourceAba(_fs); _aba->readEntries(); _isDemo = true; + } else if (!_fs->exists("LEVEL1.MAP")) { // fbdemofr (no cutscenes) + _isDemo = true; } break; } @@ -304,11 +306,8 @@ static const char *getCineName(Language lang, ResourceType type) { void Resource::load_CINE() { const char *prefix = getCineName(_lang, _type); debug(DBG_RES, "Resource::load_CINE('%s')", prefix); - if (_type == kResourceTypeAmiga) { - if (_isDemo) { - // file not present in demo data files - return; - } + switch (_type) { + case kResourceTypeAmiga: if (_cine_txt == 0) { snprintf(_entryName, sizeof(_entryName), "%sCINE.TXT", prefix); File f; @@ -332,52 +331,61 @@ void Resource::load_CINE() { } p = sep + 1; } + } else if (_isDemo) { + // file not present in demo datafiles + return; } - if (!_cine_txt) { - error("Cannot load '%s'", _entryName); - } - } - return; - } - if (_cine_off == 0) { - snprintf(_entryName, sizeof(_entryName), "%sCINE.BIN", prefix); - File f; - if (f.open(_entryName, "rb", _fs)) { - int len = f.size(); - _cine_off = (uint8_t *)malloc(len); - if (!_cine_off) { - error("Unable to allocate cinematics offsets"); - } - f.read(_cine_off, len); - if (f.ioErr()) { - error("I/O error when reading '%s'", _entryName); - } - } else if (_aba) { - _cine_off = _aba->loadEntry(_entryName); - } - if (!_cine_off) { - error("Cannot load '%s'", _entryName); - } - } - if (_cine_txt == 0) { - snprintf(_entryName, sizeof(_entryName), "%sCINE.TXT", prefix); - File f; - if (f.open(_entryName, "rb", _fs)) { - int len = f.size(); - _cine_txt = (uint8_t *)malloc(len); - if (!_cine_txt) { - error("Unable to allocate cinematics text data"); - } - f.read(_cine_txt, len); - if (f.ioErr()) { - error("I/O error when reading '%s'", _entryName); - } - } else if (_aba) { - _cine_txt = _aba->loadEntry(_entryName); } if (!_cine_txt) { error("Cannot load '%s'", _entryName); } + break; + case kResourceTypeDOS: + if (_cine_off == 0) { + snprintf(_entryName, sizeof(_entryName), "%sCINE.BIN", prefix); + File f; + if (f.open(_entryName, "rb", _fs)) { + int len = f.size(); + _cine_off = (uint8_t *)malloc(len); + if (!_cine_off) { + error("Unable to allocate cinematics offsets"); + } + f.read(_cine_off, len); + if (f.ioErr()) { + error("I/O error when reading '%s'", _entryName); + } + } else if (_aba) { + _cine_off = _aba->loadEntry(_entryName); + } else if (_isDemo) { + return; // some demos do not have cutscene datafiles + } + } + if (!_cine_off) { + error("Cannot load '%s'", _entryName); + } + if (_cine_txt == 0) { + snprintf(_entryName, sizeof(_entryName), "%sCINE.TXT", prefix); + File f; + if (f.open(_entryName, "rb", _fs)) { + int len = f.size(); + _cine_txt = (uint8_t *)malloc(len); + if (!_cine_txt) { + error("Unable to allocate cinematics text data"); + } + f.read(_cine_txt, len); + if (f.ioErr()) { + error("I/O error when reading '%s'", _entryName); + } + } else if (_aba) { + _cine_txt = _aba->loadEntry(_entryName); + } else if (_isDemo) { + return; // some demos do not have cutscene datafiles + } + } + if (!_cine_txt) { + error("Cannot load '%s'", _entryName); + } + break; } } @@ -450,6 +458,28 @@ static const char *getTextBin(Language lang, ResourceType type) { } } +void Resource::unload(int objType) { + switch (objType) { + case OT_CMD: + free(_cmd); + _cmd = 0; + break; + case OT_POL: + free(_pol); + _pol = 0; + break; + case OT_CMP: + free(_cmd); + _cmd = 0; + free(_pol); + _pol = 0; + break; + default: + error("Unimplemented Resource::load() type %d", objType); + break; + } +} + void Resource::load(const char *objName, int objType, const char *ext) { debug(DBG_RES, "Resource::load('%s', %d)", objName, objType); LoadStub loadStub = 0; @@ -630,6 +660,14 @@ void Resource::load(const char *objName, int objType, const char *ext) { } return; } + } else if (_isDemo) { + // some demos (fbdemofr.zip) do not have the cutscene datafiles included + switch (objType) { + case OT_CMD: + case OT_POL: + warning("Unable to load '%s' type %d", _entryName, objType); + return; + } } error("Cannot open '%s'", _entryName); } diff --git a/resource.h b/resource.h index 3de9763..75c54ef 100644 --- a/resource.h +++ b/resource.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef RESOURCE_H__ @@ -183,6 +183,7 @@ struct Resource { void load_CINE(); void load_TEXT(); void free_TEXT(); + void unload(int objType); void load(const char *objName, int objType, const char *ext = 0); void load_CT(File *pf); void load_FNT(File *pf); diff --git a/rs.cfg b/rs.cfg index 54bc276..db41998 100644 --- a/rs.cfg +++ b/rs.cfg @@ -18,3 +18,6 @@ use_text_cutscenes=false # enable playback of .SEQ cutscenes (use polygonal if false) use_seq_cutscenes=true + +# enable playback of 'CAILLOU-F.SET' cutscene +play_stone_cutscene=true diff --git a/scaler.cpp b/scaler.cpp index b7ab11f..7df63d6 100644 --- a/scaler.cpp +++ b/scaler.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "scaler.h" diff --git a/scaler.h b/scaler.h index cf32150..5070c69 100644 --- a/scaler.h +++ b/scaler.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef SCALER_H__ diff --git a/seq_player.cpp b/seq_player.cpp index 18216e3..5349928 100644 --- a/seq_player.cpp +++ b/seq_player.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "file.h" diff --git a/seq_player.h b/seq_player.h index b20dfdf..93eb1a8 100644 --- a/seq_player.h +++ b/seq_player.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef SEQ_PLAYER_H__ diff --git a/sfx_player.cpp b/sfx_player.cpp index 5188082..5de5c98 100644 --- a/sfx_player.cpp +++ b/sfx_player.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "mixer.h" diff --git a/sfx_player.h b/sfx_player.h index d88e8f3..a402f04 100644 --- a/sfx_player.h +++ b/sfx_player.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef SFX_PLAYER_H__ diff --git a/staticres.cpp b/staticres.cpp index 077aa83..6d9c5d4 100644 --- a/staticres.cpp +++ b/staticres.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "game.h" @@ -5088,3 +5088,404 @@ const uint16_t SfxPlayer::_periodTable[] = { 0x153, 0x140, 0x12E, 0x11D, 0x10D, 0x0FE, 0x0F0, 0x0E2, 0x0D6, 0x0CA, 0x0BE, 0x0B4, 0x0AA, 0x0A0, 0x097, 0x08F, 0x087, 0x07F, 0x078, 0x071 }; + +const uint8_t Cutscene::_caillouSetData[] = { + 0x50, 0x4f, 0x4c, 0x59, 0x00, 0x0a, 0x00, 0x02, 0xff, 0xff, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x01, 0xff, 0xb8, + 0xff, 0xbd, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, + 0x00, 0x17, 0x00, 0x02, 0xff, 0xf0, 0xff, 0xcf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x26, + 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x02, 0x00, 0x1c, 0xff, 0xe2, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x25, 0x00, 0x17, 0x00, 0x03, 0x00, 0x03, 0xff, 0xdd, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, + 0x00, 0x03, 0x00, 0x0d, 0xff, 0xe2, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x04, 0x00, 0x02, + 0xff, 0xea, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x14, + 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0f, 0x00, 0x05, 0x00, 0x03, 0xff, 0xf2, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0xff, 0xed, 0x00, 0x21, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0x00, 0x05, 0xff, 0xed, 0xff, 0xe5, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0xf7, 0xff, 0xf7, 0x00, 0x05, 0xff, 0xd5, 0xff, 0xdd, + 0x00, 0x0d, 0xff, 0xc6, 0x00, 0x27, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0xff, 0xcd, 0xff, 0xea, 0x00, 0x06, 0xff, 0xe6, 0xff, 0xf4, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0xff, 0x92, 0xff, 0xd7, 0x00, 0x06, 0xff, 0xaf, 0xff, 0xe3, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x14, 0xff, 0xff, 0x00, 0x0e, 0x00, 0x99, 0x00, 0x3b, 0x00, 0x45, 0x00, 0x30, 0x00, 0x59, + 0x00, 0x30, 0x00, 0x88, 0x00, 0x35, 0x00, 0x99, 0x00, 0x3c, 0x00, 0x86, 0x00, 0x37, 0x00, 0x4d, + 0x00, 0x23, 0x00, 0x2a, 0x00, 0x69, 0x00, 0x47, 0x00, 0x62, 0x00, 0x54, 0x00, 0x62, 0x00, 0x6d, + 0x00, 0x62, 0x00, 0x53, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x3e, 0x00, 0x92, 0x00, 0x51, 0xff, 0xff, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, + 0x00, 0x5a, 0x00, 0x03, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x0a, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x0e, 0x00, 0xbd, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x10, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x01, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x7f, + 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x35, 0x00, 0x00, 0x0b, 0x0b, + 0x00, 0x35, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x04, 0x00, 0x10, 0x00, 0x6d, 0x0b, 0x0b, 0x00, 0x10, 0x00, 0x6d, 0x00, 0xef, 0x00, 0x74, + 0x00, 0xef, 0x00, 0x7f, 0x00, 0x18, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, + 0x00, 0x2a, 0x08, 0x08, 0x00, 0x70, 0x00, 0x2a, 0x00, 0x6d, 0x00, 0x2f, 0x00, 0x64, 0x00, 0x33, + 0x00, 0x4e, 0x00, 0x37, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x2f, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0xff, 0xfe, 0x00, 0x19, 0x05, 0x05, 0x00, 0x68, 0x00, 0x19, + 0x00, 0x71, 0x00, 0x1c, 0x00, 0x72, 0x00, 0x22, 0x00, 0x70, 0x00, 0x2a, 0x00, 0x6a, 0x00, 0x2f, + 0x00, 0x57, 0x00, 0x33, 0x00, 0x44, 0x00, 0x35, 0x00, 0x20, 0x00, 0x32, 0xff, 0xfe, 0x00, 0x2e, + 0xff, 0xfe, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x2f, 0x00, 0x01, 0x03, 0x03, + 0x00, 0x3b, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x02, 0x00, 0x46, 0x00, 0x08, 0x00, 0x57, 0x00, 0x12, + 0x00, 0x65, 0x00, 0x17, 0x00, 0x6d, 0x00, 0x1c, 0x00, 0x67, 0x00, 0x22, 0x00, 0x5f, 0x00, 0x25, + 0x00, 0x4e, 0x00, 0x28, 0x00, 0x2f, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x04, + 0x00, 0x09, 0x02, 0x02, 0x00, 0x31, 0x00, 0x09, 0x00, 0x38, 0x00, 0x08, 0x00, 0x41, 0x00, 0x0c, + 0x00, 0x46, 0x00, 0x13, 0x00, 0x4e, 0x00, 0x17, 0x00, 0x56, 0x00, 0x19, 0x00, 0x49, 0x00, 0x1f, + 0x00, 0x37, 0x00, 0x21, 0x00, 0x34, 0x00, 0x22, 0x00, 0x30, 0x00, 0x25, 0x00, 0x31, 0x00, 0x27, + 0x00, 0x22, 0x00, 0x28, 0x00, 0x1b, 0x00, 0x29, 0x00, 0x14, 0x00, 0x29, 0x00, 0x05, 0x00, 0x28, + 0x00, 0x01, 0x00, 0x26, 0xff, 0xff, 0x00, 0x23, 0xff, 0xff, 0x00, 0x1e, 0xff, 0xff, 0x00, 0x18, + 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x0a, 0x00, 0x07, 0x04, 0x04, + 0x00, 0x08, 0x00, 0x06, 0x00, 0x34, 0x00, 0x07, 0x00, 0x31, 0x00, 0x08, 0x00, 0x28, 0x00, 0x10, + 0x00, 0x21, 0x00, 0x17, 0x00, 0x15, 0x00, 0x19, 0x00, 0x0d, 0x00, 0x15, 0x00, 0x07, 0x00, 0x0e, + 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x04, 0x00, 0x30, 0x05, 0x05, + 0xff, 0xff, 0x00, 0x2f, 0x00, 0x21, 0x00, 0x32, 0x00, 0x0c, 0x00, 0x34, 0x00, 0x04, 0x00, 0x33, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x04, 0x00, 0x00, 0x07, 0x07, 0x00, 0x39, 0xff, 0xff, + 0x00, 0x38, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0a, 0x00, 0x11, 0x00, 0x0b, 0x00, 0x01, 0x00, 0x06, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x44, 0x00, 0x05, 0x02, 0x02, + 0x00, 0x3f, 0x00, 0x04, 0x00, 0x46, 0x00, 0x0a, 0x00, 0x58, 0x00, 0x13, 0x00, 0x59, 0x00, 0x15, + 0x00, 0x49, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x2e, 0x00, 0x0c, 0x03, 0x03, + 0x00, 0x3f, 0x00, 0x0c, 0x00, 0x41, 0x00, 0x0e, 0x00, 0x46, 0x00, 0x14, 0x00, 0x4e, 0x00, 0x18, + 0x00, 0x54, 0x00, 0x19, 0x00, 0x50, 0x00, 0x1b, 0x00, 0x4a, 0x00, 0x1d, 0x00, 0x44, 0x00, 0x1e, + 0x00, 0x38, 0x00, 0x1c, 0x00, 0x2e, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x0a, + 0x00, 0x0f, 0x03, 0x03, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x08, 0x00, 0x13, 0x00, 0x10, 0x00, 0x18, + 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x5c, 0x00, 0x16, 0x02, 0x02, + 0x00, 0x5a, 0x00, 0x15, 0x00, 0x57, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x1e, + 0x00, 0x29, 0x09, 0x09, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2f, 0x00, 0x2a, 0x00, 0x30, 0x00, 0x2f, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x1e, 0x00, 0x32, 0x00, 0x1e, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x09, 0x00, 0x00, 0x00, 0x26, 0x09, 0x09, 0x00, 0x00, 0x00, 0x26, 0x00, 0x02, 0x00, 0x28, + 0x00, 0x07, 0x00, 0x29, 0x00, 0x0e, 0x00, 0x2b, 0x00, 0x1d, 0x00, 0x2b, 0x00, 0x21, 0x00, 0x32, + 0x00, 0x0c, 0x00, 0x34, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x12, 0x00, 0x1f, 0x0a, 0x0a, 0x00, 0x1a, 0x00, 0x1f, 0x00, 0x12, 0x00, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x31, 0x00, 0x22, 0x0a, 0x0a, 0x00, 0x33, 0x00, 0x22, + 0x00, 0x31, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x30, 0x00, 0x25, 0x0a, 0x0a, + 0x00, 0x31, 0x00, 0x25, 0x00, 0x30, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x1f, + 0x00, 0x1c, 0x0a, 0x0a, 0x00, 0x25, 0x00, 0x1c, 0x00, 0x1f, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x1b, 0x00, 0x1e, 0x0a, 0x0a, 0x00, 0x1f, 0x00, 0x1e, 0x00, 0x1b, 0x00, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x19, 0x00, 0x19, 0x0a, 0x0a, 0x00, 0x19, 0x00, 0x19, + 0x00, 0x1c, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x24, 0x00, 0x08, 0x03, 0x03, + 0x00, 0x32, 0x00, 0x09, 0x00, 0x35, 0x00, 0x08, 0x00, 0x39, 0x00, 0x09, 0x00, 0x3e, 0x00, 0x0c, + 0x00, 0x3e, 0x00, 0x10, 0x00, 0x33, 0x00, 0x10, 0x00, 0x2f, 0x00, 0x13, 0x00, 0x29, 0x00, 0x18, + 0x00, 0x26, 0x00, 0x19, 0x00, 0x25, 0x00, 0x18, 0x00, 0x24, 0x00, 0x17, 0x00, 0x26, 0x00, 0x16, + 0x00, 0x2a, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, + 0x00, 0x00, 0x00, 0x45, 0x00, 0x17, 0x00, 0x73, 0x00, 0x19, 0x00, 0x7a, 0x00, 0x19, 0x00, 0x7f, + 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x06, 0x88, 0x0a, 0xaa, 0x0c, 0xcc, 0x06, 0x66, 0x0a, 0xa8, 0x0e, 0xa8, 0x06, 0x6a, + 0x04, 0x66, 0x08, 0x86, 0x08, 0x88, 0x04, 0x88, 0x0a, 0x8a, 0x0d, 0xdd, 0x0e, 0xee, 0x0f, 0xff, + 0x00, 0x00, 0x0e, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x58, 0x00, 0x34, 0x0a, + 0x0a, 0x00, 0xb1, 0x00, 0x4e, 0x00, 0x86, 0x00, 0x4e, 0x00, 0x7d, 0x00, 0x4b, 0x00, 0x77, 0x00, + 0x47, 0x00, 0x74, 0x00, 0x40, 0x00, 0x74, 0x00, 0x39, 0x00, 0x7e, 0x00, 0x2f, 0x00, 0x87, 0x00, + 0x2b, 0x00, 0x95, 0x00, 0x29, 0x00, 0xa3, 0x00, 0x2c, 0x00, 0xad, 0x00, 0x31, 0x00, 0xb8, 0x00, + 0x39, 0x00, 0xbf, 0x00, 0x41, 0x00, 0xbd, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x68, 0x00, 0x54, 0x0e, 0x0e, 0x00, 0x84, 0x00, 0x4e, 0x00, 0xa6, 0x00, 0x4d, 0x00, 0xad, 0x00, + 0x49, 0x00, 0xb2, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x67, 0x00, 0x34, 0x0b, + 0x0b, 0x00, 0x83, 0x00, 0x2d, 0x00, 0x91, 0x00, 0x29, 0x00, 0x9f, 0x00, 0x2a, 0x00, 0xaa, 0x00, + 0x2f, 0x00, 0x9b, 0x00, 0x37, 0x00, 0x8d, 0x00, 0x37, 0x00, 0x8a, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x08, 0x00, 0x5c, 0x00, 0x40, 0x0d, 0x0d, 0x00, 0x84, 0x00, 0x4d, 0x00, 0x7e, 0x00, + 0x41, 0x00, 0x78, 0x00, 0x3e, 0x00, 0x88, 0x00, 0x35, 0x00, 0x9a, 0x00, 0x37, 0x00, 0xa3, 0x00, + 0x3f, 0x00, 0xac, 0x00, 0x48, 0x00, 0xa5, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, + 0x91, 0x00, 0x4b, 0x0d, 0x0d, 0x00, 0xad, 0x00, 0x49, 0x00, 0xbf, 0x00, 0x40, 0x00, 0xbf, 0x00, + 0x44, 0x00, 0xbd, 0x00, 0x49, 0x00, 0xb3, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, + 0x58, 0x00, 0x44, 0x0e, 0x0e, 0x00, 0x74, 0x00, 0x39, 0x00, 0x7c, 0x00, 0x3c, 0x00, 0x84, 0x00, + 0x4e, 0x00, 0x7c, 0x00, 0x4b, 0x00, 0x77, 0x00, 0x48, 0x00, 0x74, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x06, 0x00, 0x58, 0x00, 0x34, 0x0c, 0x0c, 0x00, 0x7c, 0x00, 0x3b, 0x00, 0x74, 0x00, + 0x38, 0x00, 0x7e, 0x00, 0x2e, 0x00, 0x83, 0x00, 0x2c, 0x00, 0x8f, 0x00, 0x29, 0x00, 0x8a, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x70, 0x00, 0x40, 0x0c, 0x0c, 0x00, 0x8c, 0x00, + 0x35, 0x00, 0x9a, 0x00, 0x37, 0x00, 0x94, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x71, 0x00, 0x51, 0x0e, 0x0e, 0x00, 0x94, 0x00, 0x4d, 0x00, 0x8d, 0x00, 0x4d, 0x00, 0x94, 0x00, + 0x46, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x84, 0x00, 0x46, 0x0c, 0x0c, 0x00, 0xad, 0x00, + 0x48, 0x00, 0xa0, 0x00, 0x3b, 0x00, 0xb2, 0x00, 0x3b, 0x00, 0xbc, 0x00, 0x3d, 0x00, 0xbe, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x7f, 0x00, 0x42, 0x0c, 0x0c, 0x00, 0x9f, 0x00, + 0x3b, 0x00, 0x9b, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x76, 0x00, 0x40, 0x0a, + 0x0a, 0x00, 0x9d, 0x00, 0x36, 0x00, 0x92, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, + 0x94, 0x00, 0x42, 0x0e, 0x0e, 0x00, 0x94, 0x00, 0x46, 0x00, 0x94, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x79, 0x00, 0x48, 0x0c, 0x0c, 0x00, 0x95, 0x00, 0x3d, 0x00, 0x95, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, + 0x88, 0x04, 0x88, 0x00, 0x00, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, + 0x48, 0x0c, 0xcc, 0x0a, 0xaa, 0x06, 0x66, 0x04, 0x44, 0x02, 0x22, 0x04, 0x66, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x00, 0x33, 0x00, 0x1b, 0x06, 0x06, 0x00, 0x44, 0x00, 0x24, + 0x00, 0x50, 0x00, 0x1e, 0x00, 0x56, 0x00, 0x1d, 0x00, 0x64, 0x00, 0x22, 0x00, 0x75, 0x00, 0x2c, + 0x00, 0x74, 0x00, 0x2e, 0x00, 0x6c, 0x00, 0x30, 0x00, 0x5e, 0x00, 0x2f, 0x00, 0x63, 0x00, 0x35, + 0x00, 0x6d, 0x00, 0x3a, 0x00, 0x7c, 0x00, 0x45, 0x00, 0x8a, 0x00, 0x4e, 0x00, 0x8c, 0x00, 0x52, + 0x00, 0x8a, 0x00, 0x54, 0x00, 0x86, 0x00, 0x55, 0x00, 0x79, 0x00, 0x51, 0x00, 0x6e, 0x00, 0x4b, + 0x00, 0x32, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, + 0x00, 0x32, 0x00, 0x02, 0x00, 0x3c, 0x00, 0x1c, 0x00, 0x43, 0x00, 0x23, 0x00, 0x44, 0x00, 0x2b, + 0x00, 0x40, 0x00, 0x39, 0x00, 0x39, 0x00, 0x42, 0x00, 0x31, 0x00, 0x48, 0x00, 0x2c, 0x00, 0x48, + 0x00, 0x24, 0x00, 0x42, 0x00, 0x13, 0x00, 0x42, 0x00, 0x00, 0x00, 0x37, 0xff, 0xff, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x33, 0x00, 0x46, 0x06, 0x06, 0x00, 0x32, 0x00, 0x48, + 0x00, 0x6a, 0x00, 0x4a, 0x00, 0x74, 0x00, 0x54, 0x00, 0x81, 0x00, 0x59, 0x00, 0x82, 0x00, 0x5a, + 0x00, 0x82, 0x00, 0x5c, 0x00, 0x7e, 0x00, 0x5e, 0x00, 0x70, 0x00, 0x5e, 0x00, 0x6a, 0x00, 0x5b, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x35, 0x00, 0x48, 0x06, 0x06, 0x00, 0x34, 0x00, 0x4a, + 0x00, 0x67, 0x00, 0x5b, 0x00, 0x66, 0x00, 0x5d, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x5d, 0x00, 0x5f, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x38, 0x00, 0x4b, 0x06, 0x06, 0x00, 0x37, 0x00, 0x4d, + 0x00, 0x57, 0x00, 0x5d, 0x00, 0x53, 0x00, 0x5f, 0x00, 0x4d, 0x00, 0x5f, 0x00, 0x40, 0x00, 0x59, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x61, 0x00, 0x50, 0x05, 0x05, 0x00, 0x60, 0x00, 0x52, + 0x00, 0x6b, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x53, 0x00, 0x57, 0x05, 0x05, + 0x00, 0x52, 0x00, 0x59, 0x00, 0x57, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x5d, + 0x00, 0x2a, 0x05, 0x05, 0x00, 0x5c, 0x00, 0x2c, 0x00, 0x61, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, + 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, + 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x69, 0x00, 0x36, 0x06, 0x06, 0x00, 0x75, 0x00, 0x36, 0x00, 0x8d, 0x00, 0x50, 0x00, + 0x90, 0x00, 0x59, 0x00, 0x8f, 0x00, 0x5d, 0x00, 0x8c, 0x00, 0x5e, 0x00, 0x7f, 0x00, 0x56, 0x00, + 0x69, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x75, 0x00, 0x35, 0x06, 0x06, 0x00, + 0x75, 0x00, 0x35, 0x00, 0x97, 0x00, 0x45, 0x00, 0x9f, 0x00, 0x4f, 0x00, 0xa7, 0x00, 0x58, 0x00, + 0xa7, 0x00, 0x5c, 0x00, 0xa3, 0x00, 0x5d, 0x00, 0x9a, 0x00, 0x58, 0x00, 0x93, 0x00, 0x52, 0x00, + 0x8b, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x6d, 0x00, 0x1f, 0x06, 0x06, 0x00, + 0x73, 0x00, 0x21, 0x00, 0x7b, 0x00, 0x20, 0x00, 0x81, 0x00, 0x1f, 0x00, 0x91, 0x00, 0x2b, 0x00, + 0x93, 0x00, 0x2e, 0x00, 0x90, 0x00, 0x30, 0x00, 0xa2, 0x00, 0x3d, 0x00, 0xad, 0x00, 0x49, 0x00, + 0xad, 0x00, 0x4d, 0x00, 0xab, 0x00, 0x50, 0x00, 0x99, 0x00, 0x47, 0x00, 0x6d, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x04, 0x04, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x71, 0x00, 0x08, 0x00, 0x70, 0x00, 0x18, 0x00, 0x72, 0x00, 0x1f, 0x00, 0x70, 0x00, 0x22, 0x00, + 0x74, 0x00, 0x29, 0x00, 0x76, 0x00, 0x30, 0x00, 0x73, 0x00, 0x38, 0x00, 0x6b, 0x00, 0x41, 0x00, + 0x64, 0x00, 0x44, 0x00, 0x60, 0x00, 0x46, 0x00, 0x46, 0x00, 0x3e, 0x00, 0x18, 0x00, 0x17, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x62, 0x00, 0x43, 0x06, 0x06, 0x00, + 0x69, 0x00, 0x43, 0x00, 0x7e, 0x00, 0x56, 0x00, 0x81, 0x00, 0x5c, 0x00, 0x80, 0x00, 0x5f, 0x00, + 0x7c, 0x00, 0x60, 0x00, 0x65, 0x00, 0x4f, 0x00, 0x62, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x00, 0x82, 0x00, 0x26, 0x05, 0x05, 0x00, 0x82, 0x00, 0x26, 0x00, 0x8a, 0x00, 0x2e, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x8a, 0x00, 0x2e, 0x05, 0x05, 0x00, 0x8a, 0x00, 0x2e, 0x00, + 0x90, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xa0, 0x00, 0x54, 0x05, 0x05, 0x00, + 0xa1, 0x00, 0x54, 0x00, 0xa0, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x9c, 0x00, + 0x58, 0x05, 0x05, 0x00, 0xa0, 0x00, 0x58, 0x00, 0x9c, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, + 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, + 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, + 0x00, 0x87, 0x00, 0x44, 0x06, 0x06, 0x00, 0x95, 0x00, 0x44, 0x00, 0xa6, 0x00, 0x59, 0x00, 0xa5, + 0x00, 0x5a, 0x00, 0xa6, 0x00, 0x62, 0x00, 0xa3, 0x00, 0x69, 0x00, 0x9e, 0x00, 0x65, 0x00, 0x9b, + 0x00, 0x5d, 0x00, 0x92, 0x00, 0x58, 0x00, 0x87, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, + 0x00, 0x96, 0x00, 0x44, 0x06, 0x06, 0x00, 0x96, 0x00, 0x44, 0x00, 0xad, 0x00, 0x53, 0x00, 0xb2, + 0x00, 0x5a, 0x00, 0xb4, 0x00, 0x5e, 0x00, 0xb3, 0x00, 0x68, 0x00, 0xb0, 0x00, 0x6a, 0x00, 0xae, + 0x00, 0x66, 0x00, 0xae, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x97, 0x00, 0x32, + 0x06, 0x06, 0x00, 0x9d, 0x00, 0x32, 0x00, 0xb2, 0x00, 0x3b, 0x00, 0xb4, 0x00, 0x3e, 0x00, 0xc0, + 0x00, 0x46, 0x00, 0xc3, 0x00, 0x49, 0x00, 0xc8, 0x00, 0x51, 0x00, 0xc7, 0x00, 0x53, 0x00, 0xc3, + 0x00, 0x54, 0x00, 0xc6, 0x00, 0x59, 0x00, 0xc6, 0x00, 0x5e, 0x00, 0xc5, 0x00, 0x62, 0x00, 0xc2, + 0x00, 0x62, 0x00, 0xbf, 0x00, 0x5b, 0x00, 0xbd, 0x00, 0x58, 0x00, 0xaf, 0x00, 0x52, 0x00, 0x97, + 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x49, 0x00, 0x00, 0x04, 0x04, 0x00, 0x94, + 0x00, 0x00, 0x00, 0x9b, 0x00, 0x0d, 0x00, 0x9c, 0x00, 0x12, 0x00, 0x9e, 0x00, 0x22, 0x00, 0x9c, + 0x00, 0x2b, 0x00, 0x9c, 0x00, 0x37, 0x00, 0x98, 0x00, 0x40, 0x00, 0x91, 0x00, 0x48, 0x00, 0x85, + 0x00, 0x4a, 0x00, 0x74, 0x00, 0x43, 0x00, 0x56, 0x00, 0x1b, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x04, 0x00, 0x9b, 0x00, 0x66, 0x06, 0x06, 0x00, 0x9d, 0x00, 0x66, 0x00, 0xa2, + 0x00, 0x69, 0x00, 0x9d, 0x00, 0x6b, 0x00, 0x9b, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x00, 0xb6, 0x00, 0x48, 0x05, 0x05, 0x00, 0xb6, 0x00, 0x48, 0x00, 0xbf, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x00, 0xbf, 0x00, 0x4d, 0x05, 0x05, 0x00, 0xbf, 0x00, 0x4d, 0x00, 0xc3, + 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xb0, 0x00, 0x62, 0x05, 0x05, 0x00, 0xb0, + 0x00, 0x63, 0x00, 0xb2, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xb2, 0x00, 0x5e, + 0x05, 0x05, 0x00, 0xb2, 0x00, 0x62, 0x00, 0xb4, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x00, 0xa0, 0x00, 0x66, 0x05, 0x05, 0x00, 0xa0, 0x00, 0x66, 0x00, 0xa2, 0x00, 0x66, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x00, 0xa2, 0x00, 0x64, 0x05, 0x05, 0x00, 0xa2, 0x00, 0x66, 0x00, 0xa5, + 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, + 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x94, 0x00, 0x42, 0x06, 0x06, 0x00, 0xa7, 0x00, + 0x42, 0x00, 0xbc, 0x00, 0x62, 0x00, 0xb0, 0x00, 0x5c, 0x00, 0x9e, 0x00, 0x59, 0x00, 0x98, 0x00, + 0x54, 0x00, 0x94, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x5c, 0x00, 0x00, 0x04, + 0x04, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x06, 0x00, 0xa6, 0x00, 0x1f, 0x00, 0xa2, 0x00, + 0x31, 0x00, 0xa7, 0x00, 0x3d, 0x00, 0xa4, 0x00, 0x45, 0x00, 0xa0, 0x00, 0x48, 0x00, 0x95, 0x00, + 0x4b, 0x00, 0x8c, 0x00, 0x4b, 0x00, 0x82, 0x00, 0x39, 0x00, 0x7b, 0x00, 0x37, 0x00, 0x69, 0x00, + 0x1d, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0xa8, 0x00, 0x3d, 0x06, + 0x06, 0x00, 0xa8, 0x00, 0x3d, 0x00, 0xc9, 0x00, 0x4e, 0x00, 0xc9, 0x00, 0x51, 0x00, 0xcc, 0x00, + 0x53, 0x00, 0xd0, 0x00, 0x5b, 0x00, 0xd4, 0x00, 0x60, 0x00, 0xd7, 0x00, 0x68, 0x00, 0xd4, 0x00, + 0x69, 0x00, 0xcb, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0xa8, 0x00, 0x3f, 0x06, + 0x06, 0x00, 0xa8, 0x00, 0x3f, 0x00, 0xcd, 0x00, 0x5c, 0x00, 0xbe, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x07, 0x00, 0xa7, 0x00, 0x40, 0x06, 0x06, 0x00, 0xa7, 0x00, 0x40, 0x00, 0xc4, 0x00, + 0x5f, 0x00, 0xc6, 0x00, 0x62, 0x00, 0xc3, 0x00, 0x72, 0x00, 0xbf, 0x00, 0x78, 0x00, 0xbd, 0x00, + 0x75, 0x00, 0xbe, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0xaa, 0x00, 0x5b, 0x06, + 0x06, 0x00, 0xb0, 0x00, 0x5b, 0x00, 0xb4, 0x00, 0x65, 0x00, 0xb0, 0x00, 0x71, 0x00, 0xad, 0x00, + 0x77, 0x00, 0xaa, 0x00, 0x76, 0x00, 0xad, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x9f, 0x00, 0x59, 0x06, 0x06, 0x00, 0x9f, 0x00, 0x59, 0x00, 0xb0, 0x00, 0x5a, 0x00, 0xad, 0x00, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xc1, 0x00, 0x4e, 0x05, 0x05, 0x00, 0xc1, 0x00, + 0x4e, 0x00, 0xca, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xbe, 0x00, 0x59, 0x05, + 0x05, 0x00, 0xbe, 0x00, 0x59, 0x00, 0xbf, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, + 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, + 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x88, + 0x00, 0x1e, 0x06, 0x06, 0x00, 0x9a, 0x00, 0x30, 0x00, 0xc7, 0x00, 0x59, 0x00, 0x97, 0x00, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x3a, 0x00, 0x06, 0x04, 0x04, 0x00, 0x91, 0x00, 0x06, + 0x00, 0x97, 0x00, 0x2c, 0x00, 0x99, 0x00, 0x2f, 0x00, 0x9a, 0x00, 0x3d, 0x00, 0x94, 0x00, 0x47, + 0x00, 0x89, 0x00, 0x4d, 0x00, 0x84, 0x00, 0x4a, 0x00, 0x73, 0x00, 0x48, 0x00, 0x4a, 0x00, 0x2c, + 0x00, 0x41, 0x00, 0x24, 0x00, 0x3a, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x8b, + 0x00, 0x1d, 0x06, 0x06, 0x00, 0x9a, 0x00, 0x2f, 0x00, 0xa0, 0x00, 0x30, 0x00, 0xaf, 0x00, 0x34, + 0x00, 0xba, 0x00, 0x3b, 0x00, 0xc9, 0x00, 0x43, 0x00, 0xd2, 0x00, 0x50, 0x00, 0xcf, 0x00, 0x52, + 0x00, 0xca, 0x00, 0x52, 0x00, 0xd2, 0x00, 0x5f, 0x00, 0xcf, 0x00, 0x62, 0x00, 0xc5, 0x00, 0x58, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x89, 0x00, 0x31, 0x06, 0x06, 0x00, 0x98, 0x00, 0x43, + 0x00, 0xb2, 0x00, 0x4f, 0x00, 0xb0, 0x00, 0x52, 0x00, 0xb6, 0x00, 0x5b, 0x00, 0xb8, 0x00, 0x60, + 0x00, 0xb9, 0x00, 0x67, 0x00, 0xb6, 0x00, 0x69, 0x00, 0xb1, 0x00, 0x68, 0x00, 0xaf, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x86, 0x00, 0x32, 0x06, 0x06, 0x00, 0x97, 0x00, 0x44, + 0x00, 0xb1, 0x00, 0x5f, 0x00, 0x95, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x7b, + 0x00, 0x32, 0x06, 0x06, 0x00, 0x96, 0x00, 0x44, 0x00, 0xa4, 0x00, 0x5a, 0x00, 0xa6, 0x00, 0x5e, + 0x00, 0xa6, 0x00, 0x63, 0x00, 0xa2, 0x00, 0x65, 0x00, 0xa0, 0x00, 0x64, 0x00, 0x9e, 0x00, 0x5f, + 0x00, 0x92, 0x00, 0x57, 0x00, 0x8a, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xac, + 0x00, 0x35, 0x05, 0x05, 0x00, 0xbb, 0x00, 0x47, 0x00, 0xca, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0xbb, 0x00, 0x3e, 0x05, 0x05, 0x00, 0xca, 0x00, 0x50, 0x00, 0xca, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xa5, 0x00, 0x4f, 0x05, 0x05, 0x00, 0xb8, 0x00, 0x61, + 0x00, 0xb4, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xa3, 0x00, 0x50, 0x05, 0x05, + 0x00, 0xb4, 0x00, 0x63, 0x00, 0xb2, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, + 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, + 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x45, 0x00, + 0x0c, 0x06, 0x06, 0x00, 0x52, 0x00, 0x0c, 0x00, 0x65, 0x00, 0x30, 0x00, 0x6a, 0x00, 0x40, 0x00, + 0x69, 0x00, 0x42, 0x00, 0x66, 0x00, 0x44, 0x00, 0x5c, 0x00, 0x40, 0x00, 0x51, 0x00, 0x39, 0x00, + 0x45, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x52, 0x00, 0x0b, 0x00, 0x53, 0x00, 0x16, 0x00, 0x50, 0x00, 0x20, 0x00, + 0x47, 0x00, 0x29, 0x00, 0x41, 0x00, 0x2d, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x51, 0x00, 0x00, 0x06, 0x06, 0x00, + 0x51, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x09, 0x00, + 0x6d, 0x00, 0x0d, 0x00, 0x77, 0x00, 0x11, 0x00, 0x7d, 0x00, 0x16, 0x00, 0x92, 0x00, 0x23, 0x00, + 0x9b, 0x00, 0x2d, 0x00, 0x9a, 0x00, 0x2f, 0x00, 0x98, 0x00, 0x30, 0x00, 0x8d, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x51, 0x00, 0x05, 0x06, 0x06, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x90, 0x00, 0x29, 0x00, 0x78, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x52, 0x00, + 0x06, 0x06, 0x06, 0x00, 0x52, 0x00, 0x06, 0x00, 0x7b, 0x00, 0x23, 0x00, 0x7d, 0x00, 0x29, 0x00, + 0x90, 0x00, 0x34, 0x00, 0x94, 0x00, 0x36, 0x00, 0x98, 0x00, 0x3c, 0x00, 0x96, 0x00, 0x3f, 0x00, + 0x75, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x92, 0x00, 0x3d, 0x06, 0x06, 0x00, + 0x92, 0x00, 0x3d, 0x00, 0x95, 0x00, 0x3f, 0x00, 0x93, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x09, 0x00, 0x51, 0x00, 0x07, 0x06, 0x06, 0x00, 0x51, 0x00, 0x07, 0x00, 0x79, 0x00, 0x2e, 0x00, + 0x74, 0x00, 0x32, 0x00, 0x79, 0x00, 0x3e, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x44, 0x00, + 0x7a, 0x00, 0x46, 0x00, 0x72, 0x00, 0x43, 0x00, 0x68, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x00, 0x63, 0x00, 0x07, 0x05, 0x05, 0x00, 0x63, 0x00, 0x07, 0x00, 0x71, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x76, 0x00, 0x42, 0x05, 0x05, 0x00, 0x76, 0x00, 0x43, 0x00, + 0x79, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x79, 0x00, 0x3f, 0x05, 0x05, 0x00, + 0x79, 0x00, 0x42, 0x00, 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, + 0x3f, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, + 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, + 0x00, 0x04, 0x66, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x1a, 0x00, 0x7b, + 0x08, 0x08, 0x00, 0x1a, 0x00, 0x7b, 0x00, 0x53, 0x00, 0x7f, 0x00, 0x1a, 0x00, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x18, 0x00, 0x72, 0x08, 0x08, 0x00, 0x18, 0x00, 0x72, 0x00, 0x54, + 0x00, 0x7f, 0x00, 0x1a, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x54, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x54, 0x00, 0x08, 0x00, 0x58, 0x00, 0x0e, 0x00, 0x60, 0x00, 0x18, + 0x00, 0x75, 0x00, 0x19, 0x00, 0x7a, 0x00, 0x19, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, + 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, + 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x08, 0x00, 0x11, 0x00, 0x65, 0x08, 0x08, 0x00, 0x11, 0x00, 0x65, 0x00, 0x3e, 0x00, + 0x70, 0x00, 0x63, 0x00, 0x77, 0x00, 0x70, 0x00, 0x74, 0x00, 0x79, 0x00, 0x76, 0x00, 0x7a, 0x00, + 0x7a, 0x00, 0x7e, 0x00, 0x7f, 0x00, 0x1b, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, + 0x00, 0x00, 0x45, 0x09, 0x09, 0x00, 0x00, 0x00, 0x45, 0x00, 0x0f, 0x00, 0x62, 0x00, 0x1a, 0x00, + 0x7d, 0x00, 0x1a, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, + 0x71, 0x00, 0x78, 0x08, 0x08, 0x00, 0x8a, 0x00, 0x78, 0x00, 0x8d, 0x00, 0x79, 0x00, 0x8e, 0x00, + 0x7c, 0x00, 0x87, 0x00, 0x7f, 0x00, 0x71, 0x00, 0x7f, 0x00, 0x7f, 0x00, 0x7a, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x05, 0x00, 0x67, 0x00, 0x71, 0x08, 0x08, 0x00, 0x79, 0x00, 0x71, 0x00, 0x7e, 0x00, + 0x72, 0x00, 0x7e, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7a, 0x00, 0x67, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, + 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, + 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x7c, 0x00, 0x68, 0x08, 0x08, 0x00, 0x8c, 0x00, 0x68, 0x00, 0x93, 0x00, 0x68, + 0x00, 0x97, 0x00, 0x69, 0x00, 0x99, 0x00, 0x6d, 0x00, 0x85, 0x00, 0x6b, 0x00, 0x7c, 0x00, 0x69, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x9a, 0x00, 0x6d, 0x08, 0x08, 0x00, 0x9f, 0x00, 0x6d, + 0x00, 0xa8, 0x00, 0x73, 0x00, 0xa8, 0x00, 0x77, 0x00, 0xa1, 0x00, 0x73, 0x00, 0x9a, 0x00, 0x6d, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x82, 0x00, 0x79, 0x08, 0x08, 0x00, 0x9d, 0x00, 0x79, + 0x00, 0xa8, 0x00, 0x7f, 0x00, 0x9e, 0x00, 0x7f, 0x00, 0x82, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x0a, 0x00, 0x0d, 0x00, 0x43, 0x08, 0x08, 0x00, 0x0d, 0x00, 0x5c, 0x00, 0x36, 0x00, 0x65, + 0x00, 0x56, 0x00, 0x69, 0x00, 0x86, 0x00, 0x6a, 0x00, 0x95, 0x00, 0x6c, 0x00, 0xa0, 0x00, 0x70, + 0x00, 0xa7, 0x00, 0x78, 0x00, 0x8d, 0x00, 0x7b, 0x00, 0xa3, 0x00, 0x86, 0x00, 0x22, 0x00, 0x86, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x45, 0x09, 0x09, 0x00, 0x00, 0x00, 0x45, + 0x00, 0x19, 0x00, 0x77, 0x00, 0x1a, 0x00, 0x7b, 0x00, 0x0a, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x47, 0x09, 0x09, 0x00, 0x00, 0x00, 0x47, 0x00, 0x0d, 0x00, 0x72, + 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x27, 0x00, 0x7a, 0x08, 0x08, + 0x00, 0x27, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x1a, 0x00, 0x5a, 0x08, 0x08, + 0x00, 0x1a, 0x00, 0x73, 0x00, 0x23, 0x00, 0x86, 0x00, 0x1a, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, + 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, + 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x0c, 0x00, 0x0a, 0x00, 0x55, 0x08, 0x08, 0x00, 0x0a, 0x00, 0x55, 0x00, 0x40, 0x00, 0x60, 0x00, + 0x6a, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x89, 0x00, 0x69, 0x00, 0xa8, 0x00, 0x69, 0x00, + 0xb8, 0x00, 0x6b, 0x00, 0xc6, 0x00, 0x70, 0x00, 0xc8, 0x00, 0x77, 0x00, 0xc0, 0x00, 0x7c, 0x00, + 0xb3, 0x00, 0x7f, 0x00, 0x1e, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x45, 0x09, 0x09, 0x00, 0x00, 0x00, 0x45, 0x00, 0x14, 0x00, 0x6b, 0x00, 0x0a, 0x00, 0x63, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x47, 0x09, 0x09, 0x00, 0x00, 0x00, 0x47, 0x00, + 0x09, 0x00, 0x63, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0xc7, 0x00, + 0x6f, 0x08, 0x08, 0x00, 0xd6, 0x00, 0x76, 0x00, 0xc9, 0x00, 0x73, 0x00, 0xc7, 0x00, 0x70, 0x00, + 0xd3, 0x00, 0x6f, 0x00, 0xda, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x19, 0x00, + 0x75, 0x08, 0x08, 0x00, 0x19, 0x00, 0x75, 0x00, 0x1e, 0x00, 0x7f, 0x00, 0x1a, 0x00, 0x7f, 0x00, + 0x1a, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, + 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x10, 0x00, 0x62, 0x08, 0x08, 0x00, 0x10, + 0x00, 0x62, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x65, 0x00, 0x71, 0x00, 0x7f, 0x00, 0x6f, 0x00, 0x92, + 0x00, 0x75, 0x00, 0x96, 0x00, 0x79, 0x00, 0x91, 0x00, 0x7f, 0x00, 0x1b, 0x00, 0x7f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, + 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, + 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x45, 0x09, 0x09, 0x00, 0x3f, 0x00, 0x43, 0x00, 0x4e, 0x00, + 0x60, 0x00, 0x59, 0x00, 0x7b, 0x00, 0x59, 0x00, 0x7d, 0x00, 0x3f, 0x00, 0x7d, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x09, 0x09, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x28, 0x00, + 0x08, 0x00, 0x2e, 0x00, 0x10, 0x00, 0x38, 0x00, 0x25, 0x00, 0x39, 0x00, 0x2a, 0x00, 0x39, 0x00, + 0x2f, 0x00, 0x1b, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, + 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, + 0x66, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x69, 0x00, 0x47, 0x08, 0x08, + 0x00, 0xba, 0x00, 0x4c, 0x00, 0xbc, 0x00, 0x4e, 0x00, 0xbc, 0x00, 0x51, 0x00, 0xb7, 0x00, 0x53, + 0x00, 0x97, 0x00, 0x5a, 0x00, 0x84, 0x00, 0x5c, 0x00, 0x78, 0x00, 0x5a, 0x00, 0x6a, 0x00, 0x52, + 0x00, 0x69, 0x00, 0x4c, 0x00, 0x71, 0x00, 0x48, 0x00, 0x75, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x00, 0x00, + 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x0c, 0xcc, 0x0a, 0xaa, + 0x06, 0x66, 0x04, 0x44, 0x02, 0x22, 0x04, 0x66, 0x00 +}; diff --git a/systemstub.h b/systemstub.h index 824dbfa..5d072e4 100644 --- a/systemstub.h +++ b/systemstub.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef SYSTEMSTUB_H__ diff --git a/systemstub_sdl.cpp b/systemstub_sdl.cpp index 0ddd9d6..59d4971 100644 --- a/systemstub_sdl.cpp +++ b/systemstub_sdl.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include @@ -85,6 +85,10 @@ void SystemStub_SDL::init(const char *title, int w, int h, bool fullscreen, Scal SDL_ShowCursor(SDL_DISABLE); _caption = title; memset(&_pi, 0, sizeof(_pi)); + _window = 0; + _renderer = 0; + _texture = 0; + _fmt = 0; _screenBuffer = 0; _fadeOnUpdateScreen = false; _fullscreen = fullscreen; diff --git a/unpack.cpp b/unpack.cpp index fa569d7..dd8218e 100644 --- a/unpack.cpp +++ b/unpack.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "unpack.h" diff --git a/unpack.h b/unpack.h index 9b8773f..a5f050f 100644 --- a/unpack.h +++ b/unpack.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef UNPACK_H__ diff --git a/util.cpp b/util.cpp index 68c3219..a61e91f 100644 --- a/util.cpp +++ b/util.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifdef _WIN32 diff --git a/util.h b/util.h index e2a89ae..06fa1f0 100644 --- a/util.h +++ b/util.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef UTIL_H__ diff --git a/video.cpp b/video.cpp index 25623a0..f2ffb3e 100644 --- a/video.cpp +++ b/video.cpp @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #include "resource.h" diff --git a/video.h b/video.h index 5910dd6..6dc605b 100644 --- a/video.h +++ b/video.h @@ -1,7 +1,7 @@ /* * REminiscence - Flashback interpreter - * Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net) + * Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net) */ #ifndef VIDEO_H__