From: Toni Wilen Date: Sat, 28 Oct 2006 12:00:07 +0000 (+0300) Subject: imported winuaesrc1330b7.zip X-Git-Tag: 2100~267 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=c2a47d6ad30e23a794560fa01486558b6ed7b5b1;p=francis%2Fwinuae.git imported winuaesrc1330b7.zip --- diff --git a/audio.c b/audio.c index 8f55f9ba..c485ee8e 100755 --- a/audio.c +++ b/audio.c @@ -1566,6 +1566,8 @@ void AUDxPER (int nr, uae_u16 v) if (per < maxhpos * CYCLE_UNIT / 2 && currprefs.produce_sound < 3) per = maxhpos * CYCLE_UNIT / 2; + else if (per < 4 * CYCLE_UNIT) + per = 4 * CYCLE_UNIT; if (audio_channel[nr].per == PERIOD_MAX - 1 && per != PERIOD_MAX - 1) { audio_channel[nr].evtime = CYCLE_UNIT; diff --git a/blitter.c b/blitter.c index 380b7d3d..97773884 100755 --- a/blitter.c +++ b/blitter.c @@ -86,15 +86,15 @@ Confirmed blitter F 4*4*ABC- ABCD E 4*4*ABC- ABC- D 3*4 AB- ABD -C 3*4 AB- AB- +C 3*3 AB- AB- B 3*3*AC- ACD -A 3*3*AC- AC- +A 2*2*AC AC 9 2*3 A- AD -8 2*3 A- A- +8 2*2 A- A- 7 4 4 -BC- -BCD 6 4 4 -BC- -BC- 5 3 4 -B- -BD -4 3 4 -B- -B- +4 3 3 -B- -B- 3 3 3 -C- -CD 2 3 3 -C- -C- 1 2 3 -D -D @@ -136,7 +136,7 @@ static const int blit_cycle_diagram[][10] = { 3, 4, 0,2,3,4, 2,3,0 }, /* 7 */ { 0, 2, 1,0 }, /* 8 */ { 2, 2, 1,4, 1,0 }, /* 9 */ - { 0, 3, 1,3,0 }, /* A */ + { 0, 2, 1,3 }, /* A */ { 3, 3, 1,3,4, 1,3,0 }, /* B */ { 2, 3, 1,2,0, 1,2 }, /* C */ { 3, 3, 1,2,4, 1,2,0 }, /* D */ @@ -152,15 +152,15 @@ static const int blit_cycle_diagram_fill[][10] = { 0, 3, 3,5,4 }, /* 1 */ { 0, 3, 0,3,0 }, /* 2 */ { 2, 3, 3,5,4, 3,0 }, /* 3 */ - { 0, 4, 0,2,5,0 }, /* 4 */ + { 0, 3, 0,2,5 }, /* 4 */ { 3, 4, 0,2,5,4, 2,0,0 }, /* 5 */ { 0, 4, 2,3,5,0 }, /* 6 */ { 3, 4, 2,3,5,4, 2,3,0 }, /* 7 */ - { 0, 3, 1,5,0 }, /* 8 */ + { 0, 2, 1,5 }, /* 8 */ { 2, 3, 1,5,4, 1,0}, /* 9 */ - { 0, 3, 1,3,5, }, /* A */ + { 0, 2, 1,3 }, /* A */ { 3, 3, 1,3,4, 1,3,0 }, /* B */ - { 2, 4, 1,2,5,0, 1,2 }, /* C */ + { 2, 3, 1,2,5, 1,2 }, /* C */ { 3, 4, 1,2,5,4, 1,2,0 }, /* D */ { 0, 4, 1,2,3,0 }, /* E */ { 4, 4, 1,2,3,4, 1,2,3,0 } /* F */ @@ -1041,7 +1041,7 @@ void do_blitter (int hpos) write_log("blitstart: v=%03.3d h=%03.3d %dx%d %d (%d) d=%d f=%02.2X n=%d pc=%p l=%d dma=%04.4X\n", vpos, hpos, blt_info.hblitsize, blt_info.vblitsize, cycles, blit_ch, blitdesc ? 1 : 0, blitfill, - dmaen(DMA_BLITPRI) ? 1 : 0, m68k_getpc(), blitline, dmacon); + dmaen(DMA_BLITPRI) ? 1 : 0, M68K_GETPC, blitline, dmacon); blitter_dump (); } #endif diff --git a/catweasel.c b/catweasel.c index 1ca291b0..8c3d1c96 100755 --- a/catweasel.c +++ b/catweasel.c @@ -1,4 +1,6 @@ +#include + #include "sysconfig.h" #include "sysdeps.h" @@ -9,6 +11,7 @@ #include "ioport.h" #include "catweasel.h" #include "uae.h" +#include "zfile.h" #include @@ -100,6 +103,7 @@ static uae_u8 get_buttons(void) int catweasel_read_mouse(int port, int *dx, int *dy, int *buttons) { + return 0; if (!cwc.can_mouse) return 0; *dx = mouse_x[port]; @@ -286,6 +290,188 @@ void catweasel_do_bput (uaecptr addr, uae_u32 b) //write_log ("P %02.2X %02.2X %d\n", (uae_u8)addr, (uae_u8)b, did_read); } +#include "core.cw4.c" + +static int cw_config_done(void) +{ + return ioport_read (cwc.iobase + 7) & 4; +} +static int cw_fpga_ready(void) +{ + return ioport_read (cwc.iobase + 7) & 8; +} +static void cw_resetFPGA(void) +{ + ioport_write (cwc.iobase + 2, 227); + ioport_write (cwc.iobase + 3, 0); + sleep_millis (10); + ioport_write (cwc.iobase + 3, 65); +} + +int catweasel4_configure(void) +{ + struct zfile *f; + + ioport_write (cwc.iobase, 241); + ioport_write (cwc.iobase + 1, 0); + ioport_write (cwc.iobase + 2, 227); + ioport_write (cwc.iobase + 3, 65); + ioport_write (cwc.iobase + 4, 0); + ioport_write (cwc.iobase + 5, 0); + ioport_write (cwc.iobase + 0x29, 0); + ioport_write (cwc.iobase + 0x2b, 0); + + if (cw_config_done()) { + write_log ("CW: FPGA already configured, skipping core upload\n"); + goto ok; + } + cw_resetFPGA(); + sleep_millis(10); + if (cw_config_done()) { + write_log ("CW: FPGA failed to reset!\n"); + return 0; + } + f = zfile_fopen("core.cw4", "rb"); + if (!f) { + f = zfile_fopen_data ("core.cw4.gz", core_len, core); + f = zfile_gunzip (f); + } + write_log ("CW: starting core upload, this will take few seconds\n"); + for (;;) { + uae_u8 b; + if (zfile_fread (&b, 1, 1, f) != 1) + break; + ioport_write (cwc.iobase + 3, (b & 1) ? 67 : 65); + while (!cw_fpga_ready()); + ioport_write (cwc.iobase + 192, b); + } + if (!cw_config_done()) { + write_log ("CW: FPGA didn't accept the core!\n"); + cw_resetFPGA(); + return 0; + } + sleep_millis(10); + write_log ("CW: core uploaded successfully\n"); +ok: + return 1; +} + +#include +#include + +#define PCI_CW_MK3 "PCI\\VEN_E159&DEV_0001&SUBSYS_00021212" +#define PCI_CW_MK4 "PCI\\VEN_E159&DEV_0001&SUBSYS_00035213" +#define PCI_CW_MK4_BUG "PCI\\VEN_E159&DEV_0001&SUBSYS_00025213" + +extern int os_64bit; +int force_direct_catweasel; +static int direct_detect(void) +{ + HDEVINFO devs; + SP_DEVINFO_LIST_DETAIL_DATA devInfoListDetail; + SP_DEVINFO_DATA devInfo; + int devIndex; + int cw = 0; + + if (!os_64bit && !force_direct_catweasel) + return 0; + devs = SetupDiGetClassDevsEx(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT, NULL, NULL, NULL); + if (devs == INVALID_HANDLE_VALUE) + return 0; + devInfoListDetail.cbSize = sizeof(devInfoListDetail); + if(SetupDiGetDeviceInfoListDetail(devs,&devInfoListDetail)) { + devInfo.cbSize = sizeof(devInfo); + for(devIndex=0;SetupDiEnumDeviceInfo(devs,devIndex,&devInfo);devIndex++) { + TCHAR devID[MAX_DEVICE_ID_LEN]; + if(CM_Get_Device_ID_Ex(devInfo.DevInst,devID,MAX_DEVICE_ID_LEN,0,devInfoListDetail.RemoteMachineHandle)!=CR_SUCCESS) + devID[0] = TEXT('\0'); + if (!memcmp (devID, PCI_CW_MK3, strlen (PCI_CW_MK3))) { + if (cw > 3) + break; + cw = 3; + } + if (!memcmp (devID, PCI_CW_MK4, strlen (PCI_CW_MK4)) || + !memcmp (devID, PCI_CW_MK4_BUG, strlen (PCI_CW_MK4_BUG))) + cw = 4; + if (cw) { + SP_DEVINFO_LIST_DETAIL_DATA devInfoListDetail; + ULONG status = 0; + ULONG problem = 0; + LOG_CONF config = 0; + BOOL haveConfig = FALSE; + ULONG dataSize; + PBYTE resDesData; + RES_DES prevResDes, resDes; + RESOURCEID resId = ResType_IO; + + devInfoListDetail.cbSize = sizeof(devInfoListDetail); + if((!SetupDiGetDeviceInfoListDetail(devs,&devInfoListDetail)) || + (CM_Get_DevNode_Status_Ex(&status,&problem,devInfo.DevInst,0,devInfoListDetail.RemoteMachineHandle)!=CR_SUCCESS)) + break; + if(!(status & DN_HAS_PROBLEM)) { + if (CM_Get_First_Log_Conf_Ex(&config, + devInfo.DevInst, + ALLOC_LOG_CONF, + devInfoListDetail.RemoteMachineHandle) == CR_SUCCESS) { + haveConfig = TRUE; + } + } + if(!haveConfig) { + if (CM_Get_First_Log_Conf_Ex(&config, + devInfo.DevInst, + FORCED_LOG_CONF, + devInfoListDetail.RemoteMachineHandle) == CR_SUCCESS) { + haveConfig = TRUE; + } + } + if(!haveConfig) { + if(!(status & DN_HAS_PROBLEM) || (problem != CM_PROB_HARDWARE_DISABLED)) { + if (CM_Get_First_Log_Conf_Ex(&config, + devInfo.DevInst, + BOOT_LOG_CONF, + devInfoListDetail.RemoteMachineHandle) == CR_SUCCESS) { + haveConfig = TRUE; + } + } + } + if(!haveConfig) + break; + prevResDes = (RES_DES)config; + resDes = 0; + while(CM_Get_Next_Res_Des_Ex(&resDes,prevResDes,ResType_IO,&resId,0,NULL)==CR_SUCCESS) { + if(prevResDes != config) + CM_Free_Res_Des_Handle(prevResDes); + prevResDes = resDes; + if(CM_Get_Res_Des_Data_Size_Ex(&dataSize,resDes,0,NULL)!=CR_SUCCESS) + continue; + resDesData = malloc (dataSize); + if(!resDesData) + continue; + if(CM_Get_Res_Des_Data_Ex(resDes,resDesData,dataSize,0,NULL)!=CR_SUCCESS) { + free (resDesData); + continue; + } + if (resId == ResType_IO) { + PIO_RESOURCE pIoData = (PIO_RESOURCE)resDesData; + if(pIoData->IO_Header.IOD_Alloc_End-pIoData->IO_Header.IOD_Alloc_Base+1) { + write_log("CW: PCI SCAN: CWMK%d @%I64X - %I64X\n", cw, + pIoData->IO_Header.IOD_Alloc_Base,pIoData->IO_Header.IOD_Alloc_End); + cwc.iobase = (int)pIoData->IO_Header.IOD_Alloc_Base; + cwc.direct_type = cw; + } + } + free (resDesData); + } + if(prevResDes != config) + CM_Free_Res_Des_Handle(prevResDes); + CM_Free_Log_Conf_Handle(config); + } + } + } + SetupDiDestroyDeviceInfoList(devs); + return cw; +} + int catweasel_init(void) { char name[32], tmp[1000]; @@ -295,6 +481,7 @@ int catweasel_init(void) if (cwc.type) return 1; + catweasel_detect(); if (currprefs.catweasel >= 100) { cwc.type = currprefs.catweasel >= 0x400 ? 3 : 1; @@ -302,7 +489,9 @@ int catweasel_init(void) if (!ioport_init()) goto fail; strcpy(name, "[DIRECT]"); + } else { + for (i = 0; i < 4; i++) { if (currprefs.catweasel > 0) i = currprefs.catweasel; @@ -313,9 +502,32 @@ int catweasel_init(void) break; } if (handle == INVALID_HANDLE_VALUE) { - write_log ("CW: No Catweasel detected\n"); - goto fail; + strcpy(name, "[DIRECT]"); + if (ioport_init()) { + if (cwc.direct_type == 4) { + if (catweasel4_configure()) { + cwc.type = 4; + cwc.can_joy = 2; + cwc.can_sid = 2; + cwc.can_kb = 1; + cwc.can_mouse = 2; + } + } else if (cwc.direct_type == 3) { + cwc.type = 3; + cwc.can_joy = 1; + cwc.can_sid = 1; + cwc.can_kb = 1; + cwc.can_mouse = 0; + } + } + if (cwc.type == 0) { + write_log ("CW: No Catweasel detected\n"); + goto fail; + } } + } + + if (!cwc.direct_type) { if (!DeviceIoControl (handle, CW_GET_VERSION, 0, 0, buffer, sizeof (buffer), &len, 0)) { write_log ("CW: CW_GET_VERSION failed %d\n", GetLastError()); goto fail; @@ -343,11 +555,12 @@ int catweasel_init(void) if (cwc.type == CATWEASEL_TYPE_MK4 && cwc.can_sid) cwc.can_sid = 2; } + if (cwc.type == CATWEASEL_TYPE_MK4) { if (cwc.can_mouse) { int i; catweasel_do_bput(3, 0x81); - catweasel_do_bput(0xd0, 0); // amiga mouse + catweasel_do_bput(0xd0, 4|8); // amiga mouse + pullups // clear mouse counters for (i = 0; i < 2; i++) { catweasel_do_bput(0xc4 + i * 8, 0); @@ -382,6 +595,8 @@ fail: void catweasel_free (void) { + if (cwc.type == 4) + catweasel_do_bput(3, 0x61); // enable floppy passthrough if (handle != INVALID_HANDLE_VALUE) CloseHandle (handle); handle = INVALID_HANDLE_VALUE; @@ -397,20 +612,28 @@ int catweasel_detect (void) { char name[32]; int i; + static int detected; - if (handle != INVALID_HANDLE_VALUE) - return TRUE; + if (detected) + return detected < 0 ? 0 : 1; + + detected = -1; for (i = 0; i < 4; i++) { sprintf (name, "\\\\.\\CAT%u_F0", i); handle = CreateFile (name, GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (handle != INVALID_HANDLE_VALUE) + if (handle != INVALID_HANDLE_VALUE) { + CloseHandle (handle); break; + } } - if (handle == INVALID_HANDLE_VALUE) - return FALSE; - CloseHandle (handle); - handle = INVALID_HANDLE_VALUE; + if (handle == INVALID_HANDLE_VALUE) { + if (direct_detect()) { + detected = 1; + return TRUE; + } + } + detected = 1; return TRUE; } diff --git a/cia.c b/cia.c index 87834da1..777a28ac 100755 --- a/cia.c +++ b/cia.c @@ -314,18 +314,37 @@ void cia_parallelack (void) RethinkICRA(); } -static void ciab_checkalarm (void) +static int checkalarm (unsigned long tod, unsigned long alarm, int inc) { - if (ciabtod != ciabalarm) - return; - ciabicr |= 4; RethinkICRB(); + if (tod == alarm) + return 1; + if (!inc) + return 0; + /* emulate buggy TODMED counter. + * it counts: .. 29 2A 2B 2C 2D 2E 2F 20 30 31 32 .. + * (0F->00->10 only takes couple of cycles but it will trigger alarm.. + */ + if (tod & 0x000fff) + return 0; + if (((tod - 1) & 0xfff000) == alarm) + return 1; + return 0; } -static void ciaa_checkalarm (void) +STATIC_INLINE void ciab_checkalarm (int inc) { - if (ciaatod != ciaaalarm) - return; - ciaaicr |= 4; RethinkICRA(); + if (checkalarm (ciabtod, ciabalarm, inc)) { + ciabicr |= 4; + RethinkICRB(); + } +} + +STATIC_INLINE void ciaa_checkalarm (int inc) +{ + if (checkalarm (ciaatod, ciaaalarm, inc)) { + ciaaicr |= 4; + RethinkICRA(); + } } void CIA_hsync_handler (void) @@ -333,7 +352,7 @@ void CIA_hsync_handler (void) if (ciabtodon) { ciabtod++; ciabtod &= 0xFFFFFF; - ciab_checkalarm (); + ciab_checkalarm (1); } if (keys_available() && kback && (ciaacra & 0x40) == 0 && (hsync_counter & 15) == 0) { @@ -410,7 +429,7 @@ void CIA_vsync_handler () return; /* try not to count backwards */ ciaatod = nt; ciaatod &= 0xffffff; - ciaa_checkalarm (); + ciaa_checkalarm (0); return; } } @@ -418,7 +437,7 @@ void CIA_vsync_handler () if (ciaatodon) { ciaatod++; ciaatod &= 0xFFFFFF; - ciaa_checkalarm (); + ciaa_checkalarm (1); } } @@ -451,7 +470,7 @@ static uae_u8 ReadCIAA (unsigned int addr) compute_passed_time (); #ifdef CIA_DEBUG_R - write_log("R_CIAA: bfe%x01 %08.8X\n", addr, m68k_getpc()); + write_log("R_CIAA: bfe%x01 %08.8X\n", addr, M68K_GETPC); #endif switch (addr & 0xf) { @@ -540,8 +559,10 @@ static uae_u8 ReadCIAA (unsigned int addr) else return (uae_u8)(ciaatod >> 8); case 10: - ciaatlatch = 1; - ciaatol = ciaatod; /* ??? only if not already latched? */ + if (!ciaatlatch) { /* only if not already latched. A1200 confirmed. (TW) */ + ciaatlatch = 1; + ciaatol = ciaatod; + } return (uae_u8)(ciaatol >> 16); case 12: if (ciaasdr_unread == 1) @@ -563,7 +584,7 @@ static uae_u8 ReadCIAB (unsigned int addr) unsigned int tmp; #ifdef CIA_DEBUG_R - write_log("R_CIAB: bfd%x00 %08.8X\n", addr, m68k_getpc()); + write_log("R_CIAB: bfd%x00 %08.8X\n", addr, M68K_GETPC); #endif compute_passed_time (); @@ -636,8 +657,10 @@ static uae_u8 ReadCIAB (unsigned int addr) else return (uae_u8)(ciabtod >> 8); case 10: - ciabtlatch = 1; - ciabtol = ciabtod; + if (!ciabtlatch) { + ciabtlatch = 1; + ciabtol = ciabtod; + } return (uae_u8)(ciabtol >> 16); case 12: return ciabsdr; @@ -655,7 +678,7 @@ static uae_u8 ReadCIAB (unsigned int addr) static void WriteCIAA (uae_u16 addr,uae_u8 val) { #ifdef CIA_DEBUG_W - write_log("W_CIAA: bfe%x01 %02.2X %08.8X\n", addr, val, m68k_getpc()); + write_log("W_CIAA: bfe%x01 %02.2X %08.8X\n", addr, val, M68K_GETPC); #endif #ifdef ACTION_REPLAY ar_ciaa[addr & 0xf] = val; @@ -745,7 +768,7 @@ static void WriteCIAA (uae_u16 addr,uae_u8 val) } else { ciaatod = (ciaatod & ~0xff) | val; ciaatodon = 1; - ciaa_checkalarm (); + ciaa_checkalarm (0); #ifdef TOD_HACK if (currprefs.tod_hack) tod_hack_reset (); @@ -757,7 +780,6 @@ static void WriteCIAA (uae_u16 addr,uae_u8 val) ciaaalarm = (ciaaalarm & ~0xff00) | (val << 8); } else { ciaatod = (ciaatod & ~0xff00) | (val << 8); - //ciaatodon = 0; } break; case 10: @@ -810,7 +832,7 @@ static void WriteCIAA (uae_u16 addr,uae_u8 val) static void WriteCIAB (uae_u16 addr,uae_u8 val) { #ifdef CIA_DEBUG_W - write_log("W_CIAB: bfd%x00 %02.2X %08.8X\n", addr, val, m68k_getpc()); + write_log("W_CIAB: bfd%x00 %02.2X %08.8X\n", addr, val, M68K_GETPC); #endif #ifdef ACTION_REPLAY ar_ciab[addr & 0xf] = val; @@ -892,7 +914,7 @@ static void WriteCIAB (uae_u16 addr,uae_u8 val) } else { ciabtod = (ciabtod & ~0xff) | val; ciabtodon = 1; - ciab_checkalarm (); + ciab_checkalarm (0); } break; case 9: @@ -900,7 +922,6 @@ static void WriteCIAB (uae_u16 addr,uae_u8 val) ciabalarm = (ciabalarm & ~0xff00) | (val << 8); } else { ciabtod = (ciabtod & ~0xff00) | (val << 8); - //ciabtodon = 0; } break; case 10: @@ -971,7 +992,7 @@ void CIA_reset (void) ciaaicr = ciabicr = ciaaimask = ciabimask = 0; ciaacra = ciaacrb = ciabcra = ciabcrb = 0x4; /* outmode = toggle; */ ciaala = ciaalb = ciabla = ciablb = ciaata = ciaatb = ciabta = ciabtb = 0xFFFF; - ciaaalarm = ciabalarm = currprefs.cpu_cycle_exact ? 0 : 0xffffff; + ciaaalarm = ciabalarm = 0; ciabpra = 0x8C; ciabdra = 0; div10 = 0; ciaasdr_cnt = 0; ciaasdr = 0; @@ -1003,12 +1024,12 @@ void dumpcia (void) { console_out ("A: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n", ciaacra, ciaacrb, ciaaicr, ciaaimask, ciaata, ciaala, ciaatb, ciaalb); - console_out ("TOD %06x ALARM %06x %c%c\n", - ciaatod, ciaaalarm, ciaatlatch ? 'L' : ' ', ciaatodon ? ' ' : 'S'); + console_out ("TOD %06x (%06x) ALARM %06x %c%c\n", + ciaatod, ciaatol, ciaaalarm, ciaatlatch ? 'L' : ' ', ciaatodon ? ' ' : 'S'); console_out ("B: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n", ciabcra, ciabcrb, ciaaicr, ciabimask, ciabta, ciabla, ciabtb, ciablb); - console_out ("TOD %06x ALARM %06x %c%c\n", - ciabtod, ciabalarm, ciabtlatch ? 'L' : ' ', ciabtodon ? ' ' : 'S'); + console_out ("TOD %06x (%06x) ALARM %06x %c%c\n", + ciabtod, ciabtol, ciabalarm, ciabtlatch ? 'L' : ' ', ciabtodon ? ' ' : 'S'); } /* CIA memory access */ @@ -1083,7 +1104,7 @@ uae_u32 REGPARAM2 cia_bget (uaecptr addr) if (currprefs.cpu_level == 0 && currprefs.cpu_compatible) v = (addr & 1) ? regs.irc : regs.irc >> 8; if (warned > 0) { - write_log ("cia_bget: unknown CIA address %x PC=%x\n", addr, m68k_getpc(®s)); + write_log ("cia_bget: unknown CIA address %x PC=%x\n", addr, M68K_GETPC); warned--; } break; @@ -1121,7 +1142,7 @@ uae_u32 REGPARAM2 cia_wget (uaecptr addr) if (currprefs.cpu_level == 0 && currprefs.cpu_compatible) v = regs.irc; if (warned > 0) { - write_log ("cia_wget: unknown CIA address %x PC=%x\n", addr, m68k_getpc(®s)); + write_log ("cia_wget: unknown CIA address %x PC=%x\n", addr, M68K_GETPC); warned--; } break; @@ -1472,7 +1493,7 @@ uae_u8 *save_cia (int num, int *len, uae_u8 *dstptr) save_u8 (b); b = (num ? ciabalarm : ciaaalarm); /* alarm LO */ save_u8 (b); - b = (num ? ciabalarm >> 8 : ciaaalarm >>8 ); /* alarm MED */ + b = (num ? ciabalarm >> 8 : ciaaalarm >> 8); /* alarm MED */ save_u8 (b); b = (num ? ciabalarm >> 16 : ciaaalarm >> 16); /* alarm HI */ save_u8 (b); diff --git a/core.cw4.c b/core.cw4.c new file mode 100755 index 00000000..73b0719b --- /dev/null +++ b/core.cw4.c @@ -0,0 +1,2436 @@ +unsigned char core[] = { + 0x1f, 0x8b, 0x08, 0x08, 0xd6, 0xd5, 0xed, 0x44, + 0x02, 0x03, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x77, 0x34, 0x00, 0xac, 0x5b, 0x4d, 0x6c, 0x1c, + 0x47, 0x76, 0x7e, 0x55, 0x5d, 0x33, 0x2c, 0x52, + 0x23, 0xb1, 0x86, 0x9a, 0x15, 0xc6, 0x8e, 0x22, + 0x14, 0x47, 0x8c, 0x40, 0x03, 0x32, 0xd0, 0x32, + 0x84, 0x40, 0x8b, 0xf0, 0x50, 0x43, 0xd3, 0x06, + 0xb5, 0x71, 0x00, 0x6a, 0xd7, 0x08, 0xb8, 0x39, + 0xb5, 0x0c, 0x07, 0x50, 0x90, 0x1c, 0x94, 0x9b, + 0x76, 0xb1, 0x87, 0x9a, 0xd1, 0xd8, 0x18, 0x19, + 0xdc, 0x60, 0xe4, 0x93, 0xd6, 0xd9, 0xc3, 0x58, + 0x09, 0x02, 0x2f, 0x90, 0x03, 0x17, 0xd8, 0x83, + 0x91, 0x53, 0xcb, 0xd1, 0x41, 0x7b, 0xe3, 0x21, + 0x07, 0xe5, 0xc6, 0x83, 0x0f, 0xca, 0x8d, 0xd9, + 0xf8, 0x40, 0x72, 0x28, 0x32, 0xef, 0x55, 0x75, + 0xf7, 0xf4, 0xfc, 0x51, 0x34, 0xb5, 0x0d, 0x89, + 0x1c, 0xce, 0x54, 0xbf, 0xae, 0xf7, 0xea, 0x7b, + 0xdf, 0xfb, 0xa9, 0x9a, 0xa3, 0xa3, 0x8f, 0x8e, + 0x7e, 0x08, 0x47, 0x7f, 0x9c, 0xcb, 0x96, 0x2a, + 0xec, 0x72, 0x24, 0x62, 0x53, 0x86, 0xf3, 0x11, + 0x5f, 0x69, 0x4c, 0x87, 0xa6, 0xf8, 0x0c, 0xaa, + 0x10, 0xbc, 0xd7, 0x95, 0x96, 0xc1, 0xd0, 0x55, + 0xb2, 0x8d, 0x1a, 0x5c, 0x89, 0xa1, 0xaa, 0x83, + 0x8f, 0xbb, 0xb2, 0xd3, 0x78, 0x27, 0x2a, 0xc6, + 0x95, 0x47, 0x41, 0xf0, 0xb7, 0x50, 0xfa, 0x35, + 0x7b, 0xbe, 0x07, 0x17, 0x2c, 0x5f, 0x83, 0x19, + 0xcd, 0x16, 0x6d, 0x71, 0x0b, 0x66, 0x4c, 0xb0, + 0x0a, 0x67, 0x22, 0xb6, 0x60, 0x45, 0x17, 0x2a, + 0x86, 0x0f, 0x0b, 0x9b, 0x33, 0x38, 0xf8, 0xac, + 0xc6, 0xcf, 0x0b, 0x9b, 0x50, 0x89, 0xe9, 0x4e, + 0x1c, 0x47, 0x83, 0xe7, 0x2c, 0xaf, 0xee, 0xc2, + 0x6b, 0x5d, 0x0a, 0xb8, 0xc5, 0x1f, 0xa0, 0x01, + 0x2c, 0x2c, 0x1e, 0xc1, 0x1f, 0xef, 0x7a, 0x94, + 0x17, 0x26, 0xc1, 0xd9, 0xc8, 0x3d, 0xea, 0xf8, + 0xe9, 0x00, 0x18, 0x1c, 0x8d, 0xf3, 0x11, 0xd6, + 0x40, 0xd1, 0x00, 0xcc, 0xd0, 0x1f, 0x2f, 0x5e, + 0x16, 0x73, 0xb2, 0xc8, 0x46, 0x32, 0x19, 0x38, + 0x74, 0x99, 0xdc, 0x6b, 0xeb, 0xfe, 0x93, 0x3d, + 0x15, 0x0e, 0xb4, 0xc6, 0x3f, 0x5b, 0xda, 0xfa, + 0x41, 0xf2, 0xa1, 0x93, 0x50, 0x07, 0x10, 0x33, + 0xe9, 0xb3, 0x59, 0xf2, 0x7b, 0xe8, 0xb2, 0x5a, + 0x00, 0xaf, 0x3f, 0x06, 0x78, 0xc0, 0x41, 0x70, + 0x14, 0x87, 0x8f, 0xb9, 0x03, 0xb0, 0x88, 0x1f, + 0xe5, 0x6c, 0x16, 0xe0, 0x7f, 0x71, 0x42, 0xeb, + 0x08, 0x1c, 0x5c, 0xf2, 0x0f, 0x33, 0xf8, 0x23, + 0xf2, 0xef, 0x6e, 0xb9, 0x99, 0xd1, 0x24, 0xe2, + 0x9c, 0xb0, 0x54, 0xf5, 0xd2, 0x18, 0x39, 0xb6, + 0x40, 0x3f, 0x39, 0xcb, 0x4c, 0xe1, 0xee, 0xe1, + 0x24, 0xaf, 0xdb, 0xcb, 0x1b, 0x85, 0xfe, 0x97, + 0x5f, 0x35, 0x2b, 0xb4, 0x55, 0x5b, 0x5d, 0xc6, + 0x27, 0x09, 0xe8, 0x68, 0x30, 0x2d, 0x87, 0x45, + 0xb7, 0x72, 0xcf, 0x0e, 0xdc, 0x4c, 0x18, 0x4d, + 0x2f, 0x62, 0x6d, 0xe9, 0x05, 0xae, 0xd3, 0x53, + 0xaf, 0x72, 0xd8, 0x1c, 0x27, 0x0c, 0x67, 0xb6, + 0x06, 0x81, 0x80, 0x92, 0x02, 0xad, 0x00, 0xa1, + 0x8a, 0x83, 0x4b, 0x1b, 0xf6, 0x16, 0x40, 0x95, + 0x66, 0x66, 0xa7, 0x68, 0x56, 0xfc, 0x9e, 0x4e, + 0x2c, 0x01, 0x97, 0xe8, 0xc7, 0x2c, 0xc0, 0xd2, + 0x38, 0x8c, 0xa0, 0x5a, 0xc5, 0xa7, 0xf8, 0x74, + 0xbc, 0xe9, 0x22, 0xc0, 0x5d, 0x7d, 0x89, 0x10, + 0x30, 0xfb, 0x2d, 0xbe, 0xb3, 0xdb, 0xcb, 0x6c, + 0xc4, 0xfd, 0xda, 0x21, 0x96, 0xd1, 0x33, 0x3d, + 0x54, 0xc2, 0x09, 0x33, 0x43, 0x18, 0xb8, 0x1b, + 0x1c, 0xee, 0x71, 0x70, 0x84, 0x3e, 0xcb, 0x52, + 0xd0, 0x16, 0xbd, 0xda, 0x5c, 0x4b, 0x50, 0x2c, + 0x15, 0x86, 0x23, 0xc3, 0x09, 0x36, 0xb3, 0x16, + 0x9f, 0xbb, 0x4c, 0x10, 0x03, 0xa8, 0xbc, 0x99, + 0x09, 0x53, 0xfb, 0xe9, 0x00, 0xe3, 0x1d, 0xa0, + 0x95, 0xdd, 0xc4, 0xc6, 0xdb, 0xdf, 0xe1, 0xcc, + 0xcc, 0x09, 0xb8, 0x29, 0x08, 0x67, 0xb1, 0xfc, + 0x89, 0x44, 0x9c, 0xdd, 0x94, 0xa8, 0xfe, 0x7f, + 0xe5, 0x1c, 0x5d, 0x67, 0x6a, 0x8e, 0x5c, 0x29, + 0x46, 0x8a, 0x39, 0x50, 0x26, 0x38, 0xf3, 0x6a, + 0xb8, 0x01, 0xea, 0x28, 0x9d, 0x44, 0xcc, 0x4d, + 0x62, 0xa9, 0x31, 0x57, 0x0e, 0x53, 0x84, 0x33, + 0x41, 0xaa, 0x48, 0x41, 0x4f, 0xde, 0xd1, 0xf8, + 0x61, 0xa4, 0xa5, 0xc4, 0x5f, 0xf1, 0x5e, 0xe6, + 0x4e, 0x0c, 0x6a, 0xf8, 0x86, 0x85, 0x13, 0xe0, + 0x8c, 0xc3, 0xbb, 0x08, 0x1d, 0x9c, 0x0a, 0x2e, + 0x9a, 0xb0, 0x64, 0x33, 0xfc, 0xe3, 0x7a, 0xed, + 0x2f, 0xdc, 0xcc, 0xae, 0x38, 0x37, 0x88, 0x04, + 0x9a, 0xa3, 0xef, 0xd1, 0x1f, 0x4c, 0xf0, 0xad, + 0x02, 0x69, 0x76, 0x99, 0xc1, 0x06, 0x03, 0x8d, + 0x36, 0xe1, 0xd5, 0x69, 0x2f, 0x0c, 0x96, 0x7f, + 0xb3, 0xef, 0x70, 0xc6, 0x07, 0x71, 0x06, 0x09, + 0xce, 0xc6, 0xfb, 0x25, 0xe2, 0x70, 0x2b, 0xc3, + 0xd9, 0x8e, 0x39, 0x47, 0x56, 0x98, 0x92, 0xb0, + 0x04, 0x5b, 0x39, 0x9c, 0x45, 0x24, 0x49, 0xeb, + 0x57, 0xa9, 0xe9, 0x66, 0xe6, 0x8c, 0x46, 0x8b, + 0x85, 0xe1, 0x40, 0x79, 0xe5, 0x43, 0xd8, 0xce, + 0xe1, 0xec, 0xae, 0xe3, 0xfc, 0x8c, 0xf6, 0x35, + 0x9f, 0x68, 0xb3, 0x6a, 0x0a, 0x13, 0x03, 0xb1, + 0xd9, 0x20, 0x9b, 0x21, 0xe8, 0x42, 0x71, 0x71, + 0xd7, 0x41, 0xc7, 0xf3, 0xd9, 0x1c, 0xf2, 0x59, + 0xcb, 0xae, 0x24, 0x00, 0x63, 0xba, 0x35, 0x11, + 0x67, 0xc9, 0xeb, 0x70, 0x1a, 0xb6, 0xe0, 0xc7, + 0xc4, 0x67, 0xd3, 0x5a, 0x0a, 0x9e, 0x80, 0x96, + 0x79, 0x84, 0x09, 0x5a, 0xed, 0x62, 0x9e, 0x50, + 0x5f, 0x79, 0xa1, 0x9a, 0x84, 0x9b, 0x12, 0x72, + 0xa4, 0xec, 0x66, 0xc2, 0x10, 0x67, 0x86, 0x8c, + 0x2b, 0x45, 0x5f, 0x1d, 0x36, 0x81, 0xcf, 0xd2, + 0x21, 0x4b, 0xe0, 0xa9, 0xdb, 0x93, 0xa3, 0x7c, + 0x7e, 0x40, 0xcb, 0xb7, 0xec, 0x70, 0xa6, 0x1d, + 0x2c, 0x58, 0x91, 0xa7, 0xee, 0x24, 0x26, 0xe3, + 0x2c, 0x47, 0x82, 0x55, 0x06, 0xd1, 0x82, 0x6e, + 0x75, 0x3a, 0x10, 0xee, 0xd1, 0x1d, 0x0b, 0x09, + 0xce, 0x2c, 0xf1, 0xd9, 0x15, 0x91, 0xe2, 0x2c, + 0x9c, 0xb8, 0x9a, 0x39, 0x8f, 0xa8, 0xae, 0x6b, + 0x9c, 0xd9, 0x86, 0xba, 0xa5, 0x61, 0xcd, 0xd3, + 0xb6, 0xe8, 0xe3, 0xcc, 0x06, 0x29, 0xce, 0xa2, + 0xc9, 0x38, 0xeb, 0xab, 0xa9, 0xc0, 0xe3, 0x0c, + 0x71, 0xa5, 0xd6, 0x76, 0x45, 0xba, 0x00, 0x3c, + 0x22, 0xc0, 0x20, 0xce, 0x78, 0xe6, 0xdc, 0x6c, + 0x32, 0xce, 0xfc, 0x6a, 0xd2, 0x02, 0xf4, 0x99, + 0x20, 0xee, 0x65, 0x4c, 0x81, 0xb4, 0x8d, 0x7c, + 0x06, 0x7c, 0x3e, 0x65, 0x0a, 0x23, 0x5f, 0x85, + 0xb3, 0x50, 0x91, 0xb0, 0x79, 0x54, 0xf3, 0x53, + 0xb1, 0x68, 0xb5, 0x13, 0x96, 0xc5, 0x4d, 0x9c, + 0xc9, 0x75, 0x2b, 0x92, 0xf9, 0xd4, 0xf5, 0xe8, + 0x02, 0x74, 0x25, 0x23, 0x9c, 0x2d, 0x27, 0x1e, + 0x8c, 0x38, 0x53, 0xe0, 0xe2, 0xe6, 0x5b, 0x21, + 0xaa, 0xff, 0xbb, 0xde, 0xc8, 0x0d, 0x19, 0xce, + 0xda, 0xa3, 0x40, 0xb3, 0x43, 0x94, 0x94, 0x65, + 0x0b, 0x4e, 0xcd, 0x17, 0xbd, 0x3e, 0x9f, 0x29, + 0x6f, 0x06, 0x91, 0xd3, 0x67, 0xf8, 0xda, 0x66, + 0x0e, 0x67, 0x55, 0x9b, 0x2d, 0x40, 0x4c, 0xe3, + 0x23, 0x20, 0xcc, 0xc2, 0xae, 0x63, 0x0d, 0x0a, + 0x75, 0x86, 0x49, 0x7a, 0xe2, 0xa6, 0xfa, 0xb7, + 0xfe, 0x2c, 0xf8, 0x04, 0x9b, 0x99, 0xb5, 0xe4, + 0xf5, 0xb4, 0x77, 0xe1, 0xa8, 0x59, 0x9a, 0x47, + 0xa1, 0xff, 0xbc, 0x9b, 0xfa, 0x34, 0xe2, 0x0c, + 0xd0, 0x1c, 0x9b, 0x99, 0x9a, 0x56, 0x8c, 0x06, + 0x3a, 0x64, 0x50, 0x5a, 0x4d, 0x59, 0xb8, 0x9c, + 0x3e, 0x2f, 0x86, 0x47, 0x3e, 0xa0, 0x4c, 0x87, + 0xcb, 0xe5, 0x97, 0x43, 0x71, 0x73, 0xa9, 0x1b, + 0x24, 0xf3, 0x09, 0xa2, 0x31, 0xce, 0xc9, 0x1c, + 0xce, 0x2e, 0xc4, 0x81, 0x5b, 0x25, 0x8c, 0xab, + 0x0a, 0x2e, 0x11, 0x63, 0x4f, 0x7d, 0xdb, 0x58, + 0x82, 0x3b, 0x87, 0x43, 0x7c, 0x16, 0x1e, 0x9b, + 0xbd, 0xa4, 0x33, 0x13, 0x41, 0x8a, 0xb3, 0x14, + 0x27, 0x96, 0x85, 0x70, 0xcb, 0xa9, 0x79, 0x85, + 0x3b, 0x9c, 0x91, 0xba, 0x61, 0x0a, 0x33, 0x58, + 0x91, 0x8b, 0x63, 0x57, 0x13, 0xc7, 0xae, 0x43, + 0xd0, 0xc7, 0x99, 0x8b, 0x9b, 0xa6, 0x83, 0xc2, + 0x76, 0x76, 0x55, 0x0e, 0x67, 0x6f, 0x8b, 0x5c, + 0xdc, 0xbc, 0x39, 0xc6, 0xfc, 0x1a, 0x71, 0xb6, + 0x40, 0x71, 0x93, 0x3b, 0x35, 0x05, 0x25, 0x99, + 0x9c, 0x70, 0x76, 0x33, 0x2c, 0x17, 0xe0, 0xd1, + 0xee, 0x70, 0x78, 0xd4, 0x90, 0x4f, 0x95, 0xc6, + 0xaf, 0x26, 0x40, 0x30, 0xf4, 0xb7, 0x8b, 0xe8, + 0x3b, 0x7b, 0x7d, 0x9c, 0x0d, 0xe5, 0x63, 0x67, + 0xc6, 0x08, 0x8a, 0x3c, 0xce, 0x8a, 0xc0, 0x9d, + 0x88, 0xd0, 0xb2, 0xd8, 0x7a, 0x9c, 0xc9, 0x06, + 0x86, 0xc9, 0xfd, 0x52, 0x3f, 0x6e, 0xc2, 0x07, + 0xdc, 0xa5, 0xba, 0xfe, 0x7a, 0x6f, 0x5c, 0x0e, + 0x9a, 0xce, 0xe4, 0x7c, 0xb6, 0x00, 0x82, 0x70, + 0xd6, 0xb8, 0x6a, 0xa7, 0x05, 0xfc, 0xc7, 0x5e, + 0xa5, 0x1f, 0x37, 0xd5, 0x46, 0x3e, 0x13, 0x6e, + 0xf1, 0x89, 0xab, 0xb9, 0x0e, 0x1e, 0x67, 0x21, + 0xbf, 0xf0, 0x8d, 0x9b, 0x30, 0x5c, 0xb5, 0x9f, + 0x84, 0xc5, 0xc5, 0x5d, 0xca, 0x97, 0xa7, 0x98, + 0xc3, 0x19, 0xcc, 0xca, 0x9c, 0xa6, 0x53, 0xe3, + 0x0c, 0xe6, 0x85, 0x5d, 0x7a, 0xca, 0x3c, 0xce, + 0x3a, 0x53, 0x8a, 0x70, 0x85, 0x38, 0x7b, 0x81, + 0xbe, 0x75, 0x77, 0x2f, 0x97, 0x9f, 0x61, 0x58, + 0xc8, 0xc5, 0x4d, 0x39, 0x19, 0x67, 0x7d, 0x3e, + 0xeb, 0x27, 0xfe, 0x36, 0x84, 0xff, 0xde, 0xcf, + 0xe5, 0x67, 0xf3, 0x8b, 0x79, 0xf7, 0x1e, 0xa7, + 0xa6, 0x4d, 0xa8, 0xda, 0x6a, 0x37, 0xb3, 0xb0, + 0x5c, 0x8c, 0xbd, 0x9a, 0xcd, 0x55, 0x85, 0x06, + 0x4c, 0xf9, 0xcc, 0x1a, 0xee, 0xf9, 0x2c, 0xa7, + 0x91, 0xe4, 0x63, 0x70, 0xe6, 0x94, 0x30, 0x73, + 0xab, 0x2c, 0xe5, 0xb3, 0x37, 0x19, 0xc5, 0xcd, + 0x79, 0x56, 0xcc, 0xe5, 0x67, 0x7e, 0xd8, 0xf8, + 0x64, 0x71, 0xf4, 0xba, 0xdf, 0x5f, 0xa8, 0xaa, + 0x48, 0x71, 0xb6, 0xbe, 0x97, 0x38, 0xba, 0xc8, + 0xf8, 0x2c, 0xcb, 0xe7, 0xa2, 0xb1, 0x38, 0xa3, + 0xeb, 0x22, 0x3a, 0xb2, 0x49, 0xf9, 0x0c, 0x85, + 0x51, 0xf4, 0x60, 0x25, 0x78, 0x4e, 0xab, 0x49, + 0x36, 0xe3, 0xc4, 0x67, 0xe4, 0x9b, 0xc7, 0xa6, + 0xa1, 0x09, 0x8f, 0xbc, 0x09, 0xe7, 0x3f, 0x16, + 0xc9, 0x22, 0x89, 0x37, 0x9c, 0xfe, 0xad, 0x79, + 0x01, 0xff, 0x77, 0x98, 0xd4, 0x01, 0xd5, 0x87, + 0x2c, 0x5a, 0x19, 0xe0, 0x9c, 0xab, 0xed, 0xc2, + 0xd8, 0xd5, 0xa4, 0x5a, 0x10, 0xce, 0x7c, 0xe4, + 0xf4, 0x98, 0xc3, 0x99, 0xad, 0xd3, 0xab, 0x8d, + 0x4e, 0x3d, 0xe4, 0x3f, 0x3d, 0x4a, 0xd4, 0xbc, + 0x14, 0x23, 0xce, 0x02, 0xc4, 0x59, 0x06, 0x8d, + 0xd9, 0xed, 0xc6, 0x58, 0x9c, 0x51, 0x9d, 0xf0, + 0x8c, 0xdd, 0xcb, 0xe2, 0x26, 0x06, 0xd1, 0x7b, + 0x30, 0xb5, 0x0d, 0x4b, 0x72, 0xad, 0x97, 0xc4, + 0xcd, 0x2a, 0x51, 0x10, 0x2e, 0x7b, 0x98, 0x2b, + 0xc7, 0xd9, 0xa4, 0x99, 0xe1, 0x75, 0xbb, 0xcf, + 0x67, 0x2e, 0xa0, 0x48, 0xb8, 0x06, 0x5f, 0xbf, + 0x4c, 0x52, 0x86, 0x2a, 0x91, 0x23, 0x26, 0x93, + 0x9b, 0xea, 0x38, 0x61, 0xa9, 0x1d, 0xca, 0x32, + 0x5a, 0x4e, 0xf9, 0x4c, 0x12, 0xce, 0x8a, 0x80, + 0xc9, 0xc4, 0x87, 0x47, 0x09, 0x9f, 0x7d, 0x6e, + 0xda, 0xab, 0xc2, 0xe1, 0x4c, 0xf3, 0xc9, 0x0b, + 0x90, 0xe2, 0x0c, 0xe4, 0x3f, 0x2c, 0x50, 0x05, + 0x33, 0x0d, 0x3f, 0x16, 0xe7, 0x39, 0x44, 0x2d, + 0x8a, 0x9b, 0x2c, 0x4a, 0x71, 0x56, 0x55, 0xcc, + 0xd5, 0x01, 0x7d, 0x35, 0x05, 0x3f, 0x0e, 0x68, + 0xfd, 0x6c, 0x35, 0xad, 0x03, 0x94, 0xaa, 0x1e, + 0x26, 0xf5, 0xa6, 0xc2, 0xd0, 0x6c, 0x9c, 0x30, + 0x76, 0x8c, 0x6f, 0xa6, 0x38, 0xb3, 0xa8, 0x19, + 0x3e, 0x6b, 0xa9, 0xcd, 0xa8, 0x76, 0x85, 0x7b, + 0x4a, 0xae, 0x90, 0x78, 0xe2, 0x33, 0x82, 0xc6, + 0x3a, 0x74, 0x35, 0xd5, 0xe8, 0x61, 0x06, 0x8f, + 0x05, 0x3e, 0x19, 0x67, 0x06, 0x22, 0xa7, 0x30, + 0xfe, 0xe7, 0xbf, 0x12, 0xe8, 0x77, 0x1b, 0x28, + 0x6a, 0xe6, 0x0f, 0x87, 0x09, 0x3b, 0xaf, 0x23, + 0x8e, 0xcb, 0x96, 0x66, 0xf6, 0x7e, 0x32, 0xa5, + 0x0f, 0x26, 0xf0, 0x19, 0x0d, 0x86, 0xf3, 0x51, + 0xeb, 0x2a, 0x4e, 0xa9, 0xf8, 0xa9, 0xa1, 0x64, + 0x0f, 0xe1, 0x6f, 0xe7, 0x95, 0xd0, 0xfb, 0xd2, + 0xd7, 0x01, 0xe7, 0x62, 0x7b, 0x83, 0x70, 0xb6, + 0xd4, 0x9d, 0x3a, 0xae, 0x0e, 0x48, 0x70, 0xf6, + 0x34, 0xf8, 0xb9, 0xab, 0x47, 0xed, 0xd4, 0x5d, + 0x38, 0x27, 0xe1, 0x9e, 0x9e, 0xfa, 0x16, 0xdd, + 0xa9, 0xe3, 0x53, 0x77, 0x9e, 0x00, 0x44, 0xe4, + 0x0b, 0x74, 0x01, 0x93, 0x71, 0x16, 0x44, 0xca, + 0x05, 0xd9, 0xa2, 0xf1, 0x14, 0xe4, 0xec, 0xfe, + 0x90, 0x66, 0x06, 0xef, 0x13, 0x7b, 0xb5, 0xb5, + 0x46, 0x9c, 0xd9, 0x4e, 0x2a, 0xec, 0x9f, 0x26, + 0xfb, 0x26, 0x88, 0x20, 0x62, 0x24, 0x4c, 0xa1, + 0xb0, 0x16, 0xa6, 0xa1, 0xda, 0x34, 0xd9, 0xa2, + 0x71, 0x55, 0x1d, 0x0d, 0x99, 0x5b, 0xed, 0x48, + 0x40, 0x67, 0x45, 0x9c, 0xa9, 0x65, 0x77, 0x43, + 0x63, 0x4c, 0x5f, 0x23, 0xc1, 0xd9, 0xe7, 0xd2, + 0xc8, 0xa6, 0x09, 0x7d, 0x5f, 0x03, 0xb5, 0x42, + 0x84, 0x62, 0xde, 0x0f, 0x4f, 0x77, 0xf3, 0x68, + 0xf1, 0x38, 0xe3, 0xaf, 0xc4, 0x99, 0xcc, 0xa5, + 0x66, 0x14, 0xbc, 0x1d, 0xd7, 0x2b, 0xb5, 0x95, + 0xd6, 0x9b, 0x98, 0xcd, 0x57, 0x7d, 0x59, 0x9e, + 0xe1, 0x4c, 0x8e, 0xf6, 0x35, 0x12, 0x9c, 0x61, + 0x7e, 0x16, 0x19, 0x6a, 0x65, 0xe8, 0x64, 0xf6, + 0x8a, 0xc7, 0x98, 0xc3, 0x6e, 0xef, 0x27, 0x6a, + 0x56, 0x99, 0x75, 0x85, 0x15, 0xe1, 0x6c, 0xd5, + 0xe3, 0x6c, 0x28, 0x39, 0x74, 0xc9, 0x64, 0xf2, + 0x1c, 0x72, 0x73, 0x66, 0xcb, 0x0f, 0x71, 0x62, + 0xed, 0x2a, 0x32, 0x15, 0x63, 0x5d, 0x2c, 0xf1, + 0xff, 0xfe, 0x30, 0xa9, 0x37, 0x11, 0xb4, 0x98, + 0x20, 0x93, 0xe0, 0x0b, 0xa2, 0x9d, 0xe2, 0x2c, + 0x4c, 0x0b, 0x8c, 0x74, 0xba, 0x7d, 0x3e, 0xd3, + 0x50, 0x62, 0x21, 0xba, 0xb1, 0x15, 0x8f, 0x04, + 0x18, 0xb9, 0x61, 0x6f, 0x29, 0x7e, 0xcd, 0xd3, + 0xb6, 0x80, 0x73, 0xcf, 0x10, 0x2d, 0x98, 0x9a, + 0x95, 0x3a, 0x53, 0x61, 0x86, 0xb3, 0xa5, 0x34, + 0xe1, 0x50, 0x7c, 0x20, 0x50, 0x20, 0xce, 0x7e, + 0xaa, 0x67, 0xb7, 0xd9, 0x45, 0x0d, 0x77, 0xf5, + 0x39, 0x32, 0xf8, 0xec, 0x0b, 0x56, 0xd2, 0xdd, + 0x81, 0x7a, 0x73, 0x20, 0x14, 0x96, 0xc8, 0xb7, + 0x12, 0x61, 0x6b, 0x89, 0xb0, 0xd5, 0xc4, 0x66, + 0x2a, 0xd0, 0x44, 0x51, 0x69, 0x5f, 0xc3, 0x28, + 0x67, 0xdd, 0x87, 0x69, 0xbd, 0x69, 0xb4, 0xbe, + 0x0d, 0x02, 0x17, 0x60, 0xbe, 0x98, 0xf4, 0xc3, + 0xae, 0xe6, 0xb3, 0x65, 0x3e, 0x80, 0xb3, 0x47, + 0x08, 0xda, 0x05, 0x14, 0xd6, 0xa4, 0xbe, 0x86, + 0xf4, 0xd9, 0xf6, 0x1a, 0xe6, 0xb0, 0xbb, 0xc7, + 0x77, 0xf1, 0xc4, 0xe4, 0xcc, 0x7b, 0xf4, 0xfa, + 0xf7, 0x23, 0x9d, 0xa4, 0x6c, 0xae, 0xa8, 0x20, + 0xe8, 0x0d, 0xfe, 0x31, 0xcc, 0x62, 0x83, 0x83, + 0x6d, 0x8a, 0x34, 0x37, 0x78, 0xf3, 0x68, 0xe2, + 0x64, 0x4e, 0x7a, 0x55, 0xfa, 0x0d, 0xcc, 0xc3, + 0xab, 0x63, 0x1e, 0x76, 0xca, 0x99, 0xfd, 0xa7, + 0xab, 0xea, 0x7c, 0x73, 0xce, 0x0c, 0x62, 0xd4, + 0x8d, 0x18, 0xbe, 0x7c, 0x1d, 0xa7, 0x7c, 0xf3, + 0xc0, 0x8b, 0x83, 0x4c, 0xdc, 0x1b, 0x7b, 0xa1, + 0x37, 0x53, 0x52, 0xe3, 0x27, 0x7f, 0x98, 0xf1, + 0x5d, 0x1c, 0xff, 0x5c, 0x35, 0x44, 0xea, 0xd9, + 0x24, 0xe2, 0xd7, 0xec, 0x20, 0x0f, 0x5c, 0x0f, + 0x0e, 0x53, 0x33, 0x2c, 0xa7, 0xf3, 0x36, 0x95, + 0x63, 0x6c, 0xa6, 0x0a, 0x03, 0x9f, 0xbb, 0x3b, + 0xd7, 0xd2, 0xc1, 0x2f, 0xf6, 0x27, 0xb7, 0xca, + 0xd8, 0x44, 0x5d, 0xfb, 0x96, 0x65, 0xf9, 0xc8, + 0xa7, 0x5f, 0x4e, 0x26, 0xab, 0xef, 0x7d, 0x55, + 0x8f, 0x60, 0xa4, 0xbc, 0xb4, 0x89, 0x49, 0xbb, + 0x13, 0xdb, 0x42, 0x26, 0xdf, 0x9c, 0xee, 0xe7, + 0x97, 0x3e, 0x41, 0xce, 0x56, 0x85, 0x7f, 0xcf, + 0xb9, 0x68, 0xbf, 0xc0, 0x09, 0x18, 0xbe, 0x3e, + 0x9c, 0x1c, 0xf7, 0x5f, 0xd5, 0x92, 0xce, 0xe2, + 0x42, 0x6a, 0xbb, 0x9d, 0xfd, 0x89, 0x11, 0xe8, + 0x7b, 0x5d, 0x4e, 0xb2, 0xea, 0x65, 0x2f, 0x7d, + 0x6a, 0x87, 0xab, 0x4d, 0x8d, 0xc5, 0x64, 0x99, + 0xe4, 0xf1, 0x34, 0x52, 0xc6, 0x81, 0x1a, 0xef, + 0xa8, 0x61, 0xd6, 0x83, 0x46, 0x5a, 0xdd, 0x77, + 0x9a, 0x35, 0x9c, 0xc5, 0x0c, 0x7e, 0x26, 0xdd, + 0xfd, 0x2b, 0xaf, 0xd4, 0x59, 0x26, 0x8d, 0x27, + 0xa7, 0xc7, 0xb4, 0x61, 0xf4, 0xfb, 0x19, 0xcd, + 0x4c, 0xb3, 0x0a, 0xb9, 0x1c, 0x66, 0x34, 0xc8, + 0x9f, 0xfa, 0x07, 0x38, 0x6a, 0xcb, 0xcd, 0xac, + 0x30, 0x26, 0x91, 0x97, 0xf0, 0x3b, 0x37, 0xbf, + 0x69, 0xa8, 0x33, 0xfb, 0x1b, 0xda, 0xa1, 0xc1, + 0x99, 0xfd, 0x49, 0x84, 0x35, 0x78, 0x17, 0x56, + 0x0e, 0x3c, 0xf8, 0xda, 0x20, 0xee, 0x63, 0x42, + 0x60, 0xde, 0x17, 0x0b, 0xf4, 0x30, 0xd1, 0xa0, + 0xdb, 0xe6, 0xc7, 0xec, 0x57, 0x28, 0xcb, 0x9f, + 0x2a, 0x6b, 0xdc, 0x0a, 0x32, 0xaa, 0x40, 0xba, + 0x14, 0x01, 0xab, 0x2e, 0x48, 0x6e, 0xef, 0xf3, + 0x44, 0x17, 0xd9, 0x74, 0x06, 0xf1, 0xb6, 0x6a, + 0x4e, 0x04, 0x89, 0x80, 0xa4, 0xa9, 0xa0, 0x13, + 0x03, 0xea, 0xb4, 0x5d, 0xac, 0x61, 0xbd, 0x97, + 0xf3, 0x9e, 0x84, 0x0e, 0x54, 0xaa, 0xd0, 0xfc, + 0x04, 0x70, 0xa5, 0xeb, 0xcd, 0x54, 0x1e, 0xc4, + 0x02, 0xee, 0x1c, 0x9c, 0x96, 0x60, 0xf3, 0x8e, + 0xe3, 0x1d, 0x42, 0x3d, 0x3f, 0x35, 0x05, 0x55, + 0x47, 0x08, 0x42, 0xcb, 0x97, 0x43, 0x16, 0x39, + 0x21, 0x64, 0xb9, 0xdf, 0x54, 0xca, 0x37, 0x0c, + 0x19, 0x74, 0x0e, 0x55, 0x86, 0x4d, 0x9b, 0xc2, + 0x8a, 0x9f, 0x42, 0x71, 0x86, 0xd8, 0xfc, 0xc5, + 0xde, 0x48, 0x97, 0xe1, 0x14, 0xfb, 0x75, 0xc9, + 0xad, 0xed, 0x97, 0xa7, 0xb5, 0x99, 0x1e, 0xda, + 0x26, 0xc3, 0xeb, 0xf9, 0xa9, 0x85, 0x8d, 0xf8, + 0x9a, 0x80, 0xaf, 0xf7, 0x92, 0x3e, 0xc6, 0x4c, + 0x9f, 0x34, 0x4e, 0x0b, 0x12, 0xb8, 0xdb, 0x1b, + 0x4a, 0xe7, 0xf2, 0xbb, 0x28, 0x27, 0x91, 0xaa, + 0x74, 0x9f, 0x5c, 0x36, 0x77, 0x73, 0x86, 0x67, + 0x03, 0x66, 0x38, 0x56, 0x54, 0x12, 0xa1, 0x4b, + 0x03, 0x76, 0x7b, 0x6b, 0x77, 0xe4, 0xd6, 0x93, + 0x04, 0x14, 0x6b, 0xc5, 0x60, 0x26, 0xee, 0x36, + 0xa2, 0xe0, 0x94, 0x3b, 0xaf, 0x6c, 0x2c, 0x3f, + 0xa7, 0x31, 0x80, 0xeb, 0x57, 0x6d, 0x38, 0x65, + 0xa9, 0xc0, 0xc4, 0xcf, 0x9f, 0xef, 0x9f, 0x1a, + 0xa6, 0x03, 0x08, 0x99, 0x76, 0x2f, 0x5f, 0x03, + 0x67, 0xa8, 0xdb, 0x60, 0xda, 0x29, 0x0f, 0x8f, + 0x7d, 0x2a, 0x9c, 0x14, 0x1c, 0xee, 0xfa, 0xea, + 0xb4, 0x5b, 0xdf, 0x66, 0x5c, 0xe6, 0xb8, 0x3f, + 0xf2, 0xe1, 0xf7, 0x8d, 0x96, 0x72, 0x38, 0xd7, + 0x60, 0xaf, 0x63, 0xb9, 0x63, 0xd4, 0x94, 0x39, + 0x3e, 0x7a, 0x55, 0xaa, 0x20, 0x07, 0xd5, 0xba, + 0xd1, 0xcb, 0x73, 0x99, 0x3c, 0xe9, 0x2c, 0x85, + 0x1f, 0x27, 0x07, 0xdf, 0x39, 0xd8, 0x3f, 0x6d, + 0xde, 0x92, 0xe2, 0xde, 0x7a, 0x8f, 0xa6, 0x65, + 0xf8, 0xea, 0xf0, 0x24, 0x89, 0xce, 0x24, 0x53, + 0x89, 0xc1, 0xf8, 0x72, 0xef, 0xf0, 0x94, 0x36, + 0x17, 0x83, 0x4f, 0x72, 0x0a, 0xed, 0x1e, 0xa5, + 0x87, 0x20, 0x78, 0x43, 0x9f, 0x90, 0x16, 0x75, + 0x62, 0x58, 0x4d, 0x59, 0x63, 0x9d, 0xfe, 0x9a, + 0x56, 0x40, 0x59, 0xd0, 0xd2, 0x81, 0xdf, 0x94, + 0xd5, 0x32, 0x59, 0x05, 0x9f, 0xd8, 0x60, 0x7a, + 0xa0, 0xc6, 0xa9, 0xa9, 0x5d, 0x05, 0x4e, 0x43, + 0xa4, 0x71, 0x44, 0xc1, 0x72, 0xcb, 0x67, 0x9f, + 0x1c, 0x62, 0x2d, 0xdb, 0xc1, 0x82, 0x96, 0xb7, + 0x31, 0xdb, 0xe2, 0xed, 0xe0, 0xcb, 0x02, 0x74, + 0x18, 0xac, 0x01, 0xff, 0xd1, 0x58, 0x61, 0x6f, + 0x7f, 0x09, 0x5d, 0x4c, 0x8d, 0x9e, 0xc2, 0x6a, + 0x9d, 0xba, 0x19, 0x1d, 0x56, 0x23, 0x58, 0x94, + 0x75, 0xfd, 0x16, 0x66, 0x41, 0x5f, 0x1f, 0x78, + 0x2d, 0x31, 0xfa, 0xc6, 0xab, 0x50, 0x64, 0xd7, + 0xc5, 0x87, 0xae, 0x0e, 0x7d, 0x17, 0xb8, 0x6c, + 0xd4, 0xc6, 0xa8, 0xf8, 0xdb, 0xbf, 0x06, 0xab, + 0x1f, 0xc1, 0x59, 0xbf, 0x05, 0xb8, 0x88, 0x7f, + 0xc8, 0x22, 0x33, 0xca, 0x7e, 0xca, 0x94, 0xbc, + 0xbb, 0x9b, 0x55, 0x36, 0x36, 0x07, 0x31, 0x3b, + 0x31, 0x1f, 0x15, 0x6e, 0x87, 0xc4, 0x8d, 0xb4, + 0x0e, 0x68, 0x5a, 0xb4, 0x48, 0xfd, 0x1a, 0xa6, + 0x89, 0xbb, 0xb9, 0x20, 0x5c, 0x73, 0xc5, 0x98, + 0xe6, 0x49, 0xb0, 0xe7, 0x7c, 0x8c, 0xbf, 0x6a, + 0xcc, 0x9e, 0xd2, 0x85, 0x32, 0xc9, 0x6a, 0x48, + 0x5f, 0x6d, 0x61, 0x8a, 0x78, 0x78, 0x3a, 0x07, + 0x67, 0x83, 0x0c, 0xee, 0x89, 0x4d, 0xf6, 0xe6, + 0x86, 0x07, 0xaa, 0x81, 0xa5, 0x9b, 0x20, 0x8d, + 0xdb, 0xa1, 0x0f, 0x39, 0x5a, 0xfd, 0x17, 0xbb, + 0x79, 0xa4, 0xfb, 0x6d, 0xba, 0xb5, 0x13, 0xcc, + 0x4d, 0xca, 0x01, 0xf3, 0x1a, 0x57, 0x5e, 0xde, + 0x7d, 0x39, 0x42, 0xb0, 0xfc, 0x04, 0x91, 0xc5, + 0x7a, 0x23, 0x0d, 0x39, 0xb2, 0xea, 0x1d, 0x9f, + 0x13, 0x1e, 0x1f, 0x50, 0xd2, 0x58, 0x95, 0xac, + 0xfb, 0x42, 0xef, 0x55, 0x29, 0xe6, 0x58, 0x25, + 0x4d, 0x4e, 0xa4, 0xe9, 0x07, 0xe2, 0x03, 0x38, + 0xcd, 0xd4, 0xb2, 0xaa, 0x23, 0x13, 0x46, 0xd9, + 0xc2, 0x29, 0xf3, 0x33, 0x39, 0xfc, 0x48, 0x9a, + 0xa5, 0xfd, 0xed, 0xd1, 0xe4, 0xb1, 0x72, 0x2c, + 0x61, 0xd8, 0xfc, 0x9c, 0x56, 0x06, 0xee, 0xda, + 0xed, 0x7d, 0xef, 0xe0, 0xe1, 0xa5, 0xa9, 0x44, + 0x68, 0x27, 0x79, 0x2c, 0x2d, 0xec, 0x8d, 0xc3, + 0xd7, 0xac, 0x0d, 0xf3, 0x24, 0xd7, 0x79, 0xad, + 0xf4, 0x20, 0xc7, 0xed, 0x64, 0x93, 0xf5, 0x23, + 0x4a, 0x15, 0x2f, 0xa8, 0x36, 0x37, 0x81, 0xdb, + 0xdd, 0x11, 0x9f, 0x69, 0xe4, 0x35, 0xa3, 0xdc, + 0x90, 0x85, 0xda, 0xf8, 0xfc, 0x02, 0x29, 0xe0, + 0x0e, 0xcc, 0x77, 0x19, 0xd5, 0x6b, 0xc9, 0x9a, + 0xd3, 0xcc, 0xda, 0xbb, 0xc4, 0x9a, 0x28, 0xbd, + 0x9a, 0xdf, 0x18, 0x3c, 0x3e, 0xef, 0xe0, 0xbe, + 0xcf, 0x2b, 0x9b, 0xcc, 0x89, 0x90, 0x69, 0x15, + 0x01, 0xd5, 0x7d, 0xda, 0x67, 0x9b, 0x62, 0x70, + 0x29, 0x3d, 0x32, 0x26, 0x7d, 0xa8, 0x61, 0x93, + 0xb3, 0x48, 0x47, 0xd1, 0x28, 0xcc, 0x05, 0x39, + 0x9e, 0x7b, 0xe4, 0x3d, 0x54, 0xf3, 0xfa, 0x63, + 0x30, 0x6d, 0xda, 0xb2, 0x74, 0xf9, 0x0c, 0x33, + 0xdf, 0x2c, 0x56, 0x8f, 0xf3, 0x4e, 0xe3, 0xca, + 0xda, 0x08, 0x5a, 0x34, 0xb3, 0x0b, 0x99, 0x07, + 0xe0, 0xaf, 0xcd, 0x23, 0x5b, 0x7e, 0xa7, 0xa8, + 0x9b, 0xa2, 0x84, 0x41, 0xa0, 0x82, 0x61, 0x45, + 0x63, 0x3d, 0x2c, 0xab, 0xcc, 0x77, 0x2c, 0xf5, + 0x38, 0x3d, 0x0d, 0x73, 0xe5, 0x2d, 0xdb, 0xe0, + 0xab, 0x5d, 0x49, 0x54, 0xea, 0x37, 0x81, 0x56, + 0xa9, 0xaf, 0xb1, 0xcd, 0xa8, 0x77, 0x6e, 0xe6, + 0x62, 0x6f, 0xb6, 0x52, 0x87, 0x7d, 0x67, 0x2f, + 0x6d, 0x25, 0x3d, 0xcc, 0x71, 0x84, 0x81, 0xb3, + 0xa5, 0x53, 0x95, 0x6a, 0x96, 0x36, 0xbc, 0xa7, + 0xd2, 0xc6, 0x3a, 0x75, 0x3f, 0xd7, 0x0e, 0x68, + 0x9b, 0xb9, 0xd8, 0xa2, 0xa6, 0x65, 0x94, 0xdc, + 0xfc, 0x54, 0x57, 0x05, 0x3f, 0x3e, 0x57, 0xa0, + 0xb6, 0x59, 0x89, 0x27, 0x7d, 0x54, 0x99, 0xb5, + 0x8e, 0x50, 0x98, 0x9a, 0x2e, 0x82, 0x58, 0xc5, + 0xb7, 0x16, 0x28, 0x7a, 0x8a, 0x5a, 0xcc, 0xab, + 0x4c, 0x4e, 0x5e, 0x80, 0xc7, 0xd4, 0x6e, 0x3e, + 0x0f, 0xfe, 0x5c, 0x51, 0x91, 0x27, 0x58, 0xa7, + 0x73, 0x23, 0x54, 0x09, 0xff, 0xab, 0x2d, 0x52, + 0xe7, 0xef, 0x0c, 0x42, 0x67, 0x81, 0x5a, 0x5e, + 0x0a, 0x96, 0x13, 0xea, 0xcd, 0x4e, 0xc6, 0xa5, + 0x9b, 0xe0, 0xd7, 0x3f, 0xf1, 0x09, 0x80, 0x91, + 0x33, 0x15, 0xbd, 0x08, 0xa2, 0x4e, 0xbb, 0x88, + 0x86, 0x50, 0x42, 0x4a, 0xfc, 0x9a, 0xd2, 0x03, + 0xe9, 0xd4, 0x0e, 0x6e, 0x8f, 0xa6, 0x2b, 0x7a, + 0x8c, 0xc1, 0xd2, 0xf3, 0x1e, 0x49, 0x37, 0x2f, + 0xeb, 0xd7, 0xe3, 0xeb, 0x23, 0xb7, 0x75, 0x15, + 0xc3, 0x39, 0xe0, 0xd5, 0xec, 0xf3, 0xf4, 0x5a, + 0x1a, 0x5b, 0x4c, 0x7c, 0xe3, 0xe0, 0xa5, 0x7c, + 0x42, 0x17, 0xfa, 0xce, 0x99, 0xeb, 0x58, 0x12, + 0x9f, 0x5d, 0x97, 0x78, 0xbf, 0x82, 0x9f, 0x48, + 0x6f, 0x23, 0xfd, 0x2c, 0xb3, 0x95, 0x98, 0x1e, + 0x9e, 0x19, 0xfa, 0x8f, 0x8e, 0xd1, 0xc9, 0x14, + 0xa3, 0x6d, 0xf9, 0x86, 0x47, 0xec, 0xbb, 0x24, + 0x0d, 0x6f, 0xf9, 0x97, 0x43, 0x5b, 0x66, 0x4c, + 0xc7, 0xed, 0x12, 0xbf, 0x0f, 0xe5, 0xc5, 0x76, + 0x3d, 0x94, 0x15, 0x8c, 0xc6, 0x89, 0xa6, 0x76, + 0x44, 0x4d, 0x94, 0x6e, 0x9e, 0x70, 0xda, 0x64, + 0xaf, 0x97, 0x98, 0xf4, 0x27, 0xea, 0x84, 0x66, + 0x6c, 0x83, 0x6e, 0xf9, 0x9f, 0x03, 0xc4, 0x59, + 0x17, 0xfe, 0x00, 0x73, 0x71, 0x80, 0x38, 0x23, + 0xd0, 0x05, 0xef, 0x64, 0xbd, 0xf2, 0x11, 0x35, + 0xb7, 0x81, 0x59, 0xb6, 0x63, 0x21, 0xbe, 0x5f, + 0x85, 0xd9, 0xc8, 0x94, 0x34, 0x35, 0xd6, 0xf1, + 0x4e, 0x33, 0x7b, 0x07, 0xd5, 0xdc, 0xe9, 0x39, + 0x9c, 0xc5, 0x46, 0xa9, 0x20, 0x81, 0x82, 0xe8, + 0xfb, 0x50, 0xa8, 0xc7, 0xf8, 0x12, 0x0e, 0x06, + 0xb8, 0xaf, 0x73, 0x1b, 0x83, 0x41, 0x5d, 0x97, + 0xc8, 0x66, 0xbf, 0x7a, 0x89, 0xc2, 0x66, 0x8a, + 0x31, 0x5f, 0xb5, 0xef, 0xc2, 0x8c, 0x41, 0x5b, + 0x14, 0x0c, 0x2e, 0x7c, 0x39, 0x6b, 0xf1, 0x0e, + 0xc9, 0xc2, 0xa7, 0x75, 0x69, 0x81, 0x02, 0x3d, + 0x73, 0x16, 0xda, 0xaa, 0x46, 0xd6, 0x52, 0x97, + 0xd1, 0xa1, 0x49, 0xf2, 0xb3, 0x7d, 0x45, 0x70, + 0x8e, 0x25, 0x37, 0x9f, 0x23, 0x9f, 0x2d, 0x52, + 0x4b, 0xa9, 0x02, 0x4d, 0x32, 0xeb, 0x59, 0x5d, + 0xbf, 0x3e, 0xc2, 0xa7, 0x0f, 0x2b, 0x8d, 0xa2, + 0x12, 0x5f, 0xac, 0x74, 0x57, 0xf9, 0x2f, 0xe7, + 0xd7, 0x10, 0x94, 0x73, 0x9e, 0x91, 0xce, 0x52, + 0x36, 0x53, 0x3d, 0xf4, 0x08, 0xd6, 0x19, 0x43, + 0xf4, 0xf7, 0x37, 0xc7, 0xcc, 0x0c, 0x9f, 0xaf, + 0x8b, 0xc6, 0xd2, 0x39, 0x49, 0x3d, 0xe0, 0xb8, + 0xfe, 0x34, 0xe1, 0x21, 0x79, 0x68, 0x71, 0x47, + 0x9f, 0x4b, 0xa3, 0xa4, 0x4a, 0xa1, 0x5a, 0x8a, + 0xd8, 0x48, 0x68, 0x93, 0x2c, 0x24, 0x84, 0xe3, + 0xbf, 0x3a, 0x1d, 0x7b, 0xf2, 0x7c, 0x26, 0x12, + 0x47, 0x57, 0x9d, 0xfd, 0x12, 0x02, 0x40, 0x0b, + 0x4c, 0x61, 0xcb, 0x9e, 0x19, 0x39, 0xed, 0xce, + 0xbb, 0xfa, 0xbb, 0xfb, 0xde, 0x48, 0x0e, 0x6f, + 0x1f, 0x86, 0xac, 0x08, 0x76, 0x4d, 0xcb, 0x48, + 0x4d, 0xf3, 0x35, 0xa8, 0x21, 0xbe, 0xfc, 0x31, + 0x84, 0xee, 0x83, 0x4d, 0x0c, 0x28, 0xad, 0x07, + 0x16, 0x9f, 0x54, 0x2d, 0x71, 0xce, 0xa8, 0xcb, + 0x6c, 0x29, 0x6d, 0x76, 0xac, 0x9b, 0x6c, 0xf9, + 0x0f, 0xcc, 0xec, 0x7e, 0xe1, 0xda, 0xb4, 0xc6, + 0x0a, 0x1d, 0xa6, 0xa3, 0x0a, 0x5a, 0xde, 0x6a, + 0xf1, 0x6c, 0xd9, 0x1d, 0xf9, 0xb2, 0x98, 0x93, + 0xce, 0xad, 0xef, 0xbf, 0x60, 0xa5, 0x0e, 0xec, + 0x20, 0xce, 0x58, 0x55, 0x05, 0x1f, 0xc1, 0x59, + 0xcb, 0xae, 0xfb, 0xc3, 0x71, 0x08, 0xba, 0x82, + 0xea, 0x27, 0x95, 0x09, 0xce, 0x96, 0x2c, 0xbb, + 0x06, 0xc5, 0x2d, 0xf6, 0x43, 0xf0, 0x83, 0x93, + 0x0d, 0x9c, 0x60, 0xd5, 0x2c, 0x61, 0x40, 0xa1, + 0x93, 0x2e, 0x10, 0x5b, 0x25, 0x9b, 0xa8, 0x76, + 0xbb, 0x8e, 0x06, 0x79, 0x92, 0x2c, 0x02, 0xdd, + 0x36, 0x74, 0x4d, 0x5b, 0x82, 0x1e, 0x82, 0x9e, + 0x60, 0x65, 0x93, 0x05, 0x4a, 0x6c, 0x70, 0x0d, + 0xe2, 0x3d, 0x5c, 0x20, 0x3a, 0xdb, 0x80, 0x89, + 0x69, 0xa4, 0x17, 0xec, 0xb4, 0x2e, 0xd0, 0xa9, + 0xab, 0x82, 0x17, 0x36, 0xb2, 0x9a, 0x4c, 0x86, + 0xbe, 0xd7, 0xc5, 0xae, 0x37, 0xe6, 0x3b, 0x8b, + 0x98, 0xe2, 0x72, 0xbf, 0x4b, 0x68, 0x84, 0x0c, + 0x05, 0x35, 0x49, 0x5a, 0x1d, 0x87, 0xb3, 0x40, + 0xf2, 0x9b, 0x9e, 0x43, 0x57, 0xdc, 0xd9, 0x9a, + 0x06, 0xef, 0x1f, 0x91, 0x48, 0x3d, 0x21, 0x14, + 0x8d, 0xb8, 0x52, 0x85, 0x2f, 0x56, 0x3e, 0x5f, + 0xad, 0xdd, 0xb4, 0x4c, 0x34, 0x41, 0x35, 0x49, + 0xba, 0xe7, 0xb3, 0xed, 0xbd, 0x0c, 0x67, 0x01, + 0xb2, 0xa2, 0x9c, 0xd0, 0x28, 0x51, 0xb9, 0x28, + 0x57, 0x74, 0xa1, 0x10, 0x97, 0xb1, 0x59, 0x1f, + 0xe2, 0xbb, 0xdd, 0x5e, 0x84, 0xef, 0x14, 0x77, + 0x10, 0x35, 0x81, 0x52, 0xbe, 0x81, 0xae, 0xf3, + 0x3b, 0x26, 0x43, 0xe9, 0x11, 0xb2, 0xb3, 0x60, + 0xe6, 0xa2, 0x3b, 0x05, 0xb8, 0xcd, 0xfc, 0xce, + 0x8b, 0x48, 0x6f, 0xd9, 0x79, 0x89, 0xc6, 0xd2, + 0x18, 0xdf, 0x14, 0xa0, 0x9a, 0xf8, 0x5e, 0x58, + 0xa0, 0x69, 0x94, 0x7d, 0x48, 0xcb, 0x8e, 0x2f, + 0x65, 0xfb, 0x7f, 0x98, 0x36, 0x60, 0xa8, 0x7c, + 0xb3, 0x20, 0xe7, 0x6b, 0xf3, 0x8f, 0x19, 0x2c, + 0x5f, 0x00, 0xf1, 0xc8, 0x7f, 0xd2, 0xa6, 0x9c, + 0xd6, 0x22, 0x74, 0x8a, 0xb0, 0x52, 0xe2, 0xda, + 0xb8, 0xb2, 0x6f, 0xe6, 0xca, 0x13, 0xbe, 0x96, + 0xe8, 0x16, 0x0e, 0x7b, 0x80, 0x58, 0x09, 0xf5, + 0xa7, 0xc8, 0xc9, 0x05, 0x6b, 0xea, 0x2d, 0x9a, + 0x67, 0x6c, 0x57, 0xaa, 0x05, 0x30, 0xf3, 0x8e, + 0xcf, 0x16, 0x31, 0x6e, 0x96, 0xac, 0xc3, 0x99, + 0xbd, 0xa1, 0xa7, 0xdc, 0x06, 0xf4, 0x8e, 0x29, + 0x4a, 0x0f, 0x5c, 0x31, 0xdc, 0x6e, 0xb8, 0x83, + 0x9f, 0x07, 0xa1, 0xbe, 0x10, 0xf3, 0x1b, 0x30, + 0xb5, 0x6c, 0x30, 0x6e, 0x86, 0xde, 0x86, 0x01, + 0xf1, 0xd9, 0xe6, 0x61, 0x0b, 0xdd, 0x8d, 0x70, + 0x46, 0xf0, 0xa1, 0x8d, 0x43, 0xe2, 0xf0, 0x63, + 0x0a, 0xcf, 0x10, 0x84, 0xa3, 0x20, 0x97, 0x27, + 0x69, 0x87, 0x58, 0x37, 0xb8, 0x8d, 0x5e, 0xf5, + 0xfc, 0xc8, 0xb2, 0x0e, 0x10, 0xce, 0xca, 0xa0, + 0xe7, 0x88, 0x28, 0x98, 0xfa, 0xc6, 0x6f, 0x63, + 0xe2, 0x8f, 0x6c, 0x17, 0x91, 0x27, 0x46, 0x9b, + 0x7e, 0x10, 0xc2, 0x65, 0xde, 0x34, 0xfa, 0xfc, + 0x3c, 0xff, 0x04, 0x9f, 0x5f, 0x2b, 0x8a, 0x65, + 0xf2, 0xb9, 0xba, 0x8b, 0x01, 0x3b, 0x47, 0x19, + 0x9f, 0x59, 0x77, 0x6a, 0x55, 0xd8, 0x0a, 0x5b, + 0xf9, 0x7c, 0x05, 0xd7, 0xf5, 0x97, 0x88, 0xb3, + 0x34, 0x99, 0x4c, 0x8b, 0x16, 0x5d, 0x68, 0x59, + 0x51, 0x86, 0x2f, 0x10, 0x94, 0xe5, 0x52, 0xad, + 0x20, 0xa8, 0x3f, 0xdf, 0x14, 0x20, 0x17, 0x1c, + 0xce, 0xcc, 0xcb, 0x0c, 0x67, 0x44, 0xc9, 0x32, + 0x97, 0x24, 0x11, 0x45, 0x59, 0x9e, 0x25, 0x2b, + 0xee, 0x2a, 0x60, 0x8a, 0xce, 0xe9, 0x8c, 0x8c, + 0x3b, 0xab, 0xd9, 0x18, 0x2a, 0x5a, 0xee, 0xbe, + 0xc4, 0x44, 0xcb, 0xe3, 0x8c, 0x0e, 0x46, 0xd0, + 0xd9, 0x81, 0x82, 0x46, 0x7b, 0xfb, 0x23, 0x5f, + 0x61, 0x0a, 0xd6, 0xac, 0x5a, 0xab, 0xbb, 0xcd, + 0xba, 0x8b, 0x02, 0xf9, 0x6b, 0x16, 0x23, 0x1d, + 0xe5, 0xcb, 0x74, 0x6e, 0x16, 0x38, 0x91, 0xdf, + 0xf3, 0x5e, 0x89, 0x76, 0x67, 0xe4, 0x02, 0x0a, + 0x72, 0x41, 0x01, 0x6c, 0xad, 0x8a, 0xe9, 0x01, + 0xaa, 0xf9, 0x01, 0xda, 0x8c, 0x8f, 0x26, 0xb0, + 0xa6, 0xf6, 0xac, 0xf6, 0x26, 0x03, 0xd3, 0x38, + 0x6b, 0x5d, 0xa5, 0xe8, 0xcc, 0x59, 0x67, 0xf3, + 0x78, 0xef, 0x67, 0x7b, 0xad, 0x72, 0xc8, 0x8b, + 0xb0, 0x5a, 0xe2, 0x91, 0xd3, 0x05, 0xc9, 0xef, + 0x49, 0xb5, 0x2d, 0xef, 0x27, 0xdb, 0xb8, 0x83, + 0x1b, 0xcb, 0x18, 0x22, 0x95, 0x58, 0x89, 0x85, + 0x2c, 0xa8, 0x68, 0xde, 0xf0, 0x69, 0x14, 0x16, + 0xaf, 0xd0, 0x57, 0x21, 0xcc, 0x06, 0xdc, 0xa4, + 0x43, 0x46, 0xbb, 0x0d, 0x8c, 0x9b, 0x84, 0x33, + 0xb8, 0xa1, 0x02, 0x0e, 0x4b, 0x2a, 0x40, 0x9d, + 0x69, 0xf5, 0x67, 0x45, 0xbf, 0x48, 0xb5, 0x19, + 0x9f, 0x5d, 0xb5, 0xc1, 0x77, 0xe6, 0x52, 0x0c, + 0x3f, 0x47, 0xbe, 0xab, 0xfb, 0xb8, 0xe9, 0x70, + 0xf6, 0x8c, 0xdc, 0x69, 0xd7, 0xa6, 0x7c, 0x96, + 0xee, 0x43, 0x0a, 0x3a, 0xf0, 0x7c, 0x3f, 0x89, + 0x11, 0x72, 0xd0, 0x9f, 0x6c, 0x1d, 0x17, 0xff, + 0x09, 0xbd, 0xba, 0x9d, 0x50, 0x94, 0x03, 0xa5, + 0xf1, 0xec, 0x5d, 0xdf, 0xf5, 0x41, 0x18, 0xda, + 0x70, 0x4b, 0xcf, 0xd1, 0x89, 0x72, 0x33, 0x87, + 0x38, 0xa3, 0x1e, 0x62, 0x91, 0x8d, 0xd9, 0xad, + 0x66, 0x9b, 0x8a, 0xc7, 0x88, 0x33, 0x19, 0x2d, + 0x40, 0x5c, 0x26, 0x40, 0xac, 0x58, 0x5f, 0x86, + 0xe1, 0x63, 0xd7, 0x7a, 0x04, 0xad, 0x39, 0xaa, + 0x03, 0xca, 0xd3, 0x94, 0x9f, 0xb5, 0x62, 0xa1, + 0x5a, 0xae, 0x8f, 0x72, 0x33, 0x7f, 0xe4, 0x2b, + 0xe3, 0xb5, 0x85, 0x06, 0xed, 0x42, 0xbe, 0x0b, + 0xb2, 0x62, 0x74, 0xd9, 0x6f, 0x49, 0xd2, 0x29, + 0xaf, 0xbf, 0xaa, 0x61, 0x4e, 0xfb, 0x61, 0xaf, + 0x7f, 0x0e, 0x2f, 0x9d, 0x44, 0x9d, 0x80, 0xc6, + 0x26, 0x9c, 0x8a, 0x40, 0x77, 0x7b, 0x9a, 0x18, + 0xb1, 0x6d, 0xd2, 0x15, 0x8e, 0xfc, 0x1b, 0x2f, + 0x7a, 0x84, 0x33, 0xac, 0xd6, 0x89, 0xcf, 0xb2, + 0x3b, 0x8a, 0x32, 0x70, 0xf1, 0x30, 0xd4, 0x7c, + 0x38, 0x87, 0xc7, 0x29, 0x3f, 0x21, 0x16, 0xe2, + 0xfe, 0x4b, 0x2d, 0x9e, 0xcf, 0x22, 0x38, 0x47, + 0xb0, 0x7a, 0xd1, 0xa3, 0xf2, 0x44, 0x19, 0x5e, + 0x86, 0xe0, 0xef, 0x66, 0x16, 0xa4, 0x62, 0x73, + 0x9c, 0x55, 0x7e, 0x44, 0x1b, 0x3b, 0x2d, 0xc2, + 0xc9, 0xe8, 0xcc, 0xe6, 0x20, 0xae, 0x21, 0x34, + 0xd0, 0xe2, 0x16, 0x2b, 0xba, 0x0b, 0x3e, 0xd5, + 0x9e, 0x7f, 0x9b, 0x6c, 0xf6, 0x97, 0xfb, 0xb6, + 0x80, 0x36, 0xb5, 0xf2, 0x2c, 0x3f, 0x13, 0x11, + 0x54, 0x01, 0x25, 0x9a, 0x2a, 0x43, 0x77, 0x69, + 0x8b, 0xfe, 0xe1, 0x8d, 0x14, 0x1a, 0xf6, 0x66, + 0x38, 0x67, 0x62, 0xf5, 0x08, 0x51, 0x83, 0xf9, + 0x19, 0xa3, 0x73, 0x49, 0x0b, 0xf8, 0x59, 0x64, + 0x0c, 0xb9, 0xef, 0x97, 0xbd, 0xed, 0x06, 0x52, + 0xd4, 0x5d, 0xca, 0xcf, 0x7e, 0xa6, 0x82, 0xc8, + 0x87, 0xc2, 0x4b, 0x4f, 0x03, 0x36, 0xc0, 0x67, + 0x19, 0xce, 0xd8, 0x45, 0xcb, 0xbe, 0xa3, 0xd5, + 0xa7, 0xfc, 0x8c, 0xea, 0x00, 0x4c, 0xe6, 0x14, + 0xdc, 0x83, 0x33, 0x1f, 0x91, 0x09, 0x7a, 0xc8, + 0x67, 0xc0, 0x29, 0xc5, 0x0e, 0x22, 0x05, 0x2d, + 0xe2, 0x0d, 0xe1, 0x1d, 0xd9, 0x05, 0x04, 0x36, + 0x9c, 0x34, 0x33, 0xe0, 0x4f, 0xc9, 0x8b, 0x31, + 0x3f, 0x03, 0x0f, 0x2a, 0xdf, 0x10, 0xa2, 0xc1, + 0xbf, 0x77, 0x38, 0xe3, 0x20, 0x64, 0xf3, 0xcc, + 0xc7, 0xd4, 0x92, 0x54, 0xb2, 0xae, 0x57, 0xd7, + 0xe1, 0x0c, 0xed, 0xd6, 0xf4, 0xdd, 0xa9, 0x9f, + 0x27, 0xb4, 0x75, 0x2d, 0x6e, 0xae, 0xc2, 0xfc, + 0xfc, 0x4c, 0x09, 0x21, 0xa6, 0xaf, 0x88, 0xda, + 0x1a, 0x9d, 0x56, 0x59, 0xa5, 0xe1, 0x8b, 0x3d, + 0x84, 0xf4, 0x03, 0x53, 0x41, 0x9c, 0x19, 0xb7, + 0x9f, 0x56, 0x69, 0x54, 0x94, 0xc5, 0x00, 0xba, + 0x58, 0x33, 0x62, 0x0c, 0xce, 0xc4, 0x9f, 0x61, + 0x71, 0x8a, 0xa9, 0xff, 0xe3, 0x68, 0x0e, 0x61, + 0xdf, 0x92, 0xf9, 0xb3, 0x03, 0xac, 0xba, 0x37, + 0x50, 0x4d, 0x0b, 0xd7, 0xf9, 0x1b, 0xd3, 0x8d, + 0x48, 0x66, 0x56, 0x44, 0xb4, 0xd0, 0x99, 0x3c, + 0x77, 0x52, 0x44, 0x0e, 0x35, 0x61, 0xd4, 0x73, + 0xac, 0x03, 0x34, 0x65, 0xcd, 0x88, 0x33, 0x77, + 0x24, 0x78, 0x51, 0xa6, 0xf9, 0x16, 0xcf, 0xc5, + 0xcd, 0xfe, 0x4a, 0x68, 0x77, 0xc6, 0x98, 0xce, + 0xe4, 0xf9, 0x8e, 0x98, 0x36, 0x45, 0x87, 0xbe, + 0x8f, 0xd1, 0x37, 0xef, 0x62, 0x7e, 0xd6, 0xc1, + 0xf7, 0x5b, 0x64, 0xd2, 0x0a, 0x4e, 0xf2, 0x3a, + 0xf2, 0x93, 0xac, 0x4b, 0x88, 0x66, 0x50, 0x76, + 0x58, 0x4b, 0x0a, 0x81, 0x8d, 0x44, 0xd6, 0xa7, + 0x6a, 0xb3, 0x53, 0x44, 0xee, 0x34, 0x8d, 0x3b, + 0xc0, 0xba, 0x6f, 0x61, 0x76, 0xb4, 0x25, 0xe8, + 0xab, 0x1f, 0xfc, 0xaa, 0x96, 0xd6, 0xfc, 0xcd, + 0x41, 0xeb, 0xe1, 0xa6, 0x5a, 0xb0, 0xb6, 0xc4, + 0x6f, 0xc3, 0x82, 0x21, 0x9c, 0xb6, 0x60, 0xd9, + 0xd2, 0xb7, 0xe1, 0x36, 0x72, 0x33, 0xeb, 0x9b, + 0x22, 0xe4, 0x86, 0x71, 0x08, 0x3e, 0x83, 0xca, + 0x07, 0xad, 0x6b, 0x58, 0x27, 0xc4, 0xf2, 0x91, + 0xd0, 0x48, 0x6e, 0xe2, 0x56, 0x07, 0x56, 0x0f, + 0x76, 0x31, 0x6e, 0x06, 0xff, 0x88, 0x38, 0xc3, + 0x72, 0x87, 0xbe, 0xb3, 0xd1, 0x0d, 0x70, 0xc1, + 0xb7, 0x82, 0x9f, 0x69, 0xc7, 0x67, 0x41, 0xae, + 0x66, 0x72, 0xca, 0xff, 0xa9, 0x62, 0x68, 0x36, + 0x2c, 0x05, 0x61, 0x76, 0x9b, 0x8e, 0x53, 0xed, + 0xe8, 0x4b, 0x71, 0xf0, 0x06, 0xcc, 0x22, 0x97, + 0xab, 0x6d, 0x4a, 0xdd, 0x41, 0x34, 0x0d, 0xb9, + 0x36, 0xe5, 0x1a, 0x61, 0xf2, 0xcd, 0x85, 0x8f, + 0x06, 0x2a, 0xd7, 0x1c, 0x13, 0xb9, 0xb3, 0xf2, + 0x54, 0x38, 0x95, 0x2c, 0xad, 0x54, 0xac, 0x7d, + 0xcd, 0x4b, 0xeb, 0xf9, 0x1b, 0x8c, 0x9b, 0x98, + 0x6b, 0x20, 0xce, 0xa6, 0x83, 0xdb, 0xc2, 0xd0, + 0xd8, 0x65, 0x86, 0x4c, 0x2c, 0xa3, 0x66, 0x69, + 0xcc, 0x02, 0x70, 0x77, 0xfe, 0xbd, 0x69, 0x00, + 0xcd, 0xed, 0xbf, 0x67, 0x42, 0xbe, 0x70, 0x86, + 0x2f, 0x94, 0xf0, 0xa6, 0xfa, 0x9d, 0x23, 0xe2, + 0x33, 0xf3, 0x54, 0xce, 0xc0, 0x79, 0x09, 0x57, + 0x75, 0x47, 0xb4, 0x90, 0xe6, 0x9b, 0x6b, 0x38, + 0xc7, 0xab, 0xba, 0x8f, 0xb3, 0x4c, 0x98, 0xf8, + 0x73, 0x6b, 0xca, 0xc0, 0x6f, 0x62, 0x9a, 0x49, + 0xd0, 0x9a, 0xf3, 0xa7, 0x56, 0x01, 0xf9, 0x0c, + 0x61, 0x09, 0x69, 0x7e, 0xa6, 0xe0, 0x7e, 0x52, + 0x29, 0xa7, 0xbb, 0x46, 0xa5, 0x1c, 0x9f, 0x55, + 0xf2, 0x09, 0x4c, 0x0c, 0xe9, 0x37, 0x13, 0x5c, + 0x48, 0xf5, 0x87, 0x26, 0x09, 0x89, 0x77, 0x7a, + 0x54, 0x07, 0xc0, 0x77, 0xfa, 0x1c, 0x7d, 0x7b, + 0x6d, 0x96, 0x6a, 0x5e, 0x91, 0x58, 0x67, 0x76, + 0x5c, 0xb9, 0x43, 0x47, 0x2d, 0xb9, 0xc7, 0x99, + 0x07, 0xf4, 0xa6, 0x71, 0xdf, 0x89, 0x28, 0x92, + 0xa3, 0x47, 0x07, 0x49, 0x32, 0xad, 0x0c, 0x0a, + 0x3b, 0x0b, 0xe2, 0x07, 0x35, 0x8e, 0xa6, 0xa3, + 0x03, 0x65, 0xf8, 0x07, 0x93, 0x43, 0x99, 0x23, + 0x3e, 0x8a, 0xa9, 0x78, 0xd9, 0xac, 0x3d, 0xbe, + 0xe3, 0xf6, 0x02, 0xd0, 0x9d, 0xf8, 0x1c, 0x61, + 0xf1, 0x2d, 0xfd, 0xc0, 0xea, 0xaf, 0xf6, 0xec, + 0xfc, 0x26, 0x96, 0x98, 0xaa, 0xc4, 0x6d, 0x24, + 0x90, 0x3e, 0x42, 0xd9, 0x84, 0x55, 0x3a, 0x2a, + 0x85, 0x4f, 0x0e, 0x47, 0xd2, 0xd0, 0xf6, 0xb5, + 0xd0, 0x2c, 0x3f, 0xc3, 0x32, 0xf8, 0x4b, 0x7c, + 0x4b, 0xd0, 0x06, 0x5d, 0xac, 0xfd, 0x99, 0xb0, + 0xe6, 0x1a, 0xb0, 0x2d, 0xd7, 0xd7, 0x08, 0xfe, + 0x17, 0x2e, 0xc4, 0x70, 0x8f, 0xf8, 0xac, 0x94, + 0x44, 0x2b, 0xe4, 0xb3, 0x08, 0xeb, 0x4d, 0x96, + 0xeb, 0x92, 0x11, 0xcb, 0x33, 0x69, 0x83, 0x9d, + 0x04, 0x67, 0xae, 0xde, 0xdc, 0x81, 0x0b, 0x64, + 0x97, 0x59, 0x34, 0x80, 0x7a, 0x74, 0x80, 0x78, + 0x54, 0xe2, 0x1b, 0x2b, 0xb3, 0xe4, 0x9c, 0xce, + 0xdf, 0xf9, 0x7e, 0x0f, 0xcb, 0x12, 0x97, 0xb5, + 0x44, 0x68, 0x9b, 0x40, 0xf9, 0x8d, 0x3f, 0x0e, + 0x50, 0x6a, 0x21, 0xd3, 0xfa, 0x83, 0xa6, 0x29, + 0x15, 0xec, 0x5b, 0x66, 0xb1, 0xec, 0x86, 0x8e, + 0xa2, 0xb5, 0x42, 0x99, 0x7c, 0xd9, 0x48, 0x23, + 0x5d, 0x3e, 0xd0, 0xce, 0xe2, 0xe6, 0xff, 0xd3, + 0x76, 0x3d, 0x31, 0x6e, 0x1d, 0xe7, 0xfd, 0x9b, + 0xe1, 0x90, 0x1a, 0xae, 0x59, 0x6b, 0xb8, 0x5e, + 0x08, 0xb4, 0x2b, 0x18, 0xb3, 0x14, 0x6b, 0x30, + 0xa9, 0x0b, 0x3c, 0x19, 0x3a, 0xa8, 0x81, 0x02, + 0x0c, 0x37, 0x8c, 0x4b, 0xa7, 0x3a, 0xac, 0x65, + 0x1f, 0x94, 0xb6, 0x07, 0x66, 0xe3, 0x00, 0x3e, + 0x0a, 0x45, 0x0b, 0x28, 0x45, 0x0f, 0x43, 0x9a, + 0x36, 0xb8, 0x86, 0x0e, 0x94, 0x51, 0x14, 0xdb, + 0x20, 0x07, 0x5a, 0x71, 0x01, 0x19, 0x48, 0x81, + 0x75, 0x9b, 0x16, 0x42, 0x4f, 0x5c, 0xc3, 0x07, + 0x1d, 0xd5, 0x9b, 0x7b, 0x93, 0x9b, 0x1c, 0x7c, + 0xe8, 0x41, 0x4d, 0x51, 0x60, 0xb9, 0x7f, 0xfb, + 0x7d, 0x33, 0xf3, 0xc8, 0x47, 0xbe, 0xc7, 0xdd, + 0x95, 0xed, 0x2c, 0x60, 0x43, 0xdc, 0x7d, 0x9c, + 0x37, 0x33, 0xef, 0x37, 0xdf, 0xdf, 0xdf, 0xf7, + 0xbd, 0x98, 0x7a, 0xd2, 0x43, 0xa7, 0x01, 0x55, + 0xc9, 0x6b, 0xa4, 0x57, 0xad, 0x2d, 0x2a, 0xb4, + 0x39, 0xea, 0xeb, 0x74, 0x4d, 0xbf, 0xbb, 0x1e, + 0x89, 0xad, 0x83, 0xa7, 0x4e, 0xa7, 0x2d, 0xfe, + 0xe9, 0x1f, 0x67, 0xd1, 0xa3, 0xf8, 0x3c, 0x2f, + 0x28, 0xde, 0x84, 0x5a, 0xe2, 0xef, 0x29, 0x62, + 0x15, 0x98, 0xbd, 0xaf, 0x3c, 0x8f, 0x74, 0x68, + 0x67, 0x70, 0xfc, 0xb5, 0x59, 0x5e, 0xd3, 0x8b, + 0x7f, 0xbd, 0x2b, 0x66, 0x7e, 0x49, 0x97, 0x77, + 0x4f, 0x60, 0x79, 0xa1, 0xa6, 0xac, 0x39, 0x45, + 0x4e, 0xd6, 0x48, 0x07, 0x26, 0x05, 0xb2, 0x92, + 0x3e, 0xb0, 0xfd, 0x4a, 0x56, 0x3e, 0xcc, 0x9c, + 0x94, 0x66, 0x5e, 0x99, 0x89, 0x7c, 0x4d, 0x2e, + 0x16, 0x70, 0xff, 0xe0, 0x9b, 0x7b, 0x98, 0x09, + 0x96, 0xd7, 0x53, 0xef, 0x59, 0xa3, 0x3e, 0x7f, + 0xf1, 0xfa, 0xf1, 0xd3, 0x27, 0xe9, 0x26, 0x8f, + 0x72, 0x3e, 0x61, 0xf3, 0xe8, 0xf8, 0x8c, 0xc1, + 0xd9, 0xb3, 0xfc, 0x6c, 0x1d, 0x25, 0xcf, 0x71, + 0x2a, 0x11, 0x20, 0x53, 0xe9, 0x8e, 0x65, 0xb3, + 0xf8, 0x7e, 0x94, 0x2a, 0x32, 0x3e, 0x2f, 0xf5, + 0x54, 0xc9, 0x85, 0xcc, 0x1f, 0x0a, 0xe1, 0x67, + 0x54, 0x0f, 0xc9, 0xd3, 0x72, 0xd4, 0x22, 0xb1, + 0xb3, 0x93, 0x8b, 0xfb, 0xfb, 0xe9, 0x39, 0xe8, + 0xe9, 0x32, 0x32, 0xd6, 0xa3, 0x4e, 0x40, 0xe0, + 0x71, 0x97, 0xee, 0xd6, 0x08, 0x85, 0x7e, 0x2e, + 0xfd, 0x66, 0x82, 0x0a, 0x37, 0xe9, 0xb1, 0x88, + 0x5f, 0xc4, 0x78, 0xf8, 0x3b, 0x37, 0x53, 0x5d, + 0xcf, 0x28, 0x21, 0x77, 0x2b, 0x91, 0xa9, 0x50, + 0x33, 0x7b, 0x2b, 0x4f, 0x62, 0x44, 0x4c, 0x4b, + 0xbf, 0xac, 0x5f, 0x98, 0x20, 0xea, 0xce, 0x97, + 0x07, 0xc6, 0x82, 0x1c, 0x6e, 0x80, 0xa8, 0xdb, + 0x87, 0xd7, 0xed, 0xf7, 0x68, 0x03, 0x75, 0xb8, + 0xd5, 0x28, 0x3d, 0xa0, 0x79, 0x17, 0xf2, 0xec, + 0x55, 0x6f, 0xda, 0xa3, 0x2b, 0xa3, 0x2c, 0x25, + 0x3b, 0x73, 0x38, 0xd8, 0xef, 0x3f, 0xbe, 0xbf, + 0x02, 0x3f, 0xdf, 0xb3, 0x64, 0xdb, 0x76, 0xb4, + 0x2c, 0xa1, 0x69, 0x65, 0x2e, 0x18, 0xed, 0x36, + 0xcd, 0x55, 0x63, 0xb3, 0xf5, 0xcb, 0x37, 0xe6, + 0x97, 0xf9, 0x13, 0x60, 0xdd, 0xd7, 0xd1, 0x1d, + 0xac, 0x52, 0x98, 0xa8, 0xb8, 0x32, 0xfc, 0xec, + 0x7d, 0xc3, 0x9e, 0x2b, 0x44, 0xdb, 0xb2, 0x8b, + 0x5f, 0x7c, 0xb0, 0xe7, 0xf6, 0x8c, 0x69, 0xdc, + 0x33, 0x19, 0xf3, 0x43, 0x75, 0x78, 0x6a, 0x46, + 0x65, 0xa5, 0x4a, 0xd8, 0x5a, 0x9c, 0x8b, 0x9c, + 0xec, 0x89, 0x54, 0x2e, 0xf4, 0xf4, 0xf9, 0x3e, + 0x9f, 0x3e, 0x72, 0x05, 0x73, 0x79, 0xf6, 0xf4, + 0xa9, 0xea, 0xc0, 0x94, 0x0f, 0x47, 0xff, 0xa3, + 0xc4, 0x87, 0xf2, 0xe9, 0x79, 0x06, 0xfa, 0xe0, + 0xe9, 0x51, 0x6a, 0x53, 0x17, 0x9b, 0x13, 0x13, + 0x7f, 0x2a, 0x1d, 0x84, 0x9e, 0x0b, 0x75, 0xf3, + 0x85, 0x67, 0xd3, 0x8f, 0x2e, 0xe6, 0x12, 0x12, + 0xd2, 0xef, 0x46, 0xc8, 0xc1, 0x83, 0x67, 0x34, + 0xfa, 0x24, 0xa9, 0xc8, 0x92, 0x30, 0x5a, 0x3a, + 0x96, 0x97, 0x27, 0x25, 0xa8, 0x45, 0x68, 0x77, + 0x51, 0x69, 0x97, 0xd2, 0x3c, 0x99, 0xd5, 0xf1, + 0xb7, 0xc7, 0x33, 0x67, 0x8e, 0x09, 0x48, 0xcc, + 0xe4, 0x74, 0x1a, 0x89, 0x98, 0xd9, 0x87, 0x74, + 0x16, 0xf1, 0xe4, 0x24, 0x1b, 0x97, 0xf3, 0x12, + 0x21, 0xe1, 0xf8, 0x0d, 0x0e, 0xe6, 0xee, 0xa7, + 0xcf, 0x26, 0x65, 0x79, 0x2b, 0x95, 0x48, 0x12, + 0x30, 0x1a, 0x2f, 0x65, 0x5c, 0x2c, 0xa6, 0x54, + 0x2f, 0x33, 0xf7, 0x20, 0xc5, 0x09, 0x99, 0xe2, + 0xb8, 0x8b, 0x05, 0x4f, 0x3c, 0xeb, 0x61, 0x02, + 0xb9, 0x09, 0x7f, 0xd3, 0x0d, 0x67, 0xda, 0xb0, + 0x38, 0xff, 0xfc, 0xf8, 0x30, 0x8c, 0x92, 0xb8, + 0xe3, 0xba, 0x9a, 0x2e, 0xd7, 0x86, 0x5b, 0x99, + 0xb3, 0xa0, 0xf9, 0xed, 0xf1, 0xc2, 0x27, 0x75, + 0x72, 0x36, 0x93, 0x67, 0x58, 0xbc, 0x5f, 0x7e, + 0x93, 0x54, 0xeb, 0xad, 0xb3, 0x30, 0x96, 0xd4, + 0xa9, 0xf2, 0x32, 0x5c, 0x77, 0x74, 0x8a, 0xce, + 0x9d, 0x1f, 0x48, 0x9f, 0x24, 0x01, 0x76, 0x4f, + 0x15, 0x18, 0xe6, 0xcc, 0x6a, 0x7e, 0x6b, 0x9c, + 0x29, 0x07, 0xf8, 0x62, 0x3b, 0xe8, 0x84, 0xb5, + 0x56, 0xf6, 0xe7, 0xb5, 0x60, 0x12, 0x3e, 0x7a, + 0x91, 0x42, 0xb1, 0x31, 0xdf, 0x63, 0xf6, 0x19, + 0xef, 0x52, 0xd1, 0x33, 0x57, 0xa9, 0x85, 0xc8, + 0xd4, 0x8c, 0x03, 0x13, 0x57, 0x67, 0x62, 0xd6, + 0xf3, 0xbd, 0xf6, 0xa1, 0x3a, 0xe7, 0xf0, 0x27, + 0xb7, 0x5e, 0x9c, 0xbc, 0x8b, 0xe1, 0xf1, 0xc4, + 0x57, 0x45, 0xc7, 0x23, 0x92, 0x79, 0xf1, 0x21, + 0xe1, 0x23, 0x87, 0x7a, 0x39, 0xfb, 0x25, 0x93, + 0xb6, 0xd2, 0xc0, 0x5b, 0x15, 0x2e, 0xff, 0x68, + 0xe3, 0x41, 0x1f, 0x1d, 0xc4, 0x01, 0x0b, 0x38, + 0xe1, 0xd0, 0x4d, 0xd2, 0x48, 0x61, 0x99, 0x72, + 0x8e, 0x6c, 0x11, 0x96, 0xfe, 0xc4, 0x41, 0xa3, + 0xec, 0x76, 0x2d, 0x75, 0xbc, 0xb3, 0x64, 0x9b, + 0xb1, 0x8b, 0xf9, 0x18, 0x7d, 0x57, 0x3c, 0x15, + 0x43, 0x53, 0x38, 0x03, 0x41, 0x2d, 0x7c, 0x96, + 0x76, 0x5e, 0xd9, 0xd8, 0x04, 0xa0, 0xd0, 0xde, + 0x39, 0x98, 0x59, 0x94, 0xc9, 0x56, 0x15, 0xb3, + 0xb3, 0xd9, 0x08, 0xcf, 0x49, 0xd3, 0x22, 0x1d, + 0xdf, 0x28, 0x50, 0x24, 0xea, 0x87, 0x7d, 0x84, + 0xa7, 0x88, 0x6d, 0x91, 0xe9, 0x0e, 0xf0, 0x50, + 0x04, 0x35, 0x6f, 0x05, 0x49, 0x1f, 0x3e, 0x64, + 0x3e, 0x51, 0x2c, 0xbd, 0x96, 0xd1, 0xc6, 0x35, + 0xad, 0xd9, 0xdd, 0xe7, 0x16, 0xad, 0x10, 0x57, + 0x4a, 0x15, 0x7a, 0x89, 0x38, 0xba, 0x76, 0x27, + 0x6b, 0xa5, 0x3a, 0x74, 0xbd, 0xf1, 0x74, 0xe5, + 0x78, 0x50, 0xba, 0xa1, 0xcf, 0xe1, 0xbf, 0xb5, + 0x6f, 0x6c, 0x7e, 0xc0, 0x96, 0x87, 0xf0, 0x0c, + 0x0d, 0xb6, 0x41, 0xdb, 0x76, 0x85, 0x06, 0xcd, + 0xb9, 0x52, 0x93, 0x08, 0x26, 0x5d, 0x54, 0x48, + 0xfd, 0x43, 0xfb, 0x5d, 0xd4, 0x20, 0x7f, 0xe2, + 0xbd, 0x4c, 0x76, 0x1d, 0xd4, 0x23, 0x74, 0xcc, + 0xb9, 0x5d, 0x8a, 0xda, 0xf9, 0xd1, 0x48, 0xe2, + 0x71, 0xc2, 0x9b, 0x30, 0xde, 0x01, 0xd9, 0x1c, + 0x1a, 0xd5, 0x61, 0x43, 0x7e, 0x51, 0x34, 0x80, + 0xf3, 0x76, 0x1e, 0x7a, 0x7f, 0xa7, 0xd3, 0xcb, + 0xdc, 0x80, 0x37, 0xdf, 0xfa, 0xc1, 0xd5, 0x15, + 0xca, 0x25, 0xa1, 0xe1, 0x57, 0x1b, 0x48, 0xbb, + 0xf2, 0x42, 0xbd, 0xfa, 0x93, 0x0a, 0x7c, 0xd8, + 0x88, 0x50, 0xa3, 0x3b, 0x1b, 0x90, 0xe1, 0xbe, + 0x05, 0xa6, 0xb5, 0x8c, 0x89, 0x2b, 0xc2, 0x26, + 0x78, 0x49, 0xc9, 0x47, 0x41, 0x64, 0xf4, 0x04, + 0x1b, 0x48, 0x3a, 0xb4, 0xd1, 0x9e, 0xd9, 0x7d, + 0x98, 0x9c, 0x59, 0xed, 0x4c, 0xaa, 0x5e, 0x42, + 0x23, 0xb0, 0x0c, 0x79, 0x4d, 0x04, 0x31, 0x31, + 0x35, 0x8d, 0xb5, 0x26, 0x37, 0x45, 0xe1, 0x0c, + 0x24, 0xdc, 0xda, 0x53, 0x70, 0x9a, 0x94, 0x48, + 0xfe, 0xe4, 0x82, 0x22, 0xf3, 0x0e, 0x9d, 0x75, + 0xf8, 0x88, 0x49, 0xbf, 0xe6, 0xca, 0xee, 0x72, + 0xe6, 0x49, 0xb6, 0xa7, 0x90, 0x5a, 0x78, 0xfa, + 0xa0, 0xe8, 0xfe, 0xaf, 0x62, 0xf3, 0xa0, 0x6c, + 0xa7, 0x03, 0xac, 0xcd, 0x48, 0x6d, 0xb5, 0x48, + 0x6a, 0x7b, 0x68, 0xa8, 0xe9, 0x01, 0xfc, 0x72, + 0x1c, 0x0f, 0x6e, 0xb2, 0x0f, 0xb7, 0x9e, 0x8c, + 0xca, 0x00, 0x4e, 0xd9, 0x91, 0xca, 0xde, 0xf4, + 0xb6, 0x3c, 0x64, 0xde, 0x26, 0x8c, 0xff, 0x05, + 0x2a, 0x94, 0x23, 0x96, 0x8c, 0xb7, 0xd5, 0xa6, + 0x80, 0xa5, 0xb5, 0xab, 0xf1, 0x19, 0xe5, 0xfb, + 0x22, 0xb3, 0xd2, 0x26, 0xcd, 0xd0, 0xbd, 0x93, + 0x46, 0xb1, 0x67, 0x34, 0xb4, 0xc2, 0x35, 0xea, + 0x34, 0x25, 0x2c, 0x9f, 0xc2, 0xaf, 0x5d, 0x77, + 0xa6, 0x3b, 0x95, 0x25, 0x8a, 0x0c, 0x11, 0x1f, + 0x5a, 0x2e, 0xd1, 0xde, 0xd7, 0xfd, 0xf4, 0xc4, + 0xe4, 0x50, 0xd8, 0xd9, 0xb1, 0xcd, 0x8c, 0x81, + 0x9c, 0x58, 0x11, 0x9b, 0x0e, 0x28, 0x83, 0xfc, + 0x0b, 0x09, 0x51, 0x6b, 0xe6, 0x96, 0xcc, 0x12, + 0x26, 0x96, 0xe3, 0xd3, 0xce, 0x58, 0x00, 0xe2, + 0x74, 0xcd, 0x2d, 0x12, 0x90, 0x8d, 0x9f, 0xbc, + 0x60, 0xa8, 0x5f, 0x6a, 0xbb, 0xc9, 0x13, 0xe8, + 0x22, 0xa7, 0xc2, 0x07, 0xb1, 0x33, 0x0c, 0x06, + 0x5f, 0x39, 0x5d, 0x88, 0x23, 0x1a, 0x13, 0xbe, + 0x8f, 0x67, 0xb2, 0x4a, 0x12, 0xdb, 0x94, 0x2b, + 0x54, 0x72, 0xd9, 0x48, 0x17, 0xd7, 0x72, 0xd1, + 0x85, 0x35, 0x3c, 0x71, 0x92, 0x7d, 0xc8, 0x52, + 0x69, 0x8f, 0x21, 0xeb, 0x59, 0x18, 0xb5, 0x5e, + 0x30, 0x61, 0x66, 0x55, 0xfc, 0x00, 0xd4, 0x3c, + 0xa8, 0x31, 0x2c, 0x0a, 0x4e, 0xd1, 0x83, 0xc8, + 0xf9, 0x5c, 0xc2, 0xce, 0xa3, 0xda, 0x52, 0x1a, + 0x35, 0x2d, 0x37, 0xdc, 0xcc, 0xba, 0x30, 0xd3, + 0x2e, 0x40, 0x43, 0x9f, 0x95, 0x25, 0xc4, 0x51, + 0xaa, 0x0b, 0x28, 0x10, 0x8c, 0xdf, 0x39, 0x1e, + 0xf6, 0xfb, 0x31, 0x4b, 0xd1, 0x52, 0x88, 0xfb, + 0x00, 0x4f, 0xb4, 0x0f, 0x23, 0x3a, 0x3f, 0xf0, + 0x09, 0x75, 0x01, 0xa3, 0xf5, 0x33, 0x0d, 0xdb, + 0xfb, 0x21, 0x5e, 0xb4, 0x9c, 0xf7, 0x8f, 0xcd, + 0x86, 0x9d, 0xd1, 0xa2, 0xf7, 0x11, 0x4b, 0x27, + 0x17, 0x5a, 0x78, 0x88, 0x05, 0x74, 0x9b, 0x68, + 0x53, 0x6c, 0xfa, 0xf2, 0x3f, 0xf4, 0x27, 0x29, + 0xc6, 0xd8, 0x67, 0x5d, 0x79, 0xdb, 0xd5, 0x3b, + 0xc1, 0x4e, 0x4d, 0x42, 0x51, 0x78, 0xf1, 0xa9, + 0x76, 0x38, 0x2b, 0x83, 0x59, 0x91, 0x32, 0x4d, + 0x12, 0xb5, 0x1d, 0x28, 0xe3, 0x7e, 0xde, 0x84, + 0xbb, 0x6e, 0xff, 0x23, 0xdf, 0x20, 0x46, 0xb6, + 0x4b, 0x06, 0x97, 0x09, 0xea, 0x90, 0xf6, 0x9c, + 0xdd, 0x82, 0x67, 0x1f, 0xf1, 0x0a, 0xed, 0xd9, + 0xb5, 0xe1, 0xb9, 0x27, 0xf4, 0xc0, 0xae, 0xba, + 0x76, 0x36, 0x32, 0x1d, 0xf4, 0xb5, 0xec, 0xb7, + 0x46, 0x0c, 0xfc, 0xa3, 0xbf, 0xa6, 0xfd, 0x32, + 0x7f, 0x4a, 0x14, 0x8a, 0x92, 0xa2, 0x52, 0x38, + 0x7c, 0x00, 0x1d, 0xad, 0x44, 0xdc, 0x44, 0xa1, + 0xc0, 0x5c, 0x71, 0xba, 0x96, 0x19, 0xbb, 0x6f, + 0x3b, 0x3e, 0x36, 0x4e, 0x9b, 0x2f, 0x79, 0xdc, + 0xfb, 0x26, 0x87, 0x5b, 0x49, 0xcc, 0x36, 0xb3, + 0x1b, 0xca, 0xad, 0xfb, 0xf0, 0x0b, 0xbd, 0x06, + 0x9e, 0xdf, 0xd7, 0x75, 0x19, 0x55, 0x9d, 0x2d, + 0x31, 0x18, 0x7c, 0xb6, 0x02, 0xac, 0xe1, 0x36, + 0x8c, 0x06, 0x5b, 0x01, 0x78, 0xa3, 0x4d, 0x4a, + 0x63, 0x95, 0x5f, 0x3d, 0xd6, 0xd2, 0xe1, 0x0c, + 0x5d, 0xf5, 0xba, 0xf2, 0x38, 0x1b, 0xe8, 0x1f, + 0x18, 0x68, 0x97, 0xd8, 0xaa, 0x78, 0x29, 0xdd, + 0x59, 0x0d, 0xf5, 0xc9, 0xa8, 0x75, 0x63, 0x5d, + 0x52, 0x1c, 0x44, 0xe5, 0x8b, 0x6e, 0x11, 0x6b, + 0xae, 0xfa, 0x1f, 0xaa, 0x77, 0xc6, 0xde, 0xac, + 0xd4, 0x1e, 0x12, 0x10, 0xa2, 0xea, 0x62, 0x8e, + 0xc8, 0x90, 0xe8, 0xe5, 0x45, 0x13, 0xae, 0xa0, + 0x42, 0x49, 0x04, 0x41, 0x58, 0x88, 0x0c, 0x3c, + 0x1a, 0x1b, 0x16, 0x85, 0x50, 0x46, 0xdb, 0x7f, + 0xad, 0x00, 0x44, 0xd5, 0x71, 0x4d, 0x12, 0x56, + 0xe7, 0x0d, 0x77, 0x57, 0x0a, 0xfa, 0x04, 0xff, + 0xeb, 0xba, 0xa7, 0xa1, 0xbd, 0x58, 0xb1, 0x37, + 0xfd, 0x35, 0x8f, 0x0f, 0xb4, 0xd9, 0x06, 0x75, + 0xd7, 0x58, 0x51, 0xdc, 0x58, 0x71, 0x97, 0x17, + 0x40, 0x6e, 0xe1, 0x44, 0xcb, 0x4d, 0x21, 0xa3, + 0xec, 0xce, 0x07, 0x75, 0xfc, 0x3b, 0xd4, 0xbc, + 0xe9, 0x41, 0x39, 0x05, 0x25, 0xcb, 0x64, 0xd0, + 0xc0, 0x9f, 0xef, 0x5b, 0x11, 0xc1, 0x85, 0x46, + 0xdd, 0x08, 0xe5, 0x7a, 0x49, 0x6c, 0xcb, 0x57, + 0x77, 0x5a, 0x37, 0x45, 0x8e, 0x37, 0xd1, 0x3d, + 0x8f, 0x32, 0xf4, 0x20, 0xfe, 0xaa, 0x5f, 0xe1, + 0x9b, 0xb8, 0x39, 0xf6, 0xb2, 0x62, 0xce, 0xe5, + 0x46, 0xa5, 0x40, 0xc9, 0xd0, 0x42, 0x71, 0xb7, + 0x6d, 0x85, 0x0f, 0xb4, 0xb3, 0xdb, 0xb4, 0x0d, + 0xae, 0x2c, 0xff, 0xc5, 0x51, 0xee, 0x36, 0xe2, + 0xcc, 0x5e, 0x4c, 0x8f, 0x45, 0x09, 0x1d, 0xca, + 0x66, 0x57, 0xe8, 0xb8, 0x95, 0x14, 0xdc, 0xa2, + 0x3d, 0xfe, 0x63, 0x4a, 0x26, 0x5c, 0x83, 0xed, + 0x3d, 0x1b, 0xec, 0x7a, 0xc9, 0x37, 0xc2, 0x9e, + 0x7f, 0xea, 0x5a, 0x66, 0xa0, 0xdc, 0xb0, 0x19, + 0xba, 0xc1, 0xe1, 0x8c, 0x42, 0xcf, 0x2e, 0x2a, + 0xaf, 0x7c, 0xb8, 0x4a, 0xfb, 0x82, 0xfe, 0xff, + 0x38, 0xb0, 0xc5, 0x88, 0x1e, 0xae, 0x41, 0xa1, + 0x29, 0xdd, 0x60, 0xaa, 0xdd, 0xac, 0x30, 0xb9, + 0xb1, 0xa4, 0x6d, 0xa8, 0x25, 0x9f, 0x57, 0xa7, + 0xa3, 0x15, 0xc1, 0xb8, 0x68, 0xd2, 0xd9, 0x66, + 0x8e, 0x40, 0x3c, 0xd0, 0xdc, 0x55, 0xfc, 0xd5, + 0xc7, 0x11, 0xe2, 0xac, 0xa0, 0x14, 0xe2, 0x4c, + 0xb2, 0x4d, 0x86, 0xc2, 0x4d, 0x7d, 0xd0, 0xa4, + 0x94, 0xa2, 0xbc, 0x73, 0x8f, 0xd5, 0x32, 0xec, + 0x16, 0x85, 0xd0, 0x5a, 0x2e, 0xca, 0x25, 0xb2, + 0x09, 0xf9, 0x3d, 0xfc, 0xe6, 0x0b, 0x8d, 0x9c, + 0x5c, 0x6e, 0xe0, 0x44, 0xaa, 0xd4, 0xb2, 0x8c, + 0xc5, 0xd4, 0x47, 0x53, 0x8a, 0x71, 0x16, 0xce, + 0x4e, 0xb4, 0x40, 0x05, 0x56, 0x92, 0x39, 0x02, + 0xa9, 0x62, 0xbe, 0x6b, 0x7d, 0x1f, 0x71, 0x06, + 0xcc, 0x81, 0xd6, 0x99, 0x94, 0x38, 0x5e, 0xc7, + 0x6b, 0x8c, 0xf3, 0xc1, 0x3a, 0xcd, 0xb0, 0x6b, + 0x14, 0x1e, 0x74, 0x93, 0x6b, 0x3a, 0xe2, 0x2a, + 0x81, 0x32, 0x38, 0x07, 0xfd, 0xdd, 0x97, 0x9b, + 0xd1, 0xbd, 0x10, 0xa0, 0xee, 0xe0, 0xef, 0x7a, + 0xd2, 0xb5, 0xd4, 0xb1, 0xba, 0x0b, 0xdd, 0xe2, + 0x27, 0x69, 0x65, 0xd2, 0xa5, 0x8e, 0x12, 0x15, + 0x3c, 0x9a, 0x7c, 0x93, 0xc2, 0xc9, 0xaa, 0x21, + 0xb7, 0x64, 0x08, 0x39, 0xc0, 0xe8, 0xa8, 0x27, + 0x2e, 0xe3, 0x79, 0xaf, 0xba, 0xde, 0x38, 0x77, + 0x10, 0x2d, 0x55, 0xbd, 0x53, 0xd9, 0x52, 0x7d, + 0x53, 0xb6, 0x96, 0xbd, 0x52, 0x4c, 0xe9, 0x64, + 0xb6, 0x0c, 0xb6, 0x59, 0x11, 0x97, 0xda, 0x4d, + 0x61, 0xcb, 0x91, 0x28, 0x74, 0xea, 0x15, 0xa1, + 0x45, 0x95, 0xf2, 0x8f, 0xe5, 0xd6, 0xde, 0x6d, + 0x92, 0x67, 0x7f, 0x09, 0x85, 0xcf, 0x6c, 0xc5, + 0x9c, 0x23, 0x1a, 0x11, 0x23, 0x9c, 0xa1, 0x3c, + 0x3b, 0xff, 0x1b, 0x76, 0x31, 0x2d, 0xb6, 0x71, + 0x1b, 0x50, 0xf8, 0x51, 0xe2, 0x90, 0x7f, 0xd9, + 0xb9, 0x06, 0x74, 0xb1, 0x21, 0x56, 0x04, 0xf5, + 0x8c, 0xdb, 0x3d, 0xf0, 0x3a, 0xd7, 0x65, 0x2d, + 0x3c, 0x79, 0x84, 0xbb, 0x92, 0x53, 0xa3, 0x33, + 0xdb, 0x88, 0x30, 0x7f, 0x88, 0x24, 0x65, 0xb3, + 0x29, 0xcf, 0x5d, 0xe8, 0xa0, 0x70, 0xcb, 0x05, + 0xe1, 0xa6, 0x1c, 0xce, 0x70, 0xe5, 0x12, 0x3f, + 0x77, 0xdf, 0x23, 0xdf, 0x73, 0x99, 0x46, 0x62, + 0x8c, 0x5f, 0xdf, 0xe9, 0xa4, 0xf5, 0x71, 0x9f, + 0xc2, 0x78, 0x4d, 0x8b, 0xda, 0xa7, 0x53, 0xa3, + 0x83, 0x83, 0xc6, 0xec, 0x16, 0xe4, 0x8c, 0x6b, + 0x50, 0x02, 0xf6, 0xc0, 0xe3, 0x8c, 0x2c, 0xb3, + 0x12, 0x7c, 0x6b, 0x9b, 0x09, 0xea, 0x91, 0xe3, + 0xda, 0x26, 0xb1, 0x55, 0x95, 0x52, 0x28, 0x43, + 0x26, 0xd0, 0x45, 0x42, 0x50, 0xb6, 0x1d, 0x0b, + 0x8c, 0x17, 0xa8, 0x67, 0x5c, 0x13, 0xd7, 0x78, + 0x87, 0x1e, 0x00, 0xca, 0x33, 0x33, 0xb5, 0x40, + 0x12, 0x2b, 0x23, 0xa2, 0x83, 0xc9, 0x62, 0x13, + 0x3a, 0x79, 0x3b, 0x9d, 0xb1, 0x67, 0xad, 0x7a, + 0x53, 0x35, 0x22, 0x9c, 0x59, 0xaf, 0xdf, 0xa7, + 0x69, 0x6e, 0xdf, 0x2c, 0x4d, 0xb0, 0xac, 0xc1, + 0x94, 0x63, 0x4d, 0x58, 0x67, 0xfa, 0x06, 0x8f, + 0x30, 0xd7, 0x56, 0xe7, 0x69, 0xf8, 0xcf, 0x8f, + 0x5f, 0xb6, 0xd1, 0x5d, 0x43, 0x29, 0xdc, 0xd8, + 0x8d, 0xa6, 0x56, 0x8d, 0x8e, 0xd6, 0x69, 0x07, + 0x19, 0x83, 0x91, 0x08, 0x6b, 0x2d, 0x53, 0xaa, + 0xc6, 0x84, 0x70, 0xd1, 0x96, 0xba, 0x24, 0x9c, + 0xc2, 0x68, 0xfc, 0xcb, 0x61, 0x0f, 0x2e, 0xe3, + 0x71, 0xaa, 0x6e, 0x89, 0x6a, 0xdb, 0xdc, 0x91, + 0x2a, 0x5a, 0xb2, 0xd4, 0x24, 0x01, 0xaf, 0xad, + 0xa3, 0x60, 0x6f, 0xcc, 0x8f, 0xd6, 0xa2, 0x44, + 0x24, 0x4a, 0xc2, 0x3e, 0xb9, 0x3b, 0x97, 0x1d, + 0xe7, 0xee, 0x79, 0x96, 0xd3, 0x4d, 0x6a, 0xdd, + 0x50, 0xfc, 0xf8, 0xf0, 0x26, 0xee, 0x39, 0xbb, + 0x0c, 0x8e, 0x50, 0x83, 0x22, 0xec, 0x1a, 0xad, + 0xf9, 0x45, 0xd2, 0xfc, 0xe7, 0x1e, 0xdb, 0x52, + 0x06, 0xce, 0x34, 0xe2, 0x4c, 0x10, 0x99, 0x24, + 0xf7, 0x1b, 0x76, 0x8d, 0x02, 0xf4, 0xcf, 0xb6, + 0xe0, 0x26, 0x65, 0x56, 0x4b, 0x44, 0x00, 0xa4, + 0x3d, 0x18, 0x69, 0xdf, 0x7a, 0x8f, 0x0c, 0x68, + 0xc1, 0x7c, 0x5b, 0x4b, 0x29, 0xb3, 0x70, 0xa6, + 0xf5, 0xa4, 0x17, 0x6b, 0xcc, 0xbe, 0xa1, 0xa3, + 0xe9, 0xd4, 0xf5, 0x17, 0x7b, 0x36, 0x7f, 0x19, + 0xcc, 0xa7, 0xb2, 0x82, 0xc2, 0xa9, 0xd6, 0x64, + 0xca, 0xeb, 0x4b, 0x8a, 0x27, 0x68, 0xab, 0x52, + 0x26, 0x9a, 0x2d, 0xd2, 0x0d, 0x9a, 0x2d, 0xf5, + 0x01, 0xae, 0xb8, 0xeb, 0x07, 0x13, 0xe5, 0x5c, + 0xbb, 0x71, 0x9d, 0xc4, 0x66, 0xff, 0x40, 0xb7, + 0xae, 0xa0, 0x47, 0xa6, 0xb8, 0xc9, 0xb5, 0x56, + 0x40, 0x17, 0x3b, 0x50, 0x18, 0xd4, 0x5d, 0xf6, + 0xe7, 0x4e, 0x15, 0xd2, 0xf2, 0x4c, 0xfc, 0x2b, + 0x6a, 0x34, 0xde, 0x69, 0xe7, 0x24, 0x79, 0x89, + 0xbc, 0x8a, 0x93, 0xbc, 0x61, 0x72, 0xce, 0x95, + 0xee, 0xc9, 0xff, 0xde, 0x9d, 0x84, 0xf8, 0x73, + 0xed, 0x60, 0x7f, 0xed, 0xcc, 0xe2, 0x60, 0x4e, + 0xa5, 0xab, 0x20, 0xef, 0x26, 0xd2, 0x89, 0x36, + 0xc8, 0xb5, 0x12, 0x01, 0x7b, 0xd4, 0xa6, 0xc9, + 0xfe, 0x88, 0x06, 0x73, 0xe8, 0x2d, 0xc2, 0x39, + 0x97, 0x3a, 0x6e, 0xeb, 0xf3, 0xb6, 0x23, 0x53, + 0xf2, 0x8c, 0x2e, 0xb6, 0x20, 0x46, 0x13, 0x9c, + 0x11, 0x15, 0x3a, 0xc7, 0xc9, 0x78, 0xd5, 0x72, + 0x7d, 0xbf, 0xae, 0x51, 0xa1, 0x29, 0x74, 0x48, + 0x73, 0x6d, 0xa7, 0x37, 0x2d, 0xea, 0x4d, 0x62, + 0x60, 0x32, 0xdb, 0x2d, 0xa6, 0xa8, 0x41, 0xb6, + 0x17, 0xa1, 0xe5, 0x89, 0x7b, 0xa2, 0x51, 0x6a, + 0x7b, 0x9c, 0xc9, 0x1f, 0xaa, 0xe7, 0x28, 0x15, + 0x81, 0xdf, 0xf8, 0xf5, 0x1e, 0xfe, 0x9d, 0xd2, + 0xb8, 0xd4, 0x4f, 0x88, 0xca, 0xf2, 0x22, 0xae, + 0x77, 0x5a, 0xc0, 0x55, 0x1b, 0xe1, 0xb4, 0x99, + 0x26, 0x81, 0xbf, 0x8e, 0x7a, 0x79, 0xc4, 0x2b, + 0xb9, 0x1f, 0x53, 0xb9, 0xd5, 0x2a, 0xf1, 0x7a, + 0xa8, 0xf1, 0xb0, 0x59, 0xb5, 0xa4, 0x56, 0x7e, + 0x78, 0x64, 0x08, 0x67, 0xff, 0xa3, 0x51, 0x15, + 0x7e, 0xc7, 0x10, 0x2b, 0x55, 0xa3, 0x88, 0x42, + 0x33, 0x73, 0x89, 0xda, 0x8c, 0x64, 0xc8, 0xb3, + 0x6b, 0x68, 0x1e, 0xd8, 0x17, 0x2d, 0x54, 0x4c, + 0xee, 0xbf, 0x98, 0xef, 0x4d, 0x18, 0xe4, 0x59, + 0x09, 0x6e, 0x8f, 0x9d, 0x1b, 0xbd, 0xa3, 0x7d, + 0x1b, 0xb8, 0x29, 0x71, 0xcb, 0x9d, 0xfa, 0x94, + 0x42, 0xb1, 0x9e, 0x19, 0x57, 0x71, 0xb4, 0x93, + 0x2e, 0x9b, 0xb0, 0x56, 0xfd, 0x0a, 0x3e, 0xde, + 0x25, 0x9c, 0xd5, 0xe8, 0xef, 0xcf, 0x2d, 0x97, + 0x69, 0xe6, 0x78, 0xfb, 0xfe, 0x16, 0x11, 0xdf, + 0xaf, 0x77, 0xca, 0x97, 0x53, 0x7b, 0x26, 0xa2, + 0x06, 0x8c, 0xc4, 0xf3, 0x08, 0xaa, 0xe6, 0xf5, + 0x09, 0x68, 0x73, 0x9a, 0xa3, 0x08, 0xd2, 0xea, + 0xfe, 0x91, 0x12, 0x64, 0x9f, 0xa1, 0x54, 0x82, + 0x16, 0x6c, 0x12, 0x49, 0xe9, 0xd5, 0x41, 0xb3, + 0x4b, 0xa5, 0x1f, 0x77, 0xaa, 0xf9, 0xb4, 0x2f, + 0x27, 0x48, 0x9e, 0xa1, 0xf0, 0xcb, 0xb9, 0x24, + 0x2c, 0xdc, 0x23, 0x50, 0xbc, 0x96, 0x83, 0x95, + 0x8e, 0x2e, 0xc2, 0xf2, 0xed, 0xdd, 0xa0, 0x37, + 0x55, 0x28, 0x7a, 0x88, 0x24, 0xe1, 0x4c, 0xe6, + 0x00, 0x32, 0x7b, 0x18, 0x27, 0xfd, 0x59, 0x9b, + 0xfc, 0x40, 0x42, 0x89, 0xaa, 0xd7, 0x22, 0xc9, + 0x1e, 0x53, 0x6e, 0xb6, 0xa1, 0x4b, 0x02, 0xd5, + 0xc2, 0x39, 0xeb, 0x59, 0x60, 0xe7, 0xdb, 0x8d, + 0x52, 0xc6, 0x58, 0x6e, 0x7c, 0x87, 0x33, 0x60, + 0xa8, 0x7d, 0x76, 0x50, 0x5e, 0xe4, 0x96, 0x49, + 0x6d, 0x15, 0x41, 0x1f, 0x50, 0x8f, 0x20, 0xb3, + 0x5c, 0xe5, 0x02, 0x11, 0x4a, 0x1d, 0x53, 0x6d, + 0x61, 0xe4, 0x4e, 0xb8, 0x32, 0xf7, 0xf2, 0x19, + 0x99, 0x57, 0x97, 0xd2, 0x69, 0xac, 0x93, 0x53, + 0x2d, 0x51, 0xdb, 0x29, 0xb2, 0xe0, 0x2f, 0xb9, + 0x16, 0xad, 0x02, 0x1e, 0x1d, 0xf7, 0xca, 0x78, + 0x6a, 0x76, 0xaa, 0x2d, 0xfc, 0x76, 0xaf, 0xc4, + 0xf1, 0x12, 0xb5, 0x53, 0x41, 0x57, 0x01, 0x71, + 0xc6, 0x5e, 0x4b, 0x51, 0x13, 0xed, 0x5d, 0x8d, + 0xa0, 0xc5, 0x25, 0xbd, 0x43, 0xc1, 0xa7, 0xc1, + 0x36, 0xe8, 0x4f, 0x61, 0x4b, 0xe7, 0xda, 0x6b, + 0x78, 0x98, 0x5f, 0x29, 0x3f, 0xd8, 0xdd, 0x65, + 0x28, 0xc2, 0xd0, 0xe4, 0x7a, 0x68, 0xaf, 0x7a, + 0xa9, 0x44, 0x4e, 0x81, 0xc3, 0xd9, 0x63, 0x92, + 0x57, 0x73, 0x41, 0x7a, 0xd7, 0xbf, 0xc8, 0x16, + 0x7a, 0xde, 0x60, 0xbf, 0x36, 0x40, 0x31, 0x83, + 0x7a, 0xf3, 0x36, 0xe4, 0xa8, 0x67, 0xdc, 0xf0, + 0xc0, 0x95, 0x82, 0x90, 0x69, 0x9f, 0x33, 0x13, + 0x3b, 0xd8, 0xd3, 0x39, 0x2d, 0x5b, 0xa4, 0x50, + 0x80, 0x70, 0x56, 0xa2, 0x36, 0x71, 0x85, 0x20, + 0xfc, 0xa0, 0xdb, 0x41, 0x93, 0x6a, 0xcf, 0x69, + 0x3f, 0x66, 0x24, 0x93, 0x7c, 0x2d, 0x78, 0x24, + 0xad, 0xbe, 0xd2, 0x1b, 0x88, 0xb3, 0xfc, 0xe5, + 0x0c, 0x1d, 0x40, 0x93, 0xfd, 0x07, 0xe1, 0x92, + 0x6b, 0x45, 0x87, 0xb3, 0x17, 0x68, 0x8e, 0xce, + 0xfa, 0x7c, 0x7b, 0x5f, 0xf7, 0xa2, 0xf7, 0x6a, + 0x8f, 0x60, 0xf9, 0xfb, 0xde, 0x46, 0x12, 0xef, + 0x53, 0xa4, 0xc2, 0x67, 0xb3, 0xd9, 0x47, 0xa9, + 0xc8, 0x06, 0x15, 0x1e, 0x2a, 0xb5, 0x06, 0x7a, + 0x89, 0xaf, 0xd6, 0x24, 0x2a, 0x59, 0x9c, 0xd7, + 0x1a, 0xd5, 0x23, 0x0d, 0xdf, 0x15, 0x70, 0x65, + 0x2f, 0x24, 0x28, 0x55, 0x58, 0x9d, 0x9e, 0x04, + 0x90, 0xb2, 0xf4, 0x26, 0x99, 0xeb, 0x61, 0x1f, + 0x5c, 0x94, 0x6b, 0xe2, 0x73, 0x96, 0x5c, 0x62, + 0x04, 0x7d, 0xf4, 0xef, 0x4a, 0xb6, 0xaa, 0x57, + 0x02, 0x69, 0x56, 0x0e, 0x98, 0x8e, 0x4d, 0x94, + 0x86, 0x96, 0x99, 0x38, 0x8b, 0xc3, 0x46, 0xc4, + 0x3f, 0x18, 0x05, 0x8e, 0x14, 0x29, 0xa5, 0xfa, + 0x7e, 0x5f, 0x8a, 0x8e, 0x72, 0x75, 0x2c, 0x75, + 0x8a, 0xc2, 0xd5, 0x3c, 0x8d, 0x61, 0x1d, 0xaa, + 0x25, 0x34, 0x99, 0x78, 0x16, 0xce, 0x0c, 0xb7, + 0x78, 0x65, 0xcd, 0x48, 0x85, 0x38, 0xe2, 0x6b, + 0x1c, 0x9f, 0x46, 0x17, 0x3a, 0xf9, 0x08, 0xfe, + 0x77, 0x0c, 0x77, 0x2d, 0x34, 0x77, 0x84, 0x2c, + 0x3e, 0xe7, 0xea, 0x01, 0x06, 0x70, 0xe1, 0x53, + 0x83, 0xd6, 0xf6, 0x06, 0x94, 0xd8, 0xdd, 0x68, + 0x7e, 0xcf, 0xec, 0x65, 0x74, 0xcb, 0xad, 0x60, + 0xe2, 0x12, 0x1e, 0xc2, 0x1e, 0x79, 0xae, 0x9f, + 0xc1, 0x4d, 0x34, 0x43, 0x7b, 0x76, 0xd0, 0x88, + 0xf4, 0x8f, 0xf6, 0x1c, 0x5a, 0x22, 0xf3, 0xec, + 0xe8, 0x1d, 0x17, 0xed, 0x95, 0x7d, 0xf4, 0x37, + 0x5f, 0xa4, 0x00, 0xe5, 0xf9, 0x36, 0xa4, 0xe4, + 0x99, 0xc3, 0x19, 0xc9, 0xbb, 0xdc, 0xf3, 0x08, + 0x55, 0xa2, 0x1e, 0xaa, 0x60, 0x9f, 0x91, 0x0f, + 0xfe, 0xe4, 0xa0, 0xd7, 0x70, 0x84, 0xe7, 0x8a, + 0xb4, 0x2d, 0xdf, 0x6b, 0xb5, 0x30, 0x8a, 0xdd, + 0x87, 0x46, 0xea, 0xa0, 0x07, 0xbd, 0x49, 0xec, + 0xe8, 0x09, 0x20, 0x3d, 0xce, 0x48, 0xd2, 0x6d, + 0x1e, 0xd9, 0x7c, 0x94, 0x5f, 0x26, 0x9c, 0xe9, + 0xf0, 0x9c, 0x70, 0x30, 0xcb, 0xe5, 0x06, 0xbc, + 0xdc, 0x4a, 0xfb, 0x01, 0x08, 0x5a, 0xb2, 0xcf, + 0x54, 0x3e, 0x87, 0xe6, 0x03, 0xcf, 0x7f, 0x0c, + 0xca, 0xf5, 0x93, 0x87, 0xa6, 0xee, 0xe7, 0xa3, + 0xea, 0xc3, 0xe3, 0x88, 0xd5, 0x7a, 0x50, 0x56, + 0x38, 0xaf, 0xba, 0xd9, 0x24, 0x2b, 0xeb, 0x02, + 0xa8, 0x65, 0x7c, 0x1a, 0x6b, 0x77, 0xee, 0x15, + 0x5f, 0x12, 0x69, 0x3f, 0x20, 0xc4, 0x35, 0x24, + 0xd5, 0xd0, 0xa2, 0xdd, 0xb8, 0x2e, 0x7f, 0xe6, + 0xea, 0xde, 0x28, 0x13, 0xb5, 0xbe, 0x47, 0x31, + 0x77, 0x91, 0x8c, 0x6a, 0x15, 0x58, 0x52, 0xfd, + 0x67, 0xa5, 0x98, 0x67, 0xf2, 0x9f, 0xa6, 0x32, + 0xe9, 0x0e, 0xf3, 0xe5, 0x3e, 0xce, 0x5c, 0x32, + 0x4a, 0xf4, 0x59, 0xe5, 0x63, 0xbc, 0xe7, 0x88, + 0x1d, 0x8d, 0xdf, 0x39, 0xdf, 0x63, 0x59, 0x7d, + 0x44, 0x48, 0x2a, 0x14, 0xe8, 0xfb, 0xb9, 0x0d, + 0x1a, 0x78, 0xcd, 0xdb, 0xb4, 0xf8, 0x6b, 0x09, + 0xc3, 0xfd, 0x52, 0xc3, 0xda, 0x26, 0xaf, 0xbb, + 0x22, 0x66, 0x72, 0x1e, 0xc9, 0x26, 0x7d, 0x5f, + 0x10, 0x8e, 0x6c, 0x7e, 0x5b, 0xcf, 0x67, 0x9f, + 0x24, 0xb5, 0xaf, 0xad, 0x76, 0x09, 0xbd, 0x0d, + 0x3a, 0x23, 0x1a, 0x6a, 0x37, 0x11, 0x4e, 0x4d, + 0x2b, 0xb5, 0x80, 0xe1, 0x61, 0xaf, 0xa8, 0xd5, + 0x5a, 0xc3, 0x56, 0xd4, 0xb2, 0x51, 0xe8, 0x1e, + 0x23, 0x4e, 0x77, 0xe0, 0xae, 0xa0, 0x5c, 0x7a, + 0xbf, 0x18, 0xf1, 0x39, 0xd2, 0xa4, 0x45, 0x49, + 0xff, 0x92, 0xe0, 0xd4, 0x60, 0x0e, 0xee, 0x74, + 0xf3, 0x65, 0x4a, 0x29, 0x91, 0x31, 0x27, 0x4a, + 0x3d, 0x11, 0x15, 0xee, 0x8f, 0x77, 0x1b, 0x28, + 0x6b, 0xb6, 0xc9, 0xc5, 0x7c, 0x85, 0xda, 0x5e, + 0x5e, 0x93, 0xb8, 0x8c, 0x12, 0xc5, 0x35, 0xce, + 0x3f, 0xee, 0x5c, 0x54, 0x73, 0xbd, 0xbc, 0xde, + 0x46, 0x68, 0x9d, 0x7b, 0x62, 0xd0, 0x3c, 0xb8, + 0x6d, 0x38, 0x82, 0x6e, 0xc0, 0xfe, 0x0a, 0x5e, + 0x7c, 0x98, 0x43, 0x25, 0xda, 0x66, 0xdf, 0x85, + 0x87, 0xc7, 0x96, 0xb2, 0xfb, 0x8e, 0x13, 0xe8, + 0xab, 0xd7, 0x7c, 0x25, 0x15, 0xf8, 0xaa, 0xa1, + 0xe1, 0x5c, 0x2f, 0x2f, 0xe9, 0x71, 0x58, 0x21, + 0xf5, 0x51, 0xea, 0xf9, 0xb2, 0xf6, 0x8a, 0xf2, + 0xb4, 0xe1, 0x08, 0x3e, 0x3f, 0xb0, 0xdf, 0x47, + 0xa1, 0xb1, 0x83, 0x68, 0x79, 0xa3, 0x5d, 0x2b, + 0x31, 0xdf, 0x25, 0x56, 0x52, 0xa7, 0x98, 0xeb, + 0xe4, 0x4a, 0xcd, 0xb7, 0xdf, 0x1a, 0x00, 0x2b, + 0x8c, 0x56, 0x80, 0x5d, 0x82, 0x1a, 0xba, 0x43, + 0xda, 0x14, 0x5a, 0x78, 0x03, 0x74, 0x0a, 0xa0, + 0xbf, 0x19, 0xc1, 0xfa, 0xc1, 0xef, 0xaa, 0x97, + 0x97, 0x66, 0x5f, 0xaf, 0x63, 0xd6, 0x83, 0xaf, + 0x5f, 0x0c, 0x9a, 0x4c, 0x96, 0x7e, 0x7d, 0x96, + 0xd7, 0xda, 0xa4, 0x97, 0xd7, 0x9e, 0xd8, 0x9c, + 0x4c, 0xb7, 0x3a, 0xbd, 0x3c, 0x9e, 0xfb, 0xfc, + 0x4f, 0x79, 0xda, 0x94, 0xd6, 0xfd, 0xbd, 0x99, + 0xe4, 0x87, 0x95, 0xf7, 0x2a, 0x09, 0x2b, 0x82, + 0xbe, 0xed, 0x2e, 0x6c, 0x2d, 0x5c, 0x4a, 0x3e, + 0x40, 0xa4, 0x38, 0x97, 0xc8, 0xa4, 0xfb, 0x3e, + 0xfa, 0xdd, 0xf4, 0xf2, 0xfa, 0x06, 0x98, 0x71, + 0x94, 0xad, 0xb6, 0x99, 0x42, 0xe6, 0xa4, 0x96, + 0x11, 0x7c, 0x26, 0x90, 0x1e, 0x37, 0x6e, 0xa9, + 0xf4, 0x8f, 0x16, 0xa6, 0xdd, 0xe1, 0x6c, 0xa3, + 0xd9, 0xf0, 0x91, 0xca, 0x48, 0xc6, 0x3e, 0x9a, + 0x3d, 0x33, 0x8f, 0x49, 0x09, 0xa2, 0x5c, 0x10, + 0xd6, 0x48, 0x27, 0x1a, 0x78, 0x48, 0x30, 0xdb, + 0x05, 0x4c, 0x01, 0x0e, 0xd0, 0x3e, 0x69, 0x76, + 0xee, 0x1c, 0x87, 0xa8, 0x9c, 0xff, 0xe6, 0x7f, + 0x8e, 0x33, 0xaf, 0x3b, 0x85, 0xd0, 0x96, 0x4f, + 0x1b, 0xce, 0x34, 0xe4, 0xed, 0xbd, 0x93, 0x72, + 0x10, 0x2b, 0xa7, 0xc3, 0x61, 0xd2, 0xfc, 0x03, + 0xc7, 0x1f, 0xee, 0xba, 0x88, 0xb2, 0x0f, 0x44, + 0x4b, 0x2e, 0xc9, 0xd0, 0x0d, 0x4e, 0x7d, 0x66, + 0xde, 0xa4, 0x11, 0x73, 0x68, 0x9c, 0xd3, 0xef, + 0x10, 0x2c, 0x78, 0xac, 0x81, 0xd4, 0x9e, 0x34, + 0x93, 0xda, 0x72, 0x33, 0x49, 0x3f, 0xda, 0x30, + 0xd1, 0x34, 0xcd, 0x4e, 0xb9, 0x78, 0x1c, 0x89, + 0x75, 0xb7, 0x51, 0x9c, 0x8c, 0x17, 0x67, 0x01, + 0xa1, 0x0a, 0xb9, 0x8f, 0x52, 0xa3, 0x48, 0x85, + 0x29, 0x96, 0x2f, 0xed, 0xb4, 0xbf, 0x5d, 0x82, + 0x5f, 0xc2, 0x87, 0x94, 0x34, 0x5d, 0x72, 0xa5, + 0xcc, 0xf0, 0x07, 0xf3, 0xee, 0xce, 0xff, 0xfd, + 0x52, 0x95, 0xf0, 0xde, 0xcf, 0xad, 0x17, 0xbf, + 0x5d, 0xd0, 0x56, 0xda, 0x95, 0x15, 0xfb, 0xe6, + 0x7d, 0xbb, 0xf6, 0x87, 0xf7, 0x57, 0x21, 0x6f, + 0x46, 0x07, 0x20, 0x23, 0x27, 0x58, 0xa1, 0xd3, + 0x02, 0xd3, 0x60, 0x4a, 0x6e, 0xa0, 0x41, 0x22, + 0x72, 0x55, 0x5c, 0xa6, 0xfa, 0xeb, 0x79, 0xdb, + 0xdd, 0x7c, 0x52, 0x10, 0xe6, 0x1f, 0xcb, 0x25, + 0x94, 0x14, 0xff, 0xee, 0xfc, 0xf0, 0x1a, 0x5a, + 0x05, 0x4b, 0x8d, 0xf5, 0x67, 0xfe, 0xa8, 0xcb, + 0xdf, 0x1c, 0xdc, 0x3e, 0x22, 0xaa, 0x18, 0x77, + 0x4f, 0x97, 0x79, 0xbd, 0xca, 0x5d, 0x9c, 0xd8, + 0x35, 0x98, 0x50, 0x2a, 0x1b, 0x13, 0x32, 0xde, + 0x01, 0x49, 0xbc, 0x78, 0xe7, 0xfa, 0x76, 0xf1, + 0xf2, 0xc1, 0xf1, 0xb4, 0x8b, 0x90, 0x0e, 0x05, + 0x3f, 0x3a, 0xa4, 0xda, 0x93, 0x6d, 0x6d, 0xe2, + 0x4b, 0x88, 0x7a, 0x67, 0x2c, 0x91, 0xbb, 0x9c, + 0xe2, 0xd2, 0xcc, 0x91, 0xf1, 0xaa, 0xee, 0xb1, + 0xd8, 0x4f, 0xbe, 0x3a, 0x9f, 0x96, 0xa7, 0xce, + 0xc1, 0x83, 0x24, 0x65, 0x4c, 0xaf, 0xce, 0xaa, + 0x5c, 0xfe, 0x94, 0x44, 0xc7, 0xad, 0x83, 0xec, + 0xdc, 0x99, 0x38, 0x03, 0x0b, 0x27, 0x9c, 0xa2, + 0x69, 0xd1, 0xfa, 0xc3, 0x71, 0x98, 0x67, 0xc6, + 0x99, 0xe6, 0xd6, 0x9a, 0xcc, 0x14, 0x22, 0x13, + 0xbe, 0x06, 0x18, 0x2d, 0x77, 0x98, 0xe4, 0xf3, + 0x09, 0xf4, 0xe3, 0xa7, 0x5a, 0x88, 0x99, 0x5f, + 0x05, 0x4b, 0x76, 0x30, 0xb4, 0x7b, 0x0b, 0xb3, + 0x90, 0x27, 0x25, 0x3c, 0x75, 0xe6, 0x8d, 0x3e, + 0x1f, 0xab, 0xc5, 0xd9, 0xd0, 0xf6, 0x69, 0x13, + 0xd5, 0x93, 0x39, 0xba, 0x47, 0xf6, 0xf3, 0xe3, + 0xbf, 0x0f, 0xe3, 0xca, 0xe9, 0xed, 0xd4, 0xd9, + 0x13, 0xa4, 0xb3, 0x8f, 0xff, 0x18, 0xd2, 0xac, + 0x0f, 0x3f, 0x2a, 0xef, 0x9f, 0xa9, 0x17, 0x0e, + 0x69, 0x50, 0xed, 0xbf, 0xf4, 0xe6, 0xd1, 0xcc, + 0xfe, 0xd8, 0xac, 0xfb, 0xa5, 0x91, 0x3a, 0x4b, + 0xbc, 0x89, 0xd7, 0x24, 0xec, 0xb1, 0x48, 0x59, + 0x39, 0x83, 0x05, 0x72, 0xfc, 0xd4, 0x9f, 0xfa, + 0xe1, 0xfc, 0x37, 0x64, 0x66, 0x52, 0xfa, 0x6c, + 0xc0, 0xf9, 0xea, 0x67, 0x33, 0x7d, 0x46, 0x1f, + 0x1c, 0x9b, 0x45, 0x19, 0xf2, 0x93, 0xf2, 0xea, + 0x0b, 0x9e, 0xcc, 0xf1, 0xf4, 0x7b, 0xd3, 0x18, + 0xe3, 0xda, 0xd3, 0xcc, 0x6c, 0x7a, 0xc7, 0xfa, + 0xfe, 0xa2, 0x0b, 0xe4, 0x29, 0xfb, 0xaf, 0xd3, + 0xa7, 0xe1, 0xf3, 0xe3, 0x2c, 0xf9, 0xe4, 0xd7, + 0x9c, 0x35, 0xd6, 0xaa, 0x0e, 0xea, 0x3f, 0xeb, + 0x8f, 0x9f, 0xef, 0xce, 0xac, 0x3f, 0x91, 0xe7, + 0x58, 0xd4, 0x98, 0x14, 0xb1, 0xd8, 0x9d, 0x98, + 0x44, 0xc9, 0xb5, 0x28, 0x78, 0x72, 0x14, 0x58, + 0x5e, 0xeb, 0xe8, 0x31, 0x4e, 0x52, 0xe3, 0x6a, + 0xb1, 0x11, 0xc4, 0x7c, 0xf3, 0x05, 0x31, 0xc3, + 0x1e, 0xc3, 0x79, 0x52, 0xe0, 0xb4, 0x32, 0x0e, + 0xe7, 0x39, 0xb4, 0x38, 0x74, 0x01, 0x8b, 0x55, + 0x4e, 0xf5, 0xeb, 0x59, 0xe3, 0x99, 0x49, 0xcf, + 0x16, 0xbf, 0xe3, 0x7e, 0x6f, 0x38, 0x54, 0x38, + 0x91, 0x92, 0xb6, 0x8f, 0xd5, 0x94, 0xa9, 0x69, + 0x2a, 0x33, 0x5f, 0xd3, 0xc9, 0x50, 0x7d, 0x26, + 0xb2, 0xe6, 0xc8, 0xa1, 0x1f, 0xec, 0x67, 0x48, + 0x3e, 0x7e, 0x46, 0x48, 0x98, 0x99, 0xe7, 0x24, + 0x55, 0x6b, 0xbc, 0x90, 0xd7, 0xc1, 0x32, 0x24, + 0x9a, 0xb6, 0xf3, 0xe0, 0x58, 0x9e, 0xfc, 0xdb, + 0xc2, 0xd6, 0x7e, 0x20, 0xe4, 0x26, 0xde, 0x30, + 0x61, 0x68, 0x0c, 0x99, 0xfd, 0x08, 0x68, 0x2f, + 0x7d, 0xff, 0xa7, 0x60, 0x76, 0xa9, 0x29, 0x8d, + 0xdd, 0xee, 0x1e, 0x11, 0xd5, 0x88, 0x95, 0x6d, + 0x3c, 0xaf, 0x09, 0x25, 0x5f, 0x89, 0x8c, 0x6e, + 0x6a, 0x41, 0xc3, 0x48, 0x97, 0xa9, 0x08, 0xb3, + 0x94, 0x31, 0x4b, 0x42, 0xcb, 0xfd, 0xa4, 0xf4, + 0xe7, 0xf1, 0x9b, 0xc8, 0xe4, 0x22, 0x64, 0x18, + 0xb4, 0x5a, 0x14, 0x45, 0x23, 0x48, 0xc1, 0x11, + 0x3f, 0x8c, 0x69, 0x17, 0x59, 0xe5, 0xd4, 0xb8, + 0xe0, 0x3b, 0x63, 0x63, 0xef, 0x03, 0xa3, 0x8c, + 0xd6, 0x9f, 0x71, 0x74, 0xc4, 0xea, 0x52, 0xa1, + 0x17, 0x12, 0xad, 0xaf, 0x83, 0xe6, 0xe8, 0x27, + 0xcf, 0x9f, 0x7c, 0xf3, 0x4f, 0x79, 0x1c, 0xcc, + 0x8a, 0xd6, 0xfa, 0x6b, 0x7f, 0x6a, 0x1a, 0x80, + 0x1f, 0xc4, 0xb0, 0x80, 0x1e, 0x86, 0x62, 0x43, + 0x2b, 0x2e, 0xf4, 0x0f, 0xad, 0x5c, 0x07, 0x4a, + 0x75, 0xc0, 0xf7, 0xaa, 0x17, 0x85, 0xce, 0xa9, + 0xd2, 0x10, 0xae, 0xaa, 0xf2, 0x17, 0x68, 0x70, + 0xe0, 0xe0, 0x29, 0xfb, 0xec, 0xfc, 0xaf, 0xfe, + 0xe2, 0x33, 0xa3, 0x2a, 0x80, 0x5e, 0x6a, 0xbe, + 0x83, 0x1e, 0xfa, 0x5b, 0x1d, 0xf1, 0x90, 0x77, + 0xcd, 0xbf, 0x89, 0x4d, 0x44, 0x73, 0xb4, 0x1f, + 0x3c, 0x21, 0xda, 0x46, 0x5a, 0x9c, 0x94, 0x9e, + 0xeb, 0x5e, 0x0d, 0x2f, 0x4a, 0x9a, 0x3f, 0xdd, + 0x52, 0x3b, 0xb7, 0xca, 0xba, 0xa2, 0x37, 0xf7, + 0xcc, 0xb9, 0x33, 0x23, 0x5d, 0x74, 0x6e, 0x7f, + 0xf2, 0x94, 0x3b, 0xfe, 0x14, 0xe1, 0x93, 0x32, + 0xdc, 0x47, 0x37, 0x4d, 0x46, 0xae, 0x5a, 0x4a, + 0xce, 0xac, 0x0f, 0x40, 0x73, 0xb2, 0x59, 0x35, + 0x89, 0x79, 0xe5, 0xca, 0x15, 0xa8, 0x0f, 0x72, + 0xfc, 0x95, 0x62, 0x4a, 0x48, 0x65, 0xe1, 0x7f, + 0x10, 0x03, 0x7c, 0x9e, 0x58, 0xde, 0x83, 0x8c, + 0xa2, 0x16, 0x7b, 0xe2, 0x19, 0xd0, 0xf5, 0x99, + 0x53, 0x0a, 0x93, 0x63, 0x4d, 0x46, 0xab, 0x39, + 0x84, 0x44, 0x60, 0x6b, 0xfa, 0xe6, 0x26, 0xb8, + 0x0a, 0xf5, 0xd3, 0x1b, 0xee, 0x6d, 0xcd, 0x1c, + 0x18, 0xdd, 0xdf, 0x9d, 0x76, 0xf1, 0xfb, 0x8a, + 0xa5, 0x31, 0xe5, 0xc9, 0x72, 0x7f, 0x9b, 0x38, + 0x9b, 0x7c, 0x30, 0x77, 0x06, 0x59, 0xba, 0x53, + 0x92, 0x6b, 0xba, 0x61, 0xfd, 0xe6, 0x25, 0xba, + 0xa8, 0x7a, 0x40, 0xd4, 0xc7, 0x8b, 0xed, 0x96, + 0x53, 0xa5, 0xbf, 0xff, 0xe0, 0x0a, 0x3e, 0xdc, + 0xef, 0xea, 0xc7, 0xd5, 0xc5, 0x46, 0x12, 0xcf, + 0x36, 0x5d, 0x62, 0xb6, 0x5c, 0x98, 0x5a, 0xa0, + 0xa8, 0x1a, 0x01, 0xb7, 0x76, 0xc5, 0xac, 0xd4, + 0x3f, 0x79, 0x5a, 0xd6, 0x5f, 0xb0, 0x44, 0x95, + 0x2d, 0x69, 0xe0, 0xd8, 0xe3, 0x84, 0xf5, 0xa4, + 0xcf, 0xa2, 0x68, 0x27, 0x9d, 0xd4, 0x26, 0x31, + 0xe0, 0x49, 0x28, 0x2f, 0x3a, 0xcc, 0xda, 0x2c, + 0x2f, 0x3d, 0xcd, 0x29, 0x1c, 0x2d, 0x33, 0xbd, + 0xa3, 0x76, 0x8b, 0x7e, 0x70, 0x68, 0xe7, 0xf6, + 0x56, 0x25, 0xa7, 0x76, 0xda, 0xb3, 0x98, 0xa5, + 0xde, 0xde, 0x9c, 0x2d, 0x1d, 0x51, 0xa7, 0xbb, + 0xe7, 0x73, 0x9d, 0x8c, 0x66, 0x74, 0xfb, 0xae, + 0xce, 0x43, 0x59, 0x57, 0x9a, 0x3e, 0x6b, 0xfc, + 0xd1, 0x00, 0x85, 0xe9, 0x07, 0xe6, 0x03, 0x42, + 0xa2, 0xc9, 0x78, 0x53, 0x0b, 0x55, 0xb0, 0xf8, + 0x1b, 0xca, 0xaa, 0xd5, 0xbd, 0x99, 0xe6, 0xc6, + 0x57, 0xaa, 0xb7, 0x0e, 0x2d, 0x63, 0x73, 0x07, + 0x93, 0x82, 0x6d, 0x8c, 0x2d, 0xd8, 0x30, 0xf4, + 0xcd, 0x84, 0x17, 0x3d, 0xf3, 0xf2, 0x29, 0x82, + 0xed, 0x43, 0x7a, 0xc7, 0x04, 0x1b, 0x85, 0xb2, + 0x58, 0xff, 0x66, 0x29, 0xa3, 0x1e, 0x21, 0xf6, + 0xcf, 0x65, 0x1a, 0xdb, 0xd7, 0x88, 0x4e, 0x80, + 0x37, 0x6d, 0xab, 0x9c, 0xe9, 0xcc, 0x0c, 0xa7, + 0xe5, 0x70, 0x9f, 0xde, 0x8e, 0x08, 0xc1, 0x7c, + 0x88, 0xdf, 0x02, 0x52, 0x71, 0xfd, 0x35, 0xf4, + 0x89, 0xd0, 0xc0, 0x83, 0xcd, 0x66, 0xe6, 0xbe, + 0x8d, 0xaa, 0xce, 0x6e, 0x46, 0x4b, 0x17, 0x68, + 0xe2, 0xcf, 0x30, 0x28, 0x51, 0x05, 0x69, 0x7e, + 0x64, 0x2b, 0x16, 0xfd, 0xee, 0xa5, 0x5e, 0x3e, + 0xcb, 0x6e, 0x5d, 0x7d, 0xe9, 0x1e, 0x8a, 0xae, + 0x5c, 0xb5, 0x71, 0xbd, 0xc9, 0x66, 0xde, 0xe8, + 0x18, 0xc9, 0xfb, 0x7b, 0xd4, 0xce, 0xe6, 0xdc, + 0x3f, 0x5b, 0xf0, 0xa5, 0xbd, 0xb4, 0x55, 0xb7, + 0xe0, 0x59, 0x0a, 0x58, 0x16, 0xb3, 0xde, 0xd4, + 0x02, 0x35, 0x7b, 0x6e, 0x40, 0xc4, 0x2e, 0x4a, + 0x50, 0xcf, 0x66, 0x7f, 0xae, 0xc1, 0xad, 0x03, + 0x6a, 0x5a, 0x53, 0xa0, 0x9a, 0x29, 0xaa, 0x90, + 0x76, 0x6f, 0xfc, 0x19, 0xf9, 0x26, 0x1d, 0x4b, + 0xfd, 0x2c, 0x81, 0x56, 0x87, 0xc2, 0xd0, 0x50, + 0xae, 0xcf, 0xd7, 0xf0, 0x27, 0x67, 0xa6, 0xe0, + 0xd0, 0x48, 0x22, 0x05, 0x71, 0x3f, 0x98, 0x0b, + 0xec, 0xb4, 0xbb, 0x3d, 0x8d, 0x4f, 0xb3, 0x69, + 0xb3, 0x06, 0x53, 0xd5, 0x02, 0xaa, 0x08, 0x93, + 0x6b, 0x9b, 0x92, 0x15, 0xaf, 0xcc, 0xee, 0xd9, + 0x83, 0x3d, 0xda, 0x46, 0xda, 0x32, 0x4a, 0x0c, + 0x42, 0xcd, 0xe1, 0xac, 0x76, 0x43, 0xab, 0x45, + 0x38, 0x73, 0x66, 0xc1, 0x0d, 0xa1, 0x96, 0x96, + 0x11, 0x67, 0x2e, 0x9b, 0xfd, 0xb3, 0x00, 0x14, + 0x0e, 0x57, 0x0e, 0x5c, 0x67, 0x11, 0x17, 0xf8, + 0x9e, 0xb2, 0xbc, 0x2a, 0xb3, 0x25, 0x6a, 0x33, + 0x2c, 0x2f, 0x35, 0x31, 0xbd, 0x24, 0xb8, 0x64, + 0xaa, 0x9c, 0x58, 0xbf, 0x5f, 0x7a, 0x9c, 0x85, + 0xec, 0x10, 0x77, 0x6f, 0x96, 0xb2, 0x56, 0x8d, + 0xd8, 0x2c, 0xce, 0xa6, 0xba, 0xe3, 0x22, 0xe1, + 0x0c, 0x6d, 0x84, 0xb6, 0x46, 0x9c, 0xb9, 0xfd, + 0xaf, 0xb8, 0x23, 0x4a, 0x17, 0x0f, 0x8e, 0xec, + 0xb7, 0x7e, 0xe5, 0x2f, 0xfd, 0x05, 0x78, 0x81, + 0xcc, 0x47, 0x72, 0x4b, 0xf2, 0x45, 0x38, 0xf3, + 0xb6, 0xd3, 0x9a, 0x33, 0x44, 0x59, 0x44, 0xe0, + 0xa9, 0xe4, 0xe3, 0x7b, 0xe5, 0xf6, 0x6d, 0xf1, + 0x32, 0x7f, 0x95, 0xfe, 0x79, 0x89, 0xc1, 0xcb, + 0x2d, 0xf7, 0x34, 0xd7, 0xb6, 0xfa, 0x0e, 0x67, + 0x9b, 0x99, 0x38, 0xbb, 0x30, 0xec, 0x6d, 0xc1, + 0x8f, 0xb5, 0x28, 0x35, 0x3d, 0x43, 0x73, 0x4b, + 0x40, 0xbb, 0xe3, 0xba, 0x7c, 0x7d, 0x71, 0x80, + 0x38, 0xeb, 0xd3, 0x1b, 0x1b, 0x67, 0x70, 0x66, + 0x1c, 0xce, 0x58, 0x36, 0xce, 0x3e, 0x80, 0x67, + 0x1f, 0xe5, 0x6e, 0x1a, 0xbc, 0xf8, 0x22, 0x1d, + 0x7a, 0xf7, 0x46, 0x20, 0x78, 0x8c, 0xcf, 0x9f, + 0xaa, 0x8a, 0x2e, 0xab, 0x42, 0x9c, 0x18, 0x0c, + 0x6f, 0x96, 0xf2, 0x38, 0xeb, 0x2d, 0xc6, 0x99, + 0xc8, 0x69, 0x53, 0x0a, 0xe6, 0x60, 0x65, 0xf2, + 0xa6, 0x96, 0x9f, 0x92, 0x76, 0xe2, 0x85, 0xa0, + 0xff, 0x3c, 0xce, 0xa0, 0xd9, 0xe3, 0xae, 0x71, + 0x4d, 0x26, 0xce, 0x44, 0xc1, 0xa0, 0x79, 0x47, + 0xf1, 0x7e, 0x2b, 0x96, 0x96, 0x3c, 0xf7, 0x20, + 0x0c, 0x06, 0xbb, 0x68, 0x6d, 0x4d, 0x14, 0x70, + 0x51, 0x0f, 0xa0, 0x87, 0x4b, 0xbc, 0xe1, 0xac, + 0x4b, 0xdd, 0x80, 0xe5, 0x6c, 0x9c, 0x2d, 0x37, + 0xb8, 0x93, 0x67, 0xb5, 0x86, 0xd7, 0x51, 0x75, + 0x34, 0xe5, 0xca, 0x0c, 0x86, 0xe3, 0xa4, 0xf2, + 0x88, 0x19, 0x97, 0x15, 0xc7, 0xd2, 0xce, 0x5c, + 0xa6, 0xc7, 0x99, 0xcc, 0xb1, 0x99, 0x17, 0xa4, + 0x6a, 0x37, 0xb3, 0xdb, 0xe3, 0x76, 0x22, 0x27, + 0x24, 0xdf, 0x42, 0xd0, 0xe1, 0x9e, 0x79, 0x9c, + 0x01, 0xfb, 0xbd, 0xf4, 0x58, 0x1e, 0x67, 0x8a, + 0x6f, 0xa8, 0x5c, 0xbb, 0xe3, 0xbc, 0xa3, 0x02, + 0x75, 0xfe, 0x70, 0xf9, 0x99, 0xc7, 0xbb, 0xb5, + 0x84, 0x62, 0x78, 0x39, 0x04, 0x5d, 0x6f, 0x3a, + 0x9c, 0xd9, 0xfc, 0x22, 0x9c, 0xdd, 0xf4, 0xef, + 0x52, 0xf3, 0x22, 0x88, 0xa2, 0xa6, 0xdc, 0xd5, + 0x55, 0xde, 0xa2, 0xde, 0x37, 0xac, 0xf0, 0xa9, + 0x5f, 0xdf, 0xf5, 0x16, 0x8b, 0x14, 0xbd, 0x27, + 0xac, 0xe3, 0x70, 0x56, 0xde, 0xce, 0xc2, 0x59, + 0xe1, 0x5e, 0x6f, 0x4b, 0x3e, 0x53, 0x5b, 0xbd, + 0x83, 0x38, 0x23, 0x86, 0x26, 0xbd, 0xb1, 0xd1, + 0x92, 0xe7, 0x05, 0x43, 0xea, 0x49, 0x32, 0x38, + 0xf7, 0xc4, 0x1f, 0x2e, 0x5c, 0x99, 0x7b, 0x39, + 0x4b, 0x90, 0x67, 0x36, 0xe3, 0x0d, 0xb4, 0x4e, + 0x9e, 0x3d, 0x3b, 0x62, 0x4e, 0x9e, 0x39, 0x63, + 0x2c, 0xc6, 0x19, 0xf5, 0x0b, 0xea, 0x85, 0xce, + 0x22, 0x5e, 0xaf, 0xe2, 0x07, 0x5a, 0x5c, 0xcf, + 0xbf, 0xd1, 0x2d, 0x23, 0xbd, 0x56, 0x57, 0x85, + 0xa1, 0x5f, 0x6e, 0x09, 0x58, 0xfc, 0xba, 0xda, + 0xb6, 0x72, 0x4d, 0xf3, 0x42, 0xa3, 0xc3, 0x30, + 0x18, 0xef, 0x86, 0x36, 0x24, 0xac, 0x2c, 0xa0, + 0xd9, 0x68, 0x45, 0x59, 0x66, 0x68, 0xc1, 0x40, + 0xa3, 0xaf, 0xde, 0x22, 0x79, 0xc6, 0xd9, 0x14, + 0xb4, 0xd4, 0x34, 0x0f, 0x71, 0x06, 0x65, 0x13, + 0xa2, 0xb6, 0xac, 0x4e, 0xf2, 0x8c, 0xdc, 0x3d, + 0x87, 0xb3, 0xd7, 0xd3, 0x38, 0x13, 0xcc, 0xe1, + 0xcc, 0x54, 0xeb, 0xcc, 0xea, 0x77, 0x51, 0x6f, + 0x2a, 0x8e, 0x16, 0x5b, 0x2b, 0x58, 0xa3, 0x07, + 0x13, 0x9c, 0xe5, 0x26, 0x14, 0xf5, 0xf8, 0xcd, + 0xb6, 0x8b, 0x71, 0xa6, 0xde, 0xd1, 0x3a, 0xb8, + 0x31, 0x34, 0x91, 0xb6, 0x37, 0x3b, 0xee, 0x8f, + 0x4d, 0x4c, 0x14, 0x23, 0x34, 0x38, 0x79, 0x86, + 0xc6, 0xfb, 0x22, 0x9c, 0xb5, 0x3d, 0xce, 0x70, + 0x3e, 0xb7, 0x75, 0xd0, 0x9b, 0xc4, 0x75, 0x72, + 0x65, 0xb7, 0x12, 0x1e, 0x8c, 0x6b, 0xf1, 0x7c, + 0xde, 0xc0, 0x47, 0xd5, 0xf3, 0x06, 0x87, 0xab, + 0xc1, 0x90, 0x99, 0x67, 0x33, 0x04, 0x8c, 0x2f, + 0x31, 0x88, 0x0b, 0x34, 0x8d, 0xc3, 0x19, 0xcd, + 0xec, 0x6f, 0xc6, 0xbd, 0x7c, 0xc4, 0x5f, 0xe5, + 0x5e, 0x6f, 0x5e, 0xf7, 0xda, 0xc9, 0xdc, 0xf4, + 0xf2, 0xac, 0x1c, 0xcd, 0x27, 0x38, 0xed, 0x66, + 0x7d, 0xf5, 0xbd, 0x61, 0xaf, 0x52, 0x7c, 0x66, + 0x9d, 0x84, 0x1f, 0xc9, 0xb3, 0x56, 0xff, 0xff, + 0x99, 0xbb, 0x9a, 0x18, 0x37, 0x8f, 0xf3, 0x3c, + 0x33, 0x1c, 0x52, 0xc3, 0x15, 0x23, 0x0d, 0xd7, + 0x0b, 0x81, 0x36, 0x54, 0x61, 0x76, 0x2d, 0xa8, + 0x1b, 0x40, 0x40, 0x3f, 0x0b, 0x42, 0xa1, 0x06, + 0x32, 0x30, 0xbb, 0xda, 0xa8, 0x74, 0xa0, 0x02, + 0xb4, 0xdb, 0xc3, 0xaa, 0xc8, 0xe1, 0x5b, 0xd5, + 0x07, 0xa5, 0xf0, 0x41, 0xbd, 0xa9, 0xb7, 0xe1, + 0x9a, 0x16, 0x28, 0x77, 0x0f, 0x94, 0x02, 0x14, + 0x9b, 0x36, 0x07, 0xc6, 0xf5, 0xc1, 0xc7, 0x4d, + 0x6b, 0x14, 0x4e, 0x90, 0x03, 0x23, 0x08, 0x85, + 0x7a, 0x13, 0x9a, 0x1e, 0xd4, 0x9e, 0xd4, 0xc2, + 0x07, 0xf5, 0xa6, 0x04, 0x3d, 0xec, 0x2f, 0xb7, + 0xf3, 0xbe, 0x33, 0xdf, 0x1f, 0xf9, 0x7d, 0x5c, + 0xae, 0xac, 0x14, 0xe1, 0x41, 0x12, 0xc5, 0x8f, + 0xc3, 0xf9, 0x79, 0xe6, 0xfd, 0x99, 0xf7, 0x9d, + 0xe7, 0x55, 0xae, 0x31, 0xfb, 0xda, 0xb5, 0x38, + 0xeb, 0x22, 0x9b, 0x8a, 0xfd, 0xa0, 0x04, 0xd3, + 0xc0, 0x5f, 0x92, 0x73, 0x4e, 0x9e, 0x91, 0x77, + 0xc7, 0xa3, 0xd5, 0x11, 0xce, 0x96, 0xc8, 0x69, + 0x0d, 0x7a, 0x33, 0x00, 0x62, 0x9e, 0x2b, 0x0a, + 0xf5, 0x44, 0x6b, 0xd8, 0xa1, 0xa9, 0x22, 0x40, + 0x2b, 0x4e, 0x6f, 0x36, 0x4c, 0x01, 0xce, 0x0c, + 0x45, 0x79, 0xd6, 0x80, 0xad, 0xe8, 0xf5, 0x66, + 0x2a, 0x0b, 0xe0, 0x27, 0x07, 0x11, 0x21, 0x1d, + 0x24, 0xfe, 0x39, 0x79, 0x06, 0xda, 0xc9, 0x1a, + 0x20, 0xbc, 0xc9, 0x73, 0xb2, 0x22, 0xe4, 0x7c, + 0x45, 0xf3, 0x9a, 0x22, 0xaa, 0x5d, 0x23, 0xe5, + 0x4b, 0x10, 0x56, 0x68, 0x30, 0x77, 0x6c, 0xcd, + 0xc9, 0x93, 0x5d, 0x3b, 0x9f, 0x75, 0xab, 0x5a, + 0x2d, 0xce, 0x38, 0xf9, 0x76, 0x80, 0x38, 0x03, + 0x30, 0x35, 0x99, 0x56, 0xf5, 0x62, 0x79, 0x36, + 0x5b, 0xb3, 0x38, 0xa3, 0x17, 0x80, 0xcb, 0xeb, + 0xef, 0x2c, 0xce, 0xd6, 0xff, 0x44, 0x74, 0x49, + 0x3d, 0x75, 0x4d, 0x35, 0x5d, 0xb2, 0x57, 0x90, + 0x35, 0x8d, 0x7c, 0x3f, 0x45, 0x38, 0x2b, 0x61, + 0xe2, 0x7d, 0xe0, 0xd8, 0x52, 0x48, 0xe8, 0x10, + 0xb1, 0x7a, 0x88, 0xf9, 0x23, 0x03, 0x6f, 0xd5, + 0x7f, 0x18, 0xe3, 0x4c, 0xab, 0x13, 0x50, 0x1c, + 0xaf, 0x40, 0x9e, 0x11, 0xf6, 0x3e, 0xd4, 0xd7, + 0x9c, 0xf7, 0x92, 0x54, 0xab, 0x1a, 0x44, 0xff, + 0x82, 0x1d, 0x77, 0xa2, 0xb3, 0x80, 0x3b, 0x00, + 0xbd, 0x1c, 0x87, 0xb3, 0x90, 0x0a, 0x97, 0x06, + 0x97, 0x2b, 0xcf, 0xd4, 0x49, 0xd8, 0x41, 0x1c, + 0xc9, 0x23, 0x57, 0x6d, 0xcf, 0xf8, 0x0d, 0x68, + 0x66, 0x61, 0xc7, 0x3c, 0xd8, 0x72, 0xc7, 0x1d, + 0x27, 0x39, 0xd9, 0x70, 0xab, 0xd9, 0x5d, 0x35, + 0x6c, 0x6d, 0x79, 0xa6, 0x53, 0x0d, 0xea, 0x39, + 0xf2, 0xec, 0x5f, 0x2c, 0xce, 0xc4, 0xb5, 0x16, + 0xd9, 0x30, 0xf4, 0x1d, 0x4a, 0x06, 0xcd, 0xc6, + 0x3c, 0x09, 0xc1, 0x2a, 0x08, 0xe4, 0x93, 0x1d, + 0xbc, 0x52, 0xb0, 0xa5, 0x89, 0xdf, 0x41, 0x0e, + 0x67, 0x4d, 0x76, 0x05, 0xe5, 0x19, 0x29, 0x94, + 0x67, 0x9a, 0x9c, 0xfe, 0x9a, 0x9c, 0x85, 0x8c, + 0xf0, 0x73, 0x80, 0xb3, 0xd3, 0x90, 0xc2, 0x7a, + 0x07, 0x13, 0x66, 0xdc, 0xd5, 0x3b, 0x1a, 0xdb, + 0x67, 0xce, 0x72, 0x14, 0x3a, 0xc8, 0xd7, 0x9b, + 0xee, 0x80, 0x03, 0xc8, 0xd4, 0x84, 0xab, 0x3e, + 0x48, 0x34, 0xa6, 0xea, 0x3c, 0x18, 0xc6, 0xb9, + 0x5a, 0x76, 0xfc, 0xd7, 0x3b, 0x11, 0xce, 0xa8, + 0x9c, 0xe1, 0x24, 0xaf, 0xd2, 0xae, 0x5c, 0xae, + 0xe8, 0xa6, 0xe9, 0x4b, 0x8b, 0xb3, 0x01, 0xc4, + 0x27, 0x06, 0x02, 0xdc, 0x71, 0xbe, 0xb1, 0x65, + 0x9b, 0x69, 0xec, 0x82, 0x1f, 0xe0, 0x4e, 0xf6, + 0xc5, 0xf2, 0x7b, 0x56, 0x6f, 0xae, 0xeb, 0x87, + 0xfc, 0x21, 0x91, 0xa2, 0x06, 0xf6, 0x59, 0x01, + 0xce, 0xb4, 0x9e, 0xad, 0x5a, 0x9c, 0xd5, 0x3f, + 0xd7, 0x3e, 0xb6, 0x0a, 0xd5, 0xea, 0xca, 0xf4, + 0xfb, 0x3b, 0x26, 0x36, 0xf9, 0x15, 0xd6, 0x6e, + 0xb3, 0xd0, 0xb1, 0x7a, 0x11, 0x56, 0x9d, 0x93, + 0x22, 0x9c, 0x11, 0x87, 0xb3, 0xa5, 0x20, 0x73, + 0xa2, 0x2e, 0x9f, 0xed, 0xa2, 0x7d, 0xa6, 0xbc, + 0x50, 0xbc, 0x8d, 0x7a, 0xd3, 0xfa, 0x01, 0x54, + 0xeb, 0x13, 0x21, 0x29, 0xc2, 0x99, 0xf5, 0xe5, + 0x5b, 0x16, 0x67, 0xee, 0x6b, 0x15, 0xd7, 0x18, + 0x55, 0x4a, 0xec, 0x77, 0xbe, 0x1b, 0x3b, 0x5c, + 0xcc, 0x38, 0xbd, 0xc9, 0x36, 0x21, 0x17, 0x7e, + 0x82, 0x7d, 0xc6, 0xc8, 0xb5, 0x26, 0x6c, 0xd4, + 0x9f, 0x7a, 0xed, 0x15, 0xce, 0x11, 0x53, 0xff, + 0x29, 0x39, 0x39, 0xec, 0xdc, 0x0f, 0xc4, 0x99, + 0x81, 0x2b, 0x62, 0x6e, 0xe5, 0x59, 0x50, 0x2f, + 0x0f, 0x84, 0x5d, 0xcd, 0x35, 0x3d, 0xd3, 0x79, + 0x10, 0xc8, 0x1c, 0x9c, 0x5d, 0xff, 0xbc, 0xd3, + 0xa8, 0x97, 0x5a, 0xa4, 0xd6, 0xae, 0x5e, 0x5a, + 0x20, 0x03, 0x7e, 0xd3, 0x36, 0xd6, 0xb1, 0x2d, + 0x5f, 0xa2, 0x37, 0xb7, 0xd1, 0x0f, 0xf8, 0x8d, + 0xb3, 0x8d, 0x4e, 0x08, 0xd0, 0x9b, 0x77, 0x8c, + 0xd5, 0x9b, 0x0d, 0xb0, 0xcf, 0x8a, 0x70, 0x76, + 0x6e, 0x40, 0x97, 0xc9, 0xe9, 0xe7, 0x58, 0x51, + 0x1b, 0x52, 0x5c, 0x41, 0x6f, 0x92, 0xb3, 0xe2, + 0xca, 0x36, 0x27, 0xb1, 0xaa, 0x53, 0xb5, 0x26, + 0xe8, 0x4d, 0xfb, 0xa6, 0xcb, 0x6e, 0xa9, 0x99, + 0xdc, 0xb4, 0x94, 0x45, 0x65, 0x71, 0xd6, 0x20, + 0x2e, 0x95, 0x3a, 0x9d, 0x7d, 0x63, 0x1f, 0xbe, + 0x39, 0xd4, 0xe2, 0x1d, 0xdf, 0x18, 0x12, 0x0b, + 0x5a, 0xbd, 0x19, 0xf2, 0x32, 0xdc, 0x63, 0x3a, + 0xdf, 0xcd, 0x6b, 0x4c, 0xd2, 0x8a, 0x9e, 0x6b, + 0x98, 0x1e, 0xc8, 0x33, 0x09, 0x40, 0x00, 0xd2, + 0xe4, 0xb0, 0x6e, 0x91, 0xfa, 0xa6, 0xea, 0x0f, + 0x83, 0x2a, 0xea, 0x4d, 0x5a, 0xb5, 0x70, 0xbe, + 0xaf, 0xd0, 0x0f, 0xe0, 0xde, 0x0f, 0x30, 0x45, + 0x51, 0x59, 0xad, 0x17, 0x66, 0xc0, 0x11, 0x63, + 0x56, 0x6f, 0x36, 0x66, 0xb5, 0x00, 0x96, 0xfe, + 0xf2, 0xe7, 0xa4, 0xb5, 0x9d, 0xc2, 0x99, 0x72, + 0xf6, 0x19, 0x64, 0x82, 0x10, 0x7a, 0x34, 0xce, + 0x4c, 0x94, 0xfc, 0x81, 0xd7, 0x74, 0xda, 0x81, + 0x5c, 0x75, 0x38, 0x8b, 0xd4, 0xc0, 0x87, 0xde, + 0xdf, 0x7c, 0x42, 0x8b, 0xfc, 0xcd, 0x04, 0x67, + 0x71, 0xa4, 0x44, 0x92, 0x5b, 0x1a, 0xd3, 0x1e, + 0xc5, 0x61, 0xe7, 0xdb, 0x09, 0xf7, 0x8e, 0xc7, + 0x99, 0xd8, 0x24, 0x93, 0xfd, 0x00, 0x46, 0x4a, + 0x50, 0x11, 0xa0, 0xe7, 0x82, 0xb3, 0x14, 0xf4, + 0xbf, 0xf5, 0x34, 0xe9, 0x77, 0xac, 0xde, 0xbc, + 0x54, 0xbd, 0xf0, 0xa8, 0x01, 0xfe, 0xea, 0xbc, + 0xd7, 0x9b, 0x66, 0xb3, 0x8f, 0x7a, 0x73, 0x3e, + 0xd7, 0x0f, 0xb8, 0xfe, 0x59, 0x67, 0x55, 0xbc, + 0xd1, 0xc2, 0x94, 0x33, 0x48, 0x65, 0x6f, 0x54, + 0x43, 0xab, 0xa1, 0x20, 0x11, 0x74, 0xb0, 0x87, + 0x38, 0x7b, 0x09, 0xf5, 0x8a, 0x11, 0x67, 0x53, + 0xf8, 0x01, 0x1e, 0x67, 0x90, 0xe2, 0x0a, 0xda, + 0xf0, 0xd4, 0x00, 0x84, 0xad, 0xc5, 0x99, 0x1a, + 0x1c, 0x72, 0x82, 0xd0, 0x70, 0x85, 0x2f, 0x7d, + 0xcf, 0x9c, 0x1f, 0x90, 0x6b, 0x1e, 0xa0, 0x7d, + 0xd6, 0x70, 0x29, 0x46, 0x08, 0x1d, 0xb8, 0xb9, + 0xb0, 0xe0, 0xac, 0x9d, 0x9b, 0xbb, 0xc4, 0x81, + 0x16, 0x1a, 0x5b, 0xc1, 0xfc, 0x45, 0xa6, 0x59, + 0x87, 0x59, 0xf1, 0xcf, 0xdb, 0xb9, 0x7e, 0x80, + 0xb5, 0xcf, 0x96, 0x21, 0xab, 0xb2, 0x4d, 0x06, + 0x8b, 0x58, 0xb5, 0xf7, 0x46, 0x1f, 0xad, 0x20, + 0x2b, 0x8b, 0xcc, 0xa1, 0x75, 0xf3, 0xea, 0xba, + 0xc7, 0x69, 0xd5, 0xfb, 0x01, 0x66, 0x85, 0x35, + 0xd1, 0x0f, 0x58, 0x01, 0x3e, 0x99, 0x3c, 0x9c, + 0x69, 0xf2, 0x96, 0x95, 0x9d, 0xa0, 0x37, 0xc1, + 0x3e, 0xeb, 0x3e, 0xd4, 0x76, 0x01, 0xe8, 0xe7, + 0xd5, 0x2f, 0x75, 0x38, 0x44, 0xb9, 0xf8, 0xd8, + 0x9b, 0x07, 0xcc, 0xa9, 0x3c, 0xf4, 0x03, 0x44, + 0x11, 0xce, 0x3a, 0x98, 0xd8, 0xa5, 0x90, 0x7f, + 0xd6, 0xe1, 0xcc, 0x6a, 0x04, 0x8b, 0x33, 0xd2, + 0x3c, 0x30, 0x4b, 0x78, 0xae, 0x81, 0x38, 0x13, + 0xb7, 0x01, 0x67, 0x01, 0x71, 0x38, 0xd3, 0x85, + 0xf2, 0xac, 0xd1, 0xb3, 0xda, 0xae, 0xe4, 0xf5, + 0x2a, 0xb2, 0xa9, 0xd6, 0xba, 0xf4, 0x1d, 0xeb, + 0x88, 0xd5, 0xe0, 0xd8, 0x66, 0xe0, 0x82, 0x43, + 0x1b, 0x91, 0x1f, 0x30, 0x8a, 0xb3, 0xe4, 0xaa, + 0x92, 0xf3, 0x37, 0xb5, 0xbb, 0x6e, 0x03, 0x93, + 0xba, 0xbe, 0x09, 0xd7, 0x63, 0xb4, 0xa9, 0x07, + 0xe5, 0xc1, 0x4e, 0x27, 0x08, 0xe8, 0xbd, 0xc1, + 0xf9, 0x06, 0x8c, 0xf0, 0xa2, 0xd3, 0x9b, 0x0d, + 0xef, 0x07, 0xdc, 0x0f, 0x16, 0xc6, 0x58, 0x13, + 0x2d, 0xce, 0xc0, 0xdf, 0x3c, 0xf9, 0x67, 0x64, + 0xa3, 0x4d, 0x21, 0x75, 0x91, 0xdb, 0xa5, 0xbb, + 0xa5, 0x56, 0xac, 0x31, 0x47, 0xee, 0x6c, 0x87, + 0xf4, 0x2a, 0x26, 0x10, 0x7a, 0x3f, 0xc0, 0x36, + 0xf6, 0xd2, 0xf9, 0x01, 0x27, 0x9f, 0xd3, 0xf1, + 0x8a, 0x8d, 0x80, 0xb3, 0x7f, 0x84, 0xc4, 0x2e, + 0x0d, 0xf2, 0xec, 0x5d, 0x6b, 0x9f, 0x69, 0xa8, + 0xf5, 0x68, 0x1f, 0x6e, 0x5f, 0x95, 0x6a, 0xbf, + 0x67, 0x62, 0x68, 0xf8, 0x4a, 0xc6, 0x78, 0xae, + 0xc1, 0x00, 0x67, 0x63, 0x15, 0x1b, 0x05, 0xea, + 0x4d, 0x0b, 0x2d, 0x97, 0xe2, 0x1a, 0x89, 0xa8, + 0x5b, 0x04, 0x13, 0x4d, 0xef, 0xec, 0xc3, 0x84, + 0x57, 0x06, 0xc6, 0xc9, 0x6d, 0x48, 0x1f, 0x04, + 0x62, 0xd6, 0xb2, 0xb5, 0x0b, 0xba, 0xc8, 0x02, + 0x36, 0x1a, 0x56, 0x91, 0xf5, 0x8a, 0x61, 0xa2, + 0x5c, 0x42, 0x79, 0x06, 0xf6, 0xdb, 0x9c, 0x51, + 0xca, 0xaa, 0x9e, 0xb6, 0xa8, 0x4b, 0x75, 0x04, + 0xfb, 0xd3, 0xb1, 0xb2, 0xbc, 0x7e, 0x71, 0xf8, + 0x4a, 0x79, 0x41, 0x64, 0xec, 0x61, 0x3c, 0x9d, + 0xfe, 0x5d, 0xc8, 0xf2, 0x12, 0x33, 0xa3, 0x0f, + 0x2b, 0xa1, 0xae, 0xed, 0x27, 0x5c, 0x5e, 0xd0, + 0x77, 0x8b, 0x54, 0xe5, 0x91, 0x5b, 0xc0, 0xe5, + 0x15, 0x3d, 0x5c, 0x8b, 0x98, 0xd3, 0x65, 0x5c, + 0xaf, 0xe2, 0x27, 0x43, 0x32, 0x16, 0xae, 0x66, + 0x13, 0x83, 0xae, 0xe3, 0x39, 0x2f, 0x3a, 0x02, + 0x75, 0xb8, 0xcf, 0x5f, 0xdf, 0x9c, 0xfd, 0xeb, + 0xee, 0xc8, 0xc8, 0xb9, 0x31, 0xe9, 0x64, 0xb7, + 0xa2, 0x39, 0x23, 0x62, 0x86, 0x2a, 0x5e, 0xce, + 0x4c, 0x30, 0x37, 0xc3, 0xd4, 0xbc, 0xc4, 0x91, + 0xa1, 0x95, 0x29, 0x12, 0x04, 0x54, 0x3a, 0x84, + 0xef, 0x14, 0x99, 0xd8, 0xce, 0x09, 0xb5, 0xb2, + 0xa3, 0x81, 0x4a, 0x33, 0xb1, 0x52, 0x77, 0x86, + 0xef, 0x2b, 0xb7, 0x67, 0x42, 0x87, 0x5c, 0xf9, + 0xcf, 0x79, 0xc1, 0xb9, 0x2a, 0xb2, 0x09, 0x28, + 0x11, 0x2f, 0x93, 0x5e, 0xf2, 0xbb, 0x7a, 0x73, + 0x27, 0xa1, 0x74, 0xa0, 0xe9, 0x9b, 0x95, 0x85, + 0x47, 0xed, 0x98, 0xe0, 0xcd, 0x47, 0x24, 0x9d, + 0xfb, 0xf3, 0xe5, 0xab, 0x56, 0x9e, 0x62, 0xfe, + 0xa2, 0xbc, 0x49, 0xa1, 0x64, 0x24, 0x61, 0xc6, + 0x5f, 0xa2, 0x5d, 0x38, 0x0a, 0x68, 0x22, 0xc5, + 0x17, 0x95, 0x44, 0x89, 0x31, 0x65, 0x4c, 0x40, + 0x06, 0x3b, 0xb2, 0x5b, 0x98, 0xf4, 0x73, 0x26, + 0x27, 0x7a, 0x64, 0x04, 0x67, 0x4b, 0xc0, 0x5a, + 0xbb, 0x20, 0x39, 0xf7, 0x75, 0xcd, 0x48, 0x44, + 0xba, 0xdc, 0x3d, 0x80, 0xf0, 0x1d, 0xab, 0x23, + 0xbf, 0xba, 0x76, 0xe7, 0xe9, 0x75, 0x47, 0x37, + 0x05, 0x57, 0x31, 0xc6, 0xbb, 0xe7, 0xfe, 0xcb, + 0x07, 0xa9, 0x63, 0x06, 0x56, 0xc7, 0xcb, 0x21, + 0x0f, 0x14, 0xa1, 0x7f, 0x4b, 0xff, 0xd0, 0x58, + 0x6b, 0xad, 0xa4, 0xff, 0x7e, 0x6d, 0xb1, 0xdf, + 0x23, 0x97, 0xe7, 0x48, 0xeb, 0xcf, 0x59, 0x40, + 0x43, 0x33, 0xee, 0x55, 0x98, 0x8f, 0x02, 0xfa, + 0xd9, 0x52, 0x4d, 0x92, 0xba, 0x62, 0xb5, 0x32, + 0x10, 0x21, 0x43, 0x04, 0x5e, 0x84, 0xcc, 0x8a, + 0x55, 0xb1, 0xb5, 0xab, 0x66, 0x29, 0x9f, 0xb5, + 0xde, 0x72, 0xe9, 0x9a, 0x5b, 0xf8, 0x6a, 0xbf, + 0xf5, 0x07, 0xf2, 0x07, 0xcb, 0xfd, 0x19, 0x51, + 0x5d, 0x92, 0xa3, 0x3a, 0xdd, 0xbc, 0xbc, 0xb4, + 0x78, 0xef, 0x97, 0x5b, 0xd6, 0x6a, 0xd1, 0x5f, + 0xd5, 0x98, 0x0a, 0x36, 0xa0, 0x68, 0x39, 0x93, + 0xa1, 0xe4, 0xcc, 0x6e, 0x1e, 0x85, 0xab, 0xc9, + 0xa8, 0xf2, 0x14, 0x8e, 0x30, 0x57, 0x52, 0x45, + 0xb1, 0x8c, 0xfa, 0x78, 0x7c, 0x59, 0x0a, 0xb6, + 0x82, 0x33, 0x05, 0x94, 0xb4, 0xd1, 0x25, 0x67, + 0xa9, 0xf1, 0x54, 0x02, 0xa3, 0x3b, 0xca, 0x6d, + 0x21, 0x9a, 0x0a, 0xff, 0xb5, 0x89, 0xc6, 0xeb, + 0x51, 0x63, 0xad, 0x59, 0x8f, 0xaa, 0x8e, 0x61, + 0x60, 0x30, 0x94, 0xca, 0x9c, 0xc7, 0x4b, 0xab, + 0xb9, 0x6c, 0xc6, 0x01, 0x66, 0x93, 0xec, 0x1e, + 0x33, 0x65, 0x08, 0x50, 0xa5, 0xff, 0xb2, 0xeb, + 0x75, 0x77, 0x7b, 0x2c, 0x94, 0x44, 0xa7, 0x10, + 0x66, 0x32, 0x43, 0x66, 0x1c, 0x3d, 0x9e, 0xca, + 0x5a, 0x4d, 0x13, 0xad, 0xf4, 0xc4, 0x84, 0x7d, + 0xae, 0xa3, 0xeb, 0x7c, 0x7c, 0x24, 0x8e, 0x26, + 0xf7, 0x24, 0x91, 0x23, 0x81, 0x3a, 0x73, 0x44, + 0x0e, 0x89, 0xce, 0x6c, 0xfa, 0xb8, 0xaf, 0x86, + 0xfc, 0x78, 0x18, 0xef, 0xf3, 0xb1, 0xae, 0x68, + 0x4a, 0x26, 0x84, 0xe6, 0x93, 0xdd, 0x17, 0x57, + 0xa2, 0x15, 0x87, 0x9e, 0x6f, 0x8e, 0x4c, 0x9f, + 0x08, 0x24, 0x8b, 0x3a, 0xbb, 0xbd, 0x7f, 0x44, + 0x46, 0xcd, 0x31, 0x22, 0xa9, 0xba, 0xe7, 0x88, + 0x74, 0x8e, 0x5d, 0xae, 0x4e, 0xc4, 0x7f, 0x29, + 0x27, 0x8d, 0x60, 0x7c, 0x4f, 0x0f, 0x32, 0x3f, + 0x3a, 0x6d, 0x91, 0x5d, 0x5f, 0x22, 0xbe, 0x9f, + 0x0d, 0x05, 0x36, 0xdd, 0x0d, 0x19, 0xaf, 0x2b, + 0x79, 0x34, 0xf1, 0x47, 0xe4, 0x11, 0x6a, 0xf3, + 0xb8, 0x4a, 0x3c, 0x87, 0x4f, 0xc2, 0x88, 0x06, + 0x3e, 0xfa, 0x38, 0xa0, 0xa4, 0x3a, 0xb2, 0x6b, + 0xb5, 0x64, 0x31, 0x79, 0xdc, 0x99, 0xad, 0xdd, + 0x3c, 0x81, 0x3f, 0x5a, 0x53, 0x6a, 0x8a, 0xd5, + 0x6d, 0xdb, 0x3d, 0x38, 0xd8, 0xcb, 0x3b, 0x9e, + 0x64, 0x47, 0x75, 0xcd, 0x8c, 0xe2, 0x17, 0x33, + 0x55, 0xae, 0xee, 0x8d, 0x61, 0x39, 0xbb, 0xdf, + 0xa6, 0xda, 0xec, 0xbe, 0xcd, 0xde, 0x5e, 0x8a, + 0xc2, 0x68, 0x9a, 0x17, 0x1f, 0x1b, 0xa1, 0x88, + 0xdb, 0x5c, 0xdc, 0xce, 0xf4, 0xea, 0xb8, 0xac, + 0x97, 0x3a, 0x41, 0xb1, 0x95, 0xaf, 0x2f, 0xf7, + 0x46, 0xca, 0xa2, 0x89, 0x23, 0x37, 0x02, 0x2d, + 0xfc, 0xe1, 0x2b, 0x87, 0x69, 0xa3, 0x2c, 0xbb, + 0x5d, 0xfa, 0xb9, 0x1e, 0xff, 0x20, 0x7a, 0x62, + 0x3c, 0x8e, 0x21, 0xf6, 0xd0, 0x48, 0x64, 0x6d, + 0x35, 0x36, 0x0d, 0x47, 0xec, 0x24, 0x22, 0xc7, + 0xd2, 0x0b, 0x36, 0x87, 0x1a, 0x4f, 0xf4, 0x72, + 0x96, 0x54, 0x69, 0x12, 0xf0, 0x1c, 0x48, 0x9c, + 0xa0, 0x45, 0xc3, 0x0c, 0x76, 0xc6, 0x97, 0x0a, + 0x12, 0x4c, 0x18, 0xa4, 0xf2, 0xb0, 0x29, 0x04, + 0x8a, 0x62, 0x51, 0xf7, 0x24, 0xb9, 0xbd, 0xc7, + 0x19, 0xc9, 0xe9, 0x97, 0x28, 0x4a, 0x67, 0x13, + 0x64, 0x74, 0xf1, 0x13, 0x12, 0xbe, 0xef, 0xef, + 0x8e, 0x4b, 0x29, 0x39, 0x51, 0x70, 0xc1, 0x8f, + 0xce, 0x65, 0x8d, 0x43, 0xbf, 0xca, 0xa6, 0xb7, + 0xe7, 0x47, 0x96, 0x57, 0x3a, 0x89, 0x8a, 0x69, + 0xc1, 0xeb, 0xbf, 0xb8, 0x8b, 0xd6, 0xf7, 0x8a, + 0x3f, 0x3b, 0x5f, 0x47, 0xa2, 0x10, 0x9c, 0x07, + 0x97, 0x9b, 0x37, 0xb6, 0x79, 0xa4, 0xa7, 0x6a, + 0x17, 0x8e, 0x18, 0xc6, 0x0b, 0x7f, 0x68, 0xbc, + 0x4c, 0x56, 0xf7, 0xe6, 0x52, 0xfd, 0xe5, 0x4d, + 0x80, 0x09, 0x64, 0xa3, 0x50, 0x95, 0xe2, 0x69, + 0x52, 0x69, 0xb4, 0x1a, 0x32, 0xa7, 0xec, 0xd2, + 0x00, 0xb5, 0xac, 0x49, 0x2a, 0x83, 0xa2, 0x68, + 0x78, 0xb2, 0xa3, 0x83, 0x6a, 0x99, 0x20, 0x8f, + 0xb7, 0x7d, 0xfc, 0x23, 0x88, 0x60, 0x5f, 0x1f, + 0xf0, 0x3f, 0x9e, 0x11, 0x21, 0xe1, 0x9f, 0x10, + 0x95, 0x96, 0x0d, 0x8e, 0x38, 0xac, 0x47, 0xff, + 0x79, 0x7d, 0x7d, 0x16, 0xea, 0x4d, 0xad, 0x90, + 0xb2, 0x8b, 0x90, 0xb4, 0xa4, 0xa4, 0x17, 0x8c, + 0x20, 0x4f, 0xf6, 0x81, 0x90, 0x8b, 0xe9, 0x8b, + 0x82, 0x5c, 0x83, 0xdc, 0xe9, 0xf9, 0x56, 0x75, + 0x83, 0xdc, 0x33, 0xcb, 0xd6, 0x96, 0xa9, 0x7e, + 0x2c, 0xe4, 0xb7, 0x12, 0xf9, 0xeb, 0x72, 0x41, + 0x7e, 0xf5, 0x96, 0xb8, 0xf7, 0x7e, 0x7f, 0x13, + 0xf2, 0xa2, 0x6b, 0x0b, 0xec, 0x4e, 0x4d, 0x19, + 0xd9, 0x92, 0xb3, 0x7a, 0x46, 0xc3, 0xde, 0x84, + 0x9c, 0x3d, 0x3b, 0x0d, 0x5a, 0xc5, 0x19, 0xe9, + 0xa9, 0x54, 0x4f, 0xf7, 0x86, 0x27, 0x96, 0x3c, + 0x5c, 0xfc, 0x92, 0xd6, 0x72, 0x14, 0x92, 0xcc, + 0x43, 0xce, 0xcc, 0x48, 0x2e, 0xfc, 0x93, 0xbd, + 0x18, 0x25, 0x8c, 0xb9, 0x7c, 0xab, 0xf5, 0x48, + 0xf9, 0xe7, 0xa5, 0xd9, 0xb9, 0x7a, 0xc3, 0xd2, + 0xf7, 0xd4, 0x1a, 0x2b, 0x8e, 0xcb, 0xcb, 0xe5, + 0x91, 0xa5, 0x0d, 0x17, 0x28, 0x6f, 0x36, 0xad, + 0xb8, 0xce, 0x41, 0x74, 0x93, 0xbf, 0xc8, 0x98, + 0xee, 0x0b, 0x53, 0x29, 0xdb, 0xec, 0x85, 0x9d, + 0x14, 0xe2, 0xb6, 0xb7, 0x33, 0x1e, 0x4c, 0x7a, + 0xa7, 0xa8, 0xdc, 0xcc, 0x19, 0x15, 0xfd, 0x91, + 0x96, 0x5b, 0x51, 0x51, 0xc0, 0x7d, 0x91, 0x87, + 0x69, 0x33, 0x71, 0x8c, 0xed, 0x6c, 0x1b, 0x68, + 0x26, 0x82, 0x0d, 0xf9, 0x97, 0xc3, 0x39, 0x3d, + 0xe5, 0xd8, 0x46, 0x8c, 0xb1, 0xf8, 0xd7, 0x93, + 0x93, 0xac, 0xcd, 0xed, 0x28, 0xb0, 0x9e, 0xd7, + 0x3f, 0x36, 0xc9, 0xdb, 0x19, 0x99, 0x45, 0xfb, + 0x3f, 0xcf, 0xf6, 0x93, 0xff, 0xe6, 0xa3, 0xd4, + 0x04, 0xc5, 0x83, 0x8d, 0xb6, 0x6d, 0x54, 0x2c, + 0xd0, 0xd9, 0x87, 0xc1, 0x50, 0xe6, 0x74, 0x8a, + 0x4e, 0x5e, 0x49, 0xe9, 0xda, 0x32, 0x71, 0x55, + 0x6a, 0xef, 0xb5, 0x98, 0xc3, 0xcc, 0xcf, 0xcf, + 0xa5, 0xbe, 0x52, 0xd8, 0x62, 0x1f, 0x8f, 0x19, + 0x50, 0xae, 0x67, 0x9f, 0xdd, 0x1e, 0xe6, 0x02, + 0xc8, 0xd1, 0xc2, 0xf1, 0x22, 0xf1, 0x98, 0xa5, + 0xc8, 0x77, 0x18, 0xb2, 0xce, 0x41, 0xf7, 0x30, + 0x67, 0x5e, 0xb1, 0xde, 0xdb, 0xf4, 0x25, 0x86, + 0xe3, 0x2f, 0x89, 0xd8, 0xe1, 0xd7, 0xd3, 0x99, + 0xa1, 0x29, 0x14, 0xf9, 0x89, 0xa3, 0xf1, 0x24, + 0x87, 0xa8, 0x84, 0xcf, 0x5b, 0xb9, 0x34, 0x4f, + 0x6e, 0x67, 0x9a, 0x5b, 0x22, 0xaa, 0x77, 0x4c, + 0x63, 0xc1, 0x1c, 0x1c, 0xb9, 0x7c, 0xd3, 0xbf, + 0xdc, 0x9c, 0x71, 0x1a, 0xc5, 0x68, 0xd2, 0x58, + 0x0f, 0xcd, 0x31, 0x1b, 0x6b, 0x1e, 0xb8, 0x2f, + 0x2e, 0x7e, 0x8f, 0x93, 0xf0, 0x7c, 0x76, 0x5a, + 0xfb, 0xc7, 0x4d, 0xc9, 0x74, 0xd9, 0x84, 0x72, + 0x70, 0xbe, 0x41, 0x47, 0x7a, 0x76, 0x1e, 0x33, + 0x00, 0x8e, 0xf5, 0xba, 0x0b, 0x4e, 0x05, 0x14, + 0xcf, 0x3b, 0xcb, 0xb3, 0x4b, 0x68, 0x77, 0xeb, + 0x60, 0xe9, 0x98, 0x8d, 0x05, 0x08, 0xda, 0x0a, + 0x23, 0x8d, 0x9c, 0x5e, 0x1f, 0x77, 0x59, 0xbe, + 0xda, 0x71, 0x11, 0xb2, 0xe6, 0xa6, 0xc8, 0x0e, + 0x53, 0x2d, 0x10, 0x73, 0xff, 0x98, 0x8d, 0x6d, + 0x41, 0x65, 0xd0, 0xbe, 0xd5, 0x32, 0xb3, 0x70, + 0x6f, 0x17, 0x94, 0x80, 0x89, 0xeb, 0x33, 0x2a, + 0x9a, 0x52, 0x54, 0xd1, 0xde, 0xe5, 0xeb, 0x47, + 0xe2, 0x2c, 0x26, 0x6c, 0x35, 0x47, 0x8a, 0xa0, + 0x09, 0x56, 0xfd, 0x1d, 0x8f, 0x33, 0xb0, 0x06, + 0x7c, 0x0e, 0x4d, 0xcc, 0x91, 0x62, 0xe8, 0xb4, + 0x8a, 0x29, 0x5a, 0x80, 0x6d, 0xb4, 0x11, 0x07, + 0x60, 0x37, 0x84, 0x7e, 0x53, 0x46, 0xf0, 0x32, + 0xdf, 0xcd, 0xfb, 0xc6, 0xa7, 0xc5, 0x3d, 0xfb, + 0x4f, 0x80, 0x86, 0x3c, 0x33, 0x80, 0x21, 0x41, + 0x63, 0x40, 0xeb, 0xf4, 0x28, 0x2a, 0xca, 0x9c, + 0x17, 0xfa, 0x96, 0xf5, 0x33, 0x85, 0x8d, 0x01, + 0x39, 0x64, 0xcd, 0x9c, 0xf8, 0xb5, 0x3a, 0x85, + 0x97, 0xb1, 0x9e, 0xe3, 0x15, 0x71, 0x2f, 0x40, + 0x72, 0xa3, 0x3b, 0x35, 0x73, 0xa2, 0x70, 0x9c, + 0xb7, 0xd1, 0x72, 0xac, 0x3c, 0xf2, 0x38, 0xcb, + 0x94, 0xc4, 0xcc, 0x9f, 0x33, 0x55, 0x29, 0xec, + 0xd9, 0x7f, 0xec, 0x62, 0xcf, 0x07, 0xcb, 0x8d, + 0x2a, 0x06, 0x16, 0x1f, 0x60, 0xcb, 0xbe, 0xb1, + 0x07, 0x79, 0x72, 0x8c, 0x16, 0x37, 0x06, 0xd5, + 0xee, 0x3b, 0x7d, 0xfd, 0x70, 0xe1, 0x2d, 0x87, + 0xb3, 0x56, 0xb2, 0x00, 0x55, 0x95, 0x27, 0xb6, + 0x79, 0x7b, 0xb6, 0xb0, 0xad, 0x38, 0xa3, 0xbc, + 0x31, 0x8e, 0x2c, 0x6e, 0xf2, 0x4e, 0xf2, 0x05, + 0x2f, 0xd4, 0xa6, 0x83, 0xfd, 0xe4, 0x6b, 0xe1, + 0xc8, 0x54, 0xdf, 0xca, 0x6d, 0x4c, 0x96, 0x48, + 0xf1, 0x02, 0xa0, 0xce, 0x82, 0xd0, 0x1b, 0x09, + 0x97, 0x3c, 0x75, 0x98, 0xe3, 0xef, 0xbb, 0xd8, + 0xcf, 0x53, 0xa9, 0x70, 0xe8, 0x55, 0xd4, 0xd8, + 0x0b, 0xe8, 0x59, 0xfd, 0x0c, 0xcd, 0xf4, 0xcc, + 0x35, 0xb2, 0xd1, 0xad, 0x8f, 0x29, 0x98, 0xb2, + 0x5d, 0x4c, 0x59, 0x08, 0x8d, 0x67, 0x7b, 0x08, + 0x9d, 0x3b, 0x70, 0xe9, 0x41, 0x40, 0x7b, 0x34, + 0x0e, 0xb3, 0x9c, 0x4e, 0xc9, 0xb3, 0x24, 0xee, + 0x54, 0x9b, 0x20, 0x98, 0xee, 0x62, 0x12, 0x78, + 0x05, 0x23, 0xb7, 0x24, 0x7b, 0x4a, 0x51, 0xf8, + 0xb5, 0xc2, 0x23, 0xe1, 0xbb, 0x07, 0x88, 0xb3, + 0x47, 0x3e, 0x80, 0xad, 0x79, 0xc2, 0x95, 0xb9, + 0x91, 0x93, 0x34, 0x29, 0x48, 0xc1, 0x05, 0xd1, + 0xd8, 0xab, 0xeb, 0xd8, 0x79, 0x20, 0x1e, 0x67, + 0x30, 0x21, 0xfe, 0x58, 0xa3, 0x9a, 0x92, 0x67, + 0x89, 0x7d, 0x7a, 0xbe, 0x5d, 0x6c, 0xf1, 0x7e, + 0x84, 0xd0, 0xa8, 0xe4, 0x52, 0x32, 0xe7, 0xe0, + 0x4c, 0xc0, 0x9d, 0x56, 0x3e, 0x69, 0x07, 0x20, + 0x3d, 0x44, 0x23, 0x59, 0x4d, 0x9f, 0xa9, 0x07, + 0x65, 0x91, 0x47, 0x17, 0x80, 0x82, 0xcc, 0x2d, + 0x6c, 0x4c, 0x0d, 0xed, 0x47, 0x7d, 0x3b, 0x4c, + 0x48, 0xe3, 0x9b, 0x77, 0x41, 0xb9, 0xa7, 0x9e, + 0x27, 0xd2, 0xbc, 0x97, 0x3d, 0xad, 0x41, 0x65, + 0xc1, 0x45, 0xb1, 0xa8, 0xfd, 0xd3, 0x5d, 0xb0, + 0xae, 0x94, 0xd5, 0x9b, 0xae, 0x67, 0x00, 0x0b, + 0x97, 0x22, 0x41, 0x94, 0xa1, 0x39, 0x1b, 0xa7, + 0x37, 0xa1, 0xea, 0x45, 0xfd, 0x00, 0x8b, 0x1b, + 0xff, 0xda, 0xdf, 0x60, 0xc1, 0x91, 0xbe, 0x74, + 0x1f, 0x9d, 0x78, 0x31, 0x16, 0xbb, 0xb0, 0xc3, + 0x6c, 0xf4, 0x8a, 0x71, 0xd6, 0x1a, 0xa6, 0xa1, + 0xe5, 0xcc, 0xa4, 0x1c, 0x9c, 0x25, 0x51, 0x87, + 0x60, 0xc2, 0x49, 0xca, 0x1f, 0xed, 0x03, 0xce, + 0xa2, 0x8c, 0x28, 0xac, 0x30, 0x4b, 0xb4, 0x53, + 0x6c, 0x1b, 0x9d, 0x07, 0x64, 0x34, 0x76, 0x51, + 0x25, 0x72, 0xa1, 0x78, 0xce, 0xa0, 0xd4, 0x34, + 0x27, 0xd7, 0x63, 0x9c, 0xc1, 0x93, 0xbd, 0x71, + 0x9c, 0x25, 0x75, 0x01, 0xe6, 0x26, 0x68, 0x66, + 0xc7, 0x68, 0x5a, 0x88, 0xb3, 0xb8, 0x62, 0x23, + 0x9b, 0x42, 0x6d, 0xba, 0x32, 0x09, 0x06, 0x70, + 0x26, 0x5c, 0x82, 0x21, 0xfc, 0x80, 0xf2, 0x38, + 0x5b, 0xca, 0x91, 0x67, 0x57, 0x27, 0x58, 0xa8, + 0xb7, 0x0f, 0x85, 0xc3, 0x19, 0x98, 0x54, 0x9e, + 0x40, 0xfb, 0xa9, 0x3f, 0x20, 0x4d, 0x99, 0x54, + 0xc9, 0xbd, 0xff, 0xf3, 0x13, 0x7a, 0x76, 0x69, + 0x1b, 0x12, 0xec, 0xd4, 0x2f, 0x85, 0xc7, 0x19, + 0x4f, 0x29, 0xed, 0x1e, 0xa5, 0xa3, 0x85, 0xdc, + 0xe0, 0xce, 0x4f, 0xb1, 0xde, 0x5c, 0x1d, 0x22, + 0x06, 0x5e, 0xea, 0x08, 0x67, 0x34, 0xc1, 0x19, + 0xe8, 0x4d, 0x3a, 0x3a, 0x97, 0xb5, 0x6e, 0xb1, + 0xde, 0x1c, 0xec, 0xf2, 0x0c, 0xce, 0x46, 0xe5, + 0x19, 0x1b, 0x93, 0x61, 0x13, 0xe6, 0x6c, 0x07, + 0x88, 0x5b, 0x13, 0x9c, 0xa1, 0x37, 0x14, 0x85, + 0xfb, 0x01, 0x67, 0x7c, 0xb4, 0x67, 0x66, 0x82, + 0xe5, 0x02, 0xc6, 0x9e, 0xd5, 0x9b, 0x03, 0x06, + 0x38, 0x9b, 0x43, 0x86, 0x4c, 0xd2, 0x73, 0xdd, + 0x69, 0xa7, 0x70, 0x96, 0x34, 0x70, 0x79, 0x02, + 0xce, 0x9a, 0xce, 0xdf, 0x7c, 0xac, 0x52, 0x40, + 0x1b, 0xa8, 0x31, 0x79, 0x96, 0xf6, 0x3c, 0x8b, + 0x35, 0xba, 0x8f, 0xd5, 0x3d, 0x87, 0xac, 0x8a, + 0xbb, 0xd2, 0xd9, 0x67, 0xbe, 0x8d, 0x12, 0x5f, + 0xca, 0xd9, 0x87, 0x67, 0x45, 0xb1, 0x3c, 0x5b, + 0xdd, 0x45, 0xfb, 0xec, 0xdf, 0x01, 0x67, 0x91, + 0xef, 0x35, 0x70, 0x96, 0xe6, 0x27, 0xb9, 0x87, + 0xbb, 0x97, 0x27, 0xf4, 0xec, 0x7b, 0xb0, 0x9d, + 0xa8, 0xa6, 0x0b, 0x58, 0x3b, 0xf7, 0x22, 0xae, + 0xd5, 0xc0, 0x75, 0xe7, 0xa2, 0xbb, 0x50, 0x38, + 0xe2, 0x46, 0x1b, 0x72, 0xa1, 0xb0, 0xb1, 0x27, + 0x20, 0xcf, 0xa0, 0x78, 0x1e, 0x83, 0x38, 0xd9, + 0xe9, 0xaf, 0x61, 0xa6, 0xef, 0xb8, 0x7e, 0x9c, + 0xfa, 0xef, 0x3c, 0x9b, 0x73, 0x12, 0xce, 0x5e, + 0x0e, 0x49, 0x6c, 0x0f, 0xa8, 0xac, 0xaa, 0xc4, + 0x37, 0xe3, 0xe1, 0x53, 0x51, 0x3c, 0xcc, 0x9f, + 0x1d, 0x82, 0x3c, 0xd3, 0xc4, 0x67, 0x81, 0x39, + 0x93, 0xcc, 0xad, 0xe6, 0x0d, 0xc0, 0x19, 0x1d, + 0x77, 0x83, 0x75, 0xe1, 0x02, 0x3c, 0x47, 0xfb, + 0x4c, 0x0e, 0x84, 0xc5, 0x99, 0x58, 0x20, 0xaa, + 0x83, 0xbb, 0x9a, 0x81, 0xa5, 0xd3, 0x9e, 0xe7, + 0x74, 0x3c, 0x2b, 0xe2, 0xcb, 0x6e, 0xf1, 0x49, + 0xc0, 0xe0, 0x30, 0x8b, 0xb3, 0x82, 0xf3, 0x0b, + 0x11, 0x9f, 0xcd, 0x06, 0x13, 0xa4, 0x86, 0x2f, + 0x14, 0xf2, 0xd2, 0xd3, 0x62, 0x7a, 0xd5, 0xe9, + 0x4a, 0x00, 0x7f, 0x68, 0x72, 0xcc, 0x83, 0xb3, + 0x13, 0xf6, 0xa6, 0xd9, 0xc5, 0x14, 0x9f, 0x7f, + 0x03, 0xd0, 0xda, 0xed, 0xd3, 0xc7, 0x70, 0xfc, + 0x3a, 0x76, 0xe4, 0x93, 0xbe, 0xcc, 0x91, 0x1a, + 0x7c, 0xc2, 0xc1, 0xfc, 0xaf, 0x40, 0x09, 0x6b, + 0xce, 0x17, 0x7d, 0xc6, 0x3a, 0xfa, 0x11, 0xe2, + 0x26, 0x2e, 0x00, 0xbc, 0x89, 0xea, 0xd4, 0x91, + 0x44, 0x9e, 0x15, 0x0b, 0xee, 0xbf, 0xda, 0xf3, + 0x7c, 0x6e, 0x0c, 0x73, 0xe9, 0x07, 0x58, 0xd1, + 0xd6, 0x8d, 0xe5, 0xd4, 0x23, 0x4a, 0xa2, 0x8a, + 0x8d, 0x91, 0xa5, 0x40, 0x21, 0x9b, 0xa8, 0x60, + 0x35, 0x6b, 0x44, 0xa4, 0xca, 0x58, 0x59, 0x1d, + 0x60, 0x68, 0x62, 0x2d, 0xa7, 0x41, 0x97, 0xe2, + 0x43, 0x9e, 0x80, 0xb3, 0xf7, 0x11, 0x67, 0xca, + 0x25, 0x18, 0x52, 0xe7, 0x62, 0x0e, 0xf8, 0x8f, + 0x04, 0xe2, 0xec, 0x7e, 0x8e, 0x46, 0x27, 0xe4, + 0x7a, 0xe1, 0x0e, 0x68, 0x1e, 0x42, 0x7e, 0x1a, + 0x91, 0xdc, 0xe2, 0xac, 0xb9, 0x14, 0x93, 0x97, + 0xc3, 0x6b, 0x69, 0xb1, 0x93, 0xd3, 0x33, 0x3e, + 0xe1, 0x48, 0xa1, 0xbf, 0x4b, 0x52, 0xf5, 0xd5, + 0x0b, 0x5f, 0x69, 0x42, 0x97, 0xe2, 0x61, 0x02, + 0x59, 0x47, 0xe0, 0xa7, 0x29, 0x94, 0x19, 0x57, + 0x20, 0x0f, 0x67, 0xd5, 0x89, 0x3a, 0xe0, 0xe9, + 0xb6, 0x00, 0xa5, 0xcb, 0x9b, 0x9b, 0x0c, 0xe6, + 0xcc, 0xe3, 0xcc, 0xc9, 0xb3, 0x94, 0x1f, 0x90, + 0x26, 0xa4, 0xbe, 0x57, 0x7c, 0x3e, 0x04, 0x54, + 0xec, 0x4c, 0x11, 0x90, 0x67, 0xa1, 0x20, 0xa6, + 0x9e, 0x28, 0xa0, 0x1b, 0xeb, 0xef, 0xe5, 0x35, + 0x56, 0x2d, 0x96, 0x67, 0xb7, 0xed, 0x46, 0xbf, + 0xda, 0xa5, 0x97, 0x23, 0x9c, 0x81, 0xd8, 0xf6, + 0xb4, 0x73, 0xa7, 0x06, 0x89, 0xde, 0xec, 0xa5, + 0xfc, 0x80, 0x62, 0x79, 0x46, 0xf6, 0x38, 0xf0, + 0x41, 0x62, 0x70, 0x27, 0xcc, 0xfa, 0x9b, 0xb5, + 0x9c, 0x8a, 0x8d, 0x93, 0x71, 0xb6, 0x08, 0x0b, + 0x00, 0xda, 0x1c, 0x86, 0x19, 0x1f, 0x65, 0x50, + 0x12, 0xe1, 0x6c, 0xa4, 0x62, 0x23, 0xb7, 0xd6, + 0x73, 0xb1, 0x3c, 0x7b, 0xfa, 0x7a, 0x73, 0xa9, + 0x5e, 0xb9, 0x62, 0xe3, 0xf8, 0xc3, 0xad, 0xbd, + 0xff, 0xff, 0x9e, 0x25, 0x76, 0xe3, 0xa4, 0x87, + 0x7f, 0x7e, 0x10, 0x19, 0x02, 0x34, 0xbe, 0xe4, + 0x6a, 0xd2, 0xa1, 0xfb, 0x9c, 0xe6, 0x0a, 0x7b, + 0x36, 0x38, 0x88, 0x3e, 0x6d, 0xba, 0x63, 0x25, + 0xb7, 0x91, 0x9b, 0x08, 0x02, 0x93, 0xd3, 0x33, + 0x48, 0x0e, 0x29, 0x9c, 0xb3, 0xc3, 0xa9, 0x4f, + 0x7a, 0x8e, 0x7e, 0xfd, 0xe8, 0x30, 0xc5, 0x62, + 0x26, 0xa8, 0xe2, 0xee, 0xcd, 0xfb, 0xc0, 0xbe, + 0xbd, 0xa8, 0x8e, 0x39, 0x67, 0x50, 0xca, 0xb0, + 0x48, 0xfe, 0x88, 0xe3, 0xf6, 0xec, 0xca, 0xe1, + 0x6b, 0x85, 0x46, 0x6a, 0xaa, 0xe8, 0x34, 0x14, + 0x35, 0xb2, 0xf8, 0x11, 0x31, 0xcc, 0x4e, 0xfe, + 0x37, 0x4a, 0xba, 0x7b, 0x72, 0x58, 0xa4, 0x58, + 0xc5, 0xf1, 0x1b, 0x7b, 0xba, 0x93, 0x7b, 0xe0, + 0xff, 0x6a, 0xaf, 0xde, 0x61, 0x52, 0x3e, 0x6a, + 0x5e, 0x46, 0xc9, 0x7a, 0x13, 0x63, 0xf3, 0x74, + 0x36, 0x6d, 0x47, 0x26, 0x8e, 0x2a, 0x8d, 0xea, + 0x54, 0xb8, 0xa9, 0xd5, 0xe9, 0xba, 0x2b, 0xf2, + 0xc8, 0x70, 0x42, 0x8e, 0x42, 0x89, 0x82, 0xc9, + 0x82, 0xfc, 0x5e, 0x48, 0xbe, 0x76, 0xcd, 0x70, + 0x32, 0x21, 0x60, 0x47, 0x17, 0x52, 0xda, 0x2e, + 0xde, 0x30, 0x70, 0x93, 0xe5, 0xd9, 0xd0, 0x31, + 0x79, 0x40, 0x14, 0x73, 0x0d, 0xef, 0x46, 0xce, + 0xa4, 0x94, 0x64, 0x6b, 0x26, 0x67, 0x36, 0x19, + 0x1d, 0x3b, 0xcf, 0x55, 0xc4, 0x95, 0x64, 0xda, + 0x89, 0x72, 0xe5, 0x24, 0x51, 0x72, 0x74, 0x15, + 0xc7, 0x0f, 0x0a, 0xa8, 0xaf, 0x72, 0x99, 0x1d, + 0xe9, 0x0c, 0xec, 0xa2, 0x79, 0xd2, 0xcd, 0xe6, + 0x86, 0x8a, 0x6f, 0xb4, 0x03, 0xee, 0x0f, 0x7f, + 0x0b, 0xdb, 0xe9, 0xf5, 0x35, 0x36, 0x56, 0x8f, + 0x8e, 0x39, 0x19, 0x98, 0x66, 0xc3, 0x8a, 0x1e, + 0x98, 0x04, 0xe8, 0x2b, 0xc3, 0x74, 0x55, 0xad, + 0x68, 0x5e, 0x95, 0xcb, 0x94, 0x8d, 0xa8, 0x9e, + 0x5a, 0xd4, 0x91, 0x80, 0x2d, 0x1e, 0x01, 0xc0, + 0x67, 0xaf, 0x77, 0xce, 0x5e, 0x6b, 0x72, 0xee, + 0x14, 0x45, 0x5d, 0xa7, 0x7d, 0x35, 0xf6, 0xc6, + 0x85, 0x8e, 0xc9, 0x6b, 0x51, 0x4d, 0xd1, 0x98, + 0xcb, 0xbe, 0xc9, 0xfa, 0x6d, 0x32, 0xdd, 0x28, + 0xd7, 0x53, 0x08, 0x12, 0xff, 0x0a, 0x0f, 0x93, + 0x26, 0x54, 0xb6, 0x57, 0x91, 0xbf, 0xef, 0x2c, + 0x5e, 0x44, 0xc9, 0x11, 0x21, 0xb2, 0xfe, 0x70, + 0x4c, 0xcb, 0x7e, 0x83, 0xed, 0xb4, 0x5f, 0xa8, + 0xe4, 0xf8, 0xb1, 0x05, 0x6e, 0x6f, 0x2f, 0x75, + 0x38, 0x3f, 0x72, 0x48, 0xbc, 0x70, 0xdc, 0xc6, + 0xee, 0xec, 0x65, 0x66, 0x42, 0xa7, 0x57, 0x81, + 0x1d, 0x57, 0x5b, 0x7d, 0x31, 0x69, 0x07, 0x44, + 0x36, 0xe8, 0xb4, 0xb5, 0x24, 0x9f, 0xe5, 0x52, + 0x96, 0xc9, 0x9c, 0xd5, 0x90, 0x47, 0xdb, 0x34, + 0x5f, 0xfd, 0xb6, 0xe5, 0xd9, 0x2b, 0x97, 0x87, + 0xf6, 0x71, 0x74, 0x96, 0x91, 0x41, 0x94, 0xe4, + 0x19, 0x6d, 0xf2, 0x08, 0x45, 0x17, 0x2f, 0x40, + 0x7c, 0x4b, 0x9a, 0x1e, 0x85, 0xdc, 0x49, 0xdd, + 0x8e, 0x33, 0x49, 0x54, 0x72, 0xf1, 0x35, 0xd3, + 0x4b, 0x33, 0xe2, 0xbb, 0x4e, 0xc2, 0x4a, 0x77, + 0x6f, 0x04, 0xf9, 0x6c, 0x0c, 0x19, 0xd3, 0x1b, + 0x20, 0xdb, 0x07, 0xaf, 0xc3, 0xfc, 0x89, 0xe4, + 0xd9, 0x71, 0x6b, 0x7d, 0x4f, 0x92, 0x98, 0x9b, + 0xbb, 0x98, 0x52, 0xbc, 0x84, 0xd5, 0x07, 0x65, + 0xaa, 0xa0, 0x60, 0xb2, 0xd1, 0x93, 0x83, 0x2a, + 0x3b, 0x95, 0xed, 0xd4, 0x4c, 0xa8, 0xb8, 0x7d, + 0xe1, 0x8e, 0xab, 0x9f, 0x6f, 0x27, 0xe6, 0x07, + 0x2b, 0xfa, 0x5d, 0x13, 0x37, 0xaa, 0xbd, 0xc5, + 0x60, 0xf2, 0x2d, 0xfd, 0x1d, 0x62, 0x84, 0x21, + 0x6f, 0x03, 0x5d, 0x61, 0x49, 0x39, 0x1f, 0x5d, + 0x3b, 0x93, 0x9d, 0xe9, 0xc8, 0xd9, 0x77, 0x9e, + 0xfb, 0x29, 0xdb, 0x54, 0x68, 0x6a, 0xea, 0x4b, + 0x96, 0x14, 0xda, 0x33, 0xae, 0x65, 0xa9, 0x50, + 0xd3, 0x5a, 0xc3, 0x45, 0x40, 0x62, 0x56, 0xb3, + 0x0a, 0xd7, 0xb5, 0x05, 0xa4, 0xbf, 0x2f, 0xfb, + 0x5c, 0x29, 0xa4, 0xd6, 0x1e, 0x35, 0xe9, 0x96, + 0x09, 0xe7, 0x74, 0xb5, 0x9e, 0x0c, 0x14, 0xd2, + 0x4a, 0xda, 0x21, 0x54, 0x8f, 0xb2, 0x6f, 0x76, + 0x5d, 0x96, 0x17, 0xa6, 0xfa, 0xe3, 0x9c, 0x75, + 0x26, 0x9a, 0x74, 0x66, 0x7c, 0x83, 0x30, 0x43, + 0x66, 0x34, 0xda, 0x9c, 0x5f, 0xe4, 0xd6, 0xf8, + 0x63, 0x7e, 0x01, 0x68, 0xce, 0x0a, 0x02, 0x31, + 0x6b, 0x12, 0x86, 0x8a, 0xa9, 0xf1, 0xe1, 0xcd, + 0x16, 0x34, 0x26, 0xea, 0x13, 0x57, 0x7e, 0x24, + 0xd5, 0xb0, 0x5e, 0x7c, 0x7e, 0xb6, 0x37, 0x75, + 0xa2, 0xea, 0x91, 0xba, 0xc6, 0x04, 0x87, 0x9e, + 0xd1, 0xd5, 0x2d, 0x79, 0xbf, 0x9c, 0x1e, 0x33, + 0xf5, 0x1c, 0x54, 0x6a, 0x3c, 0xad, 0x3d, 0xf7, + 0x35, 0x83, 0x3b, 0xa0, 0x1c, 0x4d, 0xae, 0x2a, + 0xec, 0x8f, 0x8c, 0x93, 0x80, 0x26, 0x74, 0x6d, + 0x27, 0x07, 0x7b, 0x47, 0xec, 0xe9, 0xea, 0xa4, + 0xe3, 0x9b, 0xdf, 0x4d, 0x33, 0xf4, 0xe7, 0xe3, + 0x22, 0xe8, 0xd5, 0x1d, 0xeb, 0xee, 0xe1, 0xc8, + 0x2c, 0xd1, 0xd4, 0xbf, 0x60, 0xb2, 0xa3, 0x6a, + 0x7a, 0x11, 0x91, 0x8f, 0x9e, 0x20, 0xee, 0xbe, + 0x72, 0x25, 0x33, 0xed, 0x8e, 0x60, 0x64, 0xb4, + 0xe0, 0xb0, 0xf6, 0x7b, 0x82, 0xf9, 0x84, 0x2f, + 0x9e, 0x27, 0x80, 0x33, 0x73, 0xb6, 0x7f, 0xdc, + 0xb1, 0x98, 0x63, 0x49, 0xda, 0x6f, 0xb4, 0x9a, + 0x4e, 0xbe, 0xae, 0xb7, 0xec, 0x1e, 0x98, 0x87, + 0x7b, 0x03, 0x73, 0xab, 0x92, 0x55, 0x9d, 0xa7, + 0x37, 0xe6, 0x22, 0xf7, 0xed, 0xc3, 0x73, 0x8d, + 0x26, 0x5b, 0x71, 0xe9, 0xa7, 0xd8, 0xcb, 0xb7, + 0xe0, 0x8f, 0x8d, 0x05, 0xce, 0x41, 0x6c, 0x9b, + 0x5c, 0x91, 0xc3, 0x30, 0x0e, 0x3c, 0x8a, 0x77, + 0x63, 0xb2, 0x5b, 0x43, 0xc5, 0x27, 0xc4, 0xd0, + 0x4c, 0x63, 0x18, 0x1d, 0x80, 0xe2, 0xdd, 0x25, + 0x9c, 0xe7, 0x01, 0x91, 0x83, 0x12, 0x85, 0x7a, + 0x26, 0x63, 0x2f, 0x88, 0xb8, 0xf1, 0x2d, 0x78, + 0x6e, 0x15, 0xda, 0xb9, 0xea, 0xc9, 0x87, 0x08, + 0x39, 0x0d, 0x45, 0x2e, 0x5c, 0x4a, 0xbf, 0xc6, + 0x1c, 0xbe, 0x70, 0xc6, 0xfd, 0xee, 0x63, 0xd6, + 0x9e, 0x74, 0x59, 0x4c, 0xa2, 0xef, 0xdd, 0x8c, + 0x31, 0x84, 0xc3, 0xfc, 0x96, 0x21, 0xc1, 0x52, + 0x6f, 0xc7, 0xcc, 0x63, 0xf2, 0xb5, 0x6d, 0x8f, + 0xb2, 0x2e, 0x7c, 0x79, 0x30, 0x58, 0x97, 0xfc, + 0x6d, 0x3c, 0xdc, 0x35, 0xa3, 0xc3, 0xc4, 0xab, + 0x29, 0x7d, 0x3b, 0x8c, 0x7f, 0x40, 0xfc, 0xa5, + 0x38, 0x4b, 0x34, 0x0d, 0x98, 0xda, 0x01, 0x96, + 0x32, 0x57, 0x5f, 0xe5, 0xae, 0xc2, 0x4a, 0x0c, + 0x25, 0xac, 0x94, 0x47, 0x49, 0x55, 0xe4, 0x5c, + 0xed, 0xb5, 0x0f, 0x97, 0x3a, 0xf6, 0x61, 0x57, + 0xf4, 0x02, 0x3f, 0x77, 0xd5, 0x1c, 0x18, 0xad, + 0xa9, 0xfe, 0x01, 0xb6, 0x04, 0xf9, 0x09, 0x2c, + 0x74, 0x18, 0xad, 0x60, 0x61, 0x24, 0x5f, 0x45, + 0x37, 0xa7, 0x67, 0xc0, 0x15, 0xc1, 0x0d, 0x52, + 0xb7, 0x04, 0xe9, 0x4f, 0x02, 0x21, 0xa1, 0xb4, + 0x04, 0x0e, 0x93, 0xe8, 0xd0, 0x7d, 0xf7, 0xc2, + 0xa3, 0x45, 0xcd, 0xdf, 0xa0, 0x48, 0xad, 0x49, + 0x73, 0x10, 0x7b, 0x61, 0xd9, 0xee, 0x31, 0x81, + 0x7a, 0x20, 0x55, 0x48, 0x04, 0xca, 0x9a, 0xdc, + 0xde, 0x4d, 0x44, 0xbc, 0xa0, 0xd1, 0x81, 0x1e, + 0x63, 0x44, 0xcc, 0xa5, 0x1b, 0x8a, 0x82, 0xb7, + 0x97, 0x2c, 0xce, 0xf8, 0x6c, 0x73, 0xdd, 0xa7, + 0x39, 0x6f, 0xc9, 0x58, 0x6f, 0x28, 0xce, 0xab, + 0xbf, 0x38, 0x48, 0xed, 0x0f, 0x39, 0xf5, 0x66, + 0xe2, 0xb9, 0xe9, 0xc9, 0xab, 0xfb, 0x61, 0xfc, + 0x76, 0x35, 0x21, 0xed, 0x83, 0x9f, 0x3d, 0x91, + 0xe7, 0x1d, 0x41, 0x77, 0xbf, 0x4c, 0x70, 0x96, + 0x88, 0x1a, 0xfb, 0x89, 0xf8, 0x22, 0xb5, 0x37, + 0x17, 0x23, 0x54, 0xa1, 0xc7, 0x5b, 0x17, 0x45, + 0x1d, 0xd3, 0xf0, 0x6d, 0xc4, 0x99, 0x11, 0xf1, + 0x88, 0x60, 0xce, 0xfe, 0x69, 0xdf, 0x94, 0xa3, + 0xc9, 0x09, 0xeb, 0x11, 0x5b, 0x4c, 0x8b, 0x17, + 0xe4, 0x4c, 0xc1, 0x6a, 0xea, 0x2f, 0x40, 0xa8, + 0xb5, 0x46, 0x14, 0xab, 0xa6, 0x6a, 0xe6, 0x67, + 0x7b, 0x49, 0x2e, 0x57, 0xc3, 0xc7, 0x72, 0x02, + 0x7d, 0x0a, 0x68, 0x2b, 0xab, 0x79, 0x5d, 0x03, + 0x9c, 0x19, 0x80, 0x12, 0xce, 0xba, 0xe3, 0x8c, + 0x1b, 0xb8, 0xf4, 0xd0, 0x1a, 0xb1, 0x3b, 0x20, + 0x55, 0x55, 0xae, 0xe6, 0x43, 0xd7, 0x58, 0x9f, + 0x49, 0x14, 0xf4, 0xac, 0xf2, 0x99, 0x33, 0x95, + 0x52, 0x38, 0xa3, 0xee, 0x93, 0xff, 0xda, 0x4f, + 0x35, 0x36, 0xb3, 0xe1, 0xfe, 0xb1, 0xdc, 0x14, + 0x24, 0x64, 0x9c, 0xe6, 0xcf, 0x59, 0x45, 0x03, + 0xe1, 0x81, 0xc3, 0x99, 0x4b, 0xd2, 0x2a, 0x79, + 0xa5, 0x6b, 0x6d, 0x5a, 0x77, 0xb3, 0x93, 0x5d, + 0x23, 0x3f, 0x20, 0xdf, 0xb5, 0xeb, 0x54, 0x39, + 0xf3, 0x90, 0x83, 0x55, 0xb4, 0x9c, 0x27, 0xcf, + 0x90, 0x43, 0x42, 0x36, 0xdf, 0x2a, 0x5b, 0x9c, + 0x29, 0xa0, 0x98, 0x93, 0x8c, 0x98, 0xb0, 0x8e, + 0x38, 0xbb, 0x4c, 0x5f, 0xa4, 0x6e, 0xc8, 0x84, + 0x5e, 0xa4, 0x19, 0x4d, 0x22, 0xa2, 0x6a, 0x99, + 0xd7, 0x35, 0xee, 0x4b, 0x07, 0x89, 0x48, 0x06, + 0x3a, 0x93, 0x2f, 0x50, 0x77, 0xac, 0x3c, 0x0b, + 0xa2, 0xeb, 0xab, 0x0a, 0x36, 0xae, 0x39, 0xd1, + 0x86, 0xf4, 0x02, 0x06, 0x38, 0x53, 0x39, 0x38, + 0x83, 0xcb, 0xed, 0x0d, 0xc0, 0x19, 0x14, 0xcf, + 0x83, 0xc1, 0x72, 0xa0, 0x61, 0x23, 0x50, 0x28, + 0x4d, 0xef, 0x46, 0xe0, 0xa2, 0x3a, 0xa4, 0x37, + 0xb8, 0x95, 0x3a, 0xda, 0xa8, 0x0f, 0xec, 0xbe, + 0x84, 0x52, 0x93, 0xb1, 0xff, 0x1a, 0xf5, 0xb0, + 0xeb, 0x70, 0xb6, 0x0a, 0xf2, 0x0c, 0xa6, 0x94, + 0xcd, 0x5a, 0xd5, 0xa5, 0xff, 0x06, 0x7b, 0x17, + 0xa8, 0x4f, 0x87, 0x1d, 0xba, 0xa5, 0x11, 0x5a, + 0x62, 0x8d, 0x5c, 0xb4, 0x33, 0xa0, 0x07, 0x9a, + 0x41, 0xbd, 0x39, 0x5e, 0x81, 0x32, 0xa1, 0x39, + 0xab, 0x79, 0xaf, 0x0f, 0x34, 0x71, 0x2d, 0xb2, + 0x61, 0xff, 0xbd, 0x7c, 0x81, 0x91, 0x46, 0xf5, + 0x87, 0x4e, 0x6a, 0xcc, 0xbf, 0xd8, 0x7e, 0x4e, + 0x91, 0x49, 0x09, 0xe5, 0xd9, 0x69, 0x97, 0xf2, + 0xa5, 0xcf, 0x3d, 0x26, 0x0d, 0x5d, 0x15, 0xf1, + 0x76, 0x49, 0xcc, 0x77, 0x8a, 0x65, 0xfe, 0xce, + 0xb9, 0xa2, 0xe7, 0xc0, 0x5b, 0x60, 0xc5, 0xb6, + 0x41, 0x78, 0xd2, 0xab, 0x04, 0x44, 0x50, 0x84, + 0x96, 0x35, 0x59, 0x03, 0x5b, 0xbf, 0xd2, 0xd6, + 0x0d, 0x6f, 0xb4, 0x05, 0x22, 0x5f, 0x9e, 0x35, + 0xb0, 0xa2, 0x23, 0xd0, 0x11, 0x5a, 0xc9, 0xe8, + 0xca, 0x9d, 0x01, 0x0b, 0xd8, 0xff, 0x00, 0x91, + 0x0e, 0xa6, 0x9f, 0xcc, 0xd3, 0x10, 0xaa, 0x75, + 0x91, 0x72, 0x45, 0xb3, 0x55, 0xf2, 0xc6, 0xdc, + 0x4a, 0x47, 0x90, 0xb1, 0x2a, 0x4a, 0x30, 0x67, + 0x95, 0x26, 0x50, 0xeb, 0x29, 0x0e, 0x77, 0xc8, + 0xc9, 0xef, 0x83, 0x0e, 0x38, 0x89, 0x73, 0xd6, + 0x28, 0x87, 0x7b, 0x44, 0x9e, 0x87, 0x5b, 0x47, + 0x33, 0xcb, 0x25, 0x31, 0x8f, 0x9b, 0x97, 0xcf, + 0xea, 0x0f, 0xc4, 0x1b, 0x55, 0x9e, 0x76, 0xe1, + 0xa2, 0x0c, 0xc2, 0x79, 0x39, 0xf7, 0x70, 0x6e, + 0xb3, 0x39, 0xb3, 0x54, 0xb2, 0x38, 0x53, 0x16, + 0x67, 0xd6, 0x36, 0x9f, 0x5d, 0x03, 0xc2, 0x58, + 0x55, 0x3e, 0x3f, 0x7b, 0x63, 0x37, 0xbe, 0x35, + 0x90, 0x4a, 0xec, 0x6b, 0x8c, 0x4a, 0xec, 0xd8, + 0xe5, 0x37, 0x8e, 0x01, 0x51, 0x94, 0x3c, 0xce, + 0x2a, 0xb8, 0xa5, 0xa1, 0x1a, 0x92, 0x09, 0x90, + 0x33, 0xce, 0xcd, 0x0c, 0x2f, 0x45, 0xf4, 0xfa, + 0xbf, 0x51, 0xf2, 0xf1, 0xc7, 0x59, 0x79, 0x16, + 0x0d, 0x77, 0x0d, 0x78, 0x15, 0xb6, 0xc8, 0x39, + 0x51, 0x6a, 0xa9, 0xd3, 0x2b, 0x5e, 0x4c, 0xf2, + 0xd2, 0x5d, 0xc0, 0x99, 0x22, 0x5f, 0xed, 0xc3, + 0xc8, 0xa1, 0x18, 0x10, 0xf4, 0xcc, 0x79, 0x31, + 0x2d, 0xb2, 0x09, 0xbf, 0x0b, 0x0d, 0x2f, 0x8d, + 0x34, 0xd6, 0x76, 0x01, 0x96, 0x65, 0x52, 0xb2, + 0x38, 0xb3, 0xdd, 0x91, 0xe8, 0xf2, 0x94, 0xf0, + 0xec, 0x3f, 0x10, 0x7f, 0xb1, 0x63, 0xaa, 0x01, + 0x64, 0x34, 0x6d, 0xf2, 0xd2, 0x9a, 0x70, 0xb7, + 0xb0, 0x1f, 0x5b, 0x50, 0x2a, 0x36, 0x5f, 0xc9, + 0x29, 0xf2, 0xb1, 0x42, 0x17, 0x89, 0xfa, 0xcc, + 0xba, 0x53, 0xbd, 0x16, 0xb9, 0x68, 0xde, 0x33, + 0xea, 0xba, 0xc5, 0x19, 0xbd, 0xd6, 0x72, 0x7a, + 0xf3, 0xe6, 0xf6, 0xf3, 0xf6, 0x55, 0xc8, 0x0d, + 0x3b, 0x37, 0x28, 0x5d, 0x21, 0x5e, 0x6f, 0xea, + 0x53, 0x8f, 0x4b, 0x8d, 0x8c, 0xde, 0x8c, 0xb3, + 0x06, 0xa8, 0x32, 0xa5, 0xbe, 0x35, 0x1f, 0x60, + 0x24, 0x5f, 0xd3, 0xb3, 0x00, 0xb1, 0x53, 0x4f, + 0x41, 0x89, 0x6a, 0x7a, 0x56, 0x05, 0xc8, 0xe5, + 0xc5, 0x71, 0xce, 0xd7, 0xdc, 0x17, 0x2a, 0x8f, + 0xb0, 0xa0, 0x60, 0xa6, 0xd4, 0x7d, 0xd4, 0xd8, + 0x32, 0x72, 0x79, 0x81, 0xd3, 0x80, 0x95, 0x43, + 0x03, 0xe9, 0x16, 0x00, 0x7b, 0xa6, 0x44, 0xdb, + 0x0a, 0xc7, 0x60, 0xd6, 0x7e, 0xb8, 0x2a, 0x44, + 0xb8, 0x50, 0xa3, 0xb8, 0x17, 0x16, 0x7f, 0x2c, + 0xde, 0x46, 0x2e, 0xb4, 0x40, 0x8d, 0xac, 0x26, + 0x94, 0xf2, 0xba, 0xb0, 0x0e, 0xa9, 0x08, 0x8a, + 0x6f, 0xf4, 0x6c, 0x37, 0xae, 0x09, 0x72, 0x43, + 0x9c, 0x84, 0x2d, 0x4c, 0x25, 0xfd, 0x62, 0x47, + 0xc9, 0x32, 0xac, 0xb7, 0x15, 0x61, 0x78, 0x53, + 0x9a, 0x1b, 0xce, 0xd8, 0xac, 0x66, 0xf6, 0x8d, + 0x4a, 0x88, 0x44, 0xa2, 0x05, 0x38, 0x2f, 0xb9, + 0x95, 0x76, 0x76, 0xb4, 0xa5, 0x26, 0x14, 0x42, + 0xdc, 0xea, 0xad, 0x50, 0xf2, 0xb0, 0x05, 0xb5, + 0x6b, 0xb9, 0xed, 0xbd, 0x3f, 0x5a, 0x65, 0x99, + 0x89, 0x36, 0x51, 0x2b, 0x74, 0x14, 0xb4, 0xd5, + 0xc8, 0xd5, 0xfe, 0x18, 0xc4, 0x76, 0xdb, 0xe3, + 0xcc, 0x0b, 0x2f, 0xb2, 0x0a, 0xf1, 0x00, 0xe9, + 0x2e, 0x35, 0xaf, 0xf9, 0x41, 0x05, 0x30, 0x47, + 0x77, 0xe4, 0x09, 0x2b, 0x24, 0x0d, 0xcf, 0x4e, + 0x5a, 0x48, 0x2f, 0xc2, 0xbf, 0xcf, 0x74, 0x4b, + 0xab, 0x70, 0xf7, 0xc7, 0x91, 0x79, 0x00, 0xbd, + 0x20, 0x36, 0xb0, 0xb8, 0xc7, 0xbb, 0x97, 0x69, + 0xdf, 0xf5, 0x02, 0xa9, 0xe2, 0x66, 0x25, 0x70, + 0x8c, 0xb4, 0x04, 0x17, 0x24, 0xd9, 0x16, 0x9f, + 0xfa, 0x3e, 0x7e, 0xe2, 0xdc, 0xb2, 0x0f, 0xb4, + 0xc5, 0x19, 0x6c, 0x92, 0x99, 0x8a, 0xb5, 0xd4, + 0x5b, 0xa5, 0x79, 0x17, 0x91, 0x58, 0x3d, 0xe0, + 0x3c, 0x10, 0x67, 0xf0, 0x16, 0xc5, 0x1a, 0x96, + 0xba, 0x25, 0x7a, 0x60, 0x24, 0xdc, 0x0a, 0xaf, + 0x98, 0x07, 0xc1, 0xb8, 0x15, 0xb4, 0x08, 0x8b, + 0x81, 0x38, 0x43, 0x71, 0x7d, 0x01, 0x78, 0x5a, + 0x7e, 0xd8, 0x82, 0x6a, 0xaa, 0x81, 0xee, 0x0e, + 0x9f, 0x93, 0x77, 0xd1, 0xaa, 0x7a, 0x0a, 0xf5, + 0xf0, 0x20, 0xb5, 0xb0, 0xf4, 0xbf, 0x10, 0xa8, + 0xfe, 0x6b, 0x52, 0x7d, 0x91, 0xc3, 0xb1, 0x04, + 0x38, 0xe3, 0x10, 0xc8, 0x6a, 0x61, 0xf9, 0xc6, + 0x9e, 0x7d, 0x73, 0xca, 0xfe, 0x3e, 0xd6, 0xac, + 0xb2, 0xce, 0x2b, 0x14, 0xfa, 0xc5, 0x7a, 0x78, + 0x26, 0x74, 0x13, 0xe6, 0x70, 0xb6, 0x46, 0x44, + 0x67, 0x29, 0x8e, 0x56, 0x0f, 0x52, 0x3d, 0xab, + 0x30, 0x87, 0x33, 0x02, 0x2c, 0xad, 0xc4, 0xe3, + 0x0c, 0x09, 0x4a, 0x04, 0x54, 0x38, 0x03, 0x96, + 0x2d, 0xa3, 0x58, 0x28, 0x3b, 0x50, 0x49, 0xd5, + 0xf6, 0xb1, 0x29, 0x4a, 0xe1, 0x3a, 0x37, 0xe5, + 0xf8, 0xac, 0xd6, 0xc4, 0xca, 0x49, 0xc2, 0x02, + 0x5a, 0x9c, 0x81, 0x19, 0x2c, 0x10, 0xa1, 0x5d, + 0x65, 0x77, 0xdd, 0x3d, 0xd8, 0xe2, 0xc6, 0xca, + 0x33, 0x3c, 0x5a, 0x61, 0x31, 0x19, 0xc8, 0x99, + 0x59, 0xc5, 0x1c, 0xce, 0xac, 0x12, 0x1d, 0x69, + 0x4c, 0x49, 0x0e, 0x77, 0xe0, 0xd8, 0x12, 0xb9, + 0x4d, 0xe7, 0xfb, 0x94, 0x43, 0x72, 0xd9, 0x6c, + 0xfd, 0x6d, 0x41, 0xab, 0x8c, 0x74, 0x40, 0x09, + 0x9b, 0x29, 0xbc, 0x70, 0x93, 0xd5, 0x9b, 0x70, + 0xf3, 0x2c, 0x0a, 0x17, 0xa0, 0xd8, 0x46, 0x19, + 0x6e, 0xdd, 0x9d, 0x30, 0x1d, 0xf0, 0x41, 0xbd, + 0xe9, 0xa9, 0xa6, 0xec, 0xdf, 0xb4, 0x37, 0x72, + 0x8d, 0xd4, 0xe2, 0xcc, 0x9c, 0x60, 0x80, 0xb3, + 0x30, 0x89, 0x76, 0x59, 0xd0, 0x01, 0xda, 0x17, + 0xe5, 0xdd, 0x5d, 0x91, 0x34, 0xd5, 0xc6, 0xf9, + 0xd6, 0x54, 0xbc, 0x09, 0xbb, 0x1e, 0x2a, 0x02, + 0x44, 0xa9, 0xa6, 0x9a, 0x27, 0x73, 0x46, 0x10, + 0x67, 0xa1, 0x34, 0xcc, 0x1d, 0x87, 0xaf, 0xea, + 0x92, 0x22, 0x37, 0x24, 0x99, 0xa3, 0xdf, 0x19, + 0x42, 0x1d, 0x59, 0x40, 0x0b, 0x55, 0x6b, 0x1c, + 0xbf, 0x63, 0xa7, 0x0a, 0x10, 0x4d, 0x2b, 0x76, + 0x6a, 0xd7, 0x73, 0x70, 0x66, 0x15, 0xd2, 0x1c, + 0x21, 0xb7, 0xb4, 0xee, 0xd6, 0xf1, 0x8c, 0xa3, + 0x31, 0xdf, 0x6d, 0xd9, 0xdd, 0x0e, 0xab, 0x69, + 0xed, 0xb3, 0xab, 0x7d, 0xdb, 0x73, 0xc0, 0x19, + 0xe6, 0x77, 0x9b, 0x13, 0x97, 0xcd, 0xb9, 0xc7, + 0xf4, 0x4d, 0x59, 0xbd, 0x4d, 0x6a, 0xd1, 0x6a, + 0x2a, 0xdf, 0xc3, 0xba, 0xc5, 0x19, 0x1c, 0x50, + 0x0c, 0x00, 0x94, 0xa1, 0xab, 0x50, 0x1b, 0xe3, + 0x4c, 0xa8, 0xbd, 0x8e, 0xaf, 0xe7, 0x23, 0x4b, + 0x91, 0x3c, 0x83, 0x06, 0xec, 0x9c, 0xc2, 0x7e, + 0x88, 0x0e, 0x6a, 0x96, 0xd3, 0x3d, 0xc3, 0x43, + 0x90, 0x5b, 0xff, 0xd7, 0xda, 0xf5, 0xbb, 0xb6, + 0x7d, 0x44, 0xf1, 0xbb, 0xf3, 0x49, 0x3e, 0xa9, + 0x22, 0x9c, 0x15, 0xe1, 0xca, 0x21, 0x94, 0x73, + 0xdc, 0x14, 0x19, 0x32, 0x28, 0x2d, 0x14, 0x17, + 0x3a, 0x9c, 0x8d, 0x6b, 0x94, 0x12, 0x8a, 0x92, + 0x29, 0x74, 0xd2, 0x90, 0x16, 0xd3, 0xc9, 0x7f, + 0xc2, 0x39, 0x75, 0x41, 0xa4, 0x25, 0x28, 0x10, + 0x4a, 0x46, 0x91, 0x66, 0xec, 0xe0, 0xd1, 0xa3, + 0x52, 0x32, 0x64, 0x2a, 0x1e, 0x43, 0xe8, 0x60, + 0x32, 0x75, 0xe8, 0xd8, 0x41, 0xb6, 0xe4, 0xa8, + 0xef, 0xdd, 0x7d, 0xef, 0xfb, 0x43, 0xdf, 0xaf, + 0x64, 0xd9, 0x8d, 0x96, 0x44, 0x96, 0x74, 0xdf, + 0xbb, 0x77, 0xef, 0xde, 0xef, 0xfb, 0x3c, 0xec, + 0x49, 0xef, 0xb7, 0xac, 0x69, 0xeb, 0x59, 0xc5, + 0xea, 0x31, 0x6a, 0x68, 0x29, 0x6c, 0xdc, 0x6a, + 0xf9, 0xb6, 0xad, 0xbb, 0xd6, 0xd2, 0x80, 0xf6, + 0x61, 0x9c, 0xb7, 0x43, 0x9a, 0xfd, 0xc2, 0x22, + 0x9a, 0x2d, 0x72, 0xe0, 0x33, 0xd1, 0x2a, 0x0b, + 0x73, 0xa7, 0x6b, 0x45, 0xb9, 0xed, 0xfa, 0x86, + 0xd5, 0xc6, 0x6a, 0x68, 0xf9, 0x4c, 0x32, 0xa6, + 0x9f, 0x35, 0x24, 0x5d, 0x96, 0x30, 0xf4, 0x21, + 0xd9, 0xd0, 0x45, 0x7e, 0x8d, 0x9a, 0x5b, 0x7c, + 0x1c, 0x99, 0x6a, 0x05, 0xf8, 0x0c, 0x0e, 0x32, + 0x5b, 0x77, 0x31, 0xa5, 0xe7, 0x08, 0x7d, 0x51, + 0x06, 0x25, 0x8a, 0x98, 0x94, 0x1c, 0x93, 0x0b, + 0xc6, 0xf7, 0x1d, 0xf2, 0xee, 0x46, 0xcf, 0xe3, + 0x71, 0xd3, 0x54, 0xcd, 0x5e, 0x39, 0x0c, 0x1d, + 0x46, 0x16, 0x3f, 0x36, 0xbf, 0x73, 0xf2, 0xec, + 0x69, 0xdf, 0x7a, 0x4c, 0xfb, 0xa0, 0xb6, 0x58, + 0x35, 0x42, 0xcf, 0xe6, 0xb0, 0xed, 0xb6, 0x9c, + 0x93, 0x85, 0x06, 0x4b, 0xc4, 0x67, 0x14, 0xf8, + 0x0c, 0x4b, 0x75, 0x50, 0x53, 0xdb, 0x70, 0x11, + 0xf0, 0x59, 0x89, 0xd8, 0x8b, 0x8d, 0x48, 0x2e, + 0x55, 0x25, 0xba, 0xa1, 0x8a, 0x20, 0x0b, 0xc1, + 0x05, 0x50, 0x2f, 0x71, 0xdd, 0x05, 0x22, 0xba, + 0x14, 0xff, 0x89, 0xec, 0xb2, 0x80, 0x66, 0x1a, + 0xf9, 0x8c, 0xb4, 0xb8, 0x77, 0x8c, 0xab, 0x05, + 0x8b, 0xb0, 0x0c, 0xab, 0x79, 0x33, 0xc0, 0x3e, + 0xb3, 0x6a, 0x7d, 0x53, 0x73, 0x09, 0x47, 0x12, + 0x19, 0x27, 0xff, 0x42, 0x74, 0x44, 0xab, 0x05, + 0x7c, 0xd6, 0x8c, 0xe4, 0x76, 0x30, 0xc3, 0x5b, + 0xb4, 0xe6, 0xc2, 0x90, 0x3f, 0x83, 0x21, 0x8b, + 0xa5, 0xd8, 0x5b, 0x08, 0x3b, 0xdf, 0x76, 0xce, + 0x67, 0x61, 0x1f, 0xec, 0x33, 0x07, 0x59, 0xd6, + 0xdb, 0x5d, 0x93, 0x73, 0x6f, 0x8d, 0xbd, 0xed, + 0x81, 0x6d, 0xdc, 0x15, 0xf2, 0x99, 0xaf, 0x88, + 0xdb, 0x8b, 0xe9, 0xcd, 0x79, 0x8e, 0x6e, 0xb7, + 0x85, 0x57, 0xbd, 0xda, 0x81, 0x37, 0x97, 0x0e, + 0x51, 0x89, 0xa2, 0x31, 0xd7, 0x00, 0xbd, 0x49, + 0x44, 0x7e, 0xd3, 0x54, 0x71, 0x2b, 0x9d, 0x0a, + 0xf9, 0x43, 0xdb, 0xd6, 0x82, 0xa0, 0x55, 0x94, + 0x67, 0x56, 0x7f, 0x27, 0xa0, 0xe1, 0xf9, 0x6c, + 0xce, 0x09, 0xbf, 0xc0, 0x8d, 0x71, 0x33, 0x23, + 0x5f, 0x8c, 0x0c, 0x28, 0x3c, 0xd5, 0xe3, 0x30, + 0xb8, 0xe2, 0x0d, 0x86, 0x53, 0xe9, 0x09, 0x23, + 0x2e, 0xb7, 0x6c, 0x48, 0x32, 0xed, 0x6f, 0x4a, + 0x02, 0x16, 0x81, 0xa0, 0xb6, 0xc5, 0x6f, 0xb3, + 0x8e, 0x57, 0x3f, 0x74, 0xd0, 0x36, 0xa3, 0x4e, + 0x0e, 0xfa, 0x96, 0xcf, 0x04, 0x79, 0x88, 0x1a, + 0x7c, 0x15, 0xf5, 0x94, 0xec, 0xa8, 0x2b, 0xe4, + 0x72, 0x81, 0xe4, 0xd4, 0x02, 0x2d, 0x8e, 0xa9, + 0xba, 0xd5, 0x85, 0x90, 0xcf, 0xd8, 0x6a, 0x9d, + 0x3c, 0xef, 0x6d, 0x71, 0x94, 0xd0, 0x82, 0x6a, + 0x54, 0x28, 0xe8, 0x07, 0x58, 0x33, 0x54, 0x06, + 0xdd, 0x97, 0xad, 0x89, 0x57, 0x0d, 0x63, 0x13, + 0x63, 0xaf, 0x07, 0x51, 0x88, 0xda, 0xf1, 0x51, + 0x3e, 0x2e, 0x09, 0xd7, 0x06, 0xd8, 0x06, 0x1a, + 0x7e, 0x2f, 0x50, 0xcc, 0x8b, 0xfb, 0x78, 0xd0, + 0x9f, 0xa9, 0x8f, 0x7a, 0x3f, 0x56, 0xc9, 0x7c, + 0xac, 0x03, 0xad, 0x17, 0x9b, 0x3b, 0xc8, 0x67, + 0x20, 0x8c, 0xf1, 0x41, 0x02, 0x3d, 0x0f, 0x8e, + 0x9a, 0xdc, 0xc1, 0x75, 0x11, 0x82, 0xe8, 0x9c, + 0xb6, 0x1f, 0x36, 0x86, 0xb2, 0x6c, 0xff, 0x77, + 0x50, 0x3c, 0xec, 0x0a, 0x7e, 0x53, 0x74, 0xd3, + 0xb9, 0xc0, 0xb6, 0x4b, 0xee, 0xde, 0x85, 0xa9, + 0x2d, 0xe0, 0x15, 0x44, 0xbd, 0x18, 0xa4, 0x4c, + 0x2c, 0x71, 0x9b, 0x43, 0xf3, 0x18, 0x96, 0x08, + 0x07, 0x47, 0xad, 0x80, 0x9d, 0xd1, 0x06, 0x7d, + 0xb3, 0xb5, 0x09, 0x44, 0x6c, 0xb5, 0x4c, 0xde, + 0x84, 0x10, 0x8b, 0xe1, 0x60, 0xb8, 0x9b, 0xb0, + 0xc3, 0x15, 0x44, 0xad, 0x56, 0x08, 0x39, 0x0b, + 0x4a, 0xf8, 0x9e, 0x5a, 0x01, 0xbd, 0x89, 0xe2, + 0xf5, 0xe0, 0xf8, 0xc8, 0x41, 0x64, 0xe7, 0xcd, + 0xdc, 0x92, 0x9c, 0xb7, 0x41, 0x8e, 0x1d, 0x95, + 0x7f, 0x09, 0x7c, 0xf4, 0xc1, 0x36, 0xb6, 0x3d, + 0x0e, 0xb2, 0x70, 0xe1, 0x60, 0x0a, 0x97, 0x09, + 0xf2, 0xac, 0x2a, 0xe7, 0x5b, 0xe6, 0x6a, 0x17, + 0xde, 0x80, 0x65, 0xb7, 0x4e, 0xc0, 0xf7, 0x29, + 0x91, 0xae, 0xed, 0x72, 0xc9, 0x9d, 0x4d, 0x8b, + 0x75, 0x87, 0x30, 0xec, 0x1e, 0xf2, 0x19, 0x93, + 0x08, 0xcf, 0x35, 0x5e, 0xe5, 0x15, 0xf2, 0x99, + 0xb1, 0x11, 0x92, 0x9b, 0xca, 0x1a, 0x2e, 0x26, + 0xd0, 0x9b, 0x7f, 0x8f, 0xb0, 0xd9, 0x27, 0x98, + 0x17, 0x5a, 0xcf, 0xe9, 0xe5, 0xdb, 0x38, 0xc7, + 0x45, 0xcc, 0x14, 0xc0, 0x9a, 0x1b, 0x9d, 0x85, + 0x9b, 0xa9, 0x2a, 0x2f, 0x1a, 0xf0, 0x99, 0xd2, + 0xf2, 0x36, 0x17, 0x75, 0xba, 0x48, 0xc1, 0x0f, + 0x10, 0xf6, 0x6c, 0xd6, 0xd7, 0xf5, 0xf9, 0x3a, + 0x4f, 0x4d, 0x7f, 0xfd, 0x35, 0x48, 0xc3, 0x73, + 0x79, 0x8d, 0xac, 0xe2, 0xfd, 0xb6, 0xdc, 0xeb, + 0x5a, 0xf0, 0xe5, 0xec, 0x8e, 0x8d, 0xed, 0xd3, + 0x74, 0xf8, 0xff, 0x9c, 0x49, 0xd2, 0xc8, 0xc1, + 0x5d, 0x1b, 0xd6, 0x32, 0x1e, 0xc6, 0x2e, 0x56, + 0xe5, 0xf5, 0xdb, 0x90, 0xf8, 0x5a, 0x0e, 0x49, + 0xe3, 0x27, 0x7b, 0x42, 0xc7, 0xc6, 0x7a, 0xe0, + 0xe0, 0x78, 0xe4, 0x4e, 0x1e, 0x84, 0x1d, 0x2c, + 0xb0, 0xd7, 0xe3, 0x21, 0x89, 0xdd, 0xb9, 0xbe, + 0x40, 0x61, 0x50, 0xdc, 0x8b, 0xbf, 0x17, 0x6b, + 0x2d, 0x71, 0x51, 0xa2, 0x85, 0xaf, 0x17, 0x7d, + 0x58, 0x6c, 0xc7, 0xae, 0x5c, 0x89, 0xb2, 0x23, + 0x43, 0x59, 0xb0, 0x0d, 0x55, 0xcc, 0xa6, 0x99, + 0xcc, 0x3d, 0x33, 0xb2, 0xcd, 0xee, 0xa8, 0xe2, + 0xe6, 0x6e, 0x4d, 0xe6, 0xf6, 0x6c, 0x7d, 0x18, + 0xbc, 0xa1, 0xf0, 0x09, 0x79, 0x7d, 0x1c, 0x37, + 0xd9, 0xed, 0xa4, 0xd9, 0x43, 0x47, 0x0c, 0x9a, + 0x98, 0x65, 0x14, 0x76, 0x63, 0x22, 0x78, 0x5b, + 0x61, 0xb2, 0x99, 0x60, 0x9c, 0xfd, 0xc1, 0x78, + 0x5a, 0x42, 0x4f, 0x4f, 0x20, 0x4c, 0xcb, 0xab, + 0x34, 0xfb, 0x6e, 0xe8, 0xc4, 0xd5, 0x90, 0xf1, + 0xc4, 0x52, 0x10, 0x91, 0xa2, 0xb5, 0xb3, 0x86, + 0x1e, 0xfa, 0x55, 0x8e, 0xfb, 0xf6, 0xd5, 0x20, + 0x59, 0xea, 0x8f, 0xf8, 0x19, 0x03, 0xe1, 0x52, + 0x5d, 0xcf, 0x52, 0x19, 0xaf, 0x5d, 0xb0, 0x54, + 0x2a, 0xce, 0xb0, 0x46, 0x3a, 0xbe, 0xed, 0xb5, + 0x61, 0x5c, 0xf5, 0xf0, 0x78, 0x9a, 0x6b, 0x12, + 0x65, 0xe2, 0x57, 0xbe, 0x8d, 0x89, 0xb3, 0xd4, + 0xf6, 0xb1, 0xcd, 0x6f, 0x5a, 0x93, 0x41, 0xc8, + 0x44, 0xb9, 0x01, 0x67, 0x59, 0x11, 0xcd, 0x9c, + 0x21, 0x16, 0x91, 0x21, 0xde, 0x26, 0xc4, 0x31, + 0xa9, 0x24, 0x8d, 0x41, 0xb4, 0xf7, 0x5a, 0xf2, + 0x5d, 0xf4, 0xbc, 0x38, 0xa2, 0x6d, 0x4c, 0xc0, + 0xd6, 0xd0, 0x16, 0x27, 0x39, 0x91, 0x55, 0xb5, + 0x85, 0x4e, 0xd6, 0xd3, 0x7d, 0x31, 0x54, 0x18, + 0x85, 0x04, 0x29, 0xbb, 0xbd, 0xbb, 0xf6, 0x03, + 0xfd, 0x87, 0xe4, 0x48, 0x65, 0xef, 0xd7, 0xc3, + 0x32, 0x30, 0x31, 0x5e, 0xdb, 0x4b, 0x91, 0xdd, + 0x14, 0x0c, 0xfd, 0x54, 0x7f, 0x2e, 0xc8, 0xc6, + 0x32, 0xec, 0xad, 0xb8, 0x0e, 0xe3, 0x30, 0x8b, + 0x42, 0xfa, 0xa8, 0x26, 0xb0, 0xeb, 0xc8, 0x77, + 0x5d, 0x8c, 0x4e, 0xcb, 0x6f, 0xee, 0x5f, 0x5f, + 0xd0, 0xec, 0x3a, 0xe1, 0x97, 0x0c, 0x7d, 0xab, + 0x8f, 0xc0, 0xc0, 0x5e, 0x61, 0xa9, 0x3b, 0x74, + 0x46, 0xcb, 0x22, 0xd3, 0x75, 0xc1, 0x69, 0x5b, + 0x97, 0x8d, 0xa4, 0x35, 0x83, 0xb1, 0xe7, 0x4b, + 0xc2, 0x29, 0xa8, 0xe7, 0xc7, 0x9e, 0xb7, 0x6d, + 0x95, 0x57, 0x18, 0x5f, 0xc3, 0x1c, 0x4c, 0xc6, + 0xbd, 0x7b, 0xdb, 0x91, 0x1b, 0x0e, 0x1e, 0x0f, + 0xaa, 0x0f, 0x93, 0x5f, 0xd8, 0x19, 0x69, 0x63, + 0x3b, 0x3e, 0x0a, 0xe7, 0x71, 0x50, 0xea, 0xa0, + 0x03, 0x0c, 0x99, 0xde, 0xf7, 0x25, 0xc1, 0x5f, + 0x9e, 0xc9, 0x4f, 0x47, 0x49, 0xce, 0x61, 0x7e, + 0xd3, 0xd9, 0x05, 0xa4, 0xc6, 0xfb, 0x48, 0xaf, + 0x85, 0x21, 0x40, 0xbc, 0x5b, 0xdd, 0x4b, 0x7f, + 0xa6, 0xad, 0xfb, 0x98, 0x94, 0x17, 0xe2, 0xac, + 0x11, 0xa5, 0x3a, 0x91, 0x9e, 0x0a, 0x3a, 0x21, + 0x3d, 0x55, 0xec, 0xd7, 0xcd, 0xb1, 0x83, 0x3f, + 0x29, 0xe9, 0xfb, 0xef, 0xe9, 0xf8, 0x57, 0x7a, + 0x71, 0xb1, 0xc1, 0xcf, 0x25, 0xbd, 0xf7, 0x4f, + 0x66, 0x4e, 0x9e, 0x4d, 0xa8, 0x96, 0x88, 0xd7, + 0x4d, 0x8d, 0xa2, 0x6c, 0x78, 0x3a, 0x91, 0x58, + 0x9a, 0x38, 0x9c, 0x70, 0x18, 0x86, 0xdc, 0x22, + 0x84, 0x78, 0xaa, 0x35, 0x32, 0x0a, 0x66, 0xce, + 0xe0, 0x0a, 0x36, 0x31, 0xb1, 0x11, 0xd5, 0x05, + 0xe9, 0xd8, 0x86, 0x89, 0x28, 0xa1, 0x3c, 0xcb, + 0x8b, 0x79, 0x49, 0x35, 0x98, 0x5e, 0xaa, 0x41, + 0xdd, 0x53, 0x4c, 0xa6, 0x07, 0xcf, 0x5c, 0xe5, + 0x67, 0xd3, 0xd3, 0xe6, 0xe8, 0x02, 0x56, 0x10, + 0xcb, 0xd8, 0x30, 0xfb, 0xb7, 0xfa, 0x29, 0xc9, + 0x4c, 0x0a, 0xa7, 0x52, 0x8b, 0x19, 0x84, 0x74, + 0x89, 0xae, 0x90, 0x0b, 0x79, 0x42, 0x6c, 0xf7, + 0x62, 0xcf, 0x36, 0x13, 0x32, 0xf3, 0x1a, 0x7d, + 0xb2, 0xd0, 0x62, 0xe1, 0xa8, 0x44, 0x59, 0x08, + 0xf8, 0x79, 0x74, 0x9a, 0xb5, 0x00, 0x39, 0x95, + 0x5b, 0xe9, 0x24, 0x1a, 0x1f, 0xf4, 0xa7, 0x73, + 0x64, 0xb2, 0x3a, 0xf3, 0x8c, 0xac, 0xf8, 0xe1, + 0x18, 0xfe, 0x19, 0x4f, 0xcf, 0x40, 0x06, 0xf0, + 0x4e, 0xd9, 0xc0, 0x22, 0x89, 0xe3, 0xdf, 0x3f, + 0xf7, 0x31, 0x9c, 0xfc, 0x7a, 0x3d, 0xea, 0x8e, + 0x1f, 0x7f, 0x49, 0x42, 0xb8, 0x91, 0xac, 0xac, + 0xff, 0x14, 0x14, 0xc4, 0xd6, 0x09, 0x22, 0x3a, + 0xd9, 0xf9, 0xe6, 0x32, 0x18, 0x49, 0x66, 0xb0, + 0xaa, 0x9c, 0x68, 0xbd, 0x6c, 0xf7, 0xb5, 0xc9, + 0xe4, 0x49, 0x3d, 0xfe, 0x43, 0x9a, 0x41, 0xad, + 0x64, 0x99, 0x3e, 0xb7, 0x62, 0xdb, 0xd5, 0x1b, + 0x99, 0x44, 0x84, 0xb7, 0x17, 0x9b, 0x9f, 0x0a, + 0x16, 0x2d, 0x33, 0x79, 0x37, 0x7c, 0xa0, 0xd9, + 0x39, 0x8e, 0x80, 0xcd, 0x03, 0x04, 0x21, 0x8b, + 0xf4, 0x1d, 0x4e, 0x4e, 0x4f, 0xda, 0xb9, 0x2c, + 0x02, 0x0c, 0xd4, 0x45, 0xcb, 0xea, 0x68, 0x6a, + 0xf5, 0x07, 0xef, 0xfc, 0xcc, 0xbb, 0x56, 0x32, + 0xc0, 0x09, 0xc9, 0x49, 0x3a, 0x55, 0xe0, 0xc6, + 0xe2, 0x73, 0x22, 0xd9, 0x42, 0x7c, 0x7f, 0x64, + 0xc2, 0xee, 0xb5, 0x4a, 0x06, 0x80, 0x9b, 0x4a, + 0x88, 0x38, 0x7e, 0x64, 0xac, 0x30, 0x0b, 0x35, + 0x3a, 0xde, 0xa4, 0x0f, 0xee, 0x85, 0xc4, 0x8e, + 0xc7, 0x86, 0xbb, 0x06, 0x01, 0xee, 0x03, 0xfd, + 0x38, 0xdc, 0x46, 0x29, 0xc3, 0x5e, 0xcc, 0x1b, + 0xe9, 0xc1, 0x82, 0xc7, 0x72, 0xe3, 0xe1, 0xfd, + 0x62, 0xf1, 0x35, 0x61, 0x3a, 0x27, 0xba, 0x56, + 0xe8, 0x92, 0x27, 0x68, 0xb7, 0x7e, 0x86, 0x78, + 0x05, 0xbf, 0xd7, 0x89, 0xd4, 0xfc, 0x1e, 0x0c, + 0x51, 0xab, 0xb9, 0x1a, 0x9f, 0xaa, 0x74, 0xe2, + 0x04, 0xbc, 0x10, 0xad, 0x8d, 0x90, 0x15, 0x75, + 0x74, 0xb7, 0x61, 0x61, 0x89, 0xbf, 0x12, 0xee, + 0xc2, 0xf4, 0xb7, 0xf2, 0x6b, 0xba, 0x09, 0x0a, + 0x03, 0xac, 0xed, 0xba, 0xa1, 0x9c, 0xac, 0xc9, + 0x9f, 0xac, 0x5b, 0xa9, 0xcc, 0x1b, 0xc6, 0xab, + 0x02, 0x26, 0x55, 0xb8, 0x71, 0x4d, 0xcb, 0x4f, + 0x9c, 0x3c, 0x55, 0xbe, 0x4c, 0x05, 0x3c, 0xed, + 0x36, 0x18, 0x98, 0x45, 0x89, 0x4e, 0x02, 0xbd, + 0x55, 0xe7, 0x04, 0x23, 0x8f, 0x97, 0x1b, 0xda, + 0x7c, 0x08, 0x7f, 0xf1, 0xf7, 0x50, 0x4c, 0x08, + 0x7e, 0xc8, 0x7d, 0xfd, 0x2a, 0xfc, 0x67, 0x21, + 0xc9, 0x05, 0x30, 0x19, 0x2d, 0x9d, 0x7d, 0x67, + 0x3d, 0x0e, 0xdf, 0x28, 0x9d, 0x06, 0x44, 0x78, + 0x65, 0x9b, 0x2c, 0xb2, 0x00, 0x55, 0x37, 0x00, + 0x38, 0xb2, 0xdc, 0x62, 0xd1, 0x9b, 0xd2, 0xbd, + 0xbe, 0x45, 0x24, 0x12, 0x1e, 0x04, 0xd1, 0x08, + 0xe3, 0x3b, 0x36, 0xd6, 0x07, 0x1e, 0x98, 0x37, + 0x4b, 0x6a, 0x9b, 0x09, 0xac, 0xe1, 0x6c, 0x68, + 0xed, 0xa2, 0xfc, 0xa4, 0xe4, 0x99, 0x25, 0xab, + 0xfb, 0xa0, 0x9e, 0x05, 0xc8, 0x2e, 0xce, 0x74, + 0x26, 0x14, 0x41, 0x9d, 0x94, 0x68, 0xd4, 0x19, + 0x86, 0x49, 0x4a, 0x27, 0xc4, 0x2e, 0x2a, 0x86, + 0x9f, 0x7d, 0x79, 0x1c, 0x56, 0x6c, 0xd2, 0xd9, + 0xeb, 0x76, 0x22, 0x57, 0xc1, 0x21, 0xa5, 0x6a, + 0x37, 0xc7, 0x1d, 0x77, 0x77, 0x87, 0x26, 0xa4, + 0x8d, 0x0a, 0x27, 0xa6, 0x66, 0x38, 0x9d, 0xd1, + 0x23, 0xee, 0xbd, 0x0b, 0x38, 0xc2, 0x06, 0xa6, + 0xc6, 0xae, 0x66, 0x7e, 0x7c, 0x4e, 0x59, 0x8e, + 0x4a, 0x58, 0x65, 0x88, 0x15, 0xae, 0x66, 0xb1, + 0xa8, 0x94, 0xeb, 0x05, 0x18, 0xa6, 0x52, 0xfb, + 0x64, 0x12, 0x78, 0xea, 0xf9, 0x8a, 0xf9, 0xaa, + 0x56, 0x6c, 0x47, 0x2d, 0x3e, 0x13, 0x4d, 0x0e, + 0x85, 0x26, 0x2c, 0x46, 0x17, 0x27, 0x46, 0x4c, + 0x20, 0x2f, 0x6c, 0xf4, 0x21, 0x34, 0xd5, 0x74, + 0xb0, 0x21, 0xdc, 0x05, 0x49, 0x1c, 0x74, 0x97, + 0x0e, 0x15, 0x48, 0x29, 0x73, 0x43, 0xf9, 0x59, + 0x6e, 0x81, 0x3e, 0x99, 0xba, 0x9c, 0x99, 0x6a, + 0x6b, 0xa5, 0x97, 0x5f, 0xb5, 0xd3, 0xc9, 0x9e, + 0x37, 0x4f, 0x3d, 0xdb, 0xa4, 0xbc, 0xd1, 0xc4, + 0x6c, 0xeb, 0xa3, 0x20, 0x04, 0xc9, 0x42, 0xbd, + 0x2b, 0xa7, 0x4c, 0x29, 0x7d, 0x39, 0xce, 0x41, + 0x66, 0x82, 0x0b, 0xca, 0x8d, 0x59, 0x1f, 0x26, + 0x76, 0x10, 0x33, 0x0e, 0xd6, 0xc9, 0x9a, 0x84, + 0x49, 0x33, 0x9f, 0x26, 0x58, 0x99, 0x14, 0x37, + 0x68, 0x4d, 0xe5, 0x94, 0x5a, 0xfb, 0xdf, 0xb7, + 0x24, 0x59, 0xc4, 0x67, 0x4f, 0xdf, 0x47, 0x30, + 0xce, 0xc9, 0x4a, 0x8d, 0xa1, 0x88, 0x8a, 0x01, + 0x05, 0x50, 0xc4, 0x48, 0xff, 0x5c, 0x97, 0x54, + 0xb0, 0x56, 0xa0, 0xa0, 0xe8, 0x0d, 0x92, 0xeb, + 0x90, 0x72, 0x1a, 0x1b, 0x0f, 0xbe, 0xdc, 0x20, + 0x05, 0x0d, 0x5e, 0x2b, 0xb7, 0x9f, 0xc3, 0x2f, + 0x31, 0xaf, 0x92, 0xeb, 0xe2, 0x27, 0xad, 0x51, + 0x57, 0x54, 0xe8, 0xca, 0x0e, 0x7f, 0x45, 0x96, + 0xd4, 0x9d, 0xad, 0x6e, 0x09, 0xbc, 0x66, 0xac, + 0x90, 0x58, 0x52, 0xac, 0x45, 0x4a, 0x95, 0x54, + 0x6c, 0x1b, 0xfe, 0x54, 0x27, 0xf9, 0x47, 0x66, + 0xc1, 0x46, 0xbd, 0xe0, 0x97, 0xcd, 0xfc, 0x9f, + 0x7a, 0xa9, 0x36, 0xf7, 0x7d, 0xb7, 0xf4, 0x84, + 0x82, 0xc3, 0x09, 0xaf, 0xff, 0x00, 0xdb, 0xac, + 0xe4, 0x13, 0x51, 0xe7, 0x00, 0x00 +}; + +unsigned int core_len = 19454; diff --git a/custom.c b/custom.c index dc1f98a8..cb25ef7c 100755 --- a/custom.c +++ b/custom.c @@ -2659,7 +2659,7 @@ static void doint (void) #endif imask = intreq & intena; if (imask && (intena & 0x4000)) { - for (i = 0; i < 14; i++) { + for (i = 0; i < 15; i++) { if ((imask & (1 << i)) && irqdelay[i] == 0) { irqdelay[i] = 1; irqcycles[i] = get_cycles (); @@ -2673,7 +2673,7 @@ STATIC_INLINE void INTENA (uae_u16 v) setclr (&intena,v); #if 0 if (v & 0x40) - write_log("INTENA %04.4X (%04.4X) %p\n", intena, v, m68k_getpc()); + write_log("INTENA %04.4X (%04.4X) %p\n", intena, v, M68K_GETPC); #endif if (v & 0x8000) doint (); @@ -2681,22 +2681,29 @@ STATIC_INLINE void INTENA (uae_u16 v) void INTREQ_0 (uae_u16 v) { + int i; if (v & (0x80|0x100|0x200|0x400)) audio_update_irq (v); - setclr (&intreq,v); + setclr (&intreq, v); + if (!(v & 0x8000)) { + for (i = 0; i < 15; i++) { + if (v & (1 << i)) + irqdelay[i] = 0; + } + } doint (); } void INTREQ (uae_u16 v) { - INTREQ_0 (v); - serial_check_irq (); - rethink_cias (); #if 0 - if (0 || (v & (0x8010)) == 0x8010) + if ((v & (0xc000)) == 0xc000) write_log("%d INTREQ %04.4X (%04.4X) %x %x %x\n", - vpos, intreq, v, m68k_getpc(), cop1lc, cop2lc); + vpos, intreq, v, M68K_GETPC, cop1lc, cop2lc); #endif + INTREQ_0 (v); + serial_check_irq (); + rethink_cias (); } static void ADKCON (int hpos, uae_u16 v) @@ -4121,9 +4128,8 @@ static void framewait (void) } curr_time = start = read_processor_time(); if (!isvsync()) { - do { - curr_time = read_processor_time (); - } while (rpt_vsync () < 0); + while (rpt_vsync () < 0); + curr_time = read_processor_time (); } vsyncmintime = curr_time + vsynctime; idletime += read_processor_time() - start; @@ -4667,7 +4673,7 @@ void dumpcustom (void) (unsigned int)diwstrt, (unsigned int)diwstop, (unsigned int)ddfstrt, (unsigned int)ddfstop); console_out ("BPLCON 0: %04x 1: %04x 2: %04x 3: %04x 4: %04x\n", bplcon0, bplcon1, bplcon2, bplcon3, bplcon4); if (timeframes) { - console_out ("Average frame time: %f ms [frames: %d time: %d]\n", + console_out ("Average frame time: %.2f ms [frames: %d time: %d]\n", (double)frametime / timeframes, timeframes, frametime); if (total_skipped) console_out ("Skipped frames: %d\n", total_skipped); diff --git a/expansion.c b/expansion.c index 72c37e95..d3ed5d0c 100755 --- a/expansion.c +++ b/expansion.c @@ -956,7 +956,7 @@ static void allocate_expamem (void) allocated_fastmem = 0; } } - clearexec (); + memory_hardreset(); } if (allocated_z3fastmem != currprefs.z3fastmem_size) { if (z3fastmem) @@ -973,7 +973,7 @@ static void allocate_expamem (void) allocated_z3fastmem = 0; } } - clearexec (); + memory_hardreset(); } #ifdef PICASSO96 if (allocated_gfxmem != currprefs.gfxmem_size) { @@ -991,7 +991,7 @@ static void allocate_expamem (void) allocated_gfxmem = 0; } } - clearexec (); + memory_hardreset(); } #endif @@ -1155,6 +1155,16 @@ void expansion_cleanup (void) #endif } +void expansion_clear(void) +{ + if (fastmemory) + memset (fastmemory, 0, allocated_fastmem); + if (z3fastmem) + memset (z3fastmem, 0, allocated_z3fastmem); + if (gfxmemory) + memset (gfxmemory, 0, allocated_gfxmem); +} + #ifdef SAVESTATE /* State save/restore code. */ diff --git a/filesys.c b/filesys.c index c86ea310..018120c2 100755 --- a/filesys.c +++ b/filesys.c @@ -4039,16 +4039,34 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke write_log ("FileSystem.resource not found, this shouldn't happen!\n"); goto error; } + fsnode = get_long (fsres + 18); + while (get_long (fsnode)) { + if (get_long (fsnode + 14) == dostype) + break; + fsnode = get_long (fsnode); + } + oldversion = oldrevision = -1; + if (get_long (fsnode)) { + oldversion = get_word (fsnode + 18); + oldrevision = get_word (fsnode + 20); + } else { + fsnode = 0; + } for (;;) { - if (fileblock == -1) + if (fileblock == -1) { + if (!fsnode) + write_log ("RDB: required FS %08.8X not in FileSystem.resource or in RDB\n", dostype); goto error; + } if (!legalrdbblock (uip, fileblock)) { + write_log("RDB: corrupt FSHD pointer %d\n", fileblock); err = -1; goto error; } hdf_read (hfd, buf, fileblock * hfd->blocksize, readblocksize); if (!rdb_checksum ("FSHD", buf, fileblock)) { + write_log("RDB: checksum error in FSHD block %d\n", fileblock); err = -1; goto error; } @@ -4056,25 +4074,15 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke if ((dostype >> 8) == (rl (buf + 32) >> 8)) break; } - - fsnode = get_long (fsres + 18); - while (get_long (fsnode)) { - if (get_long (fsnode + 14) == dostype) - break; - fsnode = get_long (fsnode); - } - - oldversion = oldrevision = -1; newversion = (buf[36] << 8) | buf[37]; newrevision = (buf[38] << 8) | buf[39]; + write_log ("RDB: RDB filesystem %08.8X version %d.%d\n", dostype, newversion, newrevision); - if (get_long (fsnode)) { - oldversion = get_word (fsnode + 18); - oldrevision = get_word (fsnode + 20); + if (fsnode) { write_log ("RDB: %08.8X in FileSystem.resouce version %d.%d\n", dostype, oldversion, oldrevision); } if (newversion * 65536 + newrevision <= oldversion * 65536 + oldrevision && oldversion >= 0) { - write_log ("RDB: fs in FileSystem.resource is newer or same, ignoring RDB filesystem\n"); + write_log ("RDB: FS in FileSystem.resource is newer or same, ignoring RDB filesystem\n"); goto error; } diff --git a/gencpu.c b/gencpu.c index cbb4a206..bfc5c128 100755 --- a/gencpu.c +++ b/gencpu.c @@ -616,12 +616,10 @@ static void genamode (amodes mode, char *reg, wordsizes size, char *name, int ge { genamode2 (mode, reg, size, name, getv, movem, flags, 0); } -/* static void genamode_e3 (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem, int flags, int e3fudge) { genamode2 (mode, reg, size, name, getv, movem, flags, e3fudge); } -*/ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, char *to, int store_dir) { @@ -1512,7 +1510,8 @@ static void gen_opcode (unsigned long int opcode) int prefetch_done = 0; int dualprefetch = curi->dmode == absl && (curi->smode != Dreg && curi->smode != Areg && curi->smode != imm); genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 1 | (dualprefetch ? GF_NOREFILL : 0)); + /* MOVE.L dx,(ax) exception3 PC points to next instruction. hackhackhack */ + genamode_e3 (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 1 | (dualprefetch ? GF_NOREFILL : 0), curi->smode == Dreg && curi->dmode == Aind ? 2 : 0); if (curi->mnemo == i_MOVEA && curi->size == sz_word) printf ("\tsrc = (uae_s32)(uae_s16)src;\n"); if (curi->dmode == Apdi) { diff --git a/include/autoconf.h b/include/autoconf.h index f1acc081..998bd538 100755 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -77,6 +77,7 @@ extern void hardfile_reset (void); extern void emulib_install (void); extern void expansion_init (void); extern void expansion_cleanup (void); +extern void expansion_clear (void); #define TRAPFLAG_NO_REGSAVE 1 #define TRAPFLAG_NO_RETVAL 2 diff --git a/include/catweasel.h b/include/catweasel.h index 129ff1d4..7ae6c458 100755 --- a/include/catweasel.h +++ b/include/catweasel.h @@ -27,6 +27,7 @@ typedef struct catweasel_drive { typedef struct catweasel_contr { int type; /* see CATWEASEL_TYPE_* defines below */ + int direct_type; int iobase; /* 0 = not present (factory default is 0x320) */ void (*msdelay)(int ms); /* microseconds delay routine, provided by host program */ catweasel_drive drives[2]; /* at most two drives on each controller */ diff --git a/include/memory.h b/include/memory.h index 1a416eb8..0764b3c7 100755 --- a/include/memory.h +++ b/include/memory.h @@ -144,6 +144,7 @@ extern void memory_init (void); extern void memory_cleanup (void); extern void map_banks (addrbank *bank, int first, int count, int realsize); extern void map_overlay (int chip); +extern void memory_hardreset (void); #define longget(addr) (call_mem_get_func(get_mem_bank(addr).lget, addr)) #define wordget(addr) (call_mem_get_func(get_mem_bank(addr).wget, addr)) diff --git a/memory.c b/memory.c index e033a02e..621cedca 100755 --- a/memory.c +++ b/memory.c @@ -1960,12 +1960,6 @@ static void init_mem_banks (void) #endif } -void clearexec (void) -{ - if (chipmemory) - memset (chipmemory + 4, 0, 4); -} - static void allocate_memory (void) { if (allocated_chipmem != currprefs.chipmem_size) { @@ -1983,7 +1977,7 @@ static void allocate_memory (void) write_log ("Fatal error: out of memory for chipmem.\n"); allocated_chipmem = 0; } else { - clearexec (); + memory_hardreset(); if (memsize != allocated_chipmem) memset (chipmemory + allocated_chipmem, 0xff, memsize - allocated_chipmem); } @@ -2009,7 +2003,7 @@ static void allocate_memory (void) allocated_bogomem = 0; } } - clearexec (); + memory_hardreset(); } #ifdef AUTOCONFIG if (allocated_a3000mem != currprefs.a3000mem_size) { @@ -2027,7 +2021,7 @@ static void allocate_memory (void) allocated_a3000mem = 0; } } - clearexec (); + memory_hardreset(); } #endif if (savestate_state == STATE_RESTORE) { @@ -2083,7 +2077,7 @@ void memory_reset (void) memcpy (currprefs.romfile, changed_prefs.romfile, sizeof currprefs.romfile); memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile); if (savestate_state != STATE_RESTORE) - clearexec (); + memory_hardreset(); xfree (extendedkickmemory); extendedkickmemory = 0; extendedkickmem_size = 0; @@ -2294,6 +2288,15 @@ void memory_cleanup (void) #endif } +void memory_hardreset(void) +{ + if (chipmemory) + memset (chipmemory, 0, allocated_chipmem); + if (bogomemory) + memset (bogomemory, 0, allocated_bogomem); + expansion_clear(); +} + void map_banks (addrbank *bank, int start, int size, int realsize) { int bnr; diff --git a/moduleripper.c b/moduleripper.c index cc05e978..2949d4dd 100755 --- a/moduleripper.c +++ b/moduleripper.c @@ -11,10 +11,8 @@ #ifdef PROWIZARD -#include "uae.h" #include "options.h" #include "memory.h" -#include "autoconf.h" #include "moduleripper.h" #include "gui.h" @@ -45,6 +43,8 @@ void moduleripper (void) size += currprefs.bogomem_size; size += currprefs.z3fastmem_size; buf = p = xmalloc (size); + if (!buf) + return; memcpy (p, chipmemory, currprefs.chipmem_size); p += currprefs.chipmem_size; mc (p, fastmem_start, currprefs.fastmem_size); @@ -69,7 +69,7 @@ void moduleripper (void) notify_user (NUMSG_MODRIP_NOTFOUND); else if (!canceled) notify_user (NUMSG_MODRIP_FINISHED); - free (buf); + xfree (buf); } FILE *moduleripper_fopen (const char *name, const char *mode) diff --git a/newcpu.c b/newcpu.c index e3e58ba6..7ab3f89b 100755 --- a/newcpu.c +++ b/newcpu.c @@ -2142,8 +2142,8 @@ void m68k_go (int may_quit) customreset (); m68k_reset (); if (hardreset) { - memset (chipmemory, 0, allocated_chipmem); - write_log ("chipmem cleared\n"); + memory_hardreset(); + write_log ("hardreset, memory cleared\n"); } #ifdef SAVESTATE /* We may have been restoring state, but we're done now. */ diff --git a/od-win32/bsdsock.c b/od-win32/bsdsock.c index 523e9b9a..72d683cb 100755 --- a/od-win32/bsdsock.c +++ b/od-win32/bsdsock.c @@ -1717,11 +1717,13 @@ void host_WaitSelect(TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, ua } if (nfds == 0) { // No sockets to check, only wait for signals - m68k_dreg(&context->regs,0) = wssigs; - sigs = CallLib(context, get_long(4),-0x13e); // Wait() - - put_long(sigmp,sigs & wssigs); + if (wssigs != 0) { + m68k_dreg(&context->regs, 0) = wssigs; + sigs = CallLib(context, get_long(4),-0x13e); // Wait() + put_long(sigmp, sigs & wssigs); + } + if (readfds) fd_zero(readfds,nfds); if (writefds) diff --git a/od-win32/fsdb_win32.c b/od-win32/fsdb_win32.c index 6314537b..5250027d 100755 --- a/od-win32/fsdb_win32.c +++ b/od-win32/fsdb_win32.c @@ -331,7 +331,7 @@ int fsdb_set_file_attrs (a_inode *aino) /* windows dirs go where no dir has gone before... */ if (! aino->dir) { mode = 0; - if ((tmpmask & (A_FIBF_READ | A_FIBF_DELETE)) == 0) + if ((tmpmask & (A_FIBF_WRITE | A_FIBF_DELETE)) == 0) mode |= FILE_ATTRIBUTE_READONLY; if (!(tmpmask & A_FIBF_ARCHIVE)) mode |= FILE_ATTRIBUTE_ARCHIVE; @@ -368,21 +368,20 @@ int fsdb_mode_supported (const a_inode *aino) * native FS. Return zero if that is not possible. */ int fsdb_mode_representable_p (const a_inode *aino) { - int mask = aino->amigaos_mode; - int m1; + int mask = aino->amigaos_mode ^ 15; if (aino->dir) return aino->amigaos_mode == 0; - /* S set, or E or R clear, means we can't handle it. */ - if (mask & (A_FIBF_SCRIPT | A_FIBF_EXECUTE | A_FIBF_READ)) - return 0; - m1 = A_FIBF_DELETE | A_FIBF_WRITE; - /* If it's rwed, we are OK... */ - if ((mask & m1) == 0) + if (mask == 15) /* ---RWED == OK */ return 1; - /* We can also represent r-e-, by setting the host's readonly flag. */ - if ((mask & m1) == m1) + if (!(mask & A_FIBF_EXECUTE)) /* not executable */ + return 0; + if (!(mask & A_FIBF_READ)) /* not readable */ + return 0; + if (mask & A_FIBF_SCRIPT) /* script */ + return 0; + if ((mask & 15) == (A_FIBF_READ | A_FIBF_EXECUTE)) /* ----R-E- == ReadOnly */ return 1; return 0; } diff --git a/od-win32/ioport.c b/od-win32/ioport.c index 6816480a..d29a6c11 100755 --- a/od-win32/ioport.c +++ b/od-win32/ioport.c @@ -13,6 +13,19 @@ typedef int bool; #include #include "win32.h" +// TVicPORT +typedef BOOL (_stdcall* OPENTVICPORT)(void); +static OPENTVICPORT pOpenTVicPort; +typedef void (_stdcall* CLOSETVICPORT)(void); +static CLOSETVICPORT pCloseTVicPort; +typedef BOOL (_stdcall* ISDRIVEROPENED)(void); +static ISDRIVEROPENED pIsDriverOpened; +typedef UCHAR (_stdcall* READPORT)(USHORT); +static READPORT pReadPort; +typedef UCHAR (_stdcall* WRITEPORT)(USHORT,UCHAR); +static WRITEPORT pWritePort; + +// WINIO typedef bool (_stdcall* INITIALIZEWINIO)(void); static INITIALIZEWINIO pInitializeWinIo; typedef void (_stdcall* SHUTDOWNWINIO)(void); @@ -21,9 +34,11 @@ typedef bool (_stdcall* GETPORTVAL)(WORD,PDWORD,BYTE); static GETPORTVAL pGetPortVal; typedef bool (_stdcall* SETPORTVAL)(WORD,DWORD,BYTE); static SETPORTVAL pSetPortVal; + static HMODULE ioh; #ifndef IOPORT_EMU +#include #include #endif @@ -34,6 +49,33 @@ int ioport_init (void) if (initialized) return 1; #ifndef IOPORT_EMU + ioh = WIN32_LoadLibrary ("tvicport.dll"); + if (ioh) { + for (;;) { + pOpenTVicPort = (OPENTVICPORT)GetProcAddress (ioh, "OpenTVicPort"); + pCloseTVicPort = (CLOSETVICPORT)GetProcAddress (ioh, "CloseTVicPort"); + pIsDriverOpened = (ISDRIVEROPENED)GetProcAddress (ioh, "IsDriverOpened"); + pReadPort = (READPORT)GetProcAddress (ioh, "ReadPort"); + pWritePort = (WRITEPORT)GetProcAddress (ioh, "WritePort"); + if (!pOpenTVicPort || !pCloseTVicPort || !pIsDriverOpened || !pReadPort || !pWritePort) { + io_log("incompatible tvicport.dll\n"); + break; + } + if (!pOpenTVicPort()) { + io_log("tvicport.dll failed to initialize\n"); + break; + } + if (!pIsDriverOpened()) { + io_log("tvicport.dll failed to initialized!\n"); + pCloseTVicPort(); + break; + } + initialized = 1; + io_log ("tvicport.dll initialized"); + return 1; + } + } + FreeLibrary(ioh); ioh = WIN32_LoadLibrary ("winio.dll"); if (!ioh) return 0; @@ -47,7 +89,7 @@ int ioport_init (void) return 0; } __try { - initialized = pInitializeWinIo(); + initialized = pInitializeWinIo() ? 2 : 0; } __except (EXCEPTION_EXECUTE_HANDLER) { initialized = 0; } @@ -61,11 +103,12 @@ int ioport_init (void) void ioport_free (void) { #ifndef IOPORT_EMU - if (initialized) { + if (initialized == 1) + pCloseTVicPort(); + if (initialized == 2) pShutdownWinIo(); + if (initialized) FreeLibrary (ioh); - io_log ("io freed\n"); - } #endif initialized = 0; } @@ -74,7 +117,10 @@ uae_u8 ioport_read (int port) { DWORD v = 0; #ifndef IOPORT_EMU - pGetPortVal (port, &v, 1); + if (initialized == 1) + v = pReadPort (port); + else if (initialized == 2) + pGetPortVal (port, &v, 1); #endif io_log ("ioport_read %04.4X returned %02.2X\n", port, v); return (uae_u8)v; @@ -83,7 +129,10 @@ uae_u8 ioport_read (int port) void ioport_write (int port, uae_u8 v) { #ifndef IOPORT_EMU - pSetPortVal (port, v, 1); + if (initialized == 1) + pWritePort (port, v); + else if (initialized == 2) + pSetPortVal (port, v, 1); #endif io_log ("ioport_write %04.4X %02.2X\n", port, v); } diff --git a/od-win32/machdep/rpt.h b/od-win32/machdep/rpt.h index 424e98cd..2db2742c 100755 --- a/od-win32/machdep/rpt.h +++ b/od-win32/machdep/rpt.h @@ -9,55 +9,7 @@ #ifndef _RPT_H_ #define _RPT_H_ -#ifdef HIBERNATE_TEST -extern int rpt_skip_trigger; -#endif - typedef unsigned long frame_time_t; - -/* For CPUs that lack the rdtsc instruction or systems that change CPU frequency on the fly (most laptops) */ -extern frame_time_t read_processor_time_qpc(void); -extern int useqpc; - -STATIC_INLINE frame_time_t read_processor_time_qpc (void) -{ - LARGE_INTEGER counter; - QueryPerformanceCounter( &counter ); - if (useqpc > 0) - return (frame_time_t)(counter.LowPart); - return (frame_time_t)(counter.QuadPart >> 6); -} - -STATIC_INLINE frame_time_t read_processor_time (void) -{ - frame_time_t foo; - - if (useqpc) /* No RDTSC or RDTSC is not stable */ - return read_processor_time_qpc(); - -#if defined(X86_MSVC_ASSEMBLY) - { - frame_time_t bar; - __asm - { - rdtsc - mov foo, eax - mov bar, edx - } - /* very high speed CPU's RDTSC might overflow without this.. */ - foo >>= 6; - foo |= bar << 26; - } -#else - foo = 0; -#endif -#ifdef HIBERNATE_TEST - if (rpt_skip_trigger) { - foo += rpt_skip_trigger; - rpt_skip_trigger = 0; - } -#endif - return foo; -} +extern frame_time_t read_processor_time (void); #endif diff --git a/od-win32/mman.c b/od-win32/mman.c index 7028d89c..8a2c602d 100755 --- a/od-win32/mman.c +++ b/od-win32/mman.c @@ -65,8 +65,8 @@ void init_shm(void) size64 <<= 1; if (size64 > max_allowed_mman * 1024 * 1024) size64 = max_allowed_mman * 1024 * 1024; - if (size64 > 0x20000000) - size64 = 0x20000000; + if (size64 > 0x40000000) + size64 = 0x40000000; if (size64 < 8 * 1024 * 1024) size64 = 8 * 1024 * 1024; size = max_z3fastmem = (uae_u32)size64; diff --git a/od-win32/sounddep/sound.c b/od-win32/sounddep/sound.c index 1ca59f0b..4baf508b 100755 --- a/od-win32/sounddep/sound.c +++ b/od-win32/sounddep/sound.c @@ -33,10 +33,10 @@ #include -#define ADJUST_SIZE 20 -#define EXP 1.3 +#define ADJUST_SIZE 100 +#define EXP 1.9 -int sound_debug; +int sound_debug = 0; static int obtainedfreq; static int have_sound; diff --git a/od-win32/win32.c b/od-win32/win32.c index d21f3db7..0b889b0b 100755 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -74,6 +74,7 @@ static OSVERSIONINFO osVersion; static SYSTEM_INFO SystemInfo; int useqpc = 0; /* Set to TRUE to use the QueryPerformanceCounter() function instead of rdtsc() */ +int qpcdivisor = 0; int cpu_mmx = 0; static int no_rdtsc; @@ -192,6 +193,49 @@ static void dummythread (void *dummy) while (!dummythread_die); } + +STATIC_INLINE frame_time_t read_processor_time_qpc (void) +{ + LARGE_INTEGER counter; + QueryPerformanceCounter(&counter); + if (qpcdivisor == 0) + return (frame_time_t)(counter.LowPart); + return (frame_time_t)(counter.QuadPart >> qpcdivisor); +} + +frame_time_t read_processor_time (void) +{ + frame_time_t foo; + + if (useqpc) /* No RDTSC or RDTSC is not stable */ + return read_processor_time_qpc(); + +#if defined(X86_MSVC_ASSEMBLY) + { + frame_time_t bar; + __asm + { + rdtsc + mov foo, eax + mov bar, edx + } + /* very high speed CPU's RDTSC might overflow without this.. */ + foo >>= 6; + foo |= bar << 26; + } +#else + foo = 0; +#endif +#ifdef HIBERNATE_TEST + if (rpt_skip_trigger) { + foo += rpt_skip_trigger; + rpt_skip_trigger = 0; + } +#endif + return foo; +} + + static uae_u64 win32_read_processor_time (void) { #if defined(X86_MSVC_ASSEMBLY) @@ -253,15 +297,17 @@ static int figure_processor_speed (void) if (QueryPerformanceFrequency(&freq)) { qpc_avail = 1; - write_log("CLOCKFREQ: QPF %.2fMHz\n", freq.QuadPart / 1000000.0); qpfrate = freq.QuadPart; - /* we don't want 32-bit overflow */ - if (qpfrate > 100000000) { - qpfrate >>= 6; + /* we don't want 32-bit overflow, limit to 100MHz */ + qpcdivisor = 0; + while (qpfrate > 100000000) { + qpfrate >>= 1; + qpcdivisor++; qpc_avail = -1; } + write_log("CLOCKFREQ: QPF %.2fMHz (DIV=%d)\n", freq.QuadPart / 1000000.0, 1 << qpcdivisor); if (SystemInfo.dwNumberOfProcessors > 1) - rpt_available = 0; /* RDTSC is weird in SMP-systems */ + rpt_available = 0; /* RDTSC can be weird in SMP-systems */ } else { write_log("CLOCKREQ: QPF not supported\n"); } @@ -273,7 +319,7 @@ static int figure_processor_speed (void) init_mmtimer(); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); - sleep_millis (100); + sleep_millis (50); dummythread_die = -1; if (qpc_avail || rpt_available) { @@ -285,7 +331,7 @@ static int figure_processor_speed (void) clockrateidle = (win32_read_processor_time() - clockrateidle) * 2; dummythread_die = 0; _beginthread(&dummythread, 0, 0); - sleep_millis (100); + sleep_millis (50); clockrate = win32_read_processor_time(); sleep_millis (500); clockrate = (win32_read_processor_time() - clockrate) * 2; @@ -358,13 +404,13 @@ static int figure_processor_speed (void) limit = 2.5; if (mm_timerres && (ratea1 / ratecnt) < limit * clockrate1000) { /* MM-timer is ok */ timermode = 0; - sleep_resolution = (int)(ratea1 * clockrate1000 / (ratecnt * 1000000)); + sleep_resolution = (int)((1000 * ratea1) / (clockrate1000 * ratecnt)); timebegin (); - write_log ("Using MultiMedia timers (resolution < %.1fms)\n", limit); + write_log ("Using MultiMedia timers (resolution < %.1fms) SR=%d\n", limit, sleep_resolution); } else if ((ratea2 / ratecnt) < limit * clockrate1000) { /* regular Sleep() is ok */ timermode = 1; - sleep_resolution = (int)(ratea2 * clockrate1000 / (ratecnt * 1000000)); - write_log ("Using Sleep() (resolution < %.1fms)\n", limit); + sleep_resolution = (int)((1000 * ratea2) / (clockrate1000 * ratecnt)); + write_log ("Using Sleep() (resolution < %.1fms) SR=%d\n", limit, sleep_resolution); } else { timermode = -1; /* both timers are bad, fall back to busy-wait */ write_log ("falling back to busy-loop waiting (timer resolution > %.1fms)\n", limit); @@ -1518,6 +1564,8 @@ int debuggable (void) int mousehack_allowed (void) { + if (nr_units (currprefs.mountinfo) == 0) + return 0; return dinput_winmouse () > 0 && dinput_winmousemode (); } @@ -2140,7 +2188,7 @@ static int dxdetect (void) #endif } -int os_winnt, os_winnt_admin; +int os_winnt, os_winnt_admin, os_64bit; static int isadminpriv (void) { @@ -2206,6 +2254,7 @@ static int osdetect (void) { os_winnt = 0; os_winnt_admin = 0; + os_64bit = 0; pGetNativeSystemInfo = (PGETNATIVESYSTEMINFO)GetProcAddress( GetModuleHandle("kernel32.dll"), "GetNativeSystemInfo"); @@ -2225,6 +2274,8 @@ static int osdetect (void) } if (osVersion.dwPlatformId == VER_PLATFORM_WIN32_NT) os_winnt = 1; + if (SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) + os_64bit = 1; } if (!os_winnt) { @@ -2360,7 +2411,8 @@ static void getstartpaths(int start_data) } extern void test (void); -extern int screenshotmode, b0rken_ati_overlay,postscript_print_debugging,sound_debug; +extern int screenshotmode, b0rken_ati_overlay, postscript_print_debugging, sound_debug; +extern int force_direct_catweasel; static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) @@ -2419,6 +2471,7 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR if (!strcmp (arg, "-screenshotbmp")) screenshotmode = 0; if (!strcmp (arg, "-psprintdebug")) postscript_print_debugging = 1; if (!strcmp (arg, "-sounddebug")) sound_debug = 1; + if (!strcmp (arg, "-directcatweasel")) force_direct_catweasel = 1; if (!strcmp (arg, "-datapath") && i + 1 < argc) { strcpy(start_path_data, argv[i + 1]); start_data = 1; diff --git a/od-win32/win32.h b/od-win32/win32.h index 8b869ca3..2821abde 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -22,7 +22,7 @@ extern int manual_palette_refresh_needed; extern int mouseactive, focus; extern int ignore_messages_all; #define WINUAEBETA 1 -#define WINUAEBETASTR " Beta 5" +#define WINUAEBETASTR " Beta 7" extern char start_path_exe[MAX_DPATH]; extern char start_path_data[MAX_DPATH]; @@ -56,7 +56,7 @@ extern int sound_available; extern int framecnt; extern char prtname[]; extern char VersionStr[256]; -extern int os_winnt, os_winnt_admin; +extern int os_winnt, os_winnt_admin, os_64bit; extern int paraport_mask; extern int gui_active; extern DWORD quickstart; diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index 37be4af9..55aad9d2 100755 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -576,6 +576,7 @@ void enumeratedisplays (int multi) DirectDraw_EnumDisplays (displaysCallback); EnumDisplayMonitors(NULL, NULL, monitorEnumProc, (LPARAM)&cnt); } else { + write_log ("Multimonitor detection disabled\n"); Displays[0].primary = 1; Displays[0].name = "Display"; Displays[0].disabled = 0; diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index 6081733e..19d69dad 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -371,7 +371,7 @@ static HWND cachedlist = NULL; #define MAX_Z3_MEM 10 #endif #define MIN_P96_MEM 0 -#define MAX_P96_MEM 6 +#define MAX_P96_MEM 7 #define MIN_M68K_PRIORITY 1 #define MAX_M68K_PRIORITY 16 #define MIN_CACHE_SIZE 0 @@ -1418,7 +1418,7 @@ static int msi_chip[] = { 1, 2, 3, 4, 5, 6 }; static int msi_bogo[] = { 0, 2, 3, 14, 15 }; static int msi_fast[] = { 0, 3, 4, 5, 6 }; static int msi_z3fast[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }; -static int msi_gfx[] = { 0, 3, 4, 5, 6,7,8}; +static int msi_gfx[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10 }; static int CalculateHardfileSize (HWND hDlg) { @@ -4174,6 +4174,8 @@ static void values_to_memorydlg (HWND hDlg) case 0x00800000: mem_size = 4; break; case 0x01000000: mem_size = 5; break; case 0x02000000: mem_size = 6; break; + case 0x04000000: mem_size = 7; break; + case 0x08000000: mem_size = 8; break; } SendDlgItemMessage (hDlg, IDC_P96MEM, TBM_SETPOS, TRUE, mem_size); SetDlgItemText (hDlg, IDC_P96RAM, memsize_names[msi_gfx[mem_size]]); diff --git a/od-win32/winuae_msvc/winuae_msvc.vcproj b/od-win32/winuae_msvc/winuae_msvc.vcproj index 3f420e37..913fe918 100755 --- a/od-win32/winuae_msvc/winuae_msvc.vcproj +++ b/od-win32/winuae_msvc/winuae_msvc.vcproj @@ -1487,10 +1487,6 @@ RelativePath="..\..\missing.c" > - - @@ -1616,6 +1612,10 @@ RelativePath="..\..\prowizard\misc\misc.c" > + + @@ -1659,6 +1659,10 @@ RelativePath="..\..\prowizard\rippers\Crunchmania-Address.c" > + + @@ -1719,6 +1723,10 @@ RelativePath="..\..\prowizard\rippers\GameMusicCreator.c" > + + @@ -1775,6 +1783,10 @@ RelativePath="..\..\prowizard\rippers\ModuleProtector.c" > + + @@ -1867,6 +1879,10 @@ RelativePath="..\..\prowizard\rippers\Prorunner20.c" > + + @@ -1875,6 +1891,10 @@ RelativePath="..\..\prowizard\rippers\RelokIt10.c" > + + diff --git a/prowizard/INSTALL b/prowizard/INSTALL deleted file mode 100755 index e18a0c3c..00000000 --- a/prowizard/INSTALL +++ /dev/null @@ -1,20 +0,0 @@ -Installation ------------- - -This program does not need any special installation process. - -Pro-Wizard-1 (unix) uses DMalloc. You can dl FreeBSD version here : -http://prdownloads.sourceforge.net/dmalloc/ -For Linux, try http://dmalloc.com - -Prowiz.exe (dos) should be compiled with Cygwin32 GCC compiler. -It'll require the file CYGWIN1.DLL. It should be put somewhere in the PATH -(if not present already). -latest version can be found at: -ftp://ftp.uni-erlangen.de/pub/pc/gnuwin32/cygwin/mirrors/cygnus/latest/cygwin/ -or on their Web site -http://www.cygwin.com - -Pro-Wizard-1 (amiga) binary is for 68020 chipsets. Compiling the amiga -version requires at least 8Mb Chip, GCC 2.97.3, ixemul lib and a hell -of a lot of time :). It was compiled under UAE on FreeBSD. \ No newline at end of file diff --git a/prowizard/README b/prowizard/README deleted file mode 100755 index 5ce82017..00000000 --- a/prowizard/README +++ /dev/null @@ -1,77 +0,0 @@ -Prowiz4PC: ProWizard for PC ---------------------------- - - -Description ------------ - -Pro-Wizard-1 (for Peecee) is a multi-ripper for music files. (find the -list in the known formats below). Also, it extracts various data/exe files -like S404 data files. Most of the music formats are 100% Protracker compatible. -The ripped formats are mainly amiga formats. I'm beginning to add a few -other from the Atari ST, now. - -Note ----- - -USE THIS PROGRAM ONLY AT YOUR OWN RISK ! -If this program destroys your data I'm interested in finding the bug, -but I'm not responsible for the damages. - -Legal issues ------------- - -The copyright is GNU GPL. See COPYING file. - -Requirements ------------- - -prowiz (cmdline tool): - At this stage, only Linux/FreeBSD are supported. - MS-DOS/WIN* binary are compiled by friends when spare time comes up. - -Behaviour ---------- - -Output, upon finding a known data file, will be 0.extension, 1.extension, etc. . -These extensions are editable in the file "_types_" (default name). Read the -header of this file for specific instructions on how to edit. -At this stage, I still can't guarantee the program wont crash in certain cases. -I fixed anything I've found so far, but .. . If you encounter such a case, -please, send over the data file !. - -Motivation ----------- - -"I wanted to do it myself" is the main motivation :). - -Compiling ---------- - - A simple 'make' should do the trick. - Now, if you want a version that contains only the music files (WinUAE ?), -edit the 'makefile' and remove the '-DINCLUDEALL'. then 'make simple' will -compile only the needed files. - Sounds like bad work on the makefile, but I wasn't able to make it any -simplier. Sorry. - -Credits -------- - -ProWizard for PC: -Amiga port: - Sylvain "Asle" Chipaux - asle@free.fr - -Initial port under *nix: - Michael Doering - mldoering@gmx.net - -And various bug reports: - look in CREDITS file - -There's a web page here : http://asle.free.fr/prowiz - -Contact me for any reason. If you think you can help this project to be -more compatible with different platforms, don't hesitate to contact. -Bug reports, EXE/Music amiga formats are also welcome !. diff --git a/prowizard/_types_ b/prowizard/_types_ deleted file mode 100755 index 5a2f1cf0..00000000 --- a/prowizard/_types_ +++ /dev/null @@ -1,409 +0,0 @@ -############################################################################### -# # -# _types_ : should be part of Pro-Wizard 1 (for PC/Unix/Amiga). # -# # -# # -# # -# 1997-2004 (c) Sylvain "asle" Chipaux # -# # -############################################################################### -# -# Edit the extensions of the known formats -# -# BEWARE: Leave the order the way it is !!. It's fastly coded and I didn't -# want to spend all night on this small thing !. -# Beside the lines with the extensions, there should NOT be any empty -# lines !. Add as many lines as you want, as long as you begin them -# with '#'. -# And last, an extension can be from 2 to 32 chars long. -# Also, this file must be is the current directory. If not, the -# default extension will be used. -# -# NOTE: at now, there should be 126 extensions. -# -############################################################################### -# -# list starts now ... -# -############################################################################### -##01 : AC1D packer (AC1D_packer) -ac1d -# -##02 : Sound monitor v2 / v3 (SoundMonitor) -bp -# -##03 : FC-M packer (FC_M_packer) -fc-m -# -##04 : Hornet packer (Hornet_packer) -hrt -# -##05 : KRIS tracker (KRIS_tracker) -kris -# -##06 : OPTIMOD's power music (Power_Music) -PowerMusic -# -##07 : Promizer 1.0c (Promizer_10c) -Promizer10c -# -##08 : Promizer 1.8a (Promizer_18a) -Promizer18a -# -##09 : Promizer 2.0 (Promizer_20) -Promizer20 -# -##10 : ProRunner v1 (ProRunner_v1) -ProRunner1 -# -##11 : ProRunner v2 (ProRunner_v2) -ProRunner2 -# -##12 : SKYT packer (SKYT_packer) -skyt -# -##13 : Wanton packer (Wanton_packer) -WantonPacker -# -##14 : XANN packer (XANN_packer) -xann -# -##15 : Module Protector (Module_protector) -ModuleProtector -# -##16 : Digital Illusion (Digital_illusion) -DigitalIllusion -# -##17 : Pha Packer (Pha_packer) -PhaPacker -# -##18 : Promizer 0.1 (Promizer_01) -Promizer01 -# -##19 : ProPacker 2.1 (Propacker_21) -ProPacker21 -# -##20 : ProPacker 3.0 (Propacker_30) -ProPacker30 -# -##21 : Eureka packer (Eureka_packer) -Eureka -# -##22 : StarTrekker pack (Star_pack) -StarTrekkerPack -# -##23 : Protracker (Protracker) -mod -# -##24 : UNIC tracker v1 (UNIC_v1) -unic1 -# -##25 : UNIC tracker v2 (UNIC_v2) -unic2 -# -##26 : Fuzzac packer (Fuzzac) -Fuzzac -# -##27 : Game music creator (GMC) -gmc -# -##28 : Heatseeker (Heatseeker) -crb -# -##29 : Kefrens sound machine (KSM) -ksm -# -##30 : Noiserunner (Noiserunner) -Noiserunner -# -##31 : NoisePacker v1 (Noisepacker1) -NoisePacker1 -# -##32 : NoisePacker v2 (Noisepacker2) -NoisePacker2 -# -##33 : NoisePacker v3 (Noisepacker3) -NoisePacker3 -# -##34 : The player 4.0A (P40A) -P40A -# -##35 : The player 4.0B (P40B) -P40B -# -##36 : The player 4.1A (P41A) -P41A -# -##37 : Promizer 4.0 (PM40) -Promizer4 -# -##38 : Propacker 1.0 (PP10) -ProPacker1 -# -##39 : Tracker packer 1.0 (TP1) -TrackerPacker1 -# -##40 : Tracker packer 2.0 (TP2) -TrackerPacker2 -# -##41 : Tracker packer 3.0 (TP3) -TrackerPacker3 -# -##42 : Zen packer (ZEN) -ZenPacker -# -##43 : The player 5.0A (P50A) -P50A -# -##44 : The player 6.0A (P60A) -P60A -# -##45 : StarTrekker (StarTrekker) -mod -# -##46 : StoneCracker 4.04 Data (S404) (also S401,S403,S310 and S300) -StoneCrackerData -# -##47 : StoneCracker 2.70 (exe) -StoneCracker270 -# -##48 : The Player 6.1A (P61A) -P61A -# -##49 : STIM_Slamtilt (STIM) -stim -# -##50 : SoundTracker -mod -# -##51 : Tetrapack 2.2 (TPACK22) -TetraPack22 -# -##52 : Crunchmania / Normal (CRM2/CRM!) / Address -CrunchmaniaData -# -##53 : Defjam Cruncher 3.2 / 3.2 pro (Defjam_32) -DefjamCruncher -# -##54 : Tetrapack 2.1 (TPACK21) -Tetrapack21 -# -##55 : IAM Packer 1.0 data -ice -# -##56 : Byte Killer 1.3 / 2.0 / 3.0 and Pro 1.0 -ByteKiller -# -##57 : XPK file -xpk -# -##58 : Imploder (data) -Imploder -# -##59 : Propack (RNC) data -rnc -# -##60 : Double Action 1.0 (exe) (Double_Action) -DoubleAction -# -##61 : Powerpacker 3.0 (exe) (Powerpacker3) -PowerPacker3 -# -##62 : Powerpacker 4.0 (exe) (Powerpacker4 & PP4 library) -PowerPacker4 -# -##63 : Powerpacker 2.3 (exe) (Powerpacker23) -PowerPacker23 -# -##64 : Spike Cruncher (exe) (SpikeCruncher) -SpikeCruncher -# -##65 : Tetrapack 1.02 (exe) (TPACK102) -Tetrapack102 -# -##66 : Time Cruncher 1.7 (exe) (TimeCruncher) -TimeCruncher17 -# -##67 : MasterCruncher -MasterCruncher -# -##68 : Master Cruncher 3.0 address (MasterCruncher) -## Mega Cruncher 1.0 / 1.2 -MegaCruncher -# -##69 : JamCracker / Pro (JamCracker) -jam -# -##70 : BSI Future Composer (BSIFC) -BSI-FC -# -##71 : DigiBooster 1.7 (DigiBooster) -digi -# -##72 : Quadra Composer (QuadraComposer) -qc -# -##73 : The Dark Demon (TDD) -TheDarkDemon -# -##74 : Fuchs Tracker (FuchsTracker) -FuchsTracker -# -##75 : Syncro Packer 4.6 -SynchroPacker46 -# -##76 : TNM Cruncher 1.1 (TNMCruncher) -TNMCruncher11 -# -##77 : Super Cuncher 2.7 (SuperCruncher) -SuperCruncher27 -# -##78 : PPbk (AMOS PowerPacker Bank) (PP20 inside) -PPbk -# -##79 : Relok It 1.0 (RelokIt) -RelokIt1 -# -##80 : StoneCracker 2.92 data -StoneCracker292data -# -##81 : FIRE (RNC clone) Cruncher (data) (FIRE) -fire -# -##82 : Max Packer 1.2 (MaxPacker) -MaxPacker12 -# -##83 : SoundFX 1.3 (SoundFX) -SoundFX13 -# -##84 : arcD Data Cruncher (arcD) -arcD -# -##85 : PARA Data Cruncher (PARA) -para -# -##86 : CRND Data Cruncher (CRND) -crnd -# -##87 : =SB= Data Cruncher (SB_DataCruncher) --sb- -# -##88 : SF Data Cruncher (SF) -sf -# -##89 : RLE Data Cruncher (RLE) -RLE -# -##90 : Virtual Dreams (VDCO) Data Cruncher (VDCO) -VDC0 -# -##91 : SQ Data Cruncher (SQ) -sq -# -##92 : SP Data Cruncher (SP) -sp -# -##93 : SoundTracker 2.6 (ST2) -ST2 -# -##94 : IceTracker 1.0 (IT1) -IT1 -# -##95 : HQC Cruncher 2.0 (HQC) -HQC -# -##96 : Try-It Cruncher 1.01 (TIC) -TIC -# -##97 : Future Composer 1.0 - 1.3 (FC3) -FC3 -# -##98 : Future Composer 1.4 (FC4) -FC4 -# -##99 : Amnesty Design (1AM) Data Cruncher -1AM -# -##100 : Amnesty Design (2AM) Data Cruncher -2AM -# -##101 : MED / OctaMED (MMD0/MMD1/MMD2/MMD3) -med -# -##102 : Ace? (Cruncher Data) -AceCruncherData -# -##103 : Newtron packer (real name ?) -Newtron -# -##104 : GPMO (Crunch player ?) -GPMO -# -##105 : Polka Packer -PolkaPacker -# -##106 : GnuPlayer -GnuPlayer -# -##107 : -CJ- Data Cruncher -CJ_DataCruncher -# -##108 : AmBk -AmBk -# -##109 : Master Cruncher 3.0 data -MasterCruncher3data -# -##110 : fasttracker 2 -xm -# -##111 : Megacruncher obj -MegaCruncherObj -# -##112 : Turbo Squeezer 6.1 -TurboSqueezer61 -# -##113 : Stonecracker 2.99d -StoneCracker299d -# -##114 : StoneCracker 3.10 -StoneCracker310 -# -##115 : StoneCracker 2.99b -StoneCracker299b -# -##116 : StoneCracker 2.99 -StoneCracker299 -# -##117 : StoneCracker 3.00 -StoneCracker300 -# -##118 : The Player 3.0a -ThePlayer30a -# -##119 : The Player 2.2a -ThePlayer22a -# -##120 : Noise from Heaven -NoiseFromHeaven -# -##121 : TMK -tmk -# -##122 : DragPack 2.52 -DragPack252 -# -##123 : DragPack 1.00 -DragPack100 -# -##124 : Speed Packer 3 (Atari ST) -SPv3 -# -##125 : Atomik Packer (ATOM or ATM3) (Atari ST) -AtomikPackerData -# -##126 : Automation Packer 5.* (Atari ST) -AutomationPackerData -# -############################################################################### -############################################################################### \ No newline at end of file diff --git a/prowizard/docs/COPYING b/prowizard/docs/COPYING deleted file mode 100755 index 60549be5..00000000 --- a/prowizard/docs/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/prowizard/docs/CREDITS b/prowizard/docs/CREDITS deleted file mode 100755 index 3c8423ba..00000000 --- a/prowizard/docs/CREDITS +++ /dev/null @@ -1,19 +0,0 @@ -Thanks to: - Nicolas Franck (Gryzor) for his marvellous Pro-Wizard 2 - and numerous packed files !. - - Mickael Doering for the *nix port and the constructives comments !. - - Thomas Neumann for pointing out a lot of bugs !. - your help was valuable !. - - Markus Jaegermeister for pointing out bugs too, and for providing - valuable information regarding "exotic formats" !. - - Laurent Clévy for numerous synth descriptions !. - - Xigh for the Mingwin32 port/compiling, and for a couple of tips - with the source code. - - all the people who pointed out bugs (recontact me for I've lost - your names with the uncountable crash I've had lately..) diff --git a/prowizard/docs/KNOWN_FORMATS b/prowizard/docs/KNOWN_FORMATS deleted file mode 100755 index 3813023e..00000000 --- a/prowizard/docs/KNOWN_FORMATS +++ /dev/null @@ -1,242 +0,0 @@ -Known formats (not updated !) -------------- - - Note: The order is alphabetically arranged with the extensions. - - Note: the string between "()" is the default extension used by - Pro-Wizard (for PeeCee) when a music is ripped. - - Note: "CPU" is the computer on which the format can be found - - Note: "DETECTION" and "SIZE CALC" describe how easy it is to detect the - format and to calcutate its size. From the easiest to the hardest : - "child's play","easy","some job","good job","hard job". - Heh, that's MY point of view ... others might say otherwise for - some formats ... . - -| EXT | NAME OF THE FORMAT | CPU | DETECTION | SIZE CALC | -|=======|====================================|=====|===========|============| -| (22A) |The Player 2.2A |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (33A) |The Player 3.3A |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (40A) |The Player 4.0A |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (40B) |The Player 4.0B |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (41A) |The Player 4.1A |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (50A) |The Player 5.0A |Amiga| good job! | easy | -|-------|------------------------------------|-----|-----------|------------| -| (60A) |The Player 6.0A (no sample pack) |Amiga| good job! | easy | -|-------|------------------------------------|-----|-----------|------------| -| (61A) |The Player 6.1A (no sample pack) |Amiga| good job! | easy | -|-------|------------------------------------|-----|-----------|------------| -| (AC1) |AC1D packer |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (CRB) |Heatseeker mc1.0 |Amiga| some job | hard job ! | -|-------|------------------------------------|-----|-----------|------------| -| (DI) |Digital Illusion |Amiga| good job! |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (EU) |Eureka packer |Amiga| good job! |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (FCM) |FC-M packer |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (FT ) |Fuchs Tracker |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (FUZ) |Fuzzac packer |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (GMC) |Game Music Creator |Amiga| some job | easy | -|-------|------------------------------------|-----|-----------|------------| -| (GNU) |GnuPlayer |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (GPM) |GPMO (Crunch Player) |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (HRT) |Hornet packer |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (KRS) |Kris Tracker (Chip Tracker) |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (KSM) |Kefrens Sound Machine |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (MED) |MED - MMD0/MMD1 |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (MOD) |Protracker |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (MOD) |SoundTracker |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (MOD) |StarTrekker |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (MP ) |Module protector |Amiga| good job! | easy | -|-------|------------------------------------|-----|-----------|------------| -| (NEW) |Newtron packer |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (NRU) |Noiserunner |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (NP1) |NoisePacker v1 |Amiga| some job | easy | -|-------|------------------------------------|-----|-----------|------------| -| (NP2) |NoisePacker v2 |Amiga| some job | easy | -|-------|------------------------------------|-----|-----------|------------| -| (NP3) |NoisePacker v3 |Amiga| some job | easy | -|-------|------------------------------------|-----|-----------|------------| -| (P10) |ProPacker v1.0 |Amiga| some job | easy | -|-------|------------------------------------|-----|-----------|------------| -| (P21) |ProPacker v2.1 |Amiga| good job! | some job | -|-------|------------------------------------|-----|-----------|------------| -| (P30) |ProPacker v3.0 |Amiga| good job! | some job | -|-------|------------------------------------|-----|-----------|------------| -| (PHA) |PHA Packer |Amiga| some job | hard job ! | -|-------|------------------------------------|-----|-----------|------------| -| (PM) |Optimod's Power Music |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (PM0) |Promizer 0.1 |Amiga| good job! |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (PM1) |Promizer 1.0c |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (PMZ) |Promizer 1.8a |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (PM2) |Promizer 2.0 |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (PM4) |Promizer 4.0 |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (POL) |Polka packer |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (PR1) |ProRunner v1 |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (PR2) |ProRunner v2 |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (QC ) |Quadra Composer |Amiga| easy |Child's play| -|-------|------------------------------------|-----|-----------|------------| -| (SFX) |Sound FX 1.3 |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (SKT) |SKYT packer |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (STI) |STIM (Slamtilt) |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (STP) |StarTrekker pack |Amiga| good job! |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (TDD) |The Dark Demon |Amiga| some job | easy | -|-------|------------------------------------|-----|-----------|------------| -| (TP1) |Tracker Packer v1 |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (TP2) |Tracker Packer v2 |Amiga| easy | hard job ! | -|-------|------------------------------------|-----|-----------|------------| -| (TP3) |Tracker Packer v3 |Amiga| easy | hard job ! | -|-------|------------------------------------|-----|-----------|------------| -| (UN1) |UNIC Tracker v1 |Amiga| hard job! | easy | -|-------|------------------------------------|-----|-----------|------------| -| (UN2) |UNIC Tracker v2 |Amiga| hard job! | easy | -|-------|------------------------------------|-----|-----------|------------| -| (WN) |Wanton Packer |Amiga| easy |child's play| -|-------|------------------------------------|-----|-----------|------------| -| (XAN) |Xann Packer |Amiga| some job | some job | -|-------|------------------------------------|-----|-----------|------------| -| (ZEN) |Zen Packer |Amiga| some job |child's play| -|-------|------------------------------------|-----|-----------|------------| - - * that's 60 formats now :) - - - there, now some Synthetic ... - -| EXT | NAME OF THE FORMAT | CPU | DETECTION | SIZE CALC | -|=======|====================================|=====|===========|============| -| (BP*) |Sound Monitor v2/v3 |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (BFC) |BSI Future Composer |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (FC3) |Future Composer 1.3 |Amiga| easy | easy | -|-------|------------------------------------|-----|-----------|------------| -| (FC4) |Future Composer 1.4 |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (JAM) |JamCracker / Pro |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| -| (SFX) |Sound FX 1.3/1.8 |Amiga| easy | some job | -|-------|------------------------------------|-----|-----------|------------| - - * only 7 ... I'm working on that. - - - Also, the data/exe files : - -| EXT | NAME OF THE FORMAT | CPU | DETECTION | SIZE CALC | -|=======|=======================================|=====|===========|============| -| (1AM) |Amnesty Design Data Packer (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (2AM) |Amnesty Design Data Packer (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (89A) |$08090A08 Data Cruncher (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (ARC) |arcD Data Cruncher (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (BK ) |ByteKiller 1.3/2.0/3.0/Pro 1.0 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (CRM) |Crunchmania / Normal (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (CRM) |Crunchmania Adress (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (CRN) |CRND Data Cruncher (data) |Amiga| easy | easy | -|-------|---------------------------------------|-----|-----------|------------| -| (DBL) |Double Action 1.0 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (DJM) |Defjam Cruncher 3.2 / 3.2 pro (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (FIR) |FIRE (RNC clone) Cruncher (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (HQC) |HQC Cruncher 2.0 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (ICE) |Ice! Cruncher (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (IMP) |Imploder (data) (ATN!-IMP!-CHFI) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (MAX) |Max Packer 1.2 (exe) |Amiga| easy | some job | -|-------|---------------------------------------|-----|-----------|------------| -| (MC ) |Master Cruncher 3.0 address (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (MC ) |Mega Cruncher 1.0/1.2/Obj (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (PAR )|PARA Data Cruncher (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (PP*) |Powerpacker 2.3/3.0/4.0/4.0 lib (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (PP ) |AMOS Powerpacker Bank "PPbk" (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (RNC) |Propack (Rob Northern Cruncher) (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (RI ) |RelokIt 1.0 (exe) |Amiga| easy | some job | -|-------|---------------------------------------|-----|-----------|------------| -| (SB ) |=SB= Data Cruncher (data) |Amiga| easy |child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (SF ) |SF Data Cruncher (data) |Amiga| easy |child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (SPK) |Spike Cruncher (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (STC) |StoneCracker 2.70 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (STC) |StoneCracker 4.04/4.01/4.03/3.10 (data)|Amiga| easy |Child's play| -| |StoneCracker 3.00 (data) | | | | -|-------|---------------------------------------|-----|-----------|------------| -| (STC) |StoneCracker 2.99(d/b)/3.10/3.00 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (SP ) |Syncro Packer 4.6 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (SC ) |Super Cruncher 2.7 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (T**) |Tetrapack 1.02/2.2/2.1 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (TIC) |Try-It Cruncher 1.01 (exe) |Amiga| easy | easy | -|-------|---------------------------------------|-----|-----------|------------| -| (TC ) |Time Cruncher 1.7 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (TNM) |TNM Cruncher 1.1 (exe) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (TIC) |TurboCruncher 6.1 (exe) |Amiga| easy | easy | -|-------|---------------------------------------|-----|-----------|------------| -| (VDC) |Virtual Dreams (VDCO) data cruncher |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| -| (XPK) |XPK-ed (data) |Amiga| easy |Child's play| -|-------|---------------------------------------|-----|-----------|------------| - - * didn't want to do that in the first place ... but there it is and that's - about 59 formats recognized now !. - - diff --git a/prowizard/docs/MISC b/prowizard/docs/MISC deleted file mode 100755 index 76150a52..00000000 --- a/prowizard/docs/MISC +++ /dev/null @@ -1,125 +0,0 @@ -Hot thanks ----------- - - Nicolas Franck (Gryzor) for his marvellous (c) Pro-Wizard-2 :). - - - Mickael Doering for the *nix port and the constructives comments !. - - - Philippe Anel (Xigh) for compiling the WIN32 version - - - Slight for believeing in this wild project !. Wassup bro ?. - - - Thomas Neumann for pointing out a lot of bugs !. - - - Michael Trier, XtC and many others who sent me stuff to work with :). - - - Laurent Clevy for the numerous Synth Formats descriptions !. - - - Everyone who'll write to me about this program :). - - - -Some words ----------- - And here is another release. Long time since the last :(. Anyway, as -promised, I put this version online in the hope it will behave correctly -everywhere .. feedback plz !. - - here are some things one ought to know about possible 'failure' of -Pro-Wizard-1 (for PeeCee) ... meaning this prog might overlook or mistake -some formats. The "sensibles" formats are : - - Noisepacker v1 and v2 - (these two formats are VERY similars ... a NP1 can be recognised as a NP2. - Rather harmless I should says, but ..) - - Unic tracker v1 and v2 - (These two formats can be recognised as the other ... or even as a ptk but - this very case has 0.01% chance to happen :). The first case, however, is - most probable ... . The difference isn't that important, mind .. a title !) - - The Player 6.0A and 6.1A with packed samples are on hold. Jarno *did* - answer my old email (thx man !) and sent me a thorough description on - how to depack samples. Sadly, I've no time at all to do that these days. - - Most of the depackers included are still real gibberish code. I've rewritten -quite a few yet, but I've found it's very expensive in time to rewritte -lame old code :(. Not sure I'll finnish this ... . - - I've depacked NoiseTracker pack a long time ago ... but I wont include this -format in ProWiz bcoz my depacker isn't 100% reliable :(. The fact is that -if there are Arpeggii in the music, I cant find any single way to detect it. -contact me for more infos :), I'll send you the description I've made .. -reliable this one !. - - One word about the packed data files ... . I've included these format -because I'm fed-up doing it handly with Hex-ed !. The ripped files are -STILL packed !, and you'll need to depack them with tools like XfdDecrunch. -If you know how to depack these, you're welcome to send me some source -code (68k or not). - Also, I've expanded this to other fairly well used packed EXE. Yet, I still -dont know how to depack this by myself. Extracting that way saves hours of -Hex-work .. at least for me :). - - One word about JamCracker. Xag version (JamCracker Pro 1.0A) saves a 19 bytes -title at the end of the module. Prowiz for PC doesn't rip it since it's NOT -in the original format. That's the only difference in the two versions (even -if Xag's doc says there's no diff ...). So, if you want the title, just check -the 19 bytes after the module. - - About Sound FX format, v1.3 and v1.8 are the same. Note that I attempted a -conversion to ptk ... but most of the effects are not supported ... simply -because I dont know what they do .. (doc please !). So, the conversion is -only at a beta stage ... the rip is ok though :). - - - - -Hellos and Messages -------------------- - Slight : Les nouvelles se font (toujours) rares :(. - - Gryzor : hum ... ca fait une paye !. - - Xann : Contacte moi SVP !!!!!. J'ai, encore une fois, perdu ton addresse !. - J'ai retrouve une intro de Silents codee par toi (91 ou 92 je crois) - mais le format de la zik est zarb ... ca ressemble a ton "celebre" - XANN player, mais ca colle pas vraiment. Tu as fais plusieurs - version ? ou est-ce ce "fameux" Xann packer (le vrai) ???. - - Buzz : Keep up the GOOOD work on Exotica. - - Xigh : et ce tracker, bordel !?!?!?. - - - -Contact the author ------------------- - Several ways to contact me .. - - - Snail mail (new !!) - Chipaux "asle" Sylvain - 19 rue censier, esc C - 75005 Paris - France - - - E-Mail - asle@free.fr - (can get attached binary files). - or catch me on Exotica Forum !. - - - - WWW - http://asle.free.fr/prowiz/ - there's always the latest released src version on there - - - - Tel - none at now - - - -Last word ---------- - I'll welcome ANY comment that might arise from this program. Also, new -formats or bug reports (with Pro-Wizard (for PeeCee) version number !). - - - - Sylvain "asle" Chipaux. diff --git a/prowizard/docs/TODO b/prowizard/docs/TODO deleted file mode 100755 index d44acee7..00000000 --- a/prowizard/docs/TODO +++ /dev/null @@ -1,18 +0,0 @@ -Things to do ------------- - - Adding the other formats I've depacked so far :). - -> Channel Player 1,2,3 (wont be easy ..) - - - Adding the whole lot of other ptk-compatible formats I still dont have - decrunched yet :(. - -> Pygmy packer (probably will never make it) - -> AMOS music bank (what a mess !) - -> an alien XANN packer ? (found in an old Silents intro :) - -> The Player 3.3 - - - Adding some PC music format (S3M ...) - - - adding various synth formats since I got loads of tracker ! :). - - - diff --git a/prowizard/docs/changelog b/prowizard/docs/changelog deleted file mode 100755 index d5212b25..00000000 --- a/prowizard/docs/changelog +++ /dev/null @@ -1,368 +0,0 @@ -CHANGE LOG ----------- - -#date format is DDMMYYYY. (from lattest to first) - -02102005 Version 1.60 - - Merged test(),rip() and pack() into one file for all formats. Now in rippers/. - Renamed Noise From Heaven #2 to Noise From Heaven. All three musicdisk are packed samely. - Removed a few printf() that were hidden here and there :) - Trashed all the #ifdef DOS and used a -I in the makefile instead (Thanks Laurent Clevy) - -16052005 Version 1.52 - - Fixed DragPack 2.52 size calculation routine and removed the rebuiling (help !) - -15052005 Version 1.51 - - Added some checks for the file opening. - Mostly some cleaning/reshaping. - -11072004 Version 1.50 - - Some cleaning because other project wish to used PW4PC (namely WinUAE) - Removed SQ/SP/SF data cruncher due to too many fakes files found. - New supported (PTK clones) format : - - TMK packer (found in a few Eremation demos) - not sure I'm compliant with Deliplayer on this one :(. - New supported (exe/data)format : - - DragPack 2.52 - with rebuilding - - DragPack 1.00 is on the way (some trouble with the rebuilding) - - Speed Packer 3 (Atari ST) (kindly sent by Mike Mee (thx!)) - - Atomik Packer (Atari ST) (on sheer description sent by Mike Mee (thx!)) - - Automation Packer 5.* (Atari ST) (on sheer description sent by Mike Mee (thx!)) - -24112003 Version 1.50.b3 - - More Double Action v1.0 to be found - _types_ files complete now - SKYT debugged (forgot to remove some code) - -23112003 Version 1.50.b2 - - Fixed TP1 patternlist handling. Should work with any TP1 now. - New supported (PTK clones) format : - - Noise From Heaven #2 musicdisk (Iris'2001) - - The Player 2.2a (thx to Exotica forum teams) - - The Player 3.0a (not really working in fact) - New supported (exe/data)format : - - StoneCracker 2.99/3.00 - with rebuilding - -23042003 Version 1.50.b1 - - Some bugs correction of previous release :( - A lot less fake Module Protector/P50a/PP10 should be found - Overall PhaPacker (Propacker 1.0) debugging. Should be ok now. - FC13/FC14 false test fixed .. all examples should be detected ok now. - Various optimizings - All RelokIt 1.0 will be ripped. - Found a solution for those 00h. Takes nearly no time now :) - New supported (PTK clones) formats : - - Newtron - - GPMO - - Polka Packer (Thx Michael Trier for the example !) - - GnuPlayer (Thx Kyz for the great description !) - - AmBk - Amos Bank (no converting back to Ptk yet) - New supported format : - - XM - New supported (exe/data)formats : - - Mega Cruncher Obj EXE packer (old old old :) - with rebuilding - - TurboSqueezer 6.1 (1989 !) - no rebuilding !. - - StoneCracker 2.99d/2.99b/3.10 - with rebuilding - -09062002 Version 1.49.4 (released on the 7th, mar 2003) - - Some other issues corrected (mem violations ...) - Removed the remaining bzero() ... forgot them :(. - Amiga port (Crown/Crb's request). - New supported (exe/data)formats : - - (Ace?) DataCruncher - -04052002 Version 1.49.3 - - Removed all printf() from rip/*.c to group that in misc/misc.c. - Broke the 3 chars limit for extensions of saved files. (thx xigh !) - -28122001 Version 1.49.2 (not released) - - Compiling on FreeBSD now, meaning all "hasardous" file reading - crashed the prog !. A lot have been corrected (all ?). - Removed the counter during search. Couldn't find an "easy" - solution :(. - -05052001 Version 1.49.1 - - More or less standard look-alike doc - Replaced bzero() with memset() - The Player 4.1a corrected (A cmd signed -> unsigned conversion) - Numerous bugfix (mostly to prevent readings outside of file) - in ProPacker 2.1, Noisepacker 3, Promizer 0.1. - added transco table for sample names in Kefrens Sound Machine modules. - New supported (exe/data)formats : - - Powerpacker 4.0 Library EXE packer (rare) - -20122000 Version 1.49.0 - - KRIS depacker/ripper debugged - Some useless code removed - New supported (synth) formats : - - MED (MMD0/MMD1) by Teijo Kinnunen (19??) - New supported (exe/data)formats : - - Crunchmania Address EXE packer (rather frequent) - -01072000 Version 1.48 - - New supported (exe/data)formats : - - Amnesty Design (1AM) data packer (very rare) - - Amnesty Design (2AM) data packer (very rare) - -23062000 Version 1.47 - - Two new effects added in XANN Packer format. - Added another UNIC tracker case ("UNIC" string ..) - New supported (exe/data)formats : - - BytekillerPro 1.0 - and rebuilding of header (very rare) - - HQC Cruncher 2.0 - no rebuild yet (very rare) - - Try-It Cruncher 1.01 - with rebuild (very rare) - (too few exemple to stick on this ripper ...) - New supported (synth) formats : - - Future Composer 1.3 (by Supersero / The Superions - 1990 ?) - - Future Composer 1.4 (by Supersero / The Superions - 1990) - -03042000 Version 1.46 - - mainly some small debugging in various tests. - all those corrected bugs where pointed out by Thomas Neumann - some other are not yet corrected though. I made all the quickies - before that hard stuff :). - -30111999 Version 1.45.c3 - - Finally editable extension are working ... even the last one. I'm - working on long extensions now, not only 3 chars. - New supported (exe/data)formats : - - CRND Data Cruncher (very rare) - - =SB= Data Cruncher (very rare) - - SF Data Cruncher (rare) - - Virtual Dreams (VDCO) Data Cruncher (very rare) - - SQ/SP Data Cruncher (missing SA/SC ..) - New supported (PTK Clone) formats : - - IceTracker 1.0 (IcePic) - - Soundtracker 2.6 (Mnemotron / Spreadpoint) - More optimizings by removing fopen() funcs. There's but a few - formats left to do. - Enhanced rebuilding of Time Crunched Binaries (24 last bytes) - Debugged Module Protector depacker - some internal rewritting ... mostly to speed-up and to - shorten more than quite a bit binaries. - -06061999 Version 1.44.005 - - Major rewritting ... a dozen or so files removed !. - Overall bugs corrections (mainly around sizes calculations) - A bug in UNIC2 ripper ... some unallocated value :(. - Aome debugging in Pha-ripper (still some job) - Aome bugs in UNIC1 tester ... stupid bugs, as usual :(. - Rrewrote some parts (restructured source code ... less lines) - Added another IAM packer (data) case ("ATM5") - Added some code to rewrite the header of EXE files with empty and/ - or no header. Usefull with oldish megademos :). That goes for - every supported EXE format. Get the list below. - Optimized PTK-depackers by removing the open() and read() - functions ... very high speed while depacking now :). done for - the following formats (Heh it takes time !!) : - - ProRunner v2.0 - SKYT packer - STIM (Slamtilt) packer - - Zen packer - Xann packer - Wanton packer - - Unic tracker v1/v2 - Tracker packer v3/v2 - Enhanced detection for the following formats : - - Digital Illusion detection (fake DI found) - - Startrekker pack (bugged) - - Zen packer (crashed the prog sometime) - - KRIS tracker (fake KRIS found) - - Pha Packer (bugged) - - SoundTracker (bugged) - - Tracker Packer 3 (bugged) - New supported (PTK Clone) formats : - - Quadra Composer - - The Dark Demon (group name) - - Fuchs Tracker (Andreas Fuchs - 1990) - New supported (synth) formats : - - SoundMonitor v3 (Brian Postma - 1993) - - JamCracker / Pro (M. Gemmel - 1989 / Xag of Betrayal - 1990) - - BSI Future Composer (Tony Bybell aka Slates of BSI - 1990-1996) - - Sound FX 1.3 (Battle Isle) by Christian Haller & Christian A. Weber - in 1988. V1.8 is samely copyrighted in 1989. - New supported (exe/data)formats : - - FIRE (RNC clone) Cruncher (rare) - - Max Packer 1.2 (exe rare) - - Ice! Cruncher (data ... rare) - - arcD Data Cruncher (very rare) - - PARA Data Cruncher (very rare) - - Propack (RNC) data (Rob Northern Cruncher ... Antic cruncher :) - found in a LOT of 88-93 games !. - - Double Action 1.0 (exe files) (in some rather old demos !) - - Powerpacker 2.3 / 3.0 / 4.0 (exe files) - - ByteKiller 2.0 / 3.0 (exe files) - - Tetrapack 1.02 (exe files) - - Master Cruncher 3.0 addr (exe files) - - Mega Cruncher 1.0/1.2 (exe files ... extremly old :) - - Spike Cruncher (exe files ... rare) - - StoneCracker 2.70 (exe files ... rare) - - StoneCracker 3.00 (data) - - Syncro Packer 4.6 (exe files ... rare) - - TNM Cruncher 1.1 (exe files ... rare) - - Super Cruncher 2.7 (exe files ... extremly rare) - - AMOS PowerPacker Bank "PPbk" (data) - - RelokIt 1.0 (exe files ... rare) - Following formats wont be supported : - - TPWM Cruncher (Battle Isle - Blue Byte) - Unrippable - - Powerpacker 2.0 (PP20) data - Unrippable - - StoneCracker 4.04/3.10 (exe file) bcoz it contains a S404 data - - Propack RNC (exe files) (RNC data inside) - - IAM packer 1.0 too (exe files) (ICE! or ATM5 data inside) - -26021999 Version 1.43 (not released) - - Module Protector and Heatseeker detections enhanced - (very look alike formats ..) - Fake ProPacker 3.0 were found ... corrected. - Fake UNIC tracker were found ... corrected. - Bad PP20 localisation corrected - Removed "converting to ptk" msg when ripping S404 files :) - Bug in Phapacker depacker corrected (still some job in there !) - Rewrote 20% of Promizer 1.8a depacker ... some problems with - the pattern list. - Many fake soundtracker were found ... removed a lot !. - Fake "damaged _TYPES_ file" error message corrected. - New filename when saving. alphabetical letters proved to be not - enough for some productions ... so, now, it's numbers !. (max:99999999) - good job to code that coz my sources were a bit shitty :) - New supported (EXE) format : - - Tetrapack 2.2/2.1 (Exe-files, not music file) - - Crunchmania / Crunchmania Normal (packed data files) - - Defjam Cruncher 3.2 / 3.2 pro (Exe-files) - - Stonecracker 4.01 / 4.03 / 3.10 (data) - - Byte Killer 1.3 (Exe-files) - - XPK-ed files (any format since it's all the same to get the size :) - - Imploder (data) - -13061998 Version 1.42 (not released) - - Protracker detection bug corrected - New supported format : - - SoundTracker (15 samples) - -20051998 Version 1.41 (20/05/98) - Save names not incrementing first letter when - ripping "not to be converted files" bug corrected - (e.g. PTK,BP,STC,StarTK) - New supported format : - - STIM (Slamtilt) - -22021998 Version 1.40 - - SIGSEGV error corrected (bad compiler option). - Digital Illusion detection bug corrected. - Game Music Creator detection bug corrected. - NoisePacker v1 detection bug corrected. - ProPacker v1 detection bug corrected. - UNIC tracker 2 detection bug corrected. - XANN packer detection bug corrected (Grrrr). - New depackers added (all in fact :) : - - AC1D packer - - Digital Illusion - - Eureka packer - - FC-M packer - - Fuzzac packer - - Game Music Creator - - Heatseeker mc1.0 - - Hornet packer - - Kris tracker (chip tracker) - - Kefrens Sound Machine - - Module Protector - - Noiserunner - - NoisePacker v1,v2 & v3 - - The Player 4.0A,4.0B,4.1A,5.0A,6.0A & 6.1A - - PhaPacker - - Promizer 0.1,1.0c,1.8a,2.0,4.0 - - Power Music - - ProPacker 1.0,2.1,3.0 - - ProRunner v1,v2 - - SKYT packer - - StarTrekker pack - - Tracker packer v1,v2,v3 - - UNIC tracker v1,v2 - - Wanton packer - - XANN packer - - ZEN packer - -15021998 Version 1.31 (not released) - - Enhanced tests for GMC modules. - Enhanced tests for Digital Illusion modules. - Enhanced tests for Eureka Packer modules. - Enhanced tests for UNIC 1/2 tracker modules. - P50A samples can be delta !!!. Argh (corrected). - P60A with packed samples cant be ripped for I dont know - how to calculate the packed sample sizes. - some P50A and P60A where not found bcoz of a lame test. - New supported formats : - - StarTrekker - - StoneCracker v4.04 Data (not a music file !!!) - - The Player 6.1A (yep !) - -21011998 Version 1.3 (not released) - - Complete rewrite of the package. - Enhanced tests for the XANN packer ... again (*SIGH*) - Added some sort of counter to display where we are in the file. - Somehow, it's useless but it tells the user the prog did not hang :), - the bad news is that it slows down a bit the prog :( ... and it's - ugly !. I'll try to do better sometime later. - New supported formats : - - Fuzzac packer - - Game Music Creator - - Heatseeker mc1.0 - - Kefrens Sound Machine - - Noiserunner - - NoisePacker v1 - - NoisePacker v2 - - NoisePacker v3 - - Promizer 4.0 - - ProPacker v1.0 - - The Player v4.0A - - The Player v4.0B - - The Player v4.1A - - The Player v5.0A - - The Player v6.0A - - Tracker Packer v1 - - Tracker Packer v2 - - Tracker Packer v3 - - Zen Packer - -12111997 Version 1.2 (not released) - - New supported formats : - - UNIC tracker v1 - - UNIC tracker v2 - - Protracker (forgot it :). - -11111997 Version 1.1 (not released) - - SoundMon size calculation bug corrected (synth smp ..) - Enhanced tests for the XANN packer. - Added the possibility to edit the default extensions. - New supported formats : - - AC1D packer - - Digital Illusion - - Eureka packer - - Module protector - - Pha packer - - Promizer v0.1 - - ProPacker v2.1 - - ProPacker v3.0 - - StarTrekker pack - -09111997 Version 1.0 (09/11/97) - First version (not released). diff --git a/prowizard/makefile b/prowizard/makefile deleted file mode 100755 index 4fde9180..00000000 --- a/prowizard/makefile +++ /dev/null @@ -1,48 +0,0 @@ -# Makefile for Pro-Wizard 1 (for PeeCee) -# copyright 1997-2005 Sylvain "asle" Chipaux -# -# add -DINCLUDEALL in the '.c.o' case for a compilation with the binaries rippers -# and type 'make' or 'make prowiz' -# -# 'make simple' to compile w/o binaries rippers. - -CFLAGS = -O6 -Wall -mpentiumpro -I/usr/local/include \ - -Wshadow -Wcast-align -Wstrict-prototypes \ - -Wmissing-prototypes -Wredundant-decls -Wnested-externs - -CC = gcc - -OFILESWOPACKER = prowiz.o \ - rippers/AC1D_packer.o rippers/AMOS-MusicBank.o rippers/BP-Soundmonitor.o rippers/BSI-FutureComposer.o rippers/ChipTracker.o rippers/DigiBooster17.o rippers/DigitalIllusion.o rippers/EurekaPacker.o rippers/FC-M-Packer.o rippers/FastTracker2.o rippers/FuchsTracker.o rippers/FutureComposer13.o rippers/FutureComposer14.o rippers/FuzzacPacker.o rippers/GPMO.o rippers/GameMusicCreator.o rippers/GnuPlayer.o rippers/HeatseekerMC10.o rippers/HornetPacker.o rippers/JamCracker.o rippers/KefrensSoundMachine.o rippers/MED-Octamed.o rippers/MOD-compatible.o rippers/ModuleProtector.o rippers/Newtron.o rippers/NoiseFromHeaven.o rippers/NoisePacker1.o rippers/NoisePacker2.o rippers/NoisePacker3.o rippers/NoiseRunner.o rippers/PhaPacker.o rippers/PolkaPacker.o rippers/PowerMusic.o rippers/ProPacker10.o rippers/ProPacker21.o rippers/ProPacker30.o rippers/Promizer01.o rippers/Promizer10c.o rippers/Promizer18a.o rippers/Promizer20.o rippers/Promizer40.o rippers/Prorunner10.o rippers/Prorunner20.o rippers/QuadraComposer.o rippers/SkytPacker.o rippers/SoundFX.o rippers/SoundTracker.o rippers/SoundTracker26.o rippers/StartrekkerPack.o rippers/StimPacker.o rippers/TMK.o rippers/TheDarkDemon.o rippers/ThePlayer22a.o rippers/ThePlayer30a.o rippers/ThePlayer40.o rippers/ThePlayer41a.o rippers/ThePlayer50a.o rippers/ThePlayer60a.o rippers/ThePlayer61a.o rippers/TrackerPacker1.o rippers/TrackerPacker2.o rippers/TrackerPacker3.o rippers/UnicTracker.o rippers/UnicTracker2.o rippers/WantonPacker.o rippers/XannPlayer.o rippers/ZenPacker.o \ - misc/misc.o misc/testbag.o -OFILESALL = prowiz.o \ - rippers/AC1D_packer.o rippers/AMOS-MusicBank.o rippers/BP-Soundmonitor.o rippers/BSI-FutureComposer.o rippers/ChipTracker.o rippers/DigiBooster17.o rippers/DigitalIllusion.o rippers/EurekaPacker.o rippers/FC-M-Packer.o rippers/FastTracker2.o rippers/FuchsTracker.o rippers/FutureComposer13.o rippers/FutureComposer14.o rippers/FuzzacPacker.o rippers/GPMO.o rippers/GameMusicCreator.o rippers/GnuPlayer.o rippers/HeatseekerMC10.o rippers/HornetPacker.o rippers/JamCracker.o rippers/KefrensSoundMachine.o rippers/MED-Octamed.o rippers/MOD-compatible.o rippers/ModuleProtector.o rippers/Newtron.o rippers/NoiseFromHeaven.o rippers/NoisePacker1.o rippers/NoisePacker2.o rippers/NoisePacker3.o rippers/NoiseRunner.o rippers/PhaPacker.o rippers/PolkaPacker.o rippers/PowerMusic.o rippers/ProPacker10.o rippers/ProPacker21.o rippers/ProPacker30.o rippers/Promizer01.o rippers/Promizer10c.o rippers/Promizer18a.o rippers/Promizer20.o rippers/Promizer40.o rippers/Prorunner10.o rippers/Prorunner20.o rippers/QuadraComposer.o rippers/SkytPacker.o rippers/SoundFX.o rippers/SoundTracker.o rippers/SoundTracker26.o rippers/StartrekkerPack.o rippers/StimPacker.o rippers/TMK.o rippers/TheDarkDemon.o rippers/ThePlayer22a.o rippers/ThePlayer30a.o rippers/ThePlayer40.o rippers/ThePlayer41a.o rippers/ThePlayer50a.o rippers/ThePlayer60a.o rippers/ThePlayer61a.o rippers/TrackerPacker1.o rippers/TrackerPacker2.o rippers/TrackerPacker3.o rippers/UnicTracker.o rippers/UnicTracker2.o rippers/WantonPacker.o rippers/XannPlayer.o rippers/ZenPacker.o \ - rippers/AMOS-PowerPackerBank.o rippers/Bytekiller.o rippers/Crunchmania-Address.o rippers/DefjamCruncher32-pro.o rippers/DoubleAction.o rippers/Dragpack100.o rippers/Dragpack252.o rippers/HQC2.o rippers/MasterCruncher30-Address.o rippers/MaxPacker12.o rippers/MegaCruncher-Object.o rippers/MegaCruncher.o rippers/PowerPacker23.o rippers/PowerPacker30.o rippers/PowerPacker40-library.o rippers/PowerPacker40.o rippers/RelokIt10.o rippers/SpikeCruncher.o rippers/StoneCracker270.o rippers/StoneCracker299.o rippers/StoneCracker299b.o rippers/StoneCracker299d.o rippers/StoneCracker300.o rippers/StoneCracker310.o rippers/SuperCruncher27.o rippers/SyncroPacker46.o rippers/TNMCruncher.o rippers/TetraPack102.o rippers/TetraPack21.o rippers/TetraPack22.o rippers/TimeCruncher17.o rippers/TryItCruncher101.o rippers/TurboSqueezer61.o rippers/datacrunchers.o \ - misc/misc.o misc/testbag.o - -EXEFILE = prowiz.exe - -# add -DINCLUDEALL here for a compilation with the binaries rippers -.c.o: - $(CC) -DUNIX -DINCLUDEALL $(CFLAGS) -c $< -o $@ - -all: prowiz - -simple: prowiz_wo_packer - -prowiz: $(OFILESALL) - $(CC) -o $(EXEFILE) -L/usr/local/lib -ldmalloc $(OFILESALL) - -prowiz_wo_packer: $(OFILESWOPACKER) - $(CC) -o $(EXEFILE) -L/usr/local/lib -ldmalloc $(OFILESWOPACKER) - -# -clean: clear - rm -f *.o - rm -f rippers/*.o - rm -f misc/*.o - rm -f core *.core - -# -clear: - rm -f *~ *.*~ rippers/*~ rippers/*.*~ misc/*~ misc/*.*~ include/*~ include/*.*~ *.i *.s diff --git a/prowizard/makefile.amiga b/prowizard/makefile.amiga deleted file mode 100755 index 99c1bc5e..00000000 --- a/prowizard/makefile.amiga +++ /dev/null @@ -1,31 +0,0 @@ -# Makefile for Pro-Wizard 1 (for PeeCee) -# copyright 1997-2005 Sylvain "asle" Chipaux -# Amiga port (05/2002) - -CFLAGS = -Wall -m68020 -IGNU:include -Iinclude -CC = gcc - -# -OFILES = prowiz.o \ - rippers/AC1D_packer.o rippers/AMOS-MusicBank.o rippers/BP-Soundmonitor.o rippers/BSI-FutureComposer.o rippers/ChipTracker.o rippers/DigiBooster17.o rippers/DigitalIllusion.o rippers/EurekaPacker.o rippers/FC-M-Packer.o rippers/FastTracker2.o rippers/FuchsTracker.o rippers/FutureComposer13.o rippers/FutureComposer14.o rippers/FuzzacPacker.o rippers/GPMO.o rippers/GameMusicCreator.o rippers/GnuPlayer.o rippers/HeatseekerMC10.o rippers/HornetPacker.o rippers/JamCracker.o rippers/KefrensSoundMachine.o rippers/MED-Octamed.o rippers/MOD-compatible.o rippers/ModuleProtector.o rippers/Newtron.o rippers/NoiseFromHeaven.o rippers/NoisePacker1.o rippers/NoisePacker2.o rippers/NoisePacker3.o rippers/NoiseRunner.o rippers/PhaPacker.o rippers/PolkaPacker.o rippers/PowerMusic.o rippers/ProPacker10.o rippers/ProPacker21.o rippers/ProPacker30.o rippers/Promizer01.o rippers/Promizer10c.o rippers/Promizer18a.o rippers/Promizer20.o rippers/Promizer40.o rippers/Prorunner10.o rippers/Prorunner20.o rippers/QuadraComposer.o rippers/SkytPacker.o rippers/SoundFX.o rippers/SoundTracker.o rippers/SoundTracker26.o rippers/StartrekkerPack.o rippers/StimPacker.o rippers/TMK.o rippers/TheDarkDemon.o rippers/ThePlayer22a.o rippers/ThePlayer30a.o rippers/ThePlayer40.o rippers/ThePlayer41a.o rippers/ThePlayer50a.o rippers/ThePlayer60a.o rippers/ThePlayer61a.o rippers/TrackerPacker1.o rippers/TrackerPacker2.o rippers/TrackerPacker3.o rippers/UnicTracker.o rippers/UnicTracker2.o rippers/WantonPacker.o rippers/XannPlayer.o rippers/ZenPacker.o \ - rippers/AMOS-PowerPackerBank.o rippers/Bytekiller.o rippers/Crunchmania-Address.o rippers/DefjamCruncher32-pro.o rippers/DoubleAction.o rippers/Dragpack100.o rippers/Dragpack252.o rippers/HQC2.o rippers/MasterCruncher30-Address.o rippers/MaxPacker12.o rippers/MegaCruncher-Object.o rippers/MegaCruncher.o rippers/PowerPacker23.o rippers/PowerPacker30.o rippers/PowerPacker40-library.o rippers/PowerPacker40.o rippers/RelokIt10.o rippers/SpikeCruncher.o rippers/StoneCracker270.o rippers/StoneCracker299.o rippers/StoneCracker299b.o rippers/StoneCracker299d.o rippers/StoneCracker300.o rippers/StoneCracker310.o rippers/SuperCruncher27.o rippers/SyncroPacker46.o rippers/TNMCruncher.o rippers/TetraPack102.o rippers/TetraPack21.o rippers/TetraPack22.o rippers/TimeCruncher17.o rippers/TryItCruncher101.o rippers/TurboSqueezer61.o rippers/datacrunchers.o \ - misc/misc.o misc/testbag.o - -EXEFILE = prowiz.exe - -.c.o: - $(CC) -DUNIX $(CFLAGS) -c $< -o zob:pr/$@ - -prowiz: $(OFILES) - $(CC) -o $(EXEFILE) $(OFILES) - -# -clean: clear - rm -f *.o - rm -f rippers/*.o - rm -f misc/*.o - rm -f core *.core - -# -clear: - rm -f *~ *.*~ rippers/*~ rippers/*.*~ misc/*~ misc/*.*~ include/*~ include/*.*~ diff --git a/prowizard/makefile.mingwin32 b/prowizard/makefile.mingwin32 deleted file mode 100755 index 04a8665d..00000000 --- a/prowizard/makefile.mingwin32 +++ /dev/null @@ -1,42 +0,0 @@ -# Makefile for Pro-Wizard 1 (for PeeCee) -# copyright 1997-2005 Sylvain "asle" Chipaux -# Fixed for MinGWin32 by Xigh !... Thx - -CFLAGS = -O6 -Wall -march=pentiumpro -Iinclude -CC = gcc - -# - -OFILESWOPACKER = prowiz.o \ - rippers/AC1D_packer.o rippers/AMOS-MusicBank.o rippers/BP-Soundmonitor.o rippers/BSI-FutureComposer.o rippers/ChipTracker.o rippers/DigiBooster17.o rippers/DigitalIllusion.o rippers/EurekaPacker.o rippers/FC-M-Packer.o rippers/FastTracker2.o rippers/FuchsTracker.o rippers/FutureComposer13.o rippers/FutureComposer14.o rippers/FuzzacPacker.o rippers/GPMO.o rippers/GameMusicCreator.o rippers/GnuPlayer.o rippers/HeatseekerMC10.o rippers/HornetPacker.o rippers/JamCracker.o rippers/KefrensSoundMachine.o rippers/MED-Octamed.o rippers/MOD-compatible.o rippers/ModuleProtector.o rippers/Newtron.o rippers/NoiseFromHeaven.o rippers/NoisePacker1.o rippers/NoisePacker2.o rippers/NoisePacker3.o rippers/NoiseRunner.o rippers/PhaPacker.o rippers/PolkaPacker.o rippers/PowerMusic.o rippers/ProPacker10.o rippers/ProPacker21.o rippers/ProPacker30.o rippers/Promizer01.o rippers/Promizer10c.o rippers/Promizer18a.o rippers/Promizer20.o rippers/Promizer40.o rippers/Prorunner10.o rippers/Prorunner20.o rippers/QuadraComposer.o rippers/SkytPacker.o rippers/SoundFX.o rippers/SoundTracker.o rippers/SoundTracker26.o rippers/StartrekkerPack.o rippers/StimPacker.o rippers/TMK.o rippers/TheDarkDemon.o rippers/ThePlayer22a.o rippers/ThePlayer30a.o rippers/ThePlayer40.o rippers/ThePlayer41a.o rippers/ThePlayer50a.o rippers/ThePlayer60a.o rippers/ThePlayer61a.o rippers/TrackerPacker1.o rippers/TrackerPacker2.o rippers/TrackerPacker3.o rippers/UnicTracker.o rippers/UnicTracker2.o rippers/WantonPacker.o rippers/XannPlayer.o rippers/ZenPacker.o \ - misc/misc.o misc/testbag.o -OFILESALL = prowiz.o \ - rippers/AC1D_packer.o rippers/AMOS-MusicBank.o rippers/BP-Soundmonitor.o rippers/BSI-FutureComposer.o rippers/ChipTracker.o rippers/DigiBooster17.o rippers/DigitalIllusion.o rippers/EurekaPacker.o rippers/FC-M-Packer.o rippers/FastTracker2.o rippers/FuchsTracker.o rippers/FutureComposer13.o rippers/FutureComposer14.o rippers/FuzzacPacker.o rippers/GPMO.o rippers/GameMusicCreator.o rippers/GnuPlayer.o rippers/HeatseekerMC10.o rippers/HornetPacker.o rippers/JamCracker.o rippers/KefrensSoundMachine.o rippers/MED-Octamed.o rippers/MOD-compatible.o rippers/ModuleProtector.o rippers/Newtron.o rippers/NoiseFromHeaven.o rippers/NoisePacker1.o rippers/NoisePacker2.o rippers/NoisePacker3.o rippers/NoiseRunner.o rippers/PhaPacker.o rippers/PolkaPacker.o rippers/PowerMusic.o rippers/ProPacker10.o rippers/ProPacker21.o rippers/ProPacker30.o rippers/Promizer01.o rippers/Promizer10c.o rippers/Promizer18a.o rippers/Promizer20.o rippers/Promizer40.o rippers/Prorunner10.o rippers/Prorunner20.o rippers/QuadraComposer.o rippers/SkytPacker.o rippers/SoundFX.o rippers/SoundTracker.o rippers/SoundTracker26.o rippers/StartrekkerPack.o rippers/StimPacker.o rippers/TMK.o rippers/TheDarkDemon.o rippers/ThePlayer22a.o rippers/ThePlayer30a.o rippers/ThePlayer40.o rippers/ThePlayer41a.o rippers/ThePlayer50a.o rippers/ThePlayer60a.o rippers/ThePlayer61a.o rippers/TrackerPacker1.o rippers/TrackerPacker2.o rippers/TrackerPacker3.o rippers/UnicTracker.o rippers/UnicTracker2.o rippers/WantonPacker.o rippers/XannPlayer.o rippers/ZenPacker.o \ - rippers/AMOS-PowerPackerBank.o rippers/Bytekiller.o rippers/Crunchmania-Address.o rippers/DefjamCruncher32-pro.o rippers/DoubleAction.o rippers/Dragpack100.o rippers/Dragpack252.o rippers/HQC2.o rippers/MasterCruncher30-Address.o rippers/MaxPacker12.o rippers/MegaCruncher-Object.o rippers/MegaCruncher.o rippers/PowerPacker23.o rippers/PowerPacker30.o rippers/PowerPacker40-library.o rippers/PowerPacker40.o rippers/RelokIt10.o rippers/SpikeCruncher.o rippers/StoneCracker270.o rippers/StoneCracker299.o rippers/StoneCracker299b.o rippers/StoneCracker299d.o rippers/StoneCracker300.o rippers/StoneCracker310.o rippers/SuperCruncher27.o rippers/SyncroPacker46.o rippers/TNMCruncher.o rippers/TetraPack102.o rippers/TetraPack21.o rippers/TetraPack22.o rippers/TimeCruncher17.o rippers/TryItCruncher101.o rippers/TurboSqueezer61.o rippers/datacrunchers.o \ - misc/misc.o misc/testbag.o - -EXEFILE = prowiz.exe - -# add -DINCLUDEALL here for a compilation with the binaries rippers -.c.o: - $(CC) -DDOS $(CFLAGS) -c $< -o $@ - -prowiz: $(OFILES) - $(CC) -o $(EXEFILE) $(OFILES) - -# -clean: clear - -CMD /c "DEL /F /Q *.o" - -CMD /c "DEL /F /Q rippers\*.o" - -CMD /c "DEL /F /Q misc\*.o" - -CMD /c "DEL /F /Q core" - -# -clear: - -CMD /c "DEL /F /Q *.*~" - -CMD /c "DEL /F /Q rippers\*~" - -CMD /c "DEL /F /Q rippers\*.*~" - -CMD /c "DEL /F /Q misc\*~" - -CMD /c "DEL /F /Q misc\*.*~" - -CMD /c "DEL /F /Q include\*~" - -CMD /c "DEL /F /Q include\*.*~" diff --git a/prowizard/misc/misc.c b/prowizard/misc/misc.c index 512d2f72..a5ef7e7c 100755 --- a/prowizard/misc/misc.c +++ b/prowizard/misc/misc.c @@ -7,6 +7,7 @@ extern void write_log (const char *, ...); * at now, when this fonction is called, no global var has been used ... * and can be here :). (save for the input file pointer ...) */ +#if 0 void Support_Types ( void ) { long types_file_size, cpt; @@ -26,7 +27,7 @@ void Support_Types ( void ) } /* get "_TYPES_" size */ - types_file_size = GetFileSizeX ( _TYPES_FILENAME ); + types_file_size = PWGetFileSize ( _TYPES_FILENAME ); fseek ( types_file , 0 , 0 ); /* just to be sure. put the fp back at the beginning */ PW_i = 0; /* will inc up to _KNOWN_FORMATS */ @@ -65,6 +66,7 @@ void Support_Types ( void ) fclose ( types_file ); } +#endif /*Uchar *XighExtensions[_KNOWN_FORMATS+1];*/ @@ -204,12 +206,16 @@ void Support_Types_FileDefault ( void ) strcpy ( Extensions[122], "DragPack100" ); strcpy ( Extensions[123], "SPv3" ); strcpy ( Extensions[124], "AtomikPackerData" ); - strcpy ( Extensions[125], "---" ); + strcpy ( Extensions[125], "AutomationPackerData" ); + // strcpy ( Extensions[125], "TreasurePattern" ); + strcpy ( Extensions[126], "SGTPacker" ); + strcpy ( Extensions[127], "GNUPacker12" ); + strcpy ( Extensions[128], "CrunchmaniaSimple" ); + strcpy ( Extensions[129], "dmu" ); + strcpy ( Extensions[130], "---" ); } - - /* * saving what's found. Mainly music file here. * PW_Start_Address & OutputSize are global .. not everybody likes diff --git a/prowizard/prowiz.c b/prowizard/prowiz.c index f76df8ac..03f08f1d 100755 --- a/prowizard/prowiz.c +++ b/prowizard/prowiz.c @@ -1,27 +1,14 @@ /* * Pro-Wizard_1.c * - * 1997-2005 (c) Sylvain "Asle" Chipaux + * 1997-2006 (c) Sylvain "Asle" Chipaux * */ -#ifdef DOS -#include "include\globals.h" -#include "include\extern.h" -#include "include\vars.h" -#endif - - -#ifdef UNIX #include "rippers/globals.h" #include "rippers/extern.h" #include "rippers/vars.h" -#if 0 -#include "include/globals.h" -#include "include/extern.h" -#include "include/vars.h" -#endif -#endif + #if 0 int main ( int ac , char **av ) @@ -29,12 +16,11 @@ int main ( int ac , char **av ) int prowizard_search (Uchar *in_data_p, int PW_in_size_p) #endif { - Support_Types (); + Support_Types_FileDefault (); in_data = in_data_p; PW_in_size = PW_in_size_p; - #if 0 - printf ( "\n\n-<([ Pro-Wizard v1.6 ])>-\n\n" ); + printf ( "\n\n-<([ Pro-Wizard v1.61a ])>-\n\n" ); if ( ac != 2 ) { @@ -55,7 +41,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) /*printf ( "%x,%x,%x\n" , Extensions[70][0], Extensions[70][1], Extensions[70][2] );*/ /* get input file size */ - PW_in_size = GetFileSizeX (av[1]); + PW_in_size = PWGetFileSize (av[1]); fseek ( PW_in , 0 , 0 ); /* probably useless */ printf ( "input file size : %ld\n" , PW_in_size ); if ( PW_in_size < MINIMAL_FILE_LENGHT ) @@ -79,7 +65,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) /********************************************************************/ /************************** SEARCH ******************************/ /********************************************************************/ - for ( (long)PW_i=0 ; (long)PW_i<(PW_in_size-MINIMAL_FILE_LENGHT) ; (long)PW_i+=1 ) + for ( PW_i=0 ; PW_i<(PW_in_size-MINIMAL_FILE_LENGHT) ; PW_i+=1 ) { /* display where we are every 10 Kbytes */ /* if ( (PW_i%10240) == 0 )*/ @@ -115,7 +101,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) } } - /* first, let's take care of the formats with 'ID' value < 0x40 */ + /* first, let's take care of the formats with 'ID' value <= 0x40 */ /* "!PM!" : ID of Power Music */ if ( (in_data[PW_i] == '!') && (in_data[PW_i+1] == 'P') && @@ -129,6 +115,19 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) continue; } } + /* Treasure Patterns ?*/ + /* 0x4000 : ID of Treasure Patterns ? not sure */ + /* + if ( (in_data[PW_i] == 0x00) ) + { + if ( testTreasure() != BAD ) + { + Rip_Treasure (); + Depack_Treasure (); + continue; + } + } + */ #ifdef INCLUDEALL /* StoneCracker 2.92 data (ex-$08090A08 data cruncher) */ if ( (in_data[PW_i] == 0x08) && @@ -287,6 +286,15 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) continue; } + /* SGTPacker */ + /* + if ( testSGT() != BAD ) + { + Rip_SGT (); + Depack_SGT (); + continue; + } + */ /* eureka packer */ if ( testEUREKA() != BAD ) { @@ -764,8 +772,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) (in_data[PW_i+3] == 0x8C) && (in_data[PW_i+4] == 0x4B) && (in_data[PW_i+5] == 0xF9) && - (in_data[PW_i+6] == 0x00) && - ((in_data[PW_i+7] == 0xDF)||(in_data[PW_i+7] == 0x03)) ) + (in_data[PW_i+6] == 0x00)) { if ( testDefjam32() == BAD ) break; @@ -930,11 +937,27 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) (in_data[PW_i+14] == 0xD1 ) && (in_data[PW_i+15] == 0xC1 ) ) { - if ( testMegaCruncher12() != BAD ) - { - Rip_MegaCruncher (); + if ( testMegaCruncher12() == BAD ) + break; + Rip_MegaCruncher (); + break; + } + + /* Double Action v1.0 */ + if ( (in_data[PW_i+1] == 0xF9 ) && + (in_data[PW_i+2] == 0x00 ) && + (in_data[PW_i+3] == 0xDF ) && + (in_data[PW_i+137]== 0xAB ) && + (in_data[PW_i+138]== 0xD1 ) && + (in_data[PW_i+139]== 0xC0 ) && + (in_data[PW_i+140]== 0xD3 ) && + (in_data[PW_i+141]== 0xC0 ) && + (in_data[PW_i+142]== 0x23 ) && + (in_data[PW_i+143]== 0x20 ) ) + { + if ( testDoubleAction10() == BAD ) break; - } + Rip_DoubleAction10 (); break; } #endif @@ -1176,6 +1199,52 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) continue; } + /* Crunchmania Address (another)*/ + if ((in_data[PW_i+1] == 0xe7) && + (in_data[PW_i+14] == 0x20) && + (in_data[PW_i+15] == 0x4C) && + (in_data[PW_i+16] == 0x47) && + (in_data[PW_i+17] == 0xFA) && + (in_data[PW_i+18] == 0x00) && + (in_data[PW_i+19] == 0x0C) && + (in_data[PW_i+24] == 0x51) && + (in_data[PW_i+25] == 0xCF) && + (in_data[PW_i+26] == 0xFF) && + (in_data[PW_i+27] == 0xFC) && + (in_data[PW_i+28] == 0x4E) && + (in_data[PW_i+29] == 0xD0) && + (in_data[PW_i+30] == 0x43) && + (in_data[PW_i+31] == 0xF9) ) + { + if ( testcrunchmaniaAddr() == BAD ) + break; + Rip_CrunchmaniaAddr (); + continue; + } + + /* Crunchmania Simple */ + if ((in_data[PW_i+1] == 0xE7) && + (in_data[PW_i+2] == 0xFF) && + (in_data[PW_i+3] == 0xFF) && + (in_data[PW_i+4] == 0x45) && + (in_data[PW_i+5] == 0xFA) && + (in_data[PW_i+6] == 0x01) && + (in_data[PW_i+7] == 0x66) && + (in_data[PW_i+8] == 0x22) && + (in_data[PW_i+9] == 0x1A) && + (in_data[PW_i+10] == 0x24) && + (in_data[PW_i+11] == 0x1A) && + (in_data[PW_i+12] == 0x22) && + (in_data[PW_i+13] == 0x4A) && + (in_data[PW_i+14] == 0x28) && + (in_data[PW_i+15] == 0x7A) ) + { + if ( testcrunchmaniaSimple() == BAD ) + break; + Rip_CrunchmaniaSimple(); + continue; + } + /* RelokIt 1.0 */ if ( (in_data[PW_i+1] == 0xE7) && (in_data[PW_i+2] == 0xFF) && @@ -1281,6 +1350,28 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) Rip_Dragpack100 (); break; } + /* GNU Packer 1.2 */ + if ( (in_data[PW_i+1] == 0xE7) && + (in_data[PW_i+2] == 0xFF) && + (in_data[PW_i+3] == 0xFE) && + (in_data[PW_i+4] == 0x4B) && + (in_data[PW_i+5] == 0xFA) && + (in_data[PW_i+6] == 0x02) && + (in_data[PW_i+7] == 0x32) && + (in_data[PW_i+8] == 0x4D) && + (in_data[PW_i+9] == 0xFA) && + (in_data[PW_i+10] == 0x02) && + (in_data[PW_i+11] == 0x46) && + (in_data[PW_i+12] == 0x20) && + (in_data[PW_i+13] == 0x6D) && + (in_data[PW_i+14] == 0x00) && + (in_data[PW_i+15] == 0x0C) ) + { + if ( testGNUPacker12() == BAD ) + break; + Rip_GNUPacker12 (); + break; + } #endif break; @@ -1963,6 +2054,18 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) break; } } + /* Mugician */ + if ( ( in_data[PW_i+1] == 'G' ) && + ( in_data[PW_i+2] == 'I' ) && + ( in_data[PW_i+3] == 'C' ) ) + { + /* */ + if ( testMUGICIAN() != BAD ) + { + Rip_MUGICIAN (); + break; + } + } break; case 'V': /* "V.2" */ @@ -2239,20 +2342,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) #endif break; - case 0xA9: -#ifdef INCLUDEALL - /* Double Action v1.0 */ - if ( (in_data[PW_i+1] == ' ') && - (in_data[PW_i+2] == 'B') ) - { - if ( testDoubleAction10() == BAD ) - break; - Rip_DoubleAction10 (); - break; - } -#endif - break; - case 0xAC: /* AC1D packer ?!? */ if ( in_data[PW_i+1] == 0x1D ) @@ -2285,6 +2374,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p) } /* end of switch */ } + #if 0 free ( in_data ); printf ( "\n" ); diff --git a/prowizard/rippers/AC1D_packer.c b/prowizard/rippers/AC1D_packer.c index 1fee2642..6924504e 100755 --- a/prowizard/rippers/AC1D_packer.c +++ b/prowizard/rippers/AC1D_packer.c @@ -97,8 +97,6 @@ void Depack_AC1D ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; memset (Pattern_Addresses , 0 , 128*4); BZERO (Pattern_Sizes , 128*4); diff --git a/prowizard/rippers/AMOS-MusicBank.c b/prowizard/rippers/AMOS-MusicBank.c index 2760cae5..ea330704 100755 --- a/prowizard/rippers/AMOS-MusicBank.c +++ b/prowizard/rippers/AMOS-MusicBank.c @@ -84,8 +84,6 @@ void Depack_AmBk ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; fillPTKtable(poss); diff --git a/prowizard/rippers/ChipTracker.c b/prowizard/rippers/ChipTracker.c index a4ada302..60b8dc4e 100755 --- a/prowizard/rippers/ChipTracker.c +++ b/prowizard/rippers/ChipTracker.c @@ -108,8 +108,6 @@ void Depack_KRIS ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; fillPTKtable(poss); diff --git a/prowizard/rippers/Crunchmania-Address.c b/prowizard/rippers/Crunchmania-Address.c index cae86a7c..082fb7be 100755 --- a/prowizard/rippers/Crunchmania-Address.c +++ b/prowizard/rippers/Crunchmania-Address.c @@ -7,62 +7,74 @@ short testcrunchmaniaAddr ( void ) { - PW_Start_Address = PW_i - 4; - - if ( (in_data[PW_Start_Address+36] != 0x6F ) || - (in_data[PW_Start_Address+37] != 0x14 ) || - (in_data[PW_Start_Address+38] != 0x26 ) || - (in_data[PW_Start_Address+39] != 0x4A ) || - (in_data[PW_Start_Address+40] != 0x49 ) || - (in_data[PW_Start_Address+41] != 0xE9 ) || - (in_data[PW_Start_Address+46] != 0xE4 ) || - (in_data[PW_Start_Address+47] != 0x8F ) || - (in_data[PW_Start_Address+48] != 0x52 ) || - (in_data[PW_Start_Address+49] != 0x87 ) || - (in_data[PW_Start_Address+50] != 0x24 ) || - (in_data[PW_Start_Address+51] != 0x4C ) || - (in_data[PW_Start_Address+52] != 0x28 ) || - (in_data[PW_Start_Address+53] != 0xDB ) || - (in_data[PW_Start_Address+54] != 0x53 ) || - (in_data[PW_Start_Address+55] != 0x87 ) || - (in_data[PW_Start_Address+56] != 0x66 ) || - (in_data[PW_Start_Address+57] != 0xFA ) ) - { - /* should be enough :))) */ - /*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/ - return BAD; - + /*PW_Start_Address = PW_i - 4;*/ + PW_Start_Address = PW_i; + + if ( (in_data[PW_Start_Address+32] != 0x6F ) || + (in_data[PW_Start_Address+33] != 0x14 ) || + (in_data[PW_Start_Address+34] != 0x26 ) || + (in_data[PW_Start_Address+35] != 0x4A ) || + (in_data[PW_Start_Address+36] != 0x49 ) || + (in_data[PW_Start_Address+37] != 0xE9 ) || + (in_data[PW_Start_Address+42] != 0xE4 ) || + (in_data[PW_Start_Address+43] != 0x8F ) || + (in_data[PW_Start_Address+44] != 0x52 ) || + (in_data[PW_Start_Address+45] != 0x87 ) || + (in_data[PW_Start_Address+46] != 0x24 ) || + (in_data[PW_Start_Address+47] != 0x4C ) || + (in_data[PW_Start_Address+48] != 0x28 ) || + (in_data[PW_Start_Address+49] != 0xDB ) || + (in_data[PW_Start_Address+50] != 0x53 ) || + (in_data[PW_Start_Address+51] != 0x87 ) || + (in_data[PW_Start_Address+52] != 0x66 ) || + (in_data[PW_Start_Address+53] != 0xFA ) ) + { /* another case ...*/ + if ( (in_data[PW_Start_Address+36] != 0x22 ) || + (in_data[PW_Start_Address+37] != 0x1A ) || + (in_data[PW_Start_Address+38] != 0x24 ) || + (in_data[PW_Start_Address+39] != 0x1A ) || + (in_data[PW_Start_Address+40] != 0x47 ) || + (in_data[PW_Start_Address+41] != 0xEA ) ) + { + /* should be enough :))) */ + /*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/ + return BAD; + } } /* packed size */ - PW_l = ( (in_data[PW_Start_Address]*256*256*256) + - (in_data[PW_Start_Address+1]*256*256) + - (in_data[PW_Start_Address+2]*256) + - in_data[PW_Start_Address+3] ); + PW_j = ( (in_data[PW_Start_Address+6]*256) + + in_data[PW_Start_Address+7] )+10; + + PW_l = ( (in_data[PW_Start_Address+PW_j]*256*256*256) + + (in_data[PW_Start_Address+PW_j+1]*256*256) + + (in_data[PW_Start_Address+PW_j+2]*256) + + in_data[PW_Start_Address+PW_j+3] ); - PW_l *= 4; - PW_l += 36; + PW_l += (40 + PW_j); + if ((PW_l%4) != 0) + PW_l += 2; - if ( PW_i >= 28 ) + if ( PW_i >= 32 ) { - if ( (in_data[PW_Start_Address-28] != 0x00 ) || + if ( (in_data[PW_Start_Address-32] != 0x00 ) || + (in_data[PW_Start_Address-31] != 0x00 ) || + (in_data[PW_Start_Address-30] != 0x03 ) || + (in_data[PW_Start_Address-29] != 0xF3 ) || + (in_data[PW_Start_Address-28] != 0x00 ) || (in_data[PW_Start_Address-27] != 0x00 ) || - (in_data[PW_Start_Address-26] != 0x03 ) || - (in_data[PW_Start_Address-25] != 0xF3 ) || + (in_data[PW_Start_Address-26] != 0x00 ) || + (in_data[PW_Start_Address-25] != 0x00 ) || (in_data[PW_Start_Address-24] != 0x00 ) || (in_data[PW_Start_Address-23] != 0x00 ) || (in_data[PW_Start_Address-22] != 0x00 ) || - (in_data[PW_Start_Address-21] != 0x00 ) || + (in_data[PW_Start_Address-21] != 0x01 ) || (in_data[PW_Start_Address-20] != 0x00 ) || (in_data[PW_Start_Address-19] != 0x00 ) || (in_data[PW_Start_Address-18] != 0x00 ) || - (in_data[PW_Start_Address-17] != 0x01 ) || - (in_data[PW_Start_Address-16] != 0x00 ) || - (in_data[PW_Start_Address-15] != 0x00 ) || - (in_data[PW_Start_Address-14] != 0x00 ) || - (in_data[PW_Start_Address-13] != 0x00 ) ) + (in_data[PW_Start_Address-17] != 0x00 ) ) { Amiga_EXE_Header = BAD; } @@ -108,13 +120,12 @@ void Rip_CrunchmaniaAddr ( void ) Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2); Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1); Amiga_EXE_Header_Block[23] = Amiga_EXE_Header_Block[31] = *Whatever; - PW_Start_Address += 4; Save_Rip_Special ( "Crunchmania Address Exe-file", CRM1, Amiga_EXE_Header_Block , 32 ); free ( Amiga_EXE_Header_Block ); } else { - PW_Start_Address -= 28; + PW_Start_Address -= 32; Save_Rip ( "Crunchmania Address Exe-file", CRM1 ); } diff --git a/prowizard/rippers/Crunchmania-Simple.c b/prowizard/rippers/Crunchmania-Simple.c new file mode 100755 index 00000000..18dfdac1 --- /dev/null +++ b/prowizard/rippers/Crunchmania-Simple.c @@ -0,0 +1,139 @@ +/* testcrunchmaniaSimple() */ +/* Rip_CrunchmaniaSimple() */ + +#include "globals.h" +#include "extern.h" + + +short testcrunchmaniaSimple ( void ) +{ + PW_Start_Address = PW_i; + + if ( (in_data[PW_Start_Address+16] != 0xFF ) || + (in_data[PW_Start_Address+17] != 0xEC ) || + (in_data[PW_Start_Address+18] != 0xD9 ) || + (in_data[PW_Start_Address+19] != 0xCC ) || + (in_data[PW_Start_Address+20] != 0xD9 ) || + (in_data[PW_Start_Address+21] != 0xCC ) || + (in_data[PW_Start_Address+22] != 0x2A ) || + (in_data[PW_Start_Address+23] != 0x49 ) || + (in_data[PW_Start_Address+24] != 0xD3 ) || + (in_data[PW_Start_Address+25] != 0xC1 ) || + (in_data[PW_Start_Address+26] != 0xD5 ) || + (in_data[PW_Start_Address+27] != 0xC2 ) || + (in_data[PW_Start_Address+28] != 0x30 ) || + (in_data[PW_Start_Address+29] != 0x22 ) || + (in_data[PW_Start_Address+30] != 0x2C ) || + (in_data[PW_Start_Address+31] != 0x22 ) || + (in_data[PW_Start_Address+32] != 0x7E ) || + (in_data[PW_Start_Address+33] != 0x10 ) ) + { + return BAD; + } + + + /* packed size */ + PW_l = ( (in_data[PW_Start_Address+368]*256*256*256) + + (in_data[PW_Start_Address+369]*256*256) + + (in_data[PW_Start_Address+370]*256) + + in_data[PW_Start_Address+371] ); + + PW_l += 422; + + if ( PW_i >= 36 ) + { + if ( (in_data[PW_Start_Address-32] != 0x00 ) || + (in_data[PW_Start_Address-31] != 0x00 ) || + (in_data[PW_Start_Address-30] != 0x03 ) || + (in_data[PW_Start_Address-29] != 0xF3 ) || + (in_data[PW_Start_Address-28] != 0x00 ) || + (in_data[PW_Start_Address-27] != 0x00 ) || + (in_data[PW_Start_Address-26] != 0x00 ) || + (in_data[PW_Start_Address-25] != 0x00 ) || + (in_data[PW_Start_Address-24] != 0x00 ) || + (in_data[PW_Start_Address-23] != 0x00 ) || + (in_data[PW_Start_Address-22] != 0x00 ) || + (in_data[PW_Start_Address-21] != 0x02 ) || + (in_data[PW_Start_Address-20] != 0x00 ) || + (in_data[PW_Start_Address-19] != 0x00 ) || + (in_data[PW_Start_Address-18] != 0x00 ) || + (in_data[PW_Start_Address-17] != 0x00 ) ) + { + Amiga_EXE_Header = BAD; + } + else + Amiga_EXE_Header = GOOD; + } + else + Amiga_EXE_Header = BAD; + + return GOOD; + /* PW_l is the size of the pack */ +} + + +void Rip_CrunchmaniaSimple ( void ) +{ + /* PW_l is still the whole size */ + + Uchar * Amiga_EXE_Header_Block; + Uchar * Whatever; + + OutputSize = PW_l; + + CONVERT = BAD; + + if ( Amiga_EXE_Header == BAD ) + { + /* packed size */ + PW_n = ( (in_data[PW_Start_Address+364]*256*256*256) + + (in_data[PW_Start_Address+365]*256*256) + + (in_data[PW_Start_Address+366]*256) + + in_data[PW_Start_Address+367] ); + + OutputSize -= 36; + Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 ); + BZERO ( Amiga_EXE_Header_Block , 36 ); + Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03; + Amiga_EXE_Header_Block[3] = 0xF3; + Amiga_EXE_Header_Block[19] = 0x01; + Amiga_EXE_Header_Block[31] = 0xE9; + + Amiga_EXE_Header_Block[24] = 0x40; + Amiga_EXE_Header_Block[25] = in_data[PW_Start_Address+361]; + Amiga_EXE_Header_Block[26] = in_data[PW_Start_Address+362]; + Amiga_EXE_Header_Block[27] = in_data[PW_Start_Address+363]; + + /* WARNING !!! WORKS ONLY ON PC !!! */ + /* 68k machines code : c1 = *(Whatever+2); */ + /* 68k machines code : c2 = *(Whatever+3); */ + PW_j = PW_l - 48; + PW_j /= 4; + Whatever = (Uchar *) &PW_j; + Amiga_EXE_Header_Block[32] = *(Whatever+3); + Amiga_EXE_Header_Block[33] = *(Whatever+2); + Amiga_EXE_Header_Block[34] = *(Whatever+1); + Amiga_EXE_Header_Block[35] = *Whatever; + + if ((PW_n%4) != 0) + PW_n += 2; + PW_n += 372; + PW_n /= 4; + Whatever = (Uchar *) &PW_n; + Amiga_EXE_Header_Block[20] = *(Whatever+3); + Amiga_EXE_Header_Block[21] = *(Whatever+2); + Amiga_EXE_Header_Block[22] = *(Whatever+1); + Amiga_EXE_Header_Block[23] = *Whatever; + + Save_Rip_Special ( "Crunchmania Simple Exe-file", CrunchmaniaSimple, Amiga_EXE_Header_Block , 36 ); + free ( Amiga_EXE_Header_Block ); + } + else + { + PW_Start_Address -= 36; + Save_Rip ( "Crunchmania Simple Exe-file", CrunchmaniaSimple ); + } + + if ( Save_Status == GOOD ) + PW_i += 0x66; /* after detection sequence */ +} diff --git a/prowizard/rippers/DigitalIllusion.c b/prowizard/rippers/DigitalIllusion.c index 961e281c..a41fc56c 100755 --- a/prowizard/rippers/DigitalIllusion.c +++ b/prowizard/rippers/DigitalIllusion.c @@ -185,8 +185,6 @@ void Depack_DI ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; fillPTKtable(poss); diff --git a/prowizard/rippers/DoubleAction.c b/prowizard/rippers/DoubleAction.c index bfb066f6..82bcd745 100755 --- a/prowizard/rippers/DoubleAction.c +++ b/prowizard/rippers/DoubleAction.c @@ -7,30 +7,9 @@ short testDoubleAction10 ( void ) { - if ( PW_i < 123 ) - { -/*printf ( "#1\n" );*/ - return BAD; - } - PW_Start_Address = PW_i-123; - - if ( (in_data[PW_Start_Address+8] != 0x47 ) || - (in_data[PW_Start_Address+9] != 0xF9 ) || - (in_data[PW_Start_Address+10] != 0x00 ) || - (in_data[PW_Start_Address+11] != 0xDF ) || - (in_data[PW_Start_Address+12] != 0xF0 ) || - (in_data[PW_Start_Address+13] != 0x00 ) || - (in_data[PW_Start_Address+14] != 0x37 ) || - (in_data[PW_Start_Address+15] != 0x7C ) || - (in_data[PW_Start_Address+18] != 0x00 ) || - (in_data[PW_Start_Address+19] != 0x9A ) || - (in_data[PW_Start_Address+26] != 0x43 ) || - (in_data[PW_Start_Address+27] != 0xF9 ) || - (in_data[PW_Start_Address+28] != 0x00 ) || - (in_data[PW_Start_Address+29] != 0xBF ) || - (in_data[PW_Start_Address+30] != 0xD1 ) || - (in_data[PW_Start_Address+31] != 0x00 ) || - (in_data[PW_Start_Address+32] != 0x12 ) || + PW_Start_Address = PW_i; + + if ( (in_data[PW_Start_Address+32] != 0x12 ) || (in_data[PW_Start_Address+33] != 0xBC ) || (in_data[PW_Start_Address+34] != 0x00 ) || (in_data[PW_Start_Address+35] != 0xFD ) ) @@ -43,35 +22,38 @@ short testDoubleAction10 ( void ) /* packed size */ - PW_l = ( (in_data[PW_Start_Address+4]*256*256*256) + - (in_data[PW_Start_Address+5]*256*256) + - (in_data[PW_Start_Address+6]*256) + - in_data[PW_Start_Address+7] ); + PW_l = ( (in_data[PW_Start_Address-4]*256*256*256) + + (in_data[PW_Start_Address-3]*256*256) + + (in_data[PW_Start_Address-2]*256) + + in_data[PW_Start_Address-1] ); PW_l *= 4; PW_l += 36; if ( PW_l<0 || PW_l > 2000000) + { + /* should be enough :))) */ + /*printf ( "#3 Start:%ld (bad size)\n" , PW_Start_Address );*/ return BAD; + } - - if ( PW_i >= 147 ) + if ( PW_i >= 32 ) { - if ( (in_data[PW_Start_Address-24] != 0x00 ) || + if ( (in_data[PW_Start_Address-32] != 0x00 ) || + (in_data[PW_Start_Address-31] != 0x00 ) || + (in_data[PW_Start_Address-30] != 0x03 ) || + (in_data[PW_Start_Address-29] != 0xF3 ) || + (in_data[PW_Start_Address-28] != 0x00 ) || + (in_data[PW_Start_Address-27] != 0x00 ) || + (in_data[PW_Start_Address-26] != 0x00 ) || + (in_data[PW_Start_Address-25] != 0x00 ) || + (in_data[PW_Start_Address-24] != 0x00 ) || (in_data[PW_Start_Address-23] != 0x00 ) || - (in_data[PW_Start_Address-22] != 0x03 ) || - (in_data[PW_Start_Address-21] != 0xF3 ) || + (in_data[PW_Start_Address-22] != 0x00 ) || + (in_data[PW_Start_Address-21] != 0x01 ) || (in_data[PW_Start_Address-20] != 0x00 ) || (in_data[PW_Start_Address-19] != 0x00 ) || (in_data[PW_Start_Address-18] != 0x00 ) || - (in_data[PW_Start_Address-17] != 0x00 ) || - (in_data[PW_Start_Address-16] != 0x00 ) || - (in_data[PW_Start_Address-15] != 0x00 ) || - (in_data[PW_Start_Address-14] != 0x00 ) || - (in_data[PW_Start_Address-13] != 0x01 ) || - (in_data[PW_Start_Address-12] != 0x00 ) || - (in_data[PW_Start_Address-11] != 0x00 ) || - (in_data[PW_Start_Address-10] != 0x00 ) || - (in_data[PW_Start_Address-9] != 0x00 ) ) + (in_data[PW_Start_Address-17] != 0x00 ) ) { Amiga_EXE_Header = BAD; } @@ -92,34 +74,35 @@ void Rip_DoubleAction10 ( void ) { /* PW_l is still the whole size */ - Uchar * Amiga_EXE_Header_Block; +/* Uchar * Amiga_EXE_Header_Block;*/ OutputSize = PW_l; CONVERT = BAD; if ( Amiga_EXE_Header == BAD ) { - OutputSize -= 24; - Amiga_EXE_Header_Block = (Uchar *) malloc ( 24 ); - BZERO ( Amiga_EXE_Header_Block , 24 ); - Amiga_EXE_Header_Block[2] = 0x03; - Amiga_EXE_Header_Block[3] = 0xF3; - Amiga_EXE_Header_Block[11] = 0x01; - Amiga_EXE_Header_Block[20] = in_data[PW_Start_Address+4]; - Amiga_EXE_Header_Block[21] = in_data[PW_Start_Address+5]; - Amiga_EXE_Header_Block[22] = in_data[PW_Start_Address+6]; - Amiga_EXE_Header_Block[23] = in_data[PW_Start_Address+7]; - - Save_Rip_Special ( "Double Action 1.0 Exe-file", Double_Action, Amiga_EXE_Header_Block , 24 ); - free ( Amiga_EXE_Header_Block ); +/* OutputSize -= 24; */ +/* Amiga_EXE_Header_Block = (Uchar *) malloc ( 24 ); */ +/* BZERO ( Amiga_EXE_Header_Block , 24 ); */ +/* Amiga_EXE_Header_Block[2] = 0x03; */ +/* Amiga_EXE_Header_Block[3] = 0xF3; */ +/* Amiga_EXE_Header_Block[11] = 0x01; */ +/* Amiga_EXE_Header_Block[20] = in_data[PW_Start_Address+4]; */ +/* Amiga_EXE_Header_Block[21] = in_data[PW_Start_Address+5]; */ +/* Amiga_EXE_Header_Block[22] = in_data[PW_Start_Address+6]; */ +/* Amiga_EXE_Header_Block[23] = in_data[PW_Start_Address+7]; */ + +/* Save_Rip_Special ( "Double Action 1.0 Exe-file", Double_Action, Amiga_EXE_Header_Block , 24 ); */ +/* free ( Amiga_EXE_Header_Block ); */ + printf ("Double Action 1.0 Exe-file without header detected at %ld. Can't rebuild it, sorry\n", PW_Start_Address); } else { - PW_Start_Address -= 24; + PW_Start_Address -= 32; Save_Rip ( "Double Action 1.0 Exe-file", Double_Action ); } if ( Save_Status == GOOD ) - PW_i += (OutputSize - 149); /* 147 should do but call it "just to be sure" :) */ + PW_i += 0xA0; } diff --git a/prowizard/rippers/EurekaPacker.c b/prowizard/rippers/EurekaPacker.c index f4858466..2893ab9d 100755 --- a/prowizard/rippers/EurekaPacker.c +++ b/prowizard/rippers/EurekaPacker.c @@ -201,8 +201,6 @@ void Depack_EUREKA ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read header ... same as ptk */ fwrite ( &in_data[Where] , 1080 , 1 , out ); diff --git a/prowizard/rippers/FC-M-Packer.c b/prowizard/rippers/FC-M-Packer.c index 678d34db..2e7c1d2c 100755 --- a/prowizard/rippers/FC-M-Packer.c +++ b/prowizard/rippers/FC-M-Packer.c @@ -81,8 +81,6 @@ void Depack_FC_M ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* bypass "FC-M" ID */ /* bypass what looks like the version number .. */ diff --git a/prowizard/rippers/FuchsTracker.c b/prowizard/rippers/FuchsTracker.c index e314d456..4dab2cb5 100755 --- a/prowizard/rippers/FuchsTracker.c +++ b/prowizard/rippers/FuchsTracker.c @@ -148,8 +148,6 @@ void Depack_FuchsTracker ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* write empty ptk header */ Whatever = (Uchar *) malloc ( 1080 ); diff --git a/prowizard/rippers/FuzzacPacker.c b/prowizard/rippers/FuzzacPacker.c index 140c4046..84ae417d 100755 --- a/prowizard/rippers/FuzzacPacker.c +++ b/prowizard/rippers/FuzzacPacker.c @@ -114,8 +114,6 @@ void Depack_Fuzzac ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* bypass ID */ /* bypass 2 unknown bytes */ diff --git a/prowizard/rippers/GNUPacker12.c b/prowizard/rippers/GNUPacker12.c new file mode 100755 index 00000000..89d6cbbf --- /dev/null +++ b/prowizard/rippers/GNUPacker12.c @@ -0,0 +1,125 @@ +/* testGNUPacker12() */ +/* Rip_GNUPacker12() */ + +#include "globals.h" +#include "extern.h" + + +short testGNUPacker12 ( void ) +{ + PW_Start_Address = PW_i; + + if ( (in_data[PW_Start_Address+16] != 0x22 ) || + (in_data[PW_Start_Address+17] != 0x48 ) || + (in_data[PW_Start_Address+18] != 0xD3 ) || + (in_data[PW_Start_Address+19] != 0xED ) || + (in_data[PW_Start_Address+20] != 0x00 ) || + (in_data[PW_Start_Address+21] != 0x08 ) || + (in_data[PW_Start_Address+22] != 0x30 ) || + (in_data[PW_Start_Address+23] != 0xDE ) || + (in_data[PW_Start_Address+24] != 0xB1 ) || + (in_data[PW_Start_Address+25] != 0xC9 ) || + (in_data[PW_Start_Address+26] != 0x66 ) || + (in_data[PW_Start_Address+27] != 0x00 ) || + (in_data[PW_Start_Address+28] != 0xFF ) || + (in_data[PW_Start_Address+29] != 0xFA ) || + (in_data[PW_Start_Address+30] != 0x20 ) || + (in_data[PW_Start_Address+31] != 0x6D ) ) + { + /* should be enough :))) */ +/*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/ + return BAD; + + } + + + /* packed size */ + PW_l = ( (in_data[PW_Start_Address+0x240]*256*256*256) + + (in_data[PW_Start_Address+0x241]*256*256) + + (in_data[PW_Start_Address+0x242]*256) + + in_data[PW_Start_Address+0x243] ); + + PW_l += 0x274; + + if ( PW_i >= 32 ) + { + if ( (in_data[PW_Start_Address-32] != 0x00 ) || + (in_data[PW_Start_Address-31] != 0x00 ) || + (in_data[PW_Start_Address-30] != 0x03 ) || + (in_data[PW_Start_Address-29] != 0xF3 ) || + (in_data[PW_Start_Address-28] != 0x00 ) || + (in_data[PW_Start_Address-27] != 0x00 ) || + (in_data[PW_Start_Address-26] != 0x00 ) || + (in_data[PW_Start_Address-25] != 0x00 ) || + (in_data[PW_Start_Address-24] != 0x00 ) || + (in_data[PW_Start_Address-23] != 0x00 ) || + (in_data[PW_Start_Address-22] != 0x00 ) || + (in_data[PW_Start_Address-21] != 0x01 ) || + (in_data[PW_Start_Address-20] != 0x00 ) || + (in_data[PW_Start_Address-19] != 0x00 ) || + (in_data[PW_Start_Address-19] != 0x00 ) || + (in_data[PW_Start_Address-17] != 0x00 ) ) + { + Amiga_EXE_Header = BAD; + } + else + Amiga_EXE_Header = GOOD; + } + else + Amiga_EXE_Header = BAD; + + return GOOD; + /* PW_l is the size of the pack */ +} + + +void Rip_GNUPacker12 ( void ) +{ + /* PW_l is still the whole size */ + + Uchar * Amiga_EXE_Header_Block; + Uchar * Whatever; + + OutputSize = PW_l; + + CONVERT = BAD; + + if ( Amiga_EXE_Header == BAD ) + { + OutputSize -= 32; + Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 ); + BZERO ( Amiga_EXE_Header_Block , 32 ); + Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03; + Amiga_EXE_Header_Block[3] = 0xF3; + Amiga_EXE_Header_Block[11] = 0x01; + Amiga_EXE_Header_Block[27] = 0xE9; + + /* WARNING !!! WORKS ONLY ON PC !!! */ + /* 68k machines code : c1 = *(Whatever+2); */ + /* 68k machines code : c2 = *(Whatever+3); */ + PW_j = PW_l - 36; + PW_j /= 4; + Whatever = (Uchar *) &PW_j; + Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3); + Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2); + Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1); + Amiga_EXE_Header_Block[23] = Amiga_EXE_Header_Block[31] = *Whatever; + + in_data[PW_Start_Address+OutputSize-4] = 0x00; + in_data[PW_Start_Address+OutputSize-3] = 0x00; + in_data[PW_Start_Address+OutputSize-2] = 0x03; + in_data[PW_Start_Address+OutputSize-1] = 0xF2; + + Save_Rip_Special ( "GNU Packer 1.2 Exe-file", GNUPacker12, Amiga_EXE_Header_Block , 32 ); + free ( Amiga_EXE_Header_Block ); + } + else + { + PW_Start_Address -= 32; + Save_Rip ( "GNU Packer 1.2 Exe-file", GNUPacker12 ); + } + + if ( Save_Status == GOOD ) + PW_i += 32; +} + diff --git a/prowizard/rippers/GPMO.c b/prowizard/rippers/GPMO.c index e2c72a13..f5965e08 100755 --- a/prowizard/rippers/GPMO.c +++ b/prowizard/rippers/GPMO.c @@ -145,8 +145,6 @@ void Depack_GPMO ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* get whole sample size and patch vols (/2)*/ for ( i=0 ; i<31 ; i++ ) diff --git a/prowizard/rippers/GameMusicCreator.c b/prowizard/rippers/GameMusicCreator.c index c43630f5..d2f2f85a 100755 --- a/prowizard/rippers/GameMusicCreator.c +++ b/prowizard/rippers/GameMusicCreator.c @@ -183,8 +183,6 @@ void Depack_GMC ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* title */ Whatever = (Uchar *) malloc ( 1024 ); diff --git a/prowizard/rippers/GnuPlayer.c b/prowizard/rippers/GnuPlayer.c index cf721af8..9d09c51d 100755 --- a/prowizard/rippers/GnuPlayer.c +++ b/prowizard/rippers/GnuPlayer.c @@ -102,8 +102,6 @@ void Depack_GnuPlayer ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /*info = fopen ( "info", "w+b" );*/ /* read and write title */ @@ -306,10 +304,10 @@ void Depack_GnuPlayer ( void ) { samp = (in_data[Where]>>4)&0x0f; if ( samp & 0x08 ) samp -= 0x10; - Whatever[k++] = (Whatever[k-1] + samp); + Whatever[k] = (Whatever[k-1] + samp); k++; samp = in_data[Where] & 0x0f; if ( samp & 0x08 ) samp -= 0x10; - Whatever[k++] = (Whatever[k-1] + samp); + Whatever[k] = (Whatever[k-1] + samp); k++; Where += 1; } Where -= 1; diff --git a/prowizard/rippers/HeatseekerMC10.c b/prowizard/rippers/HeatseekerMC10.c index cd3da418..04c0e5f4 100755 --- a/prowizard/rippers/HeatseekerMC10.c +++ b/prowizard/rippers/HeatseekerMC10.c @@ -192,8 +192,6 @@ void Depack_HEATSEEKER ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* write title */ Whatever = (Uchar *) malloc (1024); diff --git a/prowizard/rippers/HornetPacker.c b/prowizard/rippers/HornetPacker.c index 71dc1bb7..86febf4c 100755 --- a/prowizard/rippers/HornetPacker.c +++ b/prowizard/rippers/HornetPacker.c @@ -82,8 +82,6 @@ void Depack_HRT ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read header */ Whatever = (Uchar *) malloc (1024); diff --git a/prowizard/rippers/KefrensSoundMachine.c b/prowizard/rippers/KefrensSoundMachine.c index 3e281c27..3161c4c4 100755 --- a/prowizard/rippers/KefrensSoundMachine.c +++ b/prowizard/rippers/KefrensSoundMachine.c @@ -125,8 +125,6 @@ void Depack_KSM ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* title */ Whatever = (Uchar *) malloc ( 1024 ); diff --git a/prowizard/rippers/ModuleProtector.c b/prowizard/rippers/ModuleProtector.c index 9faa3813..af677441 100755 --- a/prowizard/rippers/ModuleProtector.c +++ b/prowizard/rippers/ModuleProtector.c @@ -264,8 +264,6 @@ void Depack_MP ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; Whatever = (Uchar *) malloc (64); BZERO ( Whatever , 64 ); diff --git a/prowizard/rippers/Mugician.c b/prowizard/rippers/Mugician.c new file mode 100755 index 00000000..954c396b --- /dev/null +++ b/prowizard/rippers/Mugician.c @@ -0,0 +1,109 @@ +/* testMUGICIAN() */ +/* Rip_MUGICIAN() */ + +#include "globals.h" +#include "extern.h" + +short testMUGICIAN ( void ) +{ + if ( PW_i<2 ) + { + /*printf ( "#0.0 (start:%ld)\n" , PW_Start_Address);*/ + return BAD; + } + PW_Start_Address = PW_i-2; + + if (( in_data[PW_Start_Address] != ' ' ) || + ( in_data[PW_Start_Address+1] != 'M' ) || + ( in_data[PW_Start_Address+6] != 'I' ) || + ( in_data[PW_Start_Address+7] != 'A' ) || + ( in_data[PW_Start_Address+8] != 'N' ) || + ( in_data[PW_Start_Address+28] != 0x00 ) || + ( in_data[PW_Start_Address+29] != 0x00 ) || + ( in_data[PW_Start_Address+32] != 0x00 ) || + ( in_data[PW_Start_Address+33] != 0x00 ) || + ( in_data[PW_Start_Address+36] != 0x00 ) || + ( in_data[PW_Start_Address+37] != 0x00 ) || + ( in_data[PW_Start_Address+40] != 0x00 ) || + ( in_data[PW_Start_Address+41] != 0x00 )) + { + /*printf ( "#0.2 (start:%ld)\n" , PW_Start_Address);*/ + return BAD; + } + + /* number of (real) samples */ + PW_j = ((in_data[PW_Start_Address + 0x44]*256*256*256)+ + (in_data[PW_Start_Address + 0x45]*256*256)+ + (in_data[PW_Start_Address + 0x46]*256)+ + in_data[PW_Start_Address + 0x47]); + /* sample data size */ + PW_WholeSampleSize = ((in_data[PW_Start_Address + 0x48]*256*256*256)+ + (in_data[PW_Start_Address + 0x49]*256*256)+ + (in_data[PW_Start_Address + 0x4A]*256)+ + in_data[PW_Start_Address + 0x4B]); + if (((PW_j != 0) && (PW_WholeSampleSize == 0)) || ((PW_j == 0) && (PW_WholeSampleSize != 0)) || (PW_j>255)) + { + /*printf ( "#1 (start:%ld) (number of samples:%ld)(samplesize:%ld)\n" , PW_Start_Address , PW_j,PW_WholeSampleSize);*/ + return BAD; + } + + /* number of instrument */ + PW_k = ((in_data[PW_Start_Address + 0x3C]*256*256*256)+ + (in_data[PW_Start_Address + 0x3D]*256*256)+ + (in_data[PW_Start_Address + 0x3E]*256)+ + in_data[PW_Start_Address + 0x3F]); + if ( (PW_k == 0) || (PW_k > 255) ) + { + /*printf ( "#2 (start:%ld) (number of samples:%ld)(nbr inst:%ld)\n" , PW_Start_Address , PW_j,PW_k);*/ + return BAD; + } + + + /* + not many checks, here, but, to my point of view, it's unlikely + a music format comes anywhere near this one, so ... . + */ + /* printf ("samplesize:%ld,nbrsmp:%ld,nbrinst:%ld\n",PW_WholeSampleSize,PW_j,PW_k);*/ + return GOOD; +} + + + +void Rip_MUGICIAN ( void ) +{ + /* + PW_WholeSampleSize : sample data size + PW_j : number of sample + PW_k : number of instrument + */ + OutputSize = (PW_j * 0x20) + (PW_k * 0x10) + PW_WholeSampleSize + 0x1CC; + + /* nbr of patterns */ + PW_k = ((in_data[PW_Start_Address + 0x1a]*256)+ + in_data[PW_Start_Address + 0x1b]); + OutputSize += (PW_k * 0x100); + /* nbr of waveforms */ + PW_k = ((in_data[PW_Start_Address + 0x40]*256*256*256)+ + (in_data[PW_Start_Address + 0x41]*256*256)+ + (in_data[PW_Start_Address + 0x42]*256)+ + in_data[PW_Start_Address + 0x43]); + OutputSize += (PW_k * 0x80); + /* nbr of sequences */ + PW_l = 0; + for (PW_j=0;PW_j<8;PW_j++) + { + PW_k = ((in_data[PW_Start_Address + 0x1c + (PW_j*4)]*256*256*256)+ + (in_data[PW_Start_Address + 0x1d + (PW_j*4)]*256*256)+ + (in_data[PW_Start_Address + 0x1e + (PW_j*4)]*256)+ + in_data[PW_Start_Address + 0x1f + (PW_j*4)]); + PW_l += PW_k; + } + + OutputSize += (PW_l * 8); + + CONVERT = BAD; + Save_Rip ( "Digital Mugician 1/2 module", dmu ); + + if ( Save_Status == GOOD ) + PW_i += 24; /* after the ID */ +} diff --git a/prowizard/rippers/Newtron.c b/prowizard/rippers/Newtron.c index 8fa4d8fa..f5662d21 100755 --- a/prowizard/rippers/Newtron.c +++ b/prowizard/rippers/Newtron.c @@ -144,8 +144,6 @@ void Depack_Newtron ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; Whatever = (Uchar *) malloc (64); BZERO ( Whatever , 64 ); diff --git a/prowizard/rippers/NoiseFromHeaven.c b/prowizard/rippers/NoiseFromHeaven.c index f79f598a..15d471aa 100755 --- a/prowizard/rippers/NoiseFromHeaven.c +++ b/prowizard/rippers/NoiseFromHeaven.c @@ -134,8 +134,6 @@ void Depack_NFH ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read and write whole header */ fwrite ( &in_data[Where] , 1080 , 1 , out ); diff --git a/prowizard/rippers/NoisePacker1.c b/prowizard/rippers/NoisePacker1.c index fd8c71f5..7c72c8a9 100755 --- a/prowizard/rippers/NoisePacker1.c +++ b/prowizard/rippers/NoisePacker1.c @@ -192,8 +192,6 @@ void Depack_Noisepacker1 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read number of sample */ Whatever = (Uchar *) malloc ( 1024 ); diff --git a/prowizard/rippers/NoisePacker2.c b/prowizard/rippers/NoisePacker2.c index c5efd096..3243d04d 100755 --- a/prowizard/rippers/NoisePacker2.c +++ b/prowizard/rippers/NoisePacker2.c @@ -212,8 +212,6 @@ void Depack_Noisepacker2 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read number of sample */ Nbr_Smp = ((in_data[Where]<<4)&0xf0) | ((in_data[Where+1]>>4)&0x0f); diff --git a/prowizard/rippers/NoisePacker3.c b/prowizard/rippers/NoisePacker3.c index a6c33c94..12d3198e 100755 --- a/prowizard/rippers/NoisePacker3.c +++ b/prowizard/rippers/NoisePacker3.c @@ -224,8 +224,6 @@ void Depack_Noisepacker3 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read number of sample */ Nbr_Smp = ((in_data[Where]<<4)&0xf0) | ((in_data[Where+1]>>4)&0x0f); diff --git a/prowizard/rippers/NoiseRunner.c b/prowizard/rippers/NoiseRunner.c index e6a7b750..f292b9cc 100755 --- a/prowizard/rippers/NoiseRunner.c +++ b/prowizard/rippers/NoiseRunner.c @@ -151,8 +151,6 @@ void Depack_Noiserunner ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; Whatever = (Uchar *) malloc (1024); BZERO ( Whatever , 1024 ); diff --git a/prowizard/rippers/PhaPacker.c b/prowizard/rippers/PhaPacker.c index 2df3f4d2..6c3e0bcc 100755 --- a/prowizard/rippers/PhaPacker.c +++ b/prowizard/rippers/PhaPacker.c @@ -172,8 +172,6 @@ void Depack_PHA ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* info = fopen ( "info", "w+b");*/ for ( i=0 ; i<20 ; i++ ) /* title */ diff --git a/prowizard/rippers/PolkaPacker.c b/prowizard/rippers/PolkaPacker.c index 6641b364..395dafc9 100755 --- a/prowizard/rippers/PolkaPacker.c +++ b/prowizard/rippers/PolkaPacker.c @@ -133,8 +133,6 @@ void Depack_Polka ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* takes care of header */ fwrite ( &in_data[Where], 20, 1, out ); diff --git a/prowizard/rippers/PowerMusic.c b/prowizard/rippers/PowerMusic.c index c27b9d53..1da5f637 100755 --- a/prowizard/rippers/PowerMusic.c +++ b/prowizard/rippers/PowerMusic.c @@ -92,8 +92,6 @@ void Depack_PM ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* write whole header */ fwrite ( &in_data[Where] , 950 , 1 , out ); diff --git a/prowizard/rippers/ProPacker10.c b/prowizard/rippers/ProPacker10.c index f7ebb26f..7de0711b 100755 --- a/prowizard/rippers/ProPacker10.c +++ b/prowizard/rippers/ProPacker10.c @@ -187,8 +187,6 @@ void Depack_PP10 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* write title */ Whatever = (Uchar *) malloc (1024); diff --git a/prowizard/rippers/ProPacker21.c b/prowizard/rippers/ProPacker21.c index 5be84376..92750e8b 100755 --- a/prowizard/rippers/ProPacker21.c +++ b/prowizard/rippers/ProPacker21.c @@ -158,8 +158,6 @@ void Depack_PP21 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; Whatever = (Uchar *) malloc (1024); BZERO ( Whatever , 1024 ); diff --git a/prowizard/rippers/ProPacker30.c b/prowizard/rippers/ProPacker30.c index 0ccb6047..e0d6e982 100755 --- a/prowizard/rippers/ProPacker30.c +++ b/prowizard/rippers/ProPacker30.c @@ -199,8 +199,6 @@ void Depack_PP30 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* title */ Whatever = (Uchar *) malloc (1024); diff --git a/prowizard/rippers/Promizer01.c b/prowizard/rippers/Promizer01.c index 21ef2d6c..db70b589 100755 --- a/prowizard/rippers/Promizer01.c +++ b/prowizard/rippers/Promizer01.c @@ -188,8 +188,6 @@ void Depack_PM01 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* write title */ Whatever = (Uchar *) malloc (1024); diff --git a/prowizard/rippers/Promizer10c.c b/prowizard/rippers/Promizer10c.c index cc62e1ef..199cd962 100755 --- a/prowizard/rippers/Promizer10c.c +++ b/prowizard/rippers/Promizer10c.c @@ -122,8 +122,6 @@ void Depack_PM10c ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /*info = fopen ( "info", "w+b");*/ Whatever = (Uchar *) malloc (128); diff --git a/prowizard/rippers/Promizer18a.c b/prowizard/rippers/Promizer18a.c index a1e40f18..678ad167 100755 --- a/prowizard/rippers/Promizer18a.c +++ b/prowizard/rippers/Promizer18a.c @@ -118,8 +118,6 @@ void Depack_PM18a ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; BZERO ( Smp_Fine_Table , 31 ); BZERO ( OldSmpValue , 4 ); diff --git a/prowizard/rippers/Promizer20.c b/prowizard/rippers/Promizer20.c index 28292cbd..967e9221 100755 --- a/prowizard/rippers/Promizer20.c +++ b/prowizard/rippers/Promizer20.c @@ -99,8 +99,6 @@ void Depack_PM20 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /*info = fopen ( "info", "w+b");*/ BZERO ( Pats_Address , 128*4 ); diff --git a/prowizard/rippers/Promizer40.c b/prowizard/rippers/Promizer40.c index 77a9ecfe..14c65930 100755 --- a/prowizard/rippers/Promizer40.c +++ b/prowizard/rippers/Promizer40.c @@ -122,12 +122,8 @@ void Depack_PM40 ( void ) fillPTKtable(poss); in = fopen ( (char *)OutName_final , "r+b" ); /* +b is safe bcoz OutName's just been saved */ - if (!in) - return; sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; BZERO ( Pats_Numbers , 128 ); BZERO ( Pats_Numbers_tmp , 128 ); diff --git a/prowizard/rippers/Prorunner10.c b/prowizard/rippers/Prorunner10.c index 07fefeaa..33f441f5 100755 --- a/prowizard/rippers/Prorunner10.c +++ b/prowizard/rippers/Prorunner10.c @@ -79,8 +79,6 @@ void Depack_PRUN1 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read and write whole header */ fwrite ( &in_data[Where] , 950 , 1 , out ); diff --git a/prowizard/rippers/Prorunner20.c b/prowizard/rippers/Prorunner20.c index 09b2a1e4..a1ee420d 100755 --- a/prowizard/rippers/Prorunner20.c +++ b/prowizard/rippers/Prorunner20.c @@ -93,8 +93,6 @@ void Depack_PRUN2 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; Whatever = (Uchar *) malloc (1024); BZERO (Whatever , 1024); diff --git a/prowizard/rippers/QuadraComposer.c b/prowizard/rippers/QuadraComposer.c index 294a7bad..94fc7af3 100755 --- a/prowizard/rippers/QuadraComposer.c +++ b/prowizard/rippers/QuadraComposer.c @@ -94,8 +94,6 @@ void Depack_QuadraComposer ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; BZERO ( SmpAddresses , 32*4 ); diff --git a/prowizard/rippers/SGT-Packer.c b/prowizard/rippers/SGT-Packer.c new file mode 100755 index 00000000..21ba7c85 --- /dev/null +++ b/prowizard/rippers/SGT-Packer.c @@ -0,0 +1,241 @@ +/* + * SGT-Packer.c + * 2006 (C) Sylvain "Asle" Chipaux +*/ +/* testSGT() */ +/* Rip_SGT() */ +/* Depack_SGT() */ + + +#include "globals.h" +#include "extern.h" + +/* rudimentary tests .. shall add others */ +short testSGT ( void ) +{ + /* test 1 */ + if ( (PW_i<43) || ((PW_Start_Address+43)>PW_in_size) ) + { + return BAD; + } + + /* test 2 */ + PW_Start_Address = PW_i-43; + PW_k = in_data[PW_Start_Address+30]; + for ( PW_j=0 ; PW_j 64 ? */ + if ( in_data[PW_Start_Address+43+PW_j*16] > 0x40 ) + { + return BAD; + } + /* pad val != 00h ? */ + if ( in_data[PW_Start_Address+42+PW_j*16] != 0x00 ) + { + return BAD; + } + } + + return GOOD; +} + + + +/**/ +void Rip_SGT ( void ) +{ + /* PW_k = number of samples, but we don't care. */ + + /* get whole sample size */ + PW_WholeSampleSize = ((in_data[PW_Start_Address+5]*256*256)+ + (in_data[PW_Start_Address+6]*256)+ + in_data[PW_Start_Address+7]); + /* get add of sample data */ + PW_k = ((in_data[PW_Start_Address+1]*256*256)+ + (in_data[PW_Start_Address+2]*256)+ + in_data[PW_Start_Address+3]); + + OutputSize = PW_k + PW_WholeSampleSize; + + CONVERT = GOOD; + Save_Rip ( " SGT-Packer ", SGTPacker ); + + if ( Save_Status == GOOD ) + PW_i += (OutputSize - 44); /* 43 should do but call it "just to be sure" :) */ +} + + +/* + * SGT-Packer.c 2006 (c) Asle + * ! STILL UNDER DEV ! +*/ + +void Depack_SGT ( void ) +{ + Uchar *Whatever; + Uchar c1=0x00,c2=0x00; + Uchar poss[37][2]; + Uchar Max=0x00; + Uchar Note,Smp,Fx,FxVal; + Uchar PatternTableSize=0x00; + Uchar NbrPat; + long i=0,j=0,l=0,z; + long WholeSampleSize; + long SmpAddy,PatlistAddy,PatdataAddy; + long SmpAddies[31], SmpSizes[31]; + long NbrSmp; + long Where = PW_Start_Address; + FILE *out; /*,*debug;*/ + + if ( Save_Status == BAD ) + return; + + sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); + out = PW_fopen ( Depacked_OutName , "w+b" ); + + fillPTKtable(poss); + + WholeSampleSize = ((in_data[Where+5]*256*256)+ + (in_data[Where+6]*256)+ + in_data[Where+7]); + SmpAddy = ((in_data[Where]*256*256*256)+ + (in_data[Where+1]*256*256)+ + (in_data[Where+2]*256)+ + in_data[Where+3])+8+Where; + PatlistAddy = ((in_data[Where+20]*256*256*256)+ + (in_data[Where+21]*256*256)+ + (in_data[Where+22]*256)+ + in_data[Where+23])+8+Where; + PatdataAddy = ((in_data[Where+24]*256*256*256)+ + (in_data[Where+25]*256*256)+ + (in_data[Where+26]*256)+ + in_data[Where+27])+8+Where; + PatternTableSize = in_data[Where+28]; + NbrPat = in_data[Where+31]; + NbrSmp = in_data[Where+30]; + + +/* debug = fopen ( "debug" , "w+b" );*/ + + Whatever = (Uchar *) malloc (1024); + BZERO (Whatever , 1024); + /* title */ + fwrite ( &Whatever[0] , 20 , 1 , out ); + + /* read/write sample headers */ + Where += 32; + for ( i=0 ; i 0x40 ) // more than 64 patterns ? + { + return BAD; + } + /* A FAIRE !!!!! */ + /* sample size ? */ + PW_l = ( (in_data[PW_Start_Address+28]*256)+ + in_data[PW_Start_Address+29] ); + if ( (((PW_l/8)*8) != PW_l) || (PW_l == 0) ) + { +/*printf ( "#2 Start: %ld\n" , PW_Start_Address );*/ + return BAD; + } + PW_l /= 8; + /* PW_l is the number of sample */ + + /* test finetunes */ + for ( PW_k=0 ; PW_k 0x0f ) + { +/*printf ( "#3 Start: %ld\n" , PW_Start_Address );*/ + return BAD; + } + } + + /* test volumes */ + for ( PW_k=0 ; PW_k 0x40 ) + { +/*printf ( "#4 Start: %ld\n" , PW_Start_Address );*/ + return BAD; + } + } + + /* test sample sizes */ + PW_WholeSampleSize = 0; + for ( PW_k=0 ; PW_k 0xFFFF) || + (PW_m > 0xFFFF) || + (PW_n > 0xFFFF) ) + { +/*printf ( "#5 Start:%ld\n" , PW_Start_Address );*/ + return BAD; + } + if ( (PW_m + PW_n) > (PW_j+2) ) + { +/*printf ( "#5,1 Start:%ld\n" , PW_Start_Address );*/ + return BAD; + } + if ( (PW_m != 0) && (PW_n == 0) ) + { +/*printf ( "#5,2 Start:%ld\n" , PW_Start_Address );*/ + return BAD; + } + PW_WholeSampleSize += PW_j; + } + if ( PW_WholeSampleSize <= 4 ) + { +/*printf ( "#5,3 Start:%ld\n" , PW_Start_Address );*/ + return BAD; + } + + /* pattern list size */ + PW_j = in_data[PW_Start_Address+PW_l*8+31]; + if ( (PW_j==0) || (PW_j>128) ) + { +/*printf ( "#6 Start:%ld\n" , PW_Start_Address );*/ + return BAD; + } + + /* PW_j is the size of the pattern list */ + /* PW_l is the number of sample */ + /* PW_WholeSampleSize is the sample data size */ + return GOOD; +} + + + + +void Rip_TP3 ( void ) +{ + /* PW_j is the size of the pattern list */ + /* PW_l is the number of sample */ + /* PW_WholeSampleSize is the sample data size */ + + + PW_m=0; + for ( PW_k=0 ; PW_k PW_m ) + PW_m = PW_o; + } + /* PW_m is the highest pattern number */ + PW_m += 8; + /* PW_m is now the size of the track table list */ + PW_n = 0; +/*printf ( "highest pattern : %ld (%x)\n" , PW_m , PW_m );*/ + for ( PW_k=0 ; PW_k<(PW_m/2) ; PW_k++ ) + { + PW_o = (in_data[PW_Start_Address+PW_l*8+32+PW_j*2+PW_k*2]*256)+in_data[PW_Start_Address+PW_l*8+33+PW_j*2+PW_k*2]; +/*printf ( "%4x, " , PW_o );*/ + if ( PW_o > PW_n ) + PW_n = PW_o; + } +/*printf ( "\nhighest : %ld (%x)\n" , PW_n , PW_n );*/ +/*printf ( "track data address : %ld (%x)\n" , (34+8*PW_l+2*PW_j+PW_m ),(34+8*PW_l+2*PW_j+PW_m));*/ + PW_n += (34+8*PW_l+2*PW_j+PW_m); +/*printf ( "address of last track : %ld\n" , PW_n );*/ + OutputSize = PW_n; + + + /* all vars are availlable now, save PW_WholeSampleSize */ + + /* now counting size of the last pattern ... pfiew .. */ + PW_l = 0; + for ( PW_j=0 ; PW_j<64 ; PW_j++ ) + { +/*printf ( "%ld," , PW_l );*/ + if ( (in_data[PW_Start_Address+PW_n+PW_l]&0xC0 ) == 0xC0 ) + { + PW_j += (0x100-in_data[PW_Start_Address+PW_n+PW_l]); + PW_j -= 1; + PW_l += 1; + continue; + } + if ( (in_data[PW_Start_Address+PW_n+PW_l]&0xC0 ) == 0x80 ) + { + PW_l += 2; + continue; + } + PW_l += 1; + if ( (in_data[PW_Start_Address+PW_n+PW_l]&0x0F ) == 0x00 ) + { + PW_l += 1; + continue; + } + PW_l += 2; + } +/*printf ( "\nsize of the last track : %ld\n" , PW_l );*/ + + OutputSize += PW_l + 2; /* +2 for $0000 at the end .. */ + if ( ((OutputSize/2)*2) != OutputSize ) + OutputSize += 1; + OutputSize += PW_WholeSampleSize; + + CONVERT = GOOD; + Save_Rip ( "Tracker Packer v3 module", TP3 ); + + if ( Save_Status == GOOD ) + PW_i += (OutputSize - 1); /* 0 could be enough */ +} + + + +/* + * TrackerPacker_v3.c 1998 (c) Asle / ReDoX + * + * Converts TP3 packed MODs back to PTK MODs + ******************************************************** + * 13 april 1999 : Update + * - no more open() of input file ... so no more fread() !. + * It speeds-up the process quite a bit :). + * + * 28 November 1999 : Update + * - Some Optimizing for Speed and for Size. +*/ + +void Depack_TP3 ( void ) +{ + Uchar c1=0x00,c2=0x00,c3=0x00; + Uchar poss[37][2]; + Uchar *Whatever; + Uchar Note,Smp,Fx,FxVal; + Uchar PatMax=0x00; + long Track_Address[128][4]; + long i=0,j=0,k; + long Start_Pat_Address=999999l; + long Whole_Sample_Size=0; + long Max_Track_Address=0; + long Where=PW_Start_Address; /* main pointer to prevent fread() */ + FILE *out; + + fillPTKtable(poss); + + if ( Save_Status == BAD ) + return; + + BZERO ( Track_Address , 128*4*4 ); + + sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); + out = PW_fopen ( Depacked_OutName , "w+b" ); + + /* title */ + Where += 8; + fwrite ( &in_data[Where] , 20 , 1 , out ); + Where += 20; + + /* number of sample */ + j = (in_data[Where]*256)+in_data[Where+1]; + Where += 2; + j /= 8; + /*printf ( "number of sample : %ld\n" , j );*/ + + Whatever = (Uchar *) malloc ( 1024 ); + BZERO ( Whatever , 1024 ); + for ( i=0 ; i PatMax ) + PatMax = Whatever[i]; +/*fprintf ( info , "%3ld: %ld\n" , i,Pats_Address[i] );*/ + } + + /* read tracks addresses */ + /* bypass 4 bytes or not ?!? */ + /* Here, I choose not :) */ +/*fprintf ( info , "track addresses :\n" );*/ + for ( i=0 ; i<=PatMax ; i++ ) + { + for ( j=0 ; j<4 ; j++ ) + { + Track_Address[i][j] = (in_data[Where]*256)+in_data[Where+1]; + Where += 2; + if ( Track_Address[i][j] > Max_Track_Address ) + Max_Track_Address = Track_Address[i][j]; +/*fprintf ( info , "%6ld, " , Track_Address[i][j] );*/ + } +/*fprintf ( info , " (%x)\n" , Max_Track_Address );*/ + } + + /*printf ( "Highest pattern number : %d\n" , PatMax );*/ + + /* write pattern list */ + fwrite ( Whatever , 128 , 1 , out ); + + + /* ID string */ + Whatever[0] = 'M'; + Whatever[1] = '.'; + Whatever[2] = 'K'; + Whatever[3] = '.'; + fwrite ( Whatever , 4 , 1 , out ); + + Start_Pat_Address = Where + 2; + /*printf ( "address of the first pattern : %ld\n" , Start_Pat_Address );*/ +/*fprintf ( info , "address of the first pattern : %x\n" , Start_Pat_Address );*/ + + /* pattern datas */ + /*printf ( "converting pattern data " );*/ + for ( i=0 ; i<=PatMax ; i++ ) + { +/*fprintf ( info , "\npattern %ld:\n\n" , i );*/ + BZERO ( Whatever , 1024 ); + for ( j=0 ; j<4 ; j++ ) + { +/*fprintf ( info , "track %ld: (at %ld)\n" , j , Track_Address[i][j]+Start_Pat_Address );*/ + Where = Track_Address[i][j]+Start_Pat_Address; + for ( k=0 ; k<64 ; k++ ) + { + c1 = in_data[Where++]; +/*fprintf ( info , "%ld: %2x," , k , c1 );*/ + if ( (c1&0xC0) == 0xC0 ) + { +/*fprintf ( info , " <--- %d empty lines\n" , (0x100-c1) );*/ + k += (0x100-c1); + k -= 1; + continue; + } + if ( (c1&0xC0) == 0x80 ) + { + c2 = in_data[Where++]; +/*fprintf ( info , "%2x ,\n" , c2 );*/ + Fx = (c1>>1)&0x0f; + FxVal = c2; + if ( (Fx==0x05) || (Fx==0x06) || (Fx==0x0A) ) + { + if ( FxVal > 0x80 ) + FxVal = 0x100-FxVal; + else if ( FxVal <= 0x80 ) + FxVal = (FxVal<<4)&0xf0; + } + if ( Fx == 0x08 ) + Fx = 0x00; + Whatever[k*16+j*4+2] = Fx; + Whatever[k*16+j*4+3] = FxVal; + continue; + } + + c2 = in_data[Where++]; +/*fprintf ( info , "%2x, " , c2 );*/ + Smp = ((c2>>4)&0x0f) | ((c1>>2)&0x10); + if ( (c1&0x40) == 0x40 ) + Note = 0x7f-c1; + else + Note = c1&0x3F; + Fx = c2&0x0F; + if ( Fx == 0x00 ) + { +/*fprintf ( info , " <--- No FX !!\n" );*/ + Whatever[k*16+j*4] = Smp&0xf0; + Whatever[k*16+j*4] |= poss[Note][0]; + Whatever[k*16+j*4+1] = poss[Note][1]; + Whatever[k*16+j*4+2] = (Smp<<4)&0xf0; + Whatever[k*16+j*4+2] |= Fx; + continue; + } + c3 = in_data[Where++]; +/*fprintf ( info , "%2x\n" , c3 );*/ + if ( Fx == 0x08 ) + Fx = 0x00; + FxVal = c3; + if ( (Fx==0x05) || (Fx==0x06) || (Fx==0x0A) ) + { + if ( FxVal > 0x80 ) + FxVal = 0x100-FxVal; + else if ( FxVal <= 0x80 ) + FxVal = (FxVal<<4)&0xf0; + } + + Whatever[k*16+j*4] = Smp&0xf0; + Whatever[k*16+j*4] |= poss[Note][0]; + Whatever[k*16+j*4+1] = poss[Note][1]; + Whatever[k*16+j*4+2] = (Smp<<4)&0xf0; + Whatever[k*16+j*4+2] |= Fx; + Whatever[k*16+j*4+3] = FxVal; + } + if ( Where > Max_Track_Address ) + Max_Track_Address = Where; +/*fprintf ( info , "%6ld, " , Max_Track_Address );*/ + } + fwrite ( Whatever , 1024 , 1 , out ); + /*printf ( "." );*/ + } + free ( Whatever ); + /*printf ( " ok\n" );*/ + + /*printf ( "sample data address : %ld\n" , Max_Track_Address );*/ + + /* Sample data */ + if ( ((Max_Track_Address/2)*2) != Max_Track_Address ) + Max_Track_Address += 1; + fwrite ( &in_data[Max_Track_Address] , Whole_Sample_Size , 1 , out ); + + Crap ( " Tracker Packer 3 " , BAD , BAD , out ); + + fflush ( out ); + fclose ( out ); + + printf ( "done\n" ); + return; /* useless ... but */ +} diff --git a/prowizard/rippers/UnicTracker.c b/prowizard/rippers/UnicTracker.c index 67ddc901..4a181d93 100755 --- a/prowizard/rippers/UnicTracker.c +++ b/prowizard/rippers/UnicTracker.c @@ -514,8 +514,6 @@ void Depack_UNIC ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* title */ fwrite ( &in_data[Where] , 20 , 1 , out ); diff --git a/prowizard/rippers/UnicTracker2.c b/prowizard/rippers/UnicTracker2.c index d228f813..fb1d1eab 100755 --- a/prowizard/rippers/UnicTracker2.c +++ b/prowizard/rippers/UnicTracker2.c @@ -202,8 +202,6 @@ void Depack_UNIC2 ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* title */ Whatever = (Uchar *) malloc (1028); diff --git a/prowizard/rippers/WantonPacker.c b/prowizard/rippers/WantonPacker.c index 7181541a..52b5851c 100755 --- a/prowizard/rippers/WantonPacker.c +++ b/prowizard/rippers/WantonPacker.c @@ -77,8 +77,6 @@ void Depack_WN ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read header */ fwrite ( &in_data[Where] , 950 , 1 , out ); diff --git a/prowizard/rippers/XannPlayer.c b/prowizard/rippers/XannPlayer.c index 550ca24d..c9cb037d 100755 --- a/prowizard/rippers/XannPlayer.c +++ b/prowizard/rippers/XannPlayer.c @@ -163,8 +163,6 @@ void Depack_XANN ( void ) sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* title */ Whatever = (Uchar *) malloc (1024); diff --git a/prowizard/rippers/ZenPacker.c b/prowizard/rippers/ZenPacker.c index 8da85832..cfe15748 100755 --- a/prowizard/rippers/ZenPacker.c +++ b/prowizard/rippers/ZenPacker.c @@ -174,8 +174,6 @@ void Depack_ZEN ( void ) BZERO ( Pattern_Address_Real , 128*4); sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - if (!out) - return; /* read pattern table address */ Pattern_Table_Address = (in_data[Where]*256*256*256)+ diff --git a/prowizard/rippers/extern.h b/prowizard/rippers/extern.h index ce71543c..b9d339dc 100755 --- a/prowizard/rippers/extern.h +++ b/prowizard/rippers/extern.h @@ -13,12 +13,14 @@ extern short testByteKiller_20 ( void ); extern short testByteKiller30 ( void ); extern short testbytekillerpro10 ( void ); extern short testcrunchmaniaAddr ( void ); +extern short testcrunchmaniaSimple ( void ); extern short testCRND ( void ); extern short testDefjam32 ( void ); extern short testDefjam32pro ( void ); extern short testDoubleAction10 ( void ); extern short testDragpack100 ( void ); extern short testDragpack252 ( void ); +extern short testGNUPacker12 (void); extern short testHQCCruncher2 ( void ); extern short testMasterCruncher30addr ( void ); extern short testMaxPacker12 ( void ); @@ -70,14 +72,15 @@ extern short testKRIS ( void ); extern short testKSM ( void ); extern short testMMD0 ( void ); extern short testMOD ( int ); +extern short testMP_noID ( void ); +extern short testMP_withID ( void ); +extern short testMUGICIAN ( void ); extern short testNewtron ( void ); extern short testNFH ( void ); extern short testNoiserunner ( void ); extern short testNoisepacker1 ( void ); extern short testNoisepacker2 ( void ); extern short testNoisepacker3 ( void ); -extern short testMP_noID ( void ); -extern short testMP_withID ( void ); extern short testP40A ( void ); extern short testP41A ( void ); extern short testP50A ( void ); @@ -100,6 +103,7 @@ extern short testPRUN1 ( void ); extern short testPRUN2 ( void ); /*extern short testPTK ( void );*/ extern short testQuadraComposer ( void ); +extern short testSGT ( void ); extern short testSKYT ( void ); extern short testSoundFX13 ( void ); extern short testSoundTracker ( void ); @@ -111,6 +115,7 @@ extern short testTMK ( void ); extern short testTP1 ( void ); extern short testTP2 ( void ); extern short testTP3 ( void ); +extern short testTreasure ( void ); extern short testUNIC_noID ( void ); extern short testUNIC_withID ( void ); extern short testUNIC_withemptyID ( void ); @@ -127,10 +132,12 @@ extern void Rip_ByteKiller ( void ); extern void Rip_ByteKiller30 ( void ); extern void Rip_bytekillerpro10 ( void ); extern void Rip_CrunchmaniaAddr ( void ); +extern void Rip_CrunchmaniaSimple ( void ); extern void Rip_Defjam32 ( void ); extern void Rip_DoubleAction10 ( void ); extern void Rip_Dragpack100 ( void ); extern void Rip_Dragpack252 ( void ); +extern void Rip_GNUPacker12 (void); extern void Rip_HQCCruncher2 ( void ); extern void Rip_MasterCruncher30addr ( void ); extern void Rip_MaxPacker12 ( void ); @@ -181,6 +188,7 @@ extern void Rip_KRIS ( void ); extern void Rip_KSM ( void ); extern void Rip_MMD0 ( void ); extern void Rip_MOD ( int ); +extern void Rip_MUGICIAN ( void ); extern void Rip_MP_noID ( void ); extern void Rip_MP_withID ( void ); extern void Rip_Newtron ( void ); @@ -210,6 +218,7 @@ extern void Rip_PP21 ( void ); extern void Rip_PP30 ( void ); /*extern void Rip_PTK ( void );*/ extern void Rip_QuadraComposer ( void ); +extern void Rip_SGT ( void ); extern void Rip_SKYT ( void ); extern void Rip_SoundFX13 ( void ); extern void Rip_SoundTracker ( void ); @@ -222,6 +231,7 @@ extern void Rip_TMK ( void ); extern void Rip_TP1 ( void ); extern void Rip_TP2 ( void ); extern void Rip_TP3 ( void ); +extern void Rip_Treasure ( void ); extern void Rip_PRUN2 ( void ); extern void Rip_PRUN1 ( void ); extern void Rip_UNIC_withID ( void ); @@ -277,6 +287,7 @@ extern void Depack_PP30 ( void ); extern void Depack_PRUN1 ( void ); extern void Depack_PRUN2 ( void ); extern void Depack_QuadraComposer ( void ); +extern void Depack_SGT ( void ); extern void Depack_SKYT ( void ); extern void Depack_STARPACK ( void ); extern void Depack_STK26 ( void ); @@ -286,6 +297,7 @@ extern void Depack_TMK ( void ); extern void Depack_TP1 ( void ); extern void Depack_TP2 ( void ); extern void Depack_TP3 ( void ); +extern void Depack_Treasure ( void ); extern void Depack_UNIC ( void ); extern void Depack_UNIC2 ( void ); extern void Depack_WN ( void ); @@ -303,9 +315,9 @@ extern short testSpecialCruncherData ( long , long ); extern void Rip_SpecialCruncherData ( char * , int , int ); extern short test_1_start ( Ulong ); extern short test_smps ( long, long, long, Uchar, Uchar ); -extern long GetFileSizeX ( char * ); +extern long PWGetFileSize ( char * ); extern FILE * PW_fopen ( char *, char * ); -extern void fillPTKtable ( Uchar[37][2] ); +extern void fillPTKtable ( Uchar [37][2] ); /* globals */ /* Some say it's badly coding when using Globals ... sure it is, now what's the solution ? */ diff --git a/prowizard/rippers/globals.h b/prowizard/rippers/globals.h index a4140ffd..77b29c12 100755 --- a/prowizard/rippers/globals.h +++ b/prowizard/rippers/globals.h @@ -5,18 +5,13 @@ #include #include #include -#if 0 -#include -#endif +//#include #include #include /*#include */ #ifdef DOS #include #endif -#ifdef DMALLOC -#include "dmalloc.h" -#endif typedef unsigned char Uchar; @@ -31,7 +26,7 @@ __inline Ulong htonl (Ulong v) } #endif -#define _KNOWN_FORMATS 126 +#define _KNOWN_FORMATS 130 #define _TYPES_FILENAME "_types_" #define _TYPES_LINE_LENGHT 256 #define MINIMAL_FILE_LENGHT 64 @@ -174,4 +169,9 @@ enum SpeedPacker3Data, AtomikPackerData, AutomationPackerData, + /* TreasurePattern,*/ + SGTPacker, + GNUPacker12, + CrunchmaniaSimple, + dmu, }; diff --git a/zfile.c b/zfile.c index 63022c0f..cdda08ee 100755 --- a/zfile.c +++ b/zfile.c @@ -561,7 +561,7 @@ static struct zfile *arcacc_unpack (struct zfile *z, int type) } } } - if (type == 7) { + if (type == ArchiveFormat7Zip) { if (fi.CompressedFileSize) skipsize = 0; skipsize += (int)fi.UncompressedFileSize;