1
0
mirror of synced 2024-11-30 20:24:27 +01:00

ID4 Exp / Hummer and other stuff

This commit is contained in:
dkeruza 2023-12-30 19:38:07 -05:00
parent 8e4f424c85
commit 7b7c0aa915
6 changed files with 717 additions and 37 deletions

View File

@ -149,6 +149,20 @@ static int detectGame(uint32_t elf_crc)
return 0; return 0;
} }
if (elf_crc == 0x5c18953c)
{
config.game = AFTER_BURNER_CLIMAX_SDX;
config.gameStatus = WORKING;
return 0;
}
if (elf_crc == 0x9af7cb29)
{
config.game = AFTER_BURNER_CLIMAX_CE;
config.gameStatus = WORKING;
return 0;
}
if (elf_crc == 0x4e9ccf33) if (elf_crc == 0x4e9ccf33)
{ {
config.game = INITIALD_4; config.game = INITIALD_4;
@ -221,6 +235,34 @@ static int detectGame(uint32_t elf_crc)
return 0; return 0;
} }
if (elf_crc == 0xcdbc8069)
{
config.game = PRIMEVAL_HUNT;
config.gameStatus = NOT_WORKING;
return 0;
}
if (elf_crc == 0xe60d8e04)
{
config.game = GHOST_SQUAD_EVOLUTION;
config.gameStatus = NOT_WORKING;
return 0;
}
if (elf_crc == 0x14d1292a)
{
config.game = INITIALD_5;
config.gameStatus = NOT_WORKING;
return 0;
}
if (elf_crc == 0xc85f106a)
{
config.game = HUMMER_EXTREME;
config.gameStatus = NOT_WORKING;
return 0;
}
config.game = UNKNOWN; config.game = UNKNOWN;
return 1; return 1;
} }
@ -240,6 +282,8 @@ char *getGameName()
return "After Burner Climax SDX"; return "After Burner Climax SDX";
case AFTER_BURNER_CLIMAX_SDX_REVA: case AFTER_BURNER_CLIMAX_SDX_REVA:
return "After Burner Climax SDX Rev A"; return "After Burner Climax SDX Rev A";
case AFTER_BURNER_CLIMAX_CE:
return "After Burner Climax CE2";
case GHOST_SQUAD_EVOLUTION: case GHOST_SQUAD_EVOLUTION:
return "Ghost Squad Evolution"; return "Ghost Squad Evolution";
case HARLEY_DAVIDSON: case HARLEY_DAVIDSON:
@ -252,6 +296,8 @@ char *getGameName()
return "Hummer Extreme MDX"; return "Hummer Extreme MDX";
case INITIALD_4: case INITIALD_4:
return "Initial D Arcade Stage 4"; return "Initial D Arcade Stage 4";
case INITIALD_4_REVE:
return "Initial D Arcade Stage 4 EXP";
case INITIALD_5: case INITIALD_5:
return "Initial D Arcade Stage 5"; return "Initial D Arcade Stage 5";
case LETS_GO_JUNGLE: case LETS_GO_JUNGLE:

View File

@ -9,6 +9,7 @@ typedef enum
AFTER_BURNER_CLIMAX_REVB, AFTER_BURNER_CLIMAX_REVB,
AFTER_BURNER_CLIMAX_SDX, AFTER_BURNER_CLIMAX_SDX,
AFTER_BURNER_CLIMAX_SDX_REVA, AFTER_BURNER_CLIMAX_SDX_REVA,
AFTER_BURNER_CLIMAX_CE,
GHOST_SQUAD_EVOLUTION, GHOST_SQUAD_EVOLUTION,
HARLEY_DAVIDSON, HARLEY_DAVIDSON,
HUMMER, HUMMER,

View File

@ -91,7 +91,8 @@ int createStaticSection()
unsigned char *buff = &eepromBuffer[eepromOffsetTable[STATIC].offset]; unsigned char *buff = &eepromBuffer[eepromOffsetTable[STATIC].offset];
memset(buff, 0, eepromOffsetTable[STATIC].size); memset(buff, 0, eepromOffsetTable[STATIC].size);
buff[14] = 0; buff[14] = 0;
memcpy(buff + 15, "AAGX-01A00009999", 16); //memcpy(buff + 15, "AAGX-01A00009999", 16);
memcpy(buff + 15, "AALG-TG-933F3904", 16);
return 0; return 0;
} }

32
src/lindbergh/hook.c Executable file → Normal file
View File

@ -37,12 +37,13 @@
#define EEPROM 1 #define EEPROM 1
#define SERIAL0 2 #define SERIAL0 2
#define SERIAL1 3 #define SERIAL1 3
#define PCI_CARD_000 4
#define CPUINFO 0 #define CPUINFO 0
#define OSRELEASE 1 #define OSRELEASE 1
#define PCI_CARD_1F0 2 #define PCI_CARD_1F0 2
int hooks[5] = {-1, -1, -1, -1}; int hooks[5] = {-1, -1, -1, -1, -1};
FILE *fileHooks[3] = {NULL, NULL, NULL}; FILE *fileHooks[3] = {NULL, NULL, NULL};
int fileRead[3] = {0, 0, 0}; int fileRead[3] = {0, 0, 0};
char envpath[100]; char envpath[100];
@ -238,6 +239,12 @@ int open(const char *pathname, int flags)
return _open(pathname + 1, flags); return _open(pathname + 1, flags);
} }
if (strcmp(pathname, "/proc/bus/pci/01/00.0") == 0)
{
hooks[PCI_CARD_000] = _open(HOOK_FILE_NAME, flags);
return hooks[PCI_CARD_000];
}
return _open(pathname, flags); return _open(pathname, flags);
} }
@ -297,6 +304,17 @@ FILE *fopen(const char *restrict pathname, const char *restrict mode)
fileHooks[PCI_CARD_1F0] = _fopen(HOOK_FILE_NAME, mode); fileHooks[PCI_CARD_1F0] = _fopen(HOOK_FILE_NAME, mode);
return fileHooks[PCI_CARD_1F0]; return fileHooks[PCI_CARD_1F0];
} }
char* result;
if((result = strstr(pathname, "/home/disk0")) != NULL)
{
memmove(result + 2, result + 11, strlen(result + 11) + 1);
memcpy(result, "..", 2);
return _fopen(result, mode);
}
//printf("Path= %s\n", pathname);
return _fopen(pathname, mode); return _fopen(pathname, mode);
} }
@ -438,6 +456,12 @@ ssize_t read(int fd, void *buf, size_t count)
return -1; return -1;
} }
if (fd == hooks[PCI_CARD_000])
{
memcpy(buf, pci_000, count);
return count;
}
return _read(fd, buf, count); return _read(fd, buf, count);
} }
@ -447,8 +471,8 @@ size_t fread(void *buf, size_t size, size_t count, FILE *stream)
if (stream == fileHooks[PCI_CARD_1F0]) if (stream == fileHooks[PCI_CARD_1F0])
{ {
memcpy(buf, pcidata, 68); memcpy(buf, pci_1f0, size*count);
return 68; return size*count;
} }
return _fread(buf, size, count, stream); return _fread(buf, size, count, stream);
} }
@ -488,6 +512,8 @@ int ioctl(int fd, unsigned int request, void *data)
if (fd == hooks[EEPROM]) if (fd == hooks[EEPROM])
{ {
if(request == 0xC04064A0)
return _ioctl(fd, request, data);
return eepromIoctl(fd, request, data); return eepromIoctl(fd, request, data);
} }

View File

@ -32,7 +32,6 @@ static void patchMemory(uint32_t address, char *value)
{ {
size_t size = strlen((void *)value); size_t size = strlen((void *)value);
printf("Size=%d\n", size);
if (size % 2 != 0) if (size % 2 != 0)
{ {
printf("Patch value should be even.\n"); printf("Patch value should be even.\n");
@ -114,19 +113,30 @@ int amDongleUpdate()
return 0; return 0;
} }
int amDongleUserInfoEx(int a, int b, char *_arcadeContext)
{
if (getConfig()->game == INITIALD_4_REVE)
memcpy(_arcadeContext, "SBNK",4);
else if (getConfig()->game == INITIALD_5)
memcpy(_arcadeContext, "SBPF",4);
else if (getConfig()->game == HUMMER_EXTREME)
memcpy(_arcadeContext, "SBST",4);
return 0;
}
int amLibInit() int amLibInit()
{ {
uint32_t *amLibContext = (uint32_t *)0x08dfa2c0; // 0x0809cb00; uint32_t *amLibContext = (uint32_t *)0x080986c0; // 0x0809cb00;
*amLibContext = 1; *amLibContext = 1;
uint32_t *amLibInitializad = (uint32_t *)0x08dfa2c4; // 0x0809cb04; uint32_t *amLibInitialized = (uint32_t *)0x080986c4; // 0x0809cb04;
uint16_t *amLibPort1 = (uint16_t *)(0x08dfa2c4 + 4); //(0x0809cb04 + 4); uint16_t *amLibPort1 = (uint16_t *)(0x080986c4 + 4); //(0x0809cb04 + 4);
uint16_t *amLibPort2 = (uint16_t *)(0x08dfa2c4 + 4); //(0x0809cb04 + 6); uint16_t *amLibPort2 = (uint16_t *)(0x080986c4 + 6); //(0x0809cb04 + 6);
uint32_t *bcLibInitialized = (uint32_t *)(0x08dfa2c4 + 8); // 0x0809cb0c; uint32_t *bcLibInitialized = (uint32_t *)(0x080986c4 + 8); // 0x0809cb0c;
*amLibInitializad = 1; *amLibInitialized = 1;
*amLibPort1 = 0xd000; *amLibPort1 = 0xd000;
*amLibPort2 = 0x0004; *amLibPort2 = 0x0004;
*bcLibInitialized = 0; *bcLibInitialized = 0;
int res = ((int (*)(void))0x084dedc4)(); // 0x08065d80)(); int res = ((int (*)(void))0x084dedc4)(); // 0x08065d80)(); IDK what it was.
if (res == 1) if (res == 1)
*bcLibInitialized = 1; *bcLibInitialized = 1;
return 0; return 0;
@ -134,10 +144,10 @@ int amLibInit()
int amDipswInit() int amDipswInit()
{ {
uint32_t *amDipswContext = (uint32_t *)0x08df9cec; // 0x0809c12c; uint32_t *amDipswContext = (uint32_t *)0x080980e8; // 0x0809c12c;
uint32_t *amDipswContext1 = (uint32_t *)(0x08df9cec + 4); //(0x0809c12c + 4); uint32_t *amDipswContext1 = (uint32_t *)(0x080980e8 + 4); //(0x0809c12c + 4);
uint32_t *amDipswContext2 = (uint32_t *)(0x08df9cec + 8); //(0x0809c12c + 8); uint32_t *amDipswContext2 = (uint32_t *)(0x080980e8 + 8); //(0x0809c12c + 8);
uint32_t *amDipswContext3 = (uint32_t *)(0x08df9cec + 12); //(0x0809c12c + 12); uint32_t *amDipswContext3 = (uint32_t *)(0x080980e8 + 12); //(0x0809c12c + 12);
// typedef void *(*___constant_c_and_count_memset)(uint32_t *, int, size_t); // typedef void *(*___constant_c_and_count_memset)(uint32_t *, int, size_t);
//___constant_c_and_count_memset func = (___constant_c_and_count_memset)//0x0805c3d5; //___constant_c_and_count_memset func = (___constant_c_and_count_memset)//0x0805c3d5;
// func(amDipswContext, 0, 4); // func(amDipswContext, 0, 4);
@ -159,7 +169,6 @@ void print_binary(unsigned int number)
int amDipswGetData(uint8_t *dip) int amDipswGetData(uint8_t *dip)
{ {
// printf("amDipswGetData Called!!!!!\n");
uint8_t result; uint8_t result;
uint32_t data; uint32_t data;
@ -317,6 +326,32 @@ int initPatch()
detourFunction(0x081e33d2, stubRetZero); // Stub amDipswSetLed detourFunction(0x081e33d2, stubRetZero); // Stub amDipswSetLed
} }
break; break;
case AFTER_BURNER_CLIMAX_SDX:
{
// Security
detourFunction(0x081e4968, amDongleInit);
detourFunction(0x081e4cb6, amDongleIsAvailable);
detourFunction(0x081e4be2, amDongleUpdate);
patchMemory(0x08064dc4, "9090909090");
patchMemory(0x08064dca, "00");
// Fixes
detourFunction(0x081e489e, amDipswGetData);
detourFunction(0x081e4916, stubRetZero); // Stub amDipswSetLed
}
break;
case AFTER_BURNER_CLIMAX_CE:
{
// Security
detourFunction(0x081e3458, amDongleInit);
detourFunction(0x081e37a6, amDongleIsAvailable);
detourFunction(0x081e36d2, amDongleUpdate);
patchMemory(0x08064cfe, "9090909090");
patchMemory(0x08064d04, "00");
// Fixes
detourFunction(0x081e338e, amDipswGetData);
detourFunction(0x081e3406, stubRetZero); // Stub amDipswSetLed
}
break;
case OUTRUN_2_SP_SDX_REVA: case OUTRUN_2_SP_SDX_REVA:
{ {
if (config->debug_msgs == 1) if (config->debug_msgs == 1)
@ -344,7 +379,18 @@ int initPatch()
detourFunction(0x08190e2e, stubRetZero); // Stub amDipswSetLed detourFunction(0x08190e2e, stubRetZero); // Stub amDipswSetLed
} }
break; break;
case OUTRUN_2_SP_SDX_REVA_TEST:
{
// Security
detourFunction(0x08066220, amDongleInit);
detourFunction(0x080665a1, amDongleIsAvailable);
detourFunction(0x080664c5, amDongleUpdate);
// Fixes
detourFunction(0x08066156, amDipswGetData);
detourFunction(0x080661ce, stubRetZero); // Stub amDipswSetLed
detourFunction(0x08066044, amDipswInit);
}
break;
case THE_HOUSE_OF_THE_DEAD_4: case THE_HOUSE_OF_THE_DEAD_4:
{ {
if (config->debug_msgs == 1) if (config->debug_msgs == 1)
@ -596,7 +642,7 @@ int initPatch()
setVariable(0x08d719e0, 2); // bcLibDebugLevel setVariable(0x08d719e0, 2); // bcLibDebugLevel
setVariable(0x08d719d4, 2); // amOsinfoDebugLevel setVariable(0x08d719d4, 2); // amOsinfoDebugLevel
setVariable(0x08d719e4, 0x0FFFFFFF); // s_logMask setVariable(0x08d719e4, 0x0FFFFFFF); // s_logMask
detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes. //detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes.
} }
// Security // Security
detourFunction(0x086e2336, amDongleInit); detourFunction(0x086e2336, amDongleInit);
@ -609,10 +655,32 @@ int initPatch()
patchMemory(0x082cb412, "c0270900"); // tickInitStoreNetwork patchMemory(0x082cb412, "c0270900"); // tickInitStoreNetwork
patchMemory(0x082cb6d9, "e950010000"); // tickWaitDHCP patchMemory(0x082cb6d9, "e950010000"); // tickWaitDHCP
// Set Resolution // Set Resolution
//patchMemory(0x0835664d, "e9f000"); // Force resolution set patchMemory(0x0835664d, "e9f000"); // Force resolution set
//setVariable(0x08356743, 0x00000780); // Set ResX //setVariable(0x08356743, 0x00000780); // Set ResX
//setVariable(0x08356748, 0x00000438); // Set ResY //setVariable(0x08356748, 0x00000438); // Set ResY
// AMDFIX
//uint32_t a = (uint32_t)glProgramEnvParameters4fvEXT;
//uint32_t b = ((a & 0xFF) << 24) | (((a >> 8) & 0xFF) << 16) | (((a >> 16) & 0xFF) << 8) | ((a >> 24) & 0xFF);
//printf("Address Orig = %p - Address in a = %08x\n", (void*)glProgramEnvParameters4fvEXT, b);
//printf("Address %08x\n", (uint32_t)glProgramEnvParameters4fvEXT);
//const char *glProgramEnvParameters4fvEXT = "glProgramEnvParameters4fvEXT";
//memset((void*)0x08813035,0, 28);
patchMemory(0x08812fcc, "676C50726F6772616D456E76506172616D657465727334667645585400");
//setVariable(0x08524247, 0x08813035);
patchMemory(0x08524247, "CC2F8108"); // glProgramParameters4fvNV
patchMemory(0x08524258, "9090"); // jnz
patchMemory(0x0852443a, "CC2F8108"); // glProgramParameters4fvNV
//setVariable(0x0852443a, a);
patchMemory(0x0852444a, "CC2F8108"); // glProgramParameters4fvNV
//setVariable(0x0852444a, a);
//FILE *f = fopen("dump.elf", "w+b");
//fwrite((void*)0x8048000, 0xc23632, 1, f);
//fclose(f);
// FrameBuffer Resolution (No effect that I know) // FrameBuffer Resolution (No effect that I know)
/* /*
setVariable(0x08248037, 0x00000780); // Set ResX setVariable(0x08248037, 0x00000780); // Set ResX
@ -639,8 +707,20 @@ int initPatch()
{ {
if (config->debug_msgs == 1) if (config->debug_msgs == 1)
{ {
// Debug setVariable(0x08d972d0, 2); // amBackupDebugLevel
detourFunction(0x08090478, _putConsole); // Crashes the game sometimes. setVariable(0x08d972e0, 2); // amCreditDebugLevel
setVariable(0x08d97538, 2); // amDipswDebugLevel
setVariable(0x08d9753c, 2); // amDongleDebugLevel
setVariable(0x08d97540, 2); // amEepromDebugLevel
setVariable(0x08d97544, 2); // amHwmonitorDebugLevel
setVariable(0x08d97548, 2); // amJvsDebugLevel
setVariable(0x08d9754c, 2); // amLibDebugLevel
setVariable(0x08d97550, 2); // amMiscDebugLevel
setVariable(0x08d97554, 2); // amSysDataDebugLevel
setVariable(0x08d97558, 2); // bcLibDebugLevel
setVariable(0x08d97560, 2); // amOsinfoDebugLevel
setVariable(0x08d97564, 0x0FFFFFFF); // s_logMask
//detourFunction(0x08090478, _putConsole); // Crashes the game sometimes.
} }
// Security // Security
detourFunction(0x087106e6, amDongleInit); detourFunction(0x087106e6, amDongleInit);
@ -652,12 +732,76 @@ int initPatch()
detourFunction(0x08230fde, stubRetOne); // isEthLinkUp detourFunction(0x08230fde, stubRetOne); // isEthLinkUp
patchMemory(0x082df87d, "e954010000"); // tickWaitDHCP patchMemory(0x082df87d, "e954010000"); // tickWaitDHCP
patchMemory(0x082e0ec9, "eb60"); // tickInitAddress patchMemory(0x082e0ec9, "eb60"); // tickInitAddress
// setVariable(0x08580979, 0x000126e9); // Avoid Full Screen set from Game setVariable(0x08580979, 0x000126e9); // Avoid Full Screen set from Game
// Set Resolution // Set Resolution
// setVariable(0x0837b12d, 0x0000f0e9); // Force set resolution setVariable(0x0837b12d, 0x0000f0e9); // Force set resolution
// setVariable(0x0837b223, 0x00000550); // Set ResX setVariable(0x0837b223, 0x00000550); // Set ResX
// setVariable(0x0837b228, 0x00000300); // Set ResY setVariable(0x0837b228, 0x00000300); // Set ResY
// setVariable(0x085700d3, 0x8990c031); // Fix something with the Shaders?? // setVariable(0x085700d3, 0x8990c031); // Fix something with the Shaders??
//Tests
patchMemory(0x081944e7, "9090909090"); // Closedir
patchMemory(0x082082e8, "88fa79"); // ~cRealCardIF
patchMemory(0x087beb6c, "5b"); // seqInitCard::typeinfo
patchMemory(0x087beb7c, "d4"); // seqInitCard::typeinfo
detourFunction(0x087105ad, amDongleUserInfoEx);
}
break;
case INITIALD_5:
{
if (config->debug_msgs == 1)
{
setVariable(0x093f6fa0, 2); // amBackupDebugLevel
setVariable(0x093f6fc0, 2); // amCreditDebugLevel
setVariable(0x093f7218, 2); // amDipswDebugLevel
setVariable(0x093f721c, 2); // amDongleDebugLevel
setVariable(0x093f7220, 2); // amEepromDebugLevel
setVariable(0x093f7224, 2); // amHwmonitorDebugLevel
setVariable(0x093f7228, 2); // amJvsDebugLevel
setVariable(0x093f722c, 2); // amLibDebugLevel
setVariable(0x093f7230, 2); // amMiscDebugLevel
setVariable(0x093f7238, 2); // amSysDataDebugLevel
setVariable(0x093f7240, 2); // bcLibDebugLevel
setVariable(0x093f7234, 2); // amOsinfoDebugLevel
setVariable(0x093f7244, 0x0FFFFFFF); // s_logMask
// detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes.
patchMemory(0x08942d91, "E912ffffff");
patchMemory(0x0894375b, "EB29");
}
// Security
detourFunction(0x0893dd25, amDongleInit);
detourFunction(0x0893c5b1, amDongleIsAvailable);
detourFunction(0x0893d0d2, amDongleUpdate);
// Fixes
detourFunction(0x0893c43d, amDipswGetData);
detourFunction(0x0893c4b3, stubRetZero); // amDipswSetLed
detourFunction(0x0832fca6, stubRetOne); // isEthLinkUp
patchMemory(0x08456348, "e954010000"); // tickWaitDHCP
patchMemory(0x0845843b, "eb60"); // tickInitAddress
patchMemory(0x08455584, "C0270900"); // tickInitStoreNetwork
detourFunction(0x08943eb6, stubRetZero); // amOsinfoExecDhcpNic
detourFunction(0x085135e0, stubRetZero); // isUseServerBox
// Set Resolution
patchMemory(0x0855a48d, "E9f000"); // Accept different Resolutions
setVariable(0x0855a583, 0x00000550); // Set ResX
setVariable(0x0855a588, 0x00000300); // Set ResY
// Tests
patchMemory(0x08a0f78c, "95"); // seqInitialize::childTerminationHandler
patchMemory(0x082923ad, "4851"); // ~cRealCardIF
patchMemory(0x081d7f69, "9090909090"); // closedir function skiped????
// amsInit
patchMemory(0x08938437, "00"); // Avoids strBBBlackList
patchMemory(0x089385cb, "e9e7000000"); // Eliminate Dongle Challenges
patchMemory(0x0893871e, "74"); // // Returns 1
patchMemory(0x0893871a, "01000000"); // Returns 1
// amsCheckKeyDataVerify
patchMemory(0x08939696, "00000000"); // amsCheckKeyDataVerify
patchMemory(0x0893962b, "00000000"); // amsCheckKeyDataVerify
detourFunction(0x0893dbeb, amDongleUserInfoEx);
} }
break; break;
case SEGABOOT_2_4_SYM: case SEGABOOT_2_4_SYM:
@ -725,6 +869,94 @@ int initPatch()
} }
} }
break; break;
case PRIMEVAL_HUNT:
{
// Security
detourFunction(0x08141770, amDongleInit);
detourFunction(0x08140229, amDongleIsAvailable);
detourFunction(0x08140c1f, amDongleUpdate);
patchMemory(0x08055264, "EB");
// Fixes
detourFunction(0x081400b5, amDipswGetData);
detourFunction(0x0814012c, stubRetZero);
patchMemory(0x08052cb2, "9090909090");
patchMemory(0x0805206a, "00");
//test
//patchMemory(0x0804d8be, "909090909090909090909090909090");
//patchMemory(0x0804e5cf, "909090909090909090909090909090");
//Res
//setVariable(0x0805af8b, 0x00000438);
//setVariable(0x0805af93, 0x000003c0);
//setVariable(0x0805afa2, 0x000003c0);
//setVariable(0x0805b0ed, 0x00000438);
//setVariable(0x0805aff5, 0x000003c0);
}
break;
case GHOST_SQUAD_EVOLUTION:
{
if (config->debug_msgs == 1)
{
// Debug
detourFunction(0x080984fe, _putConsole); // Crashes the game sometimes.
}
// Security
detourFunction(0x08183046, amDongleInit);
detourFunction(0x08181a91, amDongleIsAvailable);
detourFunction(0x081824f5, amDongleUpdate);
// Fixes
detourFunction(0x0818191d, amDipswGetData);
detourFunction(0x08181994, stubRetZero);
//patchMemory(0x807c9ec, "01");
//detourFunction(0x080f3f94, stubRetZero); //eliminates init_heap function.
}
break;
case HUMMER_EXTREME:
{
/* if (config->debug_msgs == 1)
{
setVariable(0x093f6fa0, 2); // amBackupDebugLevel
setVariable(0x093f6fc0, 2); // amCreditDebugLevel
setVariable(0x093f7218, 2); // amDipswDebugLevel
setVariable(0x093f721c, 2); // amDongleDebugLevel
setVariable(0x093f7220, 2); // amEepromDebugLevel
setVariable(0x093f7224, 2); // amHwmonitorDebugLevel
setVariable(0x093f7228, 2); // amJvsDebugLevel
setVariable(0x093f722c, 2); // amLibDebugLevel
setVariable(0x093f7230, 2); // amMiscDebugLevel
setVariable(0x093f7238, 2); // amSysDataDebugLevel
setVariable(0x093f7240, 2); // bcLibDebugLevel
setVariable(0x093f7234, 2); // amOsinfoDebugLevel
setVariable(0x093f7244, 0x0FFFFFFF); // s_logMask
// detourFunction(0x0808f9a8, _putConsole); // Crashes the game sometimes.
patchMemory(0x08942d91, "E912ffffff");
patchMemory(0x0894375b, "EB29");
}*/
// Security
detourFunction(0x0831c0d1, amDongleInit);
detourFunction(0x0831a95d, amDongleIsAvailable);
detourFunction(0x0831b47e, amDongleUpdate);
// Fixes
detourFunction(0x0831a7e9, amDipswGetData);
detourFunction(0x0831a85f, stubRetZero); // amDipswSetLed
// from TP
//patchMemory(0x080a0ef8, "C3000000"); // smpGlxSetCursos
//patchMemory(0x080a872b, "909090909090909090909090909090"); // glShaderSource
patchMemory(0x080cf7b8, "C3000000"); // iserror
patchMemory(0x080e8b40, "C3000000"); // clSteerErrorDisp::run
patchMemory(0x08171396, "C3000000"); // clErrorDisp::update_
detourFunction(0x08322dec, stubRetZero); // amOsinfoModifyNetworkAdrNic
detourFunction(0x083238a8, stubRetZero); // amOsinfoGetNetworkPropertyNicEx
patchMemory(0x08361aff, "C3000000"); // ADXM_SetupFramework
patchMemory(0x0836fa92, "C3000000"); // LXSYNC_Init
detourFunction(0x0831bf97, amDongleUserInfoEx);
//Force Test for debug
patchMemory(0x0807d4cf, "01");
}
break;
default: default:
// Don't do any patches for random games // Don't do any patches for random games
break; break;

View File

@ -1,4 +1,4 @@
const char pcidata[256] = { const char pci_1f0[256] = {
0x86, 0x80, 0x18, 0x29, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x86, 0x80, 0x18, 0x29, 0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01,
0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -25,4 +25,378 @@ const char pcidata[256] = {
0x00, 0x00, 0x00 0x00, 0x00, 0x00
}; };
const int pcidata_length = 256; const char pci_000[4096] = {
0x02, 0x10, 0x78, 0x14, 0x07, 0x00, 0x10, 0x00, 0xc2, 0x00, 0x04,
0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0xf1, 0xf1, 0x00, 0x00, 0xa0,
0xfc, 0xb0, 0xfc, 0x01, 0x00, 0xf1, 0x0f, 0x7c, 0x00, 0x00, 0x00,
0xde, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x50, 0x08, 0x00, 0x43,
0x10, 0xec, 0x1d, 0x01, 0x58, 0x03, 0xc8, 0x08, 0x00, 0x00, 0x00,
0x10, 0xa0, 0x52, 0x00, 0x22, 0x80, 0x2c, 0x01, 0x3f, 0x29, 0x09,
0x00, 0x84, 0x78, 0x43, 0x00, 0x40, 0x00, 0x84, 0x10, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x08, 0x33, 0x00, 0x00, 0x14, 0x00, 0x00,
0x1e, 0x00, 0x80, 0x01, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0b, 0x00, 0x01, 0x15, 0x01, 0x00, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x27, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x46, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xa0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x01,
0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
0x00, 0x34, 0x00, 0x35, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00,
0x34, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01,
0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x01, 0x40, 0x1f, 0xfa, 0x89, 0x00, 0x00, 0x00, 0x00,
0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x25, 0x00, 0x01, 0x41, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00,
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x01, 0x44, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
0xf1, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27,
0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x38, 0x9c, 0x00, 0x00,
0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c, 0x00,
0x00, 0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c, 0x00, 0x00, 0x38, 0x9c,
0x00, 0x00, 0x38, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};