From: Toni Wilen Date: Fri, 10 Aug 2012 15:50:56 +0000 (+0300) Subject: 2420b11 X-Git-Tag: 2500~21 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=ff85569f00d442a970423ee730f23141f5553969;p=francis%2Fwinuae.git 2420b11 --- diff --git a/audio.cpp b/audio.cpp index 2e6ede38..7e10af13 100644 --- a/audio.cpp +++ b/audio.cpp @@ -80,14 +80,14 @@ STATIC_INLINE bool usehacks2 (void) #endif #define SINC_QUEUE_MAX_AGE 2048 -/* Queue length 128 implies minimum emulated period of 16. I add a few extra -* entries so that CPU updates during minimum period can be played back. */ -#define SINC_QUEUE_LENGTH (SINC_QUEUE_MAX_AGE / 16 + 2) +/* Queue length 256 implies minimum emulated period of 8. This should be + * sufficient for all imaginable purposes. This must be power of two. */ +#define SINC_QUEUE_LENGTH 256 #include "sinctable.cpp" typedef struct { - int age, output; + int time, output; } sinc_queue_t; struct audio_channel_data { @@ -110,7 +110,8 @@ struct audio_channel_data { int sample_accum, sample_accum_time; int sinc_output_state; sinc_queue_t sinc_queue[SINC_QUEUE_LENGTH]; - int sinc_queue_length; + int sinc_queue_time; + int sinc_queue_head; #if TEST_AUDIO > 0 bool hisample, losample; bool have_dat; @@ -523,41 +524,26 @@ STATIC_INLINE void samplexx_anti_handler (int *datasp) static void sinc_prehandler (unsigned long best_evtime) { - int i, j, output; + int i, output; struct audio_channel_data *acd; - for (i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { acd = &audio_channel[i]; output = (acd->current_sample * acd->vol) & acd->adk_mask; - /* age the sinc queue and truncate it when necessary */ - for (j = 0; j < acd->sinc_queue_length; j += 1) { - acd->sinc_queue[j].age += best_evtime; - if (acd->sinc_queue[j].age >= SINC_QUEUE_MAX_AGE) { - acd->sinc_queue_length = j; - break; - } - } - /* if output state changes, record the state change and also - * write data into sinc queue for mixing in the BLEP */ + * write data into sinc queue for mixing in the BLEP */ if (acd->sinc_output_state != output) { - if (acd->sinc_queue_length > SINC_QUEUE_LENGTH - 1) { - //write_log (_T("warning: sinc queue truncated. Last age: %d.\n"), acd->sinc_queue[SINC_QUEUE_LENGTH-1].age); - acd->sinc_queue_length = SINC_QUEUE_LENGTH - 1; - } - /* make room for new and add the new value */ - memmove (&acd->sinc_queue[1], &acd->sinc_queue[0], - sizeof (acd->sinc_queue[0]) * acd->sinc_queue_length); - acd->sinc_queue_length += 1; - acd->sinc_queue[0].age = best_evtime; - acd->sinc_queue[0].output = output - acd->sinc_output_state; + acd->sinc_queue_head = (acd->sinc_queue_head - 1) & (SINC_QUEUE_LENGTH - 1); + acd->sinc_queue[acd->sinc_queue_head].time = acd->sinc_queue_time; + acd->sinc_queue[acd->sinc_queue_head].output = output - acd->sinc_output_state; acd->sinc_output_state = output; } + + acd->sinc_queue_time += best_evtime; } } - /* this interpolator performs BLEP mixing (bleps are shaped like integrated sinc * functions) with a type of BLEP that matches the filtering configuration. */ STATIC_INLINE void samplexx_sinc_handler (int *datasp) @@ -574,21 +560,28 @@ STATIC_INLINE void samplexx_sinc_handler (int *datasp) } winsinc = winsinc_integral[n]; - for (i = 0; i < 4; i += 1) { + + for (i = 0; i < 4; i += 1) { int j, v; struct audio_channel_data *acd = &audio_channel[i]; /* The sum rings with harmonic components up to infinity... */ int sum = acd->sinc_output_state << 17; /* ...but we cancel them through mixing in BLEPs instead */ - for (j = 0; j < acd->sinc_queue_length; j += 1) - sum -= winsinc[acd->sinc_queue[j].age] * acd->sinc_queue[j].output; + int offsetpos = acd->sinc_queue_head & (SINC_QUEUE_LENGTH - 1); + for (j = 0; j < SINC_QUEUE_LENGTH; j += 1) { + int age = acd->sinc_queue_time - acd->sinc_queue[offsetpos].time; + if (age >= SINC_QUEUE_MAX_AGE) + break; + sum -= winsinc[age] * acd->sinc_queue[offsetpos].output; + offsetpos = (offsetpos + 1) & (SINC_QUEUE_LENGTH - 1); + } v = sum >> 17; if (v > 32767) v = 32767; else if (v < -32768) v = -32768; datasp[i] = v; - } + } } static void sample16i_sinc_handler (void) @@ -1320,7 +1313,6 @@ static void audio_state_channel2 (int nr, bool perfin) newsample (nr, (cdp->dat2 >> 0) & 0xff); zerostate (nr); } else { - loadper (nr); cdp->pbufldl = true; audio_state_channel2 (nr, false); } @@ -1383,6 +1375,7 @@ static void audio_state_channel2 (int nr, bool perfin) cdp->hisample = false; #endif newsample (nr, (cdp->dat2 >> 8) & 0xff); + loadper (nr); cdp->pbufldl = false; } if (!perfin) @@ -1398,7 +1391,6 @@ static void audio_state_channel2 (int nr, bool perfin) if (audap) setirq (nr, 22); } - loadper (nr); cdp->pbufldl = true; cdp->state = 3; audio_state_channel2 (nr, false); @@ -1411,6 +1403,7 @@ static void audio_state_channel2 (int nr, bool perfin) cdp->losample = false; #endif newsample (nr, (cdp->dat2 >> 0) & 0xff); + loadper (nr); cdp->pbufldl = false; } if (!perfin) @@ -1435,7 +1428,6 @@ static void audio_state_channel2 (int nr, bool perfin) setirq (nr, 32); } cdp->intreq2 = 0; - loadper (nr); cdp->pbufldl = true; cdp->state = 2; audio_state_channel2 (nr, false); @@ -1946,13 +1938,17 @@ void AUDxLEN (int nr, uae_u16 v) void AUDxVOL (int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; - int v2 = v & 64 ? 63 : v & 63; + + // 7 bit register in Paula. + v &= 127; + if (v > 64) + v = 64; audio_activate (); update_audio (); - cdp->vol = v2; + cdp->vol = v; #if DEBUG_AUDIO > 0 if (debugchannel (nr)) - write_log (_T("AUD%dVOL: %d %08X\n"), nr, v2, M68K_GETPC); + write_log (_T("AUD%dVOL: %d %08X\n"), nr, v, M68K_GETPC); #endif } diff --git a/autoconf.cpp b/autoconf.cpp index e9371ef3..0c29e638 100644 --- a/autoconf.cpp +++ b/autoconf.cpp @@ -66,7 +66,6 @@ static uae_u32 REGPARAM2 rtarea_lget (uaecptr addr) addr &= 0xFFFF; return (uae_u32)(rtarea_wget (addr) << 16) + rtarea_wget (addr + 2); } - static uae_u32 REGPARAM2 rtarea_wget (uaecptr addr) { #ifdef JIT @@ -75,7 +74,6 @@ static uae_u32 REGPARAM2 rtarea_wget (uaecptr addr) addr &= 0xFFFF; return (rtarea[addr] << 8) + rtarea[addr + 1]; } - static uae_u32 REGPARAM2 rtarea_bget (uaecptr addr) { #ifdef JIT @@ -85,25 +83,39 @@ static uae_u32 REGPARAM2 rtarea_bget (uaecptr addr) return rtarea[addr]; } -static void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value) +#define RTAREA_WRITEOFFSET 0xfff0 + +static void REGPARAM2 rtarea_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif + addr &= 0xffff; + if (addr < RTAREA_WRITEOFFSET) + return; + rtarea[addr] = value; } - static void REGPARAM2 rtarea_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif + addr &= 0xffff; + if (addr < RTAREA_WRITEOFFSET) + return; + rtarea_bput (addr, value >> 8); + rtarea_bput (addr + 1, value & 0xff); } - -static void REGPARAM2 rtarea_bput (uaecptr addr, uae_u32 value) +static void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif + addr &= 0xffff; + if (addr < RTAREA_WRITEOFFSET) + return; + rtarea_wput (addr, value >> 16); + rtarea_wput (addr + 2, value & 0xffff); } /* some quick & dirty code to fill in the rt area and save me a lot of @@ -292,7 +304,7 @@ volatile int uae_int_requested = 0; void set_uae_int_flag (void) { - rtarea[0xFFFB] = uae_int_requested & 1; + rtarea[RTAREA_INT] = uae_int_requested & 1; } void rtarea_setup (void) diff --git a/blitter.cpp b/blitter.cpp index 7f7e02c3..02ebcf5c 100644 --- a/blitter.cpp +++ b/blitter.cpp @@ -317,7 +317,7 @@ STATIC_INLINE int canblit (int hpos) { if (is_bitplane_dma (hpos)) return 0; - if (cycle_line[hpos]) + if (cycle_line[hpos] & CYCLE_MASK) return 0; return 1; } @@ -719,7 +719,7 @@ static void decide_blitter_line (int hsync, int hpos) if (c == 3) { blitter_read (); - alloc_cycle_ext (last_blitter_hpos, CYCLE_BLITTER); + alloc_cycle_blitter (last_blitter_hpos, &bltcpt); record_dma_blit (0x70, blt_info.bltcdat, bltcpt, last_blitter_hpos); } else if (c == 5) { @@ -737,7 +737,7 @@ static void decide_blitter_line (int hsync, int hpos) /* onedot mode and no pixel = bus write access is skipped */ if (blitlinepixel) { blitter_write (); - alloc_cycle_ext (last_blitter_hpos, CYCLE_BLITTER); + alloc_cycle_blitter (last_blitter_hpos, &bltdpt); record_dma_blit (0x00, blt_info.bltddat, bltdpt, last_blitter_hpos); blitlinepixel = 0; } @@ -889,10 +889,10 @@ STATIC_INLINE void blitter_doddma (int hpos) blitter_vcounter2 = blitter_vcounter1 = blt_info.vblitsize; return; } - alloc_cycle_ext (hpos, CYCLE_BLITTER); record_dma_blit (0x00, d, bltdpt, hpos); last_custom_value1 = d; chipmem_agnus_wput2 (bltdpt, d); + alloc_cycle_blitter (hpos, &bltdpt); bltdpt += blit_add; blitter_hcounter2++; if (blitter_hcounter2 == blt_info.hblitsize) { @@ -919,6 +919,7 @@ STATIC_INLINE void blitter_dodma (int ch, int hpos) addr = bltapt; bltapt += blit_add; reg = 0x74; + alloc_cycle_blitter (hpos, &bltapt); break; case 2: blt_info.bltbdat = dat = chipmem_wget_indirect (bltbpt); @@ -931,6 +932,7 @@ STATIC_INLINE void blitter_dodma (int ch, int hpos) blt_info.bltbhold = (((uae_u32)prevb << 16) | blt_info.bltbdat) >> blt_info.blitbshift; prevb = blt_info.bltbdat; reg = 0x72; + alloc_cycle_blitter (hpos, &bltbpt); break; case 3: blt_info.bltcdat = dat = chipmem_wget_indirect (bltcpt); @@ -938,6 +940,7 @@ STATIC_INLINE void blitter_dodma (int ch, int hpos) addr = bltcpt; bltcpt += blit_add; reg = 0x70; + alloc_cycle_blitter (hpos, &bltcpt); break; default: abort (); @@ -965,7 +968,6 @@ STATIC_INLINE void blitter_dodma (int ch, int hpos) blitfc = !!(bltcon1 & 0x4); } } - alloc_cycle_ext (hpos, CYCLE_BLITTER); record_dma_blit (reg, dat, addr, hpos); } @@ -1444,11 +1446,29 @@ void maybe_blit (int hpos, int hack) if (savestate_state) return; - if (dmaen (DMA_BLITTER)) { - if (currprefs.waiting_blits == 1 || (currprefs.waiting_blits == 2 && blit_last_cycle >= blit_diag[0] && blit_dmacount == blit_diag[0]) || currprefs.m68k_speed < 0) { + if (dmaen (DMA_BLITTER) && (currprefs.cpu_model >= 68020 || !currprefs.cpu_cycle_exact)) { + bool doit = false; + if (currprefs.waiting_blits == 3) { // always + doit = true; + } else if (currprefs.waiting_blits == 2) { // noidle + if (blit_dmacount == blit_diag[0] && (regs.spcflags & SPCFLAG_BLTNASTY)) + doit = true; + } else if (currprefs.waiting_blits == 1) { // automatic + if (blit_dmacount == blit_diag[0] && (regs.spcflags & SPCFLAG_BLTNASTY)) + doit = true; + else if (currprefs.m68k_speed < 0) + doit = true; + } + if (doit) { + bool waited = false; while (bltstate != BLT_done && dmaen (DMA_BLITTER)) { + waited = true; x_do_cycles (8 * CYCLE_UNIT); } + if (warned && waited) { + warned--; + write_log (_T("waiting_blits detected\n")); + } if (bltstate == BLT_done) return; } diff --git a/cfgfile.cpp b/cfgfile.cpp index c5cdde01..a3ab0551 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -188,7 +188,7 @@ static const TCHAR *cdmodes[] = { _T("disabled"), _T(""), _T("image"), _T("ioctl static const TCHAR *cdconmodes[] = { _T(""), _T("uae"), _T("ide"), _T("scsi"), _T("cdtv"), _T("cd32"), 0 }; static const TCHAR *specialmonitors[] = { _T("none"), _T("autodetect"), _T("a2024"), _T("graffiti"), 0 }; static const TCHAR *rtgtype[] = { _T("ZorroII"), _T("ZorroIII"), 0 }; -static const TCHAR *waitblits[] = { _T("false"), _T("true"), _T("noidleonly"), 0 }; +static const TCHAR *waitblits[] = { _T("disabled"), _T("automatic"), _T("noidleonly"), _T("always"), 0 }; static const TCHAR *obsolete[] = { _T("accuracy"), _T("gfx_opengl"), _T("gfx_32bit_blits"), _T("32bit_blits"), @@ -2722,16 +2722,16 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH return 1; } - if (p->config_version < (21 << 16)) { - if (cfgfile_strval (option, value, _T("cpu_speed"), &p->m68k_speed, speedmode, 1) - /* Broken earlier versions used to write this out as a string. */ - || cfgfile_strval (option, value, _T("finegraincpu_speed"), &p->m68k_speed, speedmode, 1)) - { - p->m68k_speed--; - return 1; - } + /* Broken earlier versions used to write this out as a string. */ + if (cfgfile_strval (option, value, _T("finegraincpu_speed"), &p->m68k_speed, speedmode, 1)) { + p->m68k_speed--; + return 1; } + if (cfgfile_strval (option, value, _T("cpu_speed"), &p->m68k_speed, speedmode, 1)) { + p->m68k_speed--; + return 1; + } if (cfgfile_intval (option, value, _T("cpu_speed"), &p->m68k_speed, 1)) { p->m68k_speed *= CYCLE_UNIT; return 1; @@ -4959,6 +4959,8 @@ int built_in_prefs (struct uae_prefs *p, int model, int config, int compa, int r v = bip_super (p, config, compa, romcheck); break; } + if (p->cpu_model >= 68020 || !p->cpu_cycle_exact) + p->waiting_blits = 1; return v; } diff --git a/cia.cpp b/cia.cpp index fb5a39a6..72dfcffb 100644 --- a/cia.cpp +++ b/cia.cpp @@ -1667,6 +1667,11 @@ void rtc_hardreset (void) } } +static uae_u8 tobcd (int val) +{ + return (val / 10) * 16 + (val % 10); +} + static uae_u32 REGPARAM2 clock_lget (uaecptr addr) { return (clock_wget (addr) << 16) | clock_wget (addr + 2); @@ -1714,7 +1719,7 @@ static uae_u32 REGPARAM2 clock_bget (uaecptr addr) case 0x8: return (ct->tm_mon + 1) % 10; case 0x9: return (ct->tm_mon + 1) / 10; case 0xA: return ct->tm_year % 10; - case 0xB: return ct->tm_year / 10; + case 0xB: return tobcd (ct->tm_year / 10); case 0xC: return ct->tm_wday; case 0xD: return clock_control_d; case 0xE: return clock_control_e; @@ -1738,10 +1743,10 @@ static uae_u32 REGPARAM2 clock_bget (uaecptr addr) case 0x6: return ct->tm_wday; case 0x7: return ct->tm_mday % 10; case 0x8: return ct->tm_mday / 10; - case 0x9: return (ct->tm_mon+1) % 10; - case 0xA: return (ct->tm_mon+1) / 10; + case 0x9: return (ct->tm_mon + 1) % 10; + case 0xA: return (ct->tm_mon + 1) / 10; case 0xB: return ct->tm_year % 10; - case 0xC: return ct->tm_year / 10; + case 0xC: return tobcd (ct->tm_year / 10); case 0xD: return clock_control_d; /* E and F = write-only */ } diff --git a/custom.cpp b/custom.cpp index 0b7bcc35..be300413 100644 --- a/custom.cpp +++ b/custom.cpp @@ -455,7 +455,7 @@ STATIC_INLINE void alloc_cycle (int hpos, int type) } STATIC_INLINE void alloc_cycle_maybe (int hpos, int type) { - if (cycle_line[hpos] == 0) + if ((cycle_line[hpos] & CYCLE_MASK) == 0) alloc_cycle (hpos, type); } @@ -464,6 +464,20 @@ void alloc_cycle_ext (int hpos, int type) alloc_cycle (hpos, type); } +void alloc_cycle_blitter (int hpos, uaecptr *ptr) +{ + if (cycle_line[hpos] & CYCLE_COPPER_SPECIAL) { + static int warned = 100; + uaecptr srcptr = cop_state.strobe == 1 ? cop1lc : cop2lc; + if (warned > 0) { + write_log (_T("buggy copper cycle conflict with blitter %08x <- %08x\n"), *ptr, srcptr); + warned--; + } + // not yet. *ptr = srcptr; + } + alloc_cycle (hpos, CYCLE_BLITTER); +} + static void hsyncdelay (void) { #if 0 @@ -3687,8 +3701,8 @@ void INTREQ_f (uae_u16 v) void INTREQ_0 (uae_u16 v) { #if 0 - if (!(v & 0x8000) && (v & (0x80 | 0x100 | 0x200 | 0x400))) - write_log (_T("audirq clear %d\n"), v); + if (!(v & 0x8000) && (v & (0x80 | 0x100 | 0x200 | 0x400) != 0x0780)) + write_log (_T("audirq clear %04x %04x\n"), v, intreq); #endif uae_u16 old = intreq; @@ -4550,7 +4564,7 @@ static int customdelay[]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x40 - 0x5e */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x60 - 0x7e */ 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, /* 0x80 - 0x9e */ - 1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0, /* 32 0xa0 - 0xde */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 32 0xa0 - 0xde */ /* BPLxPTH/BPLxPTL */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 16 */ /* BPLCON0-3,BPLMOD1-2 */ @@ -4669,6 +4683,7 @@ static void update_copper (int until_hpos) // Cycle can be free and copper won't allocate it. // If Blitter uses this cycle = Copper's address gets copied blitter DMA pointer.. cop_state.state = COP_strobe_delay2x; + cycle_line[old_hpos] |= CYCLE_COPPER_SPECIAL; break; case COP_strobe_delay2x: // Second cycle fetches following word and tosses it away. Must be free cycle. @@ -4801,8 +4816,8 @@ static void update_copper (int until_hpos) this hack: defer the entire decision until the next line if necessary. */ #endif #if 0 + /* Above is not true anymore */ if (c_hpos >= (maxhpos & ~1) || (c_hpos & 1)) { - write_log(L"*\n"); break; } #endif @@ -7291,7 +7306,7 @@ uae_u8 *restore_custom (uae_u8 *src) COPCON (RW); /* 02E COPCON */ RW; /* 030 SERDAT* */ RW; /* 032 SERPER* */ - POTGO (RW); /* 034 POTGO */ + potgo_value = 0; POTGO (RW); /* 034 POTGO */ RW; /* 036 JOYTEST* */ RW; /* 038 STREQU */ RW; /* 03A STRVHBL */ @@ -7922,7 +7937,7 @@ STATIC_INLINE int dma_cycle (void) decide_fetch_ce (hpos); bpldma = is_bitplane_dma (hpos_old); if (bltstate != BLT_done) { - if (!blitpri && blitter_nasty >= BLIT_NASTY && cycle_line[hpos_old] == 0 && !bpldma) { + if (!blitpri && blitter_nasty >= BLIT_NASTY && (cycle_line[hpos_old] & CYCLE_MASK) == 0 && !bpldma) { alloc_cycle (hpos_old, CYCLE_CPUNASTY); break; } @@ -7930,7 +7945,7 @@ STATIC_INLINE int dma_cycle (void) // copper may have been waiting for the blitter sync_copper (hpos); } - if (cycle_line[hpos_old] == 0 && !bpldma) { + if ((cycle_line[hpos_old] & CYCLE_MASK) == 0 && !bpldma) { alloc_cycle (hpos_old, CYCLE_CPU); break; } @@ -8106,7 +8121,7 @@ void do_cycles_ce (unsigned long cycles) int is_cycle_ce (void) { int hpos = current_hpos (); - return cycle_line[hpos]; + return cycle_line[hpos] & CYCLE_MASK; } #endif diff --git a/debug.cpp b/debug.cpp index 08a3c72c..e014ac3f 100644 --- a/debug.cpp +++ b/debug.cpp @@ -705,7 +705,7 @@ uaecptr dumpmem2 (uaecptr addr, TCHAR *out, int osize) for (i = 0; i < cols; i++) { uae_u8 b1, b2; b1 = b2 = 0; - if (safe_addr(addr, 2)) { + if (safe_addr (addr, 1)) { b1 = get_byte (addr + 0); b2 = get_byte (addr + 1); _stprintf (out + 9 + i * 5, _T("%02X%02X "), b1, b2); diff --git a/disk.cpp b/disk.cpp index c5ed90b0..eb47c134 100644 --- a/disk.cpp +++ b/disk.cpp @@ -2036,11 +2036,36 @@ static int drive_write_ext2 (uae_u16 *bigmfmbuf, struct zfile *diskfile, trackid return 1; } +static bool convert_adf_to_ext2 (drive *drv) +{ + TCHAR name[MAX_DPATH]; + bool hd = drv->ddhd == 2; + struct zfile *f; + + if (drv->filetype != ADF_NORMAL) + return false; + _tcscpy (name, currprefs.floppyslots[drv - floppy].df); + if (!name[0]) + return false; + _tcscat (name, _T(".extended.adf")); + if (!disk_creatediskfile (name, 1, hd ? DRV_35_HD : DRV_35_DD, NULL, false, false, currprefs.floppyslots[drv - floppy].df)) + return false; + f = zfile_fopen (name, _T("rb"), 0); + if (!f) + return false; + zfile_fclose (drv->diskfile); + drv->diskfile = f; + read_header_ext2 (drv->diskfile, drv->trackdata, &drv->num_tracks, &drv->ddhd); + drv->filetype = ADF_EXT2; + drive_fill_bigbuf (drv, 1); + + return true; +} + static void drive_write_data (drive * drv) { int ret = -1; int tr = drv->cyl * 2 + side; - static int warned; if (drive_writeprotected (drv) || drv->trackdata[tr].type == TRACK_NONE) { /* read original track back because we didn't really write anything */ @@ -2054,9 +2079,17 @@ static void drive_write_data (drive * drv) switch (drv->filetype) { case ADF_NORMAL: if (drive_write_adf_amigados (drv)) { - if (!warned) - notify_user (NUMSG_NEEDEXT2); - warned = 1; + if (currprefs.floppy_auto_ext2) { + if (convert_adf_to_ext2 (drv)) { + drive_write_data (drv); + return; + } + } else { + static int warned; + if (!warned) + notify_user (NUMSG_NEEDEXT2); + warned = 1; + } } return; case ADF_EXT1: @@ -2065,10 +2098,9 @@ static void drive_write_data (drive * drv) if (!longwritemode) ret = drive_write_adf_amigados (drv); if (ret) { - activate_debugger (); write_log (_T("not an amigados track %d (error %d), writing as raw track\n"), drv->cyl * 2 + side, ret); -// drive_write_ext2 (drv->bigmfmbuf, drv->diskfile, &drv->trackdata[drv->cyl * 2 + side], -// longwritemode ? dsklength2 * 8 : drv->tracklen); + drive_write_ext2 (drv->bigmfmbuf, drv->diskfile, &drv->trackdata[drv->cyl * 2 + side], + longwritemode ? dsklength2 * 8 : drv->tracklen); } return; case ADF_IPF: @@ -2144,13 +2176,14 @@ static void floppy_get_rootblock (uae_u8 *dst, int block, const TCHAR *disk_name /* type: 0=regular, 1=ext2adf */ /* adftype: 0=DD,1=HD,2=DD PC,3=HD PC,4=525SD */ -void disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const TCHAR *disk_name, bool ffs, bool bootable) +bool disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const TCHAR *disk_name, bool ffs, bool bootable, const TCHAR *copyfrom) { int size = 32768; - struct zfile *f; + struct zfile *f, *sf; int i, l, file_size, tracks, track_len, sectors; uae_u8 *chunk = NULL; int ddhd = 1; + bool ok = false; if (type == 1) tracks = 2 * 83; @@ -2172,6 +2205,12 @@ void disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const tracks /= 2; } + if (copyfrom) { + sf = zfile_fopen (copyfrom, _T("rb"), 0); + if (!sf) + return false; + } + f = zfile_fopen (name, _T("wb"), 0); chunk = xmalloc (uae_u8, size); if (f && chunk) { @@ -2191,6 +2230,7 @@ void disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const } zfile_fwrite (chunk, cylsize, 1, f); } + ok = true; } else { uae_u8 root[4]; uae_u8 rawtrack[3 * 4], dostrack[3 * 4]; @@ -2210,27 +2250,33 @@ void disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const for (i = 0; i < tracks; i++) { uae_u8 tmp[3 * 4]; memcpy (tmp, rawtrack, sizeof rawtrack); - if (dodos) + if (dodos || sf) memcpy (tmp, dostrack, sizeof dostrack); zfile_fwrite (tmp, sizeof tmp, 1, f); } for (i = 0; i < tracks; i++) { memset (chunk, 0, size); - if (dodos) { - if (i == 0) - floppy_get_bootblock (chunk, ffs, bootable); - else if (i == 80) - floppy_get_rootblock (chunk, 80 * 11 * ddhd, disk_name, adftype); + if (sf) { + zfile_fread (chunk, 11 * ddhd, 512, sf); + } else { + if (dodos) { + if (i == 0) + floppy_get_bootblock (chunk, ffs, bootable); + else if (i == 80) + floppy_get_rootblock (chunk, 80 * 11 * ddhd, disk_name, adftype); + } } zfile_fwrite (chunk, l, 1, f); } + ok = true; } } xfree (chunk); zfile_fclose (f); + zfile_fclose (sf); if (f) DISK_history_add (name, -1, HISTORY_FLOPPY, TRUE); - + return ok; } int disk_getwriteprotect (struct uae_prefs *p, const TCHAR *name) @@ -2299,7 +2345,7 @@ int disk_setwriteprotect (struct uae_prefs *p, int num, const TCHAR *name, bool name2 = DISK_get_saveimagepath (name); if (needwritefile && zf2 == 0) - disk_creatediskfile (name2, 1, drvtype, NULL, false, false); + disk_creatediskfile (name2, 1, drvtype, NULL, false, false, NULL); zfile_fclose (zf2); if (writeprotected && iswritefileempty (p, name)) { for (i = 0; i < MAX_FLOPPY_DRIVES; i++) { diff --git a/drawing.cpp b/drawing.cpp index 5636a763..bd7d656a 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -2908,7 +2908,8 @@ void vsync_handle_redraw (int long_frame, int lof_changed, uae_u16 bplcon0p, uae gui_flicker_led (-1, 0, 0); #ifdef AVIOUTPUT - frame_drawn (); + if (!picasso_on) + frame_drawn (); #endif } diff --git a/expansion.cpp b/expansion.cpp index 663bc13c..dbeb9cf5 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -1000,7 +1000,7 @@ static void expamem_map_filesys (void) write_log (_T("Filesystem: mapped memory @$%lx.\n"), filesys_start); /* 68k code needs to know this. */ a = here (); - org (rtarea_base + 0xFFFC); + org (rtarea_base + RTAREA_FSBOARD); dl (filesys_start + 0x2000); org (a); } diff --git a/filesys.asm b/filesys.asm index cabe5c79..8c73ec30 100644 --- a/filesys.asm +++ b/filesys.asm @@ -143,7 +143,7 @@ residentcodeend: filesys_init: movem.l d0-d7/a0-a6,-(sp) move.l 4.w,a6 - move.w #$FFFC,d0 ; filesys base + move.w #$FFEC,d0 ; filesys base bsr getrtbase move.l (a0),a5 lea.l explibname(pc),a1 ; expansion lib name @@ -424,6 +424,38 @@ exter_server_exit: movem.l (sp)+,a2 rts +heartbeatvblank: + movem.l d0-d1/a0-a2,-(sp) + + move.w #$FF38,d0 + moveq #18,d1 + bsr.w getrtbase + jsr (a0) + move.l d0,a2 + + moveq #22,d0 + move.l #65536+1,d1 + jsr AllocMem(a6) + move.l d0,a1 + + move.b #2,8(a1) ;NT_INTERRUPT + move.b #-10,9(a1) ;priority + lea kaname(pc),a0 + move.l a0,10(a1) + lea kaint(pc),a0 + move.l a0,18(a1) + move.l a2,14(a1) + moveq #5,d0 ;INTB_VERTB + jsr -$00a8(a6) + + movem.l (sp)+,d0-d1/a0-a2 + rts + +kaint: + addq.l #1,(a1) + moveq #0,d0 + rts + setup_exter: movem.l d0-d1/a0-a1,-(sp) bsr.w residenthack @@ -441,12 +473,14 @@ setup_exter: moveq.l #3,d0 jsr -168(a6) ; AddIntServer + bsr.w heartbeatvblank + move.w #$FF38,d0 moveq #4,d1 bsr.w getrtbase jsr (a0) - tst.l d0 - beq.s .nomh + tst.l d0 + beq.s .nomh bsr.w mousehack_init .nomh movem.l (sp)+,d0-d1/a0-a1 @@ -941,7 +975,7 @@ make_cd_dev: ; IN: A0 param_packet, D6: unit_no | 0x80000000 (=CD) bsr.w fsres move.l d0,PP_FSRES(a0) ; pointer to FileSystem.resource move.l a0,-(sp) - move.w #$FFFC,d0 ; filesys base + move.w #$FFEC,d0 ; filesys base bsr.w getrtbase move.l (a0),a5 move.w #$FF28,d0 ; fill in unit-dependent info (filesys_dev_storeinfo) @@ -1036,7 +1070,7 @@ make_dev: ; IN: A0 param_packet, D6: unit_no, D7: b0=autoboot,b1=onthefly,b2=v36 bsr.w fsres move.l d0,PP_FSRES(a0) ; pointer to FileSystem.resource move.l a0,-(sp) - move.w #$FFFC,d0 ; filesys base + move.w #$FFEC,d0 ; filesys base bsr.w getrtbase move.l (a0),a5 move.w #$FF28,d0 ; fill in unit-dependent info (filesys_dev_storeinfo) @@ -1570,12 +1604,6 @@ LKCK_ret: move.l (a7)+,d5 rts -getrtbase: - lea start-8-4(pc),a0 - and.l #$FFFF,d0 - add.l d0,a0 - rts - ; mouse hack newlist: @@ -2646,7 +2674,11 @@ chook: movem.l (sp)+,d0-d1/a0 rts - +getrtbase: + lea start-8-4(pc),a0 + and.l #$FFFF,d0 + add.l d0,a0 + rts inp_dev: dc.b 'input.device',0 tim_dev: dc.b 'timer.device',0 @@ -2660,6 +2692,7 @@ clip_dev: dc.b 'clipboard.device',0 pointer_prefs: dc.b 'RAM:Env/Sys/Pointer.prefs',0 clname: dc.b 'UAE clipboard sharing',0 mhname: dc.b 'UAE mouse driver',0 +kaname: dc.b 'UAE heart beat',0 exter_name: dc.b 'UAE filesystem',0 fstaskname: dc.b 'UAE fs automounter',0 fsprocname: dc.b 'UAE fs automount process',0 diff --git a/filesys.cpp b/filesys.cpp index 39362f55..74dea908 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -73,6 +73,8 @@ #define TRACE2(x) #endif +#define RTAREA_HEARTBEAT 0xFFFC + static void get_time (time_t t, long* days, long* mins, long* ticks); static uae_sem_t test_sem; @@ -1300,11 +1302,22 @@ int filesys_eject (int nr) return 1; } +static uae_u32 heartbeat; +static int heartbeat_count; +static int heartbeat_task; + // This uses filesystem process to reduce resource usage void setsystime (void) { if (!currprefs.tod_hack) return; + heartbeat = get_long (rtarea_base + RTAREA_HEARTBEAT); + heartbeat_task = 1; + heartbeat_count = 10; +} + +static void setsystime_vblank (void) +{ Unit *u; for (u = units; u; u = u->next) { if (is_virtual (u->unit) && filesys_isvolume (u)) { @@ -6664,6 +6677,8 @@ static uae_u32 REGPARAM2 mousehack_done (TrapContext *context) if (consolehook_activate ()) v |= 2; return v; + } else if (mode == 18) { + return rtarea_base + RTAREA_HEARTBEAT; } else if (mode == 101) { consolehook_ret (m68k_areg (regs, 1), m68k_areg (regs, 2)); } else if (mode == 102) { @@ -6679,6 +6694,13 @@ void filesys_vsync (void) { Unit *u; + if (heartbeat == get_long (rtarea_base + RTAREA_HEARTBEAT)) { + if (heartbeat_count > 0) + heartbeat_count--; + return; + } + heartbeat = get_long (rtarea_base + RTAREA_HEARTBEAT); + for (u = units; u; u = u->next) { if (u->reinsertdelay > 0) { u->reinsertdelay--; @@ -6692,6 +6714,14 @@ void filesys_vsync (void) } record_timeout (u); } + + if (heartbeat_count <= 0) + return; + + if (heartbeat_task & 1) { + setsystime_vblank (); + heartbeat_task &= ~1; + } } void filesys_install (void) @@ -6721,6 +6751,11 @@ void filesys_install (void) loop = here (); + org (rtarea_base + RTAREA_HEARTBEAT); + dl (0); + heartbeat = 0; + heartbeat_task = 0; + org (rtarea_base + 0xFF18); calltrap (deftrap2 (filesys_dev_bootfilesys, 0, _T("filesys_dev_bootfilesys"))); dw (RTS); diff --git a/filesys_bootrom.cpp b/filesys_bootrom.cpp index ae662068..bdc270b8 100644 --- a/filesys_bootrom.cpp +++ b/filesys_bootrom.cpp @@ -1,13 +1,13 @@ db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0b); db(0xcc); - db(0x00); db(0x00); db(0x09); db(0x7a); db(0x00); db(0x00); db(0x00); db(0xe0); + db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0c); db(0x22); + db(0x00); db(0x00); db(0x09); db(0xd0); db(0x00); db(0x00); db(0x00); db(0xe0); db(0x00); db(0x00); db(0x02); db(0x9c); db(0x00); db(0x00); db(0x00); db(0x24); - db(0x00); db(0x00); db(0x03); db(0x58); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x14); db(0x4e); db(0x43); db(0xfa); db(0x19); db(0x3c); + db(0x00); db(0x00); db(0x03); db(0xaa); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x14); db(0x96); db(0x43); db(0xfa); db(0x19); db(0xa1); db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xe0); db(0xe2); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x11); db(0x61); db(0x00); db(0x0d); db(0xfe); db(0x4e); db(0x90); + db(0x72); db(0x11); db(0x61); db(0x00); db(0x18); db(0x8a); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x4c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x40); db(0x70); db(0x14); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); @@ -22,16 +22,16 @@ db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e); db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8); - db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x13); db(0x90); - db(0x61); db(0x00); db(0x17); db(0x58); db(0x4c); db(0xdf); db(0x7e); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x13); db(0xd8); + db(0x61); db(0x00); db(0x17); db(0xa0); db(0x4c); db(0xdf); db(0x7e); db(0xff); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02); db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0d); db(0x54); - db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x18); db(0x9d); db(0x70); db(0x24); + db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x17); db(0xe0); + db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x19); db(0x02); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); - db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x18); db(0x8d); db(0x70); db(0x00); + db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x18); db(0xf2); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x00); db(0x00); db(0x84); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); @@ -40,13 +40,13 @@ db(0xbc); db(0x6d); db(0x01); db(0x0e); db(0x64); db(0x2c); db(0x2f); db(0x06); db(0x7e); db(0x01); db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); db(0x00); db(0x02); db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); - db(0x08); db(0x32); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); + db(0x08); db(0x88); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xce); db(0x4a); db(0x45); db(0x67); db(0x24); db(0x7c); db(0x00); db(0x30); db(0x2d); db(0x01); db(0x0c); db(0x0d); db(0x00); db(0x67); db(0x12); db(0x48); db(0xe7); db(0x02); db(0x10); db(0x20); db(0x4b); db(0x08); db(0xc6); - db(0x00); db(0x1f); db(0x61); db(0x00); db(0x07); db(0x02); db(0x4c); db(0xdf); + db(0x00); db(0x1f); db(0x61); db(0x00); db(0x07); db(0x58); db(0x4c); db(0xdf); db(0x08); db(0x40); db(0x52); db(0x46); db(0x0c); db(0x46); db(0x00); db(0x08); db(0x66); db(0xde); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4b); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); @@ -55,38 +55,38 @@ db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04); db(0x00); db(0x44); db(0x01); db(0x00); db(0x43); db(0xf9); db(0x00); db(0x21); db(0x00); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xea); db(0x4a); db(0x80); db(0x66); db(0x20); - db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0c); db(0x7c); + db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x17); db(0x08); db(0x4e); db(0x90); db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x08); db(0x67); db(0x06); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfd); db(0x96); - db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0c); db(0x5c); + db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x16); db(0xe8); db(0x4e); db(0x90); db(0x20); db(0x49); db(0x20); db(0x01); db(0x67); db(0x0c); - db(0x22); db(0x04); db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x17); db(0xc1); - db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x17); db(0x38); + db(0x22); db(0x04); db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x18); db(0x26); + db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x17); db(0x9d); db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); - db(0x0d); db(0x16); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); - db(0xff); db(0x48); db(0x61); db(0x00); db(0x0c); db(0x2e); db(0x4e); db(0x90); + db(0x0d); db(0x5e); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); + db(0xff); db(0x48); db(0x61); db(0x00); db(0x16); db(0xba); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01); db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); - db(0x17); db(0x32); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x17); db(0x97); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x16); db(0xe3); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x17); db(0x48); db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x72); db(0x02); db(0x30); db(0x3c); - db(0xff); db(0x48); db(0x61); db(0x00); db(0x0b); db(0xb6); db(0x4e); db(0x90); - db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x08); db(0x96); + db(0xff); db(0x48); db(0x61); db(0x00); db(0x16); db(0x42); db(0x4e); db(0x90); + db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x08); db(0xec); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x20); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x0b); db(0x9c); + db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x16); db(0x28); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); - db(0xff); db(0x50); db(0x61); db(0x00); db(0x0b); db(0x86); db(0x70); db(0x02); + db(0xff); db(0x50); db(0x61); db(0x00); db(0x16); db(0x12); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x00); db(0x00); db(0x7c); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe4); db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); @@ -104,359 +104,368 @@ db(0x00); db(0x18); db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x74); db(0x30); db(0x3c); db(0xff); db(0x50); - db(0x61); db(0x00); db(0x0a); db(0xf8); db(0x70); db(0x04); db(0x4e); db(0x90); + db(0x61); db(0x00); db(0x15); db(0x84); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0xda); - db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); - db(0x15); db(0xb7); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); - db(0xff); db(0x24); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); - db(0xff); db(0x1c); db(0x23); db(0x48); db(0x00); db(0x12); db(0x33); db(0x7c); - db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x4e); db(0xae); - db(0xff); db(0x58); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x04); - db(0x61); db(0x00); db(0x0a); db(0xa8); db(0x4e); db(0x90); db(0x4a); db(0x80); - db(0x67); db(0x04); db(0x61); db(0x00); db(0x0b); db(0xd6); db(0x4c); db(0xdf); - db(0x03); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x20); db(0x40); db(0x70); db(0x00); db(0x43); db(0xeb); db(0x01); db(0xa0); - db(0x11); db(0xb1); db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); - db(0x0c); db(0x40); db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); - db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); - db(0x41); db(0xfa); db(0x15); db(0x3d); db(0x23); db(0x48); db(0x00); db(0x0a); - db(0x20); db(0x6b); db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); - db(0x4e); db(0xae); db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); - db(0x03); db(0xf3); db(0x66); db(0x00); db(0x00); db(0xe4); db(0x50); db(0x8a); - db(0x2e); db(0x2a); db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); - db(0x52); db(0x87); db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); - db(0xd0); db(0x80); db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); - db(0x7c); db(0x00); db(0x24); db(0x12); db(0x72); db(0x01); db(0x08); db(0x02); - db(0x00); db(0x1e); db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); - db(0x08); db(0xc1); db(0x00); db(0x10); db(0xe5); db(0x8a); db(0x20); db(0x02); - db(0x66); db(0x04); db(0x42); db(0x9a); db(0x60); db(0x1e); db(0x50); db(0x80); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0x00); db(0xa0); db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); - db(0x22); db(0x0d); db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); - db(0x2a); db(0x80); db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); - db(0x66); db(0xc0); db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); - db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); - db(0x26); db(0x1b); db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); - db(0x00); db(0x00); db(0x03); db(0xe9); db(0x67); db(0x08); db(0x0c); db(0x83); - db(0x00); db(0x00); db(0x03); db(0xea); db(0x66); db(0x0c); db(0x20); db(0x04); - db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x10); db(0xdb); db(0x53); db(0x80); - db(0x60); db(0xf6); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xeb); - db(0x66); db(0x4e); db(0x26); db(0x1b); db(0x0c); db(0x83); db(0x00); db(0x00); - db(0x03); db(0xec); db(0x66); db(0x28); db(0x22); db(0x06); db(0xd2); db(0x81); - db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); - db(0x20); db(0x1b); db(0x67); db(0xe6); db(0x22); db(0x1b); db(0xd2); db(0x81); - db(0xd2); db(0x81); db(0x26); db(0x34); db(0x18); db(0x00); db(0x58); db(0x83); - db(0x24); db(0x1b); db(0xd7); db(0xb0); db(0x28); db(0x00); db(0x53); db(0x80); - db(0x66); db(0xf6); db(0x60); db(0xe4); db(0x0c); db(0x83); db(0x00); db(0x00); - db(0x03); db(0xf2); db(0x66); db(0x14); db(0x52); db(0x86); db(0xbe); db(0x86); - db(0x66); db(0x00); db(0xff); db(0x8a); db(0x7e); db(0x01); db(0x20); db(0x54); - db(0x20); db(0x07); db(0x4c); db(0xdf); db(0x7e); db(0xfe); db(0x4e); db(0x75); - db(0x7e); db(0x00); db(0x60); db(0xf4); db(0x48); db(0xe7); db(0x40); db(0xe2); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); - db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); - db(0x00); db(0x0a); db(0x45); db(0xfa); db(0x14); db(0x8f); db(0x10); db(0x19); - db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); - db(0x67); db(0x42); db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); - db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); - db(0x00); db(0x08); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x14); db(0x65); - db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0xe1); - db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); - db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); - db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); - db(0xff); db(0x0a); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); - db(0x47); db(0x02); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x02); - db(0x2e); db(0x00); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x7c); - db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); - db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); - db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); - db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); - db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); - db(0xfd); db(0x5a); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); - db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); - db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); - db(0xfd); db(0x5a); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); - db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); - db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0xac); + db(0x48); db(0xe7); db(0xc0); db(0xe0); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x12); db(0x61); db(0x00); db(0x15); db(0x6a); db(0x4e); db(0x90); + db(0x24); db(0x40); db(0x70); db(0x16); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); + db(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); + db(0x00); db(0xf6); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x15); db(0xf7); + db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0x16); + db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4a); db(0x00); db(0x0e); + db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x4c); db(0xdf); + db(0x07); db(0x03); db(0x4e); db(0x75); db(0x52); db(0x91); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); + db(0xfc); db(0x88); db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); + db(0x41); db(0xfa); db(0x15); db(0xca); db(0x23); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0xfe); db(0xd2); db(0x23); db(0x48); db(0x00); db(0x0e); + db(0x41); db(0xfa); db(0xfe); db(0xca); db(0x23); db(0x48); db(0x00); db(0x12); + db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); + db(0x4e); db(0xae); db(0xff); db(0x58); db(0x61); db(0x00); db(0xff); db(0x72); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x04); db(0x61); db(0x00); + db(0x14); db(0xde); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); + db(0x61); db(0x00); db(0x0b); db(0xc8); db(0x4c); db(0xdf); db(0x03); db(0x03); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x00); db(0xbe); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); + db(0x70); db(0x00); db(0x43); db(0xeb); db(0x01); db(0xa0); db(0x11); db(0xb1); + db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); + db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); + db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); + db(0x15); db(0x4c); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); + db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); + db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); + db(0x66); db(0x00); db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a); + db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); + db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); + db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); + db(0x24); db(0x12); db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e); + db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1); + db(0x00); db(0x10); db(0xe5); db(0x8a); db(0x20); db(0x02); db(0x66); db(0x04); + db(0x42); db(0x9a); db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); + db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); + db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); + db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0); + db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); + db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); + db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); + db(0x03); db(0xe9); db(0x67); db(0x08); db(0x0c); db(0x83); db(0x00); db(0x00); + db(0x03); db(0xea); db(0x66); db(0x0c); db(0x20); db(0x04); db(0x4a); db(0x80); + db(0x67); db(0x0e); db(0x10); db(0xdb); db(0x53); db(0x80); db(0x60); db(0xf6); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xeb); db(0x66); db(0x4e); + db(0x26); db(0x1b); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xec); + db(0x66); db(0x28); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); + db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x20); db(0x1b); + db(0x67); db(0xe6); db(0x22); db(0x1b); db(0xd2); db(0x81); db(0xd2); db(0x81); + db(0x26); db(0x34); db(0x18); db(0x00); db(0x58); db(0x83); db(0x24); db(0x1b); + db(0xd7); db(0xb0); db(0x28); db(0x00); db(0x53); db(0x80); db(0x66); db(0xf6); + db(0x60); db(0xe4); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x66); db(0x14); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0x00); + db(0xff); db(0x8a); db(0x7e); db(0x01); db(0x20); db(0x54); db(0x20); db(0x07); + db(0x4c); db(0xdf); db(0x7e); db(0xfe); db(0x4e); db(0x75); db(0x7e); db(0x00); + db(0x60); db(0xf4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); + db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); + db(0x45); db(0xfa); db(0x14); db(0x9e); db(0x10); db(0x19); db(0x12); db(0x1a); + db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); + db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); + db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); + db(0x00); db(0x08); db(0x41); db(0xfa); db(0x14); db(0x74); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0xf0); db(0x25); db(0x48); + db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); + db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); + db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); + db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x47); db(0x02); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x02); db(0x2e); db(0x00); + db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x7c); db(0x2c); db(0x6b); + db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); + db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); + db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); - db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x94); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x40); db(0x80); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x22); db(0x2e); db(0x00); - db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); - db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); - db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); - db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); - db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); - db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); - db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); - db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); - db(0xfd); db(0x60); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); - db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); - db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0x44); + db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x5a); + db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0xac); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); + db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x20); db(0x6b); + db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x94); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x40); db(0x80); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x01); db(0x22); db(0x2e); db(0x00); db(0x2c); db(0x6b); + db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); + db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); + db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); - db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x2c); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x80); - db(0x4e); db(0x75); db(0x22); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); - db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); - db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0xa8); db(0x00); db(0x04); - db(0x20); db(0x09); db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x04); - db(0x4e); db(0x75); db(0x24); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); - db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); - db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0x68); db(0x00); db(0x04); - db(0xd3); db(0xc9); db(0xd3); db(0xc9); db(0xb3); db(0xca); db(0x66); db(0x06); - db(0x21); db(0x52); db(0x00); db(0x04); db(0x60); db(0x18); db(0x20); db(0x09); - db(0x67); db(0x0e); db(0x20); db(0x11); db(0xd0); db(0x80); db(0xd0); db(0x80); - db(0xb5); db(0xc0); db(0x67); db(0x04); db(0x22); db(0x40); db(0x60); db(0xee); - db(0x20); db(0x09); db(0x67); db(0x02); db(0x22); db(0x92); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x20); db(0x22); db(0x74); db(0x16); db(0x9f); db(0xc2); - db(0x24); db(0x4f); db(0x32); db(0x02); db(0x42); db(0x32); db(0x10); db(0xff); - db(0x53); db(0x41); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x72); db(0x0f); db(0x4a); db(0x80); db(0x67); db(0x02); db(0x72); db(0x10); - db(0x15); db(0x41); db(0x00); db(0x04); db(0x35); db(0x7c); db(0x08); db(0x00); - db(0x00); db(0x08); db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x33); db(0x7c); - db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); - db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); - db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x22); db(0x6b); - db(0x00); db(0xa8); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); - db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x25); db(0x69); - db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); - db(0x00); db(0x12); db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0xdf); db(0xc2); db(0x4c); db(0xdf); db(0x44); db(0x04); - db(0x4e); db(0x75); db(0x4a); db(0x00); db(0x67); db(0x26); db(0x4a); db(0x2b); - db(0x00); db(0x4c); db(0x66); db(0x36); db(0x70); db(0x00); db(0x4a); db(0x33); - db(0x00); db(0x4d); db(0x67); db(0x04); db(0x52); db(0x00); db(0x60); db(0xf6); - db(0x17); db(0x40); db(0x00); db(0x4c); db(0x67); db(0x24); db(0x20); db(0x01); - db(0x61); db(0x00); db(0xfd); db(0xf2); db(0x70); db(0x01); db(0x61); db(0x00); - db(0xff); db(0x60); db(0x60); db(0x16); db(0x4a); db(0x2b); db(0x00); db(0x4c); - db(0x67); db(0x10); db(0x42); db(0x2b); db(0x00); db(0x4c); db(0x20); db(0x01); - db(0x61); db(0x00); db(0xfe); db(0x68); db(0x70); db(0x00); db(0x61); db(0x00); - db(0xff); db(0x48); db(0x4e); db(0x75); db(0x4a); db(0xac); db(0x00); db(0x14); - db(0x67); db(0x0a); db(0x70); db(0x00); db(0x72); db(0x01); db(0x61); db(0x00); - db(0xff); db(0xb2); db(0x4e); db(0x75); db(0x70); db(0x01); db(0x72); db(0x03); - db(0x61); db(0x00); db(0xff); db(0xa8); db(0x4e); db(0x75); db(0x10); db(0x2b); - db(0x00); db(0xac); db(0x6b); db(0x0a); db(0x70); db(0x01); db(0x72); db(0x03); - db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x72); db(0x01); - db(0x0c); db(0x00); db(0x00); db(0xfe); db(0x66); db(0x02); db(0x72); db(0x03); - db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x86); db(0x4e); db(0x75); - db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); db(0x67); db(0x0c); - db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x0a); db(0x4a); db(0xa8); - db(0x00); db(0x0c); db(0x66); db(0x04); db(0x70); db(0x01); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2a); db(0x48); db(0x24); db(0x6c); - db(0x00); db(0x18); db(0x2e); db(0x15); db(0x7a); db(0x00); db(0x4a); db(0x87); - db(0x67); db(0x70); db(0x20); db(0x0a); db(0x67); db(0x6c); db(0x7c); db(0x00); - db(0x22); db(0x2d); db(0x00); db(0x08); db(0x67); db(0x12); db(0x24); db(0x2a); - db(0x00); db(0x04); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x4e); db(0xae); - db(0xfc); db(0x34); db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); - db(0x22); db(0x2d); db(0x00); db(0x0c); db(0x67); db(0x1c); db(0x20); db(0x41); - db(0x22); db(0x4a); db(0x2f); db(0x0a); db(0x45); db(0xec); db(0x00); db(0x20); - db(0x48); db(0x7a); db(0x00); db(0x08); db(0x2f); db(0x28); db(0x00); db(0x08); - db(0x4e); db(0x75); db(0x24); db(0x5f); db(0x4a); db(0x80); db(0x66); db(0x02); - db(0x50); db(0xc6); db(0x4a); db(0x06); db(0x67); db(0x24); db(0x20); db(0x2a); - db(0x00); db(0x04); db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x66); db(0x0a); - db(0x20); db(0x05); db(0x67); db(0x10); db(0x20); db(0x40); db(0x42); db(0x90); - db(0x60); db(0x0a); db(0x20); db(0x52); db(0x22); db(0x4a); db(0x22); db(0xd8); - db(0x59); db(0x80); db(0x6a); db(0xfa); db(0x53); db(0x95); db(0x53); db(0x87); - db(0x60); db(0x94); db(0x2a); db(0x0a); db(0x24); db(0x52); db(0x53); db(0x87); - db(0x60); db(0x8c); db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x20); db(0x6c); - db(0x00); db(0x24); db(0x4a); db(0x90); db(0x4e); db(0x75); db(0x61); db(0x00); - db(0xfc); db(0x7c); db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); - db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x05); db(0xb4); - db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); - db(0x05); db(0xaa); db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); - db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xcc); db(0x20); db(0x28); - db(0x01); db(0x90); db(0x67); db(0x18); db(0x6b); db(0x16); db(0x2f); db(0x08); - db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); - db(0x67); db(0x00); db(0x00); db(0xae); db(0x2c); db(0x4c); db(0x2f); db(0x08); - db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); - db(0x26); db(0x40); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); - db(0x05); db(0x62); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); - db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); - db(0x00); db(0x20); db(0x20); db(0x29); db(0x01); db(0x94); db(0x67); db(0x22); - db(0x20); db(0x40); db(0x61); db(0x00); db(0xfb); db(0x06); db(0x48); db(0xe7); - db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); - db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x61); db(0x00); - db(0xfa); db(0x94); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); - db(0x05); db(0x22); db(0x4e); db(0x90); db(0x16); db(0x29); db(0x00); db(0x4f); - db(0x0c); db(0x03); db(0x00); db(0x80); db(0x67); db(0x38); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); - db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); - db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); - db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x60); db(0x12); db(0x24); db(0x49); - db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); db(0x72); db(0x01); - db(0x70); db(0xec); db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); - db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfb); db(0x80); db(0x21); db(0x40); - db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc); - db(0x61); db(0x00); db(0x04); db(0xb8); db(0x2a); db(0x50); db(0x30); db(0x3c); - db(0xff); db(0x28); db(0x61); db(0x00); db(0x04); db(0xae); db(0x22); db(0x48); - db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); - db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x43); - db(0xff); db(0xfe); db(0x67); db(0x00); db(0xf8); db(0x70); db(0x20); db(0x28); - db(0x01); db(0x90); db(0x67); db(0x14); db(0x6b); db(0x12); db(0x2f); db(0x08); - db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); - db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); - db(0xff); db(0x20); db(0x61); db(0x00); db(0x04); db(0x6e); db(0x4e); db(0x90); - db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); + db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x60); + db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0x44); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); + db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x20); db(0x6b); + db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x2c); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x80); db(0x4e); db(0x75); + db(0x22); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); + db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); + db(0xd1); db(0xc8); db(0x22); db(0xa8); db(0x00); db(0x04); db(0x20); db(0x09); + db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x04); db(0x4e); db(0x75); + db(0x24); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); + db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); + db(0xd1); db(0xc8); db(0x22); db(0x68); db(0x00); db(0x04); db(0xd3); db(0xc9); + db(0xd3); db(0xc9); db(0xb3); db(0xca); db(0x66); db(0x06); db(0x21); db(0x52); + db(0x00); db(0x04); db(0x60); db(0x18); db(0x20); db(0x09); db(0x67); db(0x0e); + db(0x20); db(0x11); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xb5); db(0xc0); + db(0x67); db(0x04); db(0x22); db(0x40); db(0x60); db(0xee); db(0x20); db(0x09); + db(0x67); db(0x02); db(0x22); db(0x92); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x20); db(0x22); db(0x74); db(0x16); db(0x9f); db(0xc2); db(0x24); db(0x4f); + db(0x32); db(0x02); db(0x42); db(0x32); db(0x10); db(0xff); db(0x53); db(0x41); + db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x72); db(0x0f); + db(0x4a); db(0x80); db(0x67); db(0x02); db(0x72); db(0x10); db(0x15); db(0x41); + db(0x00); db(0x04); db(0x35); db(0x7c); db(0x08); db(0x00); db(0x00); db(0x08); + db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x33); db(0x7c); db(0x00); db(0x0b); + db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); + db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); db(0x13); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x1e); db(0x22); db(0x6b); db(0x00); db(0xa8); + db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x25); db(0x69); db(0x00); db(0x20); + db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); + db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0xdf); db(0xc2); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); + db(0x4a); db(0x00); db(0x67); db(0x26); db(0x4a); db(0x2b); db(0x00); db(0x4c); + db(0x66); db(0x36); db(0x70); db(0x00); db(0x4a); db(0x33); db(0x00); db(0x4d); + db(0x67); db(0x04); db(0x52); db(0x00); db(0x60); db(0xf6); db(0x17); db(0x40); + db(0x00); db(0x4c); db(0x67); db(0x24); db(0x20); db(0x01); db(0x61); db(0x00); + db(0xfd); db(0xf2); db(0x70); db(0x01); db(0x61); db(0x00); db(0xff); db(0x60); + db(0x60); db(0x16); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x10); + db(0x42); db(0x2b); db(0x00); db(0x4c); db(0x20); db(0x01); db(0x61); db(0x00); + db(0xfe); db(0x68); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x48); + db(0x4e); db(0x75); db(0x4a); db(0xac); db(0x00); db(0x14); db(0x67); db(0x0a); + db(0x70); db(0x00); db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0xb2); + db(0x4e); db(0x75); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); + db(0xff); db(0xa8); db(0x4e); db(0x75); db(0x10); db(0x2b); db(0x00); db(0xac); + db(0x6b); db(0x0a); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); + db(0xff); db(0x98); db(0x4e); db(0x75); db(0x72); db(0x01); db(0x0c); db(0x00); + db(0x00); db(0xfe); db(0x66); db(0x02); db(0x72); db(0x03); db(0x70); db(0x00); + db(0x61); db(0x00); db(0xff); db(0x86); db(0x4e); db(0x75); db(0x20); db(0x6c); + db(0x00); db(0x24); db(0x4a); db(0x90); db(0x67); db(0x0c); db(0x4a); db(0xa8); + db(0x00); db(0x08); db(0x66); db(0x0a); db(0x4a); db(0xa8); db(0x00); db(0x0c); + db(0x66); db(0x04); db(0x70); db(0x01); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x3f); db(0x3e); db(0x2a); db(0x48); db(0x24); db(0x6c); db(0x00); db(0x18); + db(0x2e); db(0x15); db(0x7a); db(0x00); db(0x4a); db(0x87); db(0x67); db(0x70); + db(0x20); db(0x0a); db(0x67); db(0x6c); db(0x7c); db(0x00); db(0x22); db(0x2d); + db(0x00); db(0x08); db(0x67); db(0x12); db(0x24); db(0x2a); db(0x00); db(0x04); + db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x4e); db(0xae); db(0xfc); db(0x34); + db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x22); db(0x2d); + db(0x00); db(0x0c); db(0x67); db(0x1c); db(0x20); db(0x41); db(0x22); db(0x4a); + db(0x2f); db(0x0a); db(0x45); db(0xec); db(0x00); db(0x20); db(0x48); db(0x7a); + db(0x00); db(0x08); db(0x2f); db(0x28); db(0x00); db(0x08); db(0x4e); db(0x75); + db(0x24); db(0x5f); db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); + db(0x4a); db(0x06); db(0x67); db(0x24); db(0x20); db(0x2a); db(0x00); db(0x04); + db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x66); db(0x0a); db(0x20); db(0x05); + db(0x67); db(0x10); db(0x20); db(0x40); db(0x42); db(0x90); db(0x60); db(0x0a); + db(0x20); db(0x52); db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x80); + db(0x6a); db(0xfa); db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x94); + db(0x2a); db(0x0a); db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x8c); + db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24); + db(0x4a); db(0x90); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(0x7c); + db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); + db(0xff); db(0xec); db(0x61); db(0x00); db(0x0f); db(0xea); db(0x2a); db(0x50); + db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x0f); db(0xe0); + db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); + db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x4a); db(0x80); + db(0x67); db(0x00); db(0x00); db(0xcc); db(0x20); db(0x28); db(0x01); db(0x90); + db(0x67); db(0x18); db(0x6b); db(0x16); db(0x2f); db(0x08); db(0x72); db(0x01); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x67); db(0x00); + db(0x00); db(0xae); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); - db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x04); db(0x54); + db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x0f); db(0x98); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); - db(0x4a); db(0xa9); db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); - db(0x01); db(0x94); db(0x61); db(0x00); db(0xf9); db(0xf6); db(0x48); db(0xe7); - db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); - db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); - db(0x67); db(0x04); db(0x61); db(0x00); db(0xf9); db(0x80); db(0x4a); db(0x83); - db(0x6b); db(0x00); db(0xf7); db(0xea); db(0x30); db(0x3c); db(0xff); db(0x18); - db(0x61); db(0x00); db(0x04); db(0x08); db(0x4e); db(0x90); db(0x20); db(0x03); - db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); - db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); - db(0x41); db(0xfa); db(0xf5); db(0xaa); db(0x20); db(0x08); db(0xe4); db(0x88); - db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); - db(0x00); db(0x24); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x40); - db(0x0c); db(0x03); db(0x00); db(0x80); db(0x67); db(0x3a); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); - db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); - db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); - db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x70); db(0x00); db(0x4e); db(0x75); - db(0x24); db(0x49); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); - db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); - db(0x00); db(0x02); db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0x80); - db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); - db(0x66); db(0x56); db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); - db(0x4a); db(0x30); db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); - db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); - db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x5c); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); - db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); - db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); - db(0x2c); db(0x01); db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x43); db(0xfa); db(0x0e); db(0x57); db(0x70); db(0x24); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); - db(0x00); db(0x02); db(0x43); db(0xfa); db(0x0e); db(0x45); db(0x70); db(0x00); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); - db(0x4a); db(0x80); db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); - db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfe); db(0x04); - db(0x4c); db(0xdf); db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); - db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); - db(0x48); db(0x46); db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); - db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x58); - db(0x61); db(0x00); db(0x02); db(0x98); db(0x70); db(0x03); db(0x4e); db(0x90); - db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x23); db(0x40); db(0x00); db(0x20); - db(0x67); db(0x16); db(0x70); db(0x00); db(0x23); db(0x40); db(0x00); db(0x24); - db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x13); db(0x7c); - db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); - db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); - db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x0d); db(0x7e); db(0x70); db(0x00); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); - db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); - db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); - db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); - db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); - db(0x0c); db(0x66); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); - db(0x02); db(0xbc); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); - db(0x0c); db(0x63); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); - db(0x02); db(0xac); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); - db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); - db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); - db(0x01); db(0xea); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); - db(0x70); db(0x01); db(0x61); db(0x00); db(0xf9); db(0x08); db(0x08); db(0x02); - db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); - db(0xfa); db(0x70); db(0x60); db(0x00); db(0x01); db(0x2e); db(0x20); db(0x4d); - db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80); - db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f); - db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xad); db(0x67); db(0x08); - db(0x61); db(0x00); db(0xff); db(0x0a); db(0x42); db(0x2b); db(0x00); db(0xad); - db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x24); db(0x30); db(0x3c); - db(0xff); db(0x58); db(0x61); db(0x00); db(0x01); db(0x96); db(0x70); db(0x01); - db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); - db(0xfa); db(0xfe); db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c); - db(0xff); db(0x58); db(0x61); db(0x00); db(0x01); db(0x7e); db(0x70); db(0x02); - db(0x4e); db(0x90); db(0x20); db(0x0c); db(0x67); db(0x56); db(0x0c); db(0x6c); - db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4e); db(0x0c); db(0xac); - db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x44); - db(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3c); - db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); - db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); - db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x1a); db(0x02); db(0xa8); - db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); - db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); - db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x60); - db(0x22); db(0x4c); db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x60); db(0x00); db(0xff); db(0x54); db(0x74); db(0xfe); db(0x20); db(0x0c); - db(0x67); db(0x14); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x42); - db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); - db(0x01); db(0x0a); db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb); - db(0x00); db(0x04); db(0x20); db(0x52); db(0x20); db(0x08); db(0x67); db(0x00); - db(0xff); db(0x2e); db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); - db(0x00); db(0x04); db(0xb4); db(0x80); db(0x66); db(0x16); db(0x48); db(0xe7); - db(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); - db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); - db(0x20); db(0x49); db(0x60); db(0xd8); db(0x24); db(0x48); db(0x20); db(0x49); - db(0x60); db(0xd2); db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14); - db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40); - db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x5e); db(0x30); db(0x3c); - db(0xff); db(0x30); db(0x61); db(0x00); db(0x00); db(0xb6); db(0x4e); db(0x90); - db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85); db(0x28); db(0xab); - db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04); db(0x60); db(0x00); - db(0xfe); db(0xd6); db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); - db(0xfe); db(0xce); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); - db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xf9); db(0xe6); - db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08); - db(0x66); db(0x14); db(0x61); db(0x00); db(0xfa); db(0x14); db(0x66); db(0x0e); - db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x00); db(0x74); - db(0x70); db(0x00); db(0x4e); db(0x90); db(0x60); db(0xec); db(0x22); db(0x54); - db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04); - db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc); - db(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); - db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); - db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); - db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); - db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); - db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); - db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); - db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); - db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); - db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xf1); db(0xb0); db(0x02); db(0x80); - db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); + db(0x20); db(0x29); db(0x01); db(0x94); db(0x67); db(0x22); db(0x20); db(0x40); + db(0x61); db(0x00); db(0xfb); db(0x06); db(0x48); db(0xe7); db(0x80); db(0xc0); + db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x94); + db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); db(0x0f); db(0x58); + db(0x4e); db(0x90); db(0x16); db(0x29); db(0x00); db(0x4f); db(0x0c); db(0x03); + db(0x00); db(0x80); db(0x67); db(0x38); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x30); db(0x3c); + db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); + db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); + db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); + db(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x60); db(0x12); db(0x24); db(0x49); db(0x20); db(0x4b); + db(0x72); db(0x00); db(0x22); db(0x41); db(0x72); db(0x01); db(0x70); db(0xec); + db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x4e); db(0x75); + db(0x61); db(0x00); db(0xfb); db(0x80); db(0x21); db(0x40); db(0x01); db(0x98); + db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); + db(0x0e); db(0xee); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); + db(0x61); db(0x00); db(0x0e); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x5f); + db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94); + db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x43); db(0xff); db(0xfe); + db(0x67); db(0x00); db(0xf8); db(0x1a); db(0x20); db(0x28); db(0x01); db(0x90); + db(0x67); db(0x14); db(0x6b); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); + db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); + db(0x61); db(0x00); db(0x0e); db(0xa4); db(0x4e); db(0x90); db(0x60); db(0x26); + db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); + db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c); + db(0xff); db(0x20); db(0x61); db(0x00); db(0x0e); db(0x8a); db(0x4e); db(0x90); + db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); + db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9); + db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94); + db(0x61); db(0x00); db(0xf9); db(0xf6); db(0x48); db(0xe7); db(0x80); db(0xc0); + db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04); + db(0x61); db(0x00); db(0xf9); db(0x80); db(0x4a); db(0x83); db(0x6b); db(0x00); + db(0xf7); db(0x94); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); + db(0x0e); db(0x3e); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); + db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c); + db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x41); db(0xfa); + db(0xf5); db(0x54); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x27); db(0x40); + db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x40); db(0x0c); db(0x03); + db(0x00); db(0x80); db(0x67); db(0x3a); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x30); db(0x3c); + db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); + db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); + db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); + db(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x24); db(0x49); + db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); db(0x00); db(0x02); + db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0x80); db(0x2c); db(0x4c); + db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x56); + db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); db(0x4a); db(0x30); + db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); + db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); + db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x6b); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); + db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); + db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); + db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); + db(0x0e); db(0x66); db(0x70); db(0x24); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); db(0x00); db(0x02); + db(0x43); db(0xfa); db(0x0e); db(0x54); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); + db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7); + db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfe); db(0x04); db(0x4c); db(0xdf); + db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); + db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); + db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc); + db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); + db(0x0c); db(0xce); db(0x70); db(0x03); db(0x4e); db(0x90); db(0x22); db(0x6b); + db(0x00); db(0xa8); db(0x23); db(0x40); db(0x00); db(0x20); db(0x67); db(0x16); + db(0x70); db(0x00); db(0x23); db(0x40); db(0x00); db(0x24); db(0x33); db(0x7c); + db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c); + db(0x43); db(0xfa); db(0x0d); db(0x8d); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); + db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46); + db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); + db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); + db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x0c); db(0x66); + db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0xae); + db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0c); db(0x63); + db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x9e); + db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae); + db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); db(0x00); db(0x0a); + db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x0c); db(0x20); + db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); db(0x70); db(0x01); + db(0x61); db(0x00); db(0xf9); db(0x08); db(0x08); db(0x02); db(0x00); db(0x01); + db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x70); + db(0x60); db(0x00); db(0x01); db(0x2e); db(0x20); db(0x4d); db(0x4e); db(0xae); + db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x66); db(0x10); + db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f); db(0x03); db(0xc0); + db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); + db(0x4a); db(0x2b); db(0x00); db(0xad); db(0x67); db(0x08); db(0x61); db(0x00); + db(0xff); db(0x0a); db(0x42); db(0x2b); db(0x00); db(0xad); db(0x4a); db(0x2b); + db(0x00); db(0xac); db(0x67); db(0x24); db(0x30); db(0x3c); db(0xff); db(0x58); + db(0x61); db(0x00); db(0x0b); db(0xcc); db(0x70); db(0x01); db(0x4e); db(0x90); + db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0xfa); db(0xfe); + db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c); db(0xff); db(0x58); + db(0x61); db(0x00); db(0x0b); db(0xb4); db(0x70); db(0x02); db(0x4e); db(0x90); + db(0x20); db(0x0c); db(0x67); db(0x56); db(0x0c); db(0x6c); db(0x00); db(0x26); + db(0x00); db(0x12); db(0x66); db(0x4e); db(0x0c); db(0xac); db(0x40); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x44); db(0x0c); db(0x6c); + db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3c); db(0x20); db(0x6c); + db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); + db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); + db(0x00); db(0x08); db(0x66); db(0x1a); db(0x02); db(0xa8); db(0x7f); db(0xff); + db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); + db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); + db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x60); db(0x22); db(0x4c); + db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); + db(0xff); db(0x54); db(0x74); db(0xfe); db(0x20); db(0x0c); db(0x67); db(0x14); + db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x42); db(0x74); db(0xff); + db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x0b); db(0x40); + db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); + db(0x20); db(0x52); db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x2e); + db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); + db(0xb4); db(0x80); db(0x66); db(0x16); db(0x48); db(0xe7); db(0x00); db(0xc0); + db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); + db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); + db(0x60); db(0xd8); db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd2); + db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14); db(0x65); db(0x00); + db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x04); + db(0x60); db(0x12); db(0x61); db(0x5e); db(0x30); db(0x3c); db(0xff); db(0x30); + db(0x61); db(0x00); db(0x0a); db(0xec); db(0x4e); db(0x90); db(0x4a); db(0x80); + db(0x67); db(0x0e); db(0x52); db(0x85); db(0x28); db(0xab); db(0x00); db(0x04); + db(0x27); db(0x4c); db(0x00); db(0x04); db(0x60); db(0x00); db(0xfe); db(0xd6); + db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); db(0xfe); db(0xce); + db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); db(0x00); db(0x08); + db(0x66); db(0x04); db(0x61); db(0x00); db(0xf9); db(0xe6); db(0x0c); db(0xac); + db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x14); + db(0x61); db(0x00); db(0xfa); db(0x14); db(0x66); db(0x0e); db(0x30); db(0x3c); + db(0xff); db(0x58); db(0x61); db(0x00); db(0x0a); db(0xaa); db(0x70); db(0x00); + db(0x4e); db(0x90); db(0x60); db(0xec); db(0x22); db(0x54); db(0x20); db(0x6c); + db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee); + db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53); + db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); + db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); + db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); + db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); + db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); + db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); + db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); + db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); + db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0xff); @@ -494,7 +503,7 @@ db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); - db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x09); db(0x9a); db(0x43); db(0xfa); + db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x09); db(0xa8); db(0x43); db(0xfa); db(0x01); db(0x30); db(0x70); db(0x13); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); @@ -531,7 +540,7 @@ db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); db(0xfd); db(0x9c); + db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); db(0x07); db(0xe0); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e); db(0x00); db(0x14); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x7c); db(0x00); @@ -543,40 +552,40 @@ db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4c); db(0x00); db(0x08); db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x05); - db(0x61); db(0x00); db(0xfd); db(0x40); db(0x20); db(0x0d); db(0x06); db(0x80); + db(0x61); db(0x00); db(0x07); db(0x84); db(0x20); db(0x0d); db(0x06); db(0x80); db(0x00); db(0x00); db(0x02); db(0x10); db(0x4e); db(0x90); db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); db(0x00); db(0x09); db(0x41); db(0xfa); - db(0x07); db(0xf6); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0x08); db(0x04); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xda); db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x16); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xe0); - db(0x43); db(0xfa); db(0x08); db(0x14); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0x43); db(0xfa); db(0x08); db(0x31); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x14); db(0x67); db(0xd0); db(0x4a); db(0xab); db(0x00); db(0x18); db(0x66); db(0x18); db(0x4a); db(0xab); - db(0x00); db(0x1c); db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x08); db(0x0a); + db(0x00); db(0x1c); db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x08); db(0x27); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xff); db(0xb4); db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x38); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa6); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); - db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xea); db(0x4e); db(0xae); + db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xf8); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); - db(0x4a); db(0x82); db(0x67); db(0x8c); db(0x41); db(0xfa); db(0x06); db(0xd8); + db(0x4a); db(0x82); db(0x67); db(0x8c); db(0x41); db(0xfa); db(0x06); db(0xe6); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x2e); db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); db(0x02); db(0x42); db(0x60); db(0x00); db(0xff); db(0x76); db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x68); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); - db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xb7); db(0x4e); db(0xae); + db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xc5); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x4c); db(0x41); db(0xfa); - db(0x06); db(0xa3); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0x06); db(0xb1); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xec); db(0x2b); db(0x40); db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); - db(0x61); db(0x00); db(0xfc); db(0x38); db(0x4e); db(0x90); db(0x60); db(0x00); + db(0x61); db(0x00); db(0x06); db(0x7c); db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x28); db(0x0c); db(0x47); db(0x00); db(0x24); db(0x65); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); db(0x6a); db(0x0c); db(0x20); db(0x4b); db(0x61); db(0x00); db(0xfd); db(0xb4); db(0x70); db(0x32); db(0x27); db(0x40); @@ -647,28 +656,28 @@ db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x12); db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x02); db(0x61); db(0x00); - db(0xfa); db(0x02); db(0x4e); db(0x90); db(0x41); db(0xf9); db(0x00); db(0xdf); + db(0x04); db(0x46); db(0x4e); db(0x90); db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x06); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x11); - db(0x61); db(0x00); db(0xf9); db(0xe8); db(0x4e); db(0x90); db(0x08); db(0x00); + db(0x61); db(0x00); db(0x04); db(0x2c); db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x42); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x40); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x0e); db(0x61); db(0x00); db(0xf9); db(0xb6); db(0x20); db(0x0d); - db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x04); db(0x6c); db(0x43); db(0xfa); + db(0x72); db(0x0e); db(0x61); db(0x00); db(0x03); db(0xfa); db(0x20); db(0x0d); + db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x04); db(0x7a); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6); db(0x22); db(0x3c); db(0x00); db(0x00); - db(0x27); db(0x10); db(0x61); db(0x00); db(0xed); db(0x7a); db(0x70); db(0x00); + db(0x27); db(0x10); db(0x61); db(0x00); db(0xed); db(0x32); db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00); db(0x4e); db(0x75); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0a); db(0x61); db(0x00); db(0xf9); db(0x8c); + db(0xff); db(0x38); db(0x72); db(0x0a); db(0x61); db(0x00); db(0x03); db(0xd0); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x61); db(0xf0); db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06); db(0x22); db(0x40); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x3e); db(0x2c); db(0x6d); - db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0xfa); db(0x22); db(0x08); + db(0x00); db(0x18); db(0x41); db(0xfa); db(0x04); db(0x08); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00); db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00); db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92); db(0x34); db(0xaa); db(0x00); db(0x02); @@ -679,32 +688,32 @@ db(0xff); db(0xd6); db(0x24); db(0x0a); db(0x76); db(0x20); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10); db(0x66); db(0xc4); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x10); db(0x61); db(0x00); db(0xf8); db(0xfc); + db(0xff); db(0x38); db(0x72); db(0x10); db(0x61); db(0x00); db(0x03); db(0x40); db(0x4e); db(0x90); db(0x22); db(0x04); db(0x67); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf); db(0x7c); db(0x1c); db(0x4e); db(0x75); - db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0x72); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0x80); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x45); db(0xed); db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x15); db(0x40); - db(0x00); db(0x14); db(0x41); db(0xfa); db(0x03); db(0x62); db(0x24); db(0x88); + db(0x00); db(0x14); db(0x41); db(0xfa); db(0x03); db(0x70); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x12); db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08); db(0x00); db(0x10); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0d); db(0x61); db(0x00); - db(0xf8); db(0x8a); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0x02); db(0xce); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfc); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); - db(0x00); db(0x08); db(0x43); db(0xfa); db(0x03); db(0x8e); db(0x70); db(0x00); + db(0x00); db(0x08); db(0x43); db(0xfa); db(0x03); db(0xab); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xda); db(0x2c); db(0x40); db(0x72); db(0x32); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xc6); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xd4); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x41); db(0xfa); db(0x02); db(0xb0); db(0x22); db(0x08); db(0x74); db(0xfe); + db(0x41); db(0xfa); db(0x02); db(0xbe); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa4); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x61); db(0x00); db(0xf8); db(0x38); @@ -712,7 +721,7 @@ db(0xf8); db(0x7c); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x84); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x72); db(0x00); db(0x20); db(0x2d); - db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x02); db(0x89); db(0x22); db(0x4c); + db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x02); db(0x97); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14); db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c); db(0x61); db(0x00); db(0xfe); db(0x48); @@ -723,7 +732,7 @@ db(0x2b); db(0x4d); db(0x00); db(0x2c); db(0x41); db(0xfa); db(0x01); db(0x60); db(0x2b); db(0x48); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0f); - db(0x61); db(0x00); db(0xf7); db(0xa0); db(0x4e); db(0x90); db(0x4a); db(0xad); + db(0x61); db(0x00); db(0x01); db(0xe4); db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x00); db(0x66); db(0x1c); db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c); db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x05); db(0x00); @@ -731,7 +740,7 @@ db(0x20); db(0x2d); db(0x00); db(0x00); db(0x67); db(0x00); db(0x00); db(0x76); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0c); - db(0x61); db(0x00); db(0xf7); db(0x60); db(0x4e); db(0x90); db(0x4a); db(0x80); + db(0x61); db(0x00); db(0x01); db(0xa4); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x40); db(0x4a); db(0xad); db(0x00); db(0x04); db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x1c); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x20); db(0x29); db(0x6d); @@ -758,7 +767,7 @@ db(0x00); db(0x34); db(0x29); db(0x48); db(0x00); db(0x28); db(0x20); db(0x02); db(0x51); db(0x80); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x0b); db(0x61); db(0x00); db(0xf6); db(0x86); db(0x20); db(0x2c); + db(0x72); db(0x0b); db(0x61); db(0x00); db(0x00); db(0xca); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4a); db(0xac); db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xda); db(0x41); db(0xed); db(0x00); db(0x30); @@ -772,57 +781,60 @@ db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x2c); db(0x5f); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); - db(0xf6); db(0x1a); db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x01); + db(0x00); db(0x5e); db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x38); db(0x74); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x7c); - db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x00); db(0x62); + db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x00); db(0x70); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x43); db(0xfa); db(0x00); db(0x22); db(0x24); db(0x68); db(0xff); db(0xe4); db(0x21); db(0x49); db(0xff); db(0xe4); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x65); db(0x61); db(0x00); - db(0xf5); db(0xe2); db(0x4e); db(0x90); db(0x74); db(0x01); db(0x4e); db(0xae); + db(0x00); db(0x26); db(0x4e); db(0x90); db(0x74); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x20); db(0x02); db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7); db(0xc0); db(0x80); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x66); db(0x61); db(0x00); db(0xf5); db(0xc6); db(0x4e); db(0x90); - db(0x4c); db(0xdf); db(0x01); db(0x03); db(0x4e); db(0x75); db(0x69); db(0x6e); - db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); - db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); - db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); - db(0x63); db(0x6f); db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); - db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); - db(0x45); db(0x56); db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); - db(0x3a); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); - db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); - db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); - db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); + db(0x72); db(0x66); db(0x61); db(0x00); db(0x00); db(0x0a); db(0x4e); db(0x90); + db(0x4c); db(0xdf); db(0x01); db(0x03); db(0x4e); db(0x75); db(0x41); db(0xfa); + db(0xe7); db(0x24); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); + db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); + db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); + db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); + db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x63); db(0x6f); + db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65); + db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); + db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00); + db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); - db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); - db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); - db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); - db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); - db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); - db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); - db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); - db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); db(0x72); db(0x00); db(0x55); - db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); - db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); + db(0x4d); db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); + db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); + db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); + db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f); + db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e); + db(0x70); db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); + db(0x61); db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); + db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); + db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); db(0x64); db(0x72); + db(0x69); db(0x76); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); + db(0x20); db(0x68); db(0x65); db(0x61); db(0x72); db(0x74); db(0x20); db(0x62); + db(0x65); db(0x61); db(0x74); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); + db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); db(0x74); + db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); + db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); + db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); - db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); - db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); - db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); - db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); - db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); - db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); - db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); + db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); db(0x70); + db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); db(0x64); + db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); + db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); + db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); + db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61); + db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); + db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); + db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); - db(0x67); db(0x72); db(0x61); db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); - db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); - db(0x00); db(0x65); db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); - db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); - db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); - db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); - db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x6d); - db(0x65); db(0x67); db(0x61); db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); - db(0x6d); db(0x65); db(0x6d); db(0x6f); db(0x72); db(0x79); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); + db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); + db(0x72); db(0x63); db(0x65); db(0x00); db(0x6d); db(0x65); db(0x67); db(0x61); + db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d); + db(0x6f); db(0x72); db(0x79); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/include/autoconf.h b/include/autoconf.h index 8b3e485c..12981544 100644 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -11,6 +11,8 @@ #define RTAREA_SIZE 0x10000 #define RTAREA_TRAPS 0x2000 #define RTAREA_RTG 0x3000 +#define RTAREA_FSBOARD 0xFFEC +#define RTAREA_INT 0xFFEB extern uae_u32 addr (int); extern void db (uae_u8); diff --git a/include/custom.h b/include/custom.h index e0129ed0..0fff0111 100644 --- a/include/custom.h +++ b/include/custom.h @@ -130,14 +130,17 @@ extern bool programmedmode; #define DMA_MASTER 0x0200 #define DMA_BLITPRI 0x0400 -#define CYCLE_REFRESH 0x01 -#define CYCLE_STROBE 0x02 -#define CYCLE_MISC 0x04 -#define CYCLE_SPRITE 0x08 -#define CYCLE_COPPER 0x10 -#define CYCLE_BLITTER 0x20 -#define CYCLE_CPU 0x40 -#define CYCLE_CPUNASTY 0x80 +#define CYCLE_REFRESH 1 +#define CYCLE_STROBE 2 +#define CYCLE_MISC 3 +#define CYCLE_SPRITE 4 +#define CYCLE_COPPER 5 +#define CYCLE_BLITTER 6 +#define CYCLE_CPU 7 +#define CYCLE_CPUNASTY 8 +#define CYCLE_COPPER_SPECIAL 0x10 + +#define CYCLE_MASK 0x0f extern unsigned long frametime, timeframes; extern uae_u16 htotal, vtotal, beamcon0; @@ -213,6 +216,7 @@ struct customhack { void customhack_put (struct customhack *ch, uae_u16 v, int hpos); uae_u16 customhack_get (struct customhack *ch, int hpos); extern void alloc_cycle_ext (int, int); +extern void alloc_cycle_blitter (int hpos, uaecptr *ptr); extern bool ispal (void); extern int current_maxvpos (void); extern struct chipset_refresh *get_chipset_refresh (void); diff --git a/include/disk.h b/include/disk.h index 4b28839c..14586f20 100644 --- a/include/disk.h +++ b/include/disk.h @@ -29,7 +29,7 @@ extern void DISK_hsync (void); extern void DISK_reset (void); extern int disk_getwriteprotect (struct uae_prefs *p, const TCHAR *name); extern int disk_setwriteprotect (struct uae_prefs *p, int num, const TCHAR *name, bool writeprotected); -extern void disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const TCHAR *disk_name, bool ffs, bool bootable); +extern bool disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const TCHAR *disk_name, bool ffs, bool bootable, const TCHAR *copyfrom); extern void dumpdisk (void); extern int DISK_history_add (const TCHAR *name, int idx, int type, int donotcheck); extern TCHAR *DISK_history_get (int idx, int type); diff --git a/include/keyboard.h b/include/keyboard.h index c0d62e99..8ee9b3dc 100644 --- a/include/keyboard.h +++ b/include/keyboard.h @@ -171,4 +171,6 @@ enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT_FILE, AKS_SCREENSHOT_CLIPBOARD, AKS_QUALIFIER_ALT }; +#define AKS_FIRST AKS_ENTERGUI + extern int target_checkcapslock (int, int *); \ No newline at end of file diff --git a/include/options.h b/include/options.h index 65a5c320..f221aa1a 100644 --- a/include/options.h +++ b/include/options.h @@ -322,6 +322,7 @@ struct uae_prefs { int floppy_write_length; int floppy_random_bits_min; int floppy_random_bits_max; + bool floppy_auto_ext2; bool tod_hack; uae_u32 maprom; int turbo_emulation; diff --git a/inputdevice.cpp b/inputdevice.cpp index 6c7821f3..a1319bf0 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -3,7 +3,7 @@ * * joystick/mouse emulation * -* Copyright 2001-2010 Toni Wilen +* Copyright 2001-2012 Toni Wilen * * new fetures: * - very configurable (and very complex to configure :) @@ -2802,7 +2802,7 @@ static int handle_input_event (int nr, int state, int max, int autofire, bool ca ie = &events[nr]; if (isqual (nr)) return 0; // qualifiers do nothing - if (ie->unit == 0 && ie->data >= 0x200) { + if (ie->unit == 0 && ie->data >= AKS_FIRST) { isaks = true; if (!state) // release AKS_ does nothing return 0; @@ -3191,6 +3191,7 @@ void inputdevice_reset (void) if (inputdevice_is_tablet ()) mousehack_enable (); bouncy = 0; + potgo_value = 0; } static int getoldport (struct uae_input_device *id) @@ -3342,6 +3343,7 @@ static bool checkqualifiers (int evt, uae_u64 flags, uae_u64 *qualmask, uae_s16 int i, j; int qualid = getqualid (evt); int nomatch = 0; + bool isspecial = (qualifiers & (ID_FLAG_QUALIFIER_SPECIAL | ID_FLAG_QUALIFIER_SPECIAL_R)) != 0; flags &= ID_FLAG_QUALIFIER_MASK; if (qualid >= 0 && events) @@ -3354,15 +3356,16 @@ static bool checkqualifiers (int evt, uae_u64 flags, uae_u64 *qualmask, uae_s16 if (qualmask[i]) break; } - if (i == MAX_INPUT_SUB_EVENT) - return true; // no qualifiers in any slot = always match - + if (i == MAX_INPUT_SUB_EVENT) { + // no qualifiers in any slot and no special = always match + return isspecial == false; + } for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { for (j = 0; j < MAX_INPUT_QUALIFIERS; j++) { uae_u64 mask = (ID_FLAG_QUALIFIER1 | ID_FLAG_QUALIFIER1_R) << (j * 2); bool isqualmask = (qualmask[i] & mask) != 0; - bool isqual = ((qualifiers & ~(ID_FLAG_QUALIFIER_SPECIAL | ID_FLAG_QUALIFIER_SPECIAL_R)) & mask) != 0; + bool isqual = (qualifiers & mask) != 0; if (isqualmask != isqual) { nomatch++; break; @@ -3372,6 +3375,9 @@ static bool checkqualifiers (int evt, uae_u64 flags, uae_u64 *qualmask, uae_s16 if (nomatch == MAX_INPUT_SUB_EVENT) { // no matched qualifiers in any slot // allow all slots without qualifiers + // special = never accept + if (isspecial) + return false; return flags ? false : true; } @@ -3394,6 +3400,7 @@ static void setqualifiers (int evt, int state) qualifiers |= mask; else qualifiers &= ~mask; + //write_log (_T("%llx\n"), qualifiers); } static uae_u64 getqualmask (uae_u64 *qualmask, struct uae_input_device *id, int num, bool *qualonly) @@ -3538,6 +3545,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev } setqualifiers (evt, state > 0); + if (qualonly) continue; @@ -5135,8 +5143,17 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state int toggled; setqualifiers (evt, state > 0); - if (qualifiercheckonly) + + if (qualifiercheckonly) { + if (!state && (flags & ID_FLAG_CANRELEASE)) { + *flagsp &= ~ID_FLAG_CANRELEASE; + handle_input_event (evt, state, 1, autofire, true, false); + if (k == 0) { + process_custom_event (na, j, state, qualmask, autofire, k); + } + } continue; + } if (!state) { didcustom |= process_custom_event (na, j, state, qualmask, autofire, k); @@ -5185,10 +5202,13 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state continue; } - if (state) + if (state) { *flagsp |= ID_FLAG_CANRELEASE; - else + } else { + if (!(flags & ID_FLAG_CANRELEASE)) + continue; *flagsp &= ~ID_FLAG_CANRELEASE; + } handled |= handle_input_event (evt, state, 1, autofire, true, false); didcustom |= process_custom_event (na, j, state, qualmask, autofire, k); } diff --git a/main.cpp b/main.cpp index 01e051e6..149f6ea8 100644 --- a/main.cpp +++ b/main.cpp @@ -235,6 +235,8 @@ void fixup_cpu (struct uae_prefs *p) if (p->immediate_blits && p->blitter_cycle_exact) p->immediate_blits = false; + if (p->immediate_blits && p->waiting_blits) + p->waiting_blits = 0; } diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index 064f48c9..1a1f9593 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -714,6 +714,7 @@ static void picasso_handle_vsync2 (void) if (thisisvsync) { rendered = rtg_render (); + frame_drawn (); } if (setupcursor_needed) setupcursor (); diff --git a/od-win32/win32.h b/od-win32/win32.h index 579fcefb..2c4af9db 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -19,8 +19,8 @@ #define LANG_DLL 1 //#define WINUAEBETA _T("") -#define WINUAEBETA _T("10") -#define WINUAEDATE MAKEBD(2012, 8, 6) +#define WINUAEBETA _T("11") +#define WINUAEDATE MAKEBD(2012, 8, 10) #define WINUAEEXTRA _T("") //#define WINUAEEXTRA _T("AmiKit Preview") #define WINUAEREV _T("") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index ac4d77bd..c0aaef78 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -2355,14 +2355,14 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs TCHAR disk_name[32]; disk_name[0] = 0; disk_name[31] = 0; GetDlgItemText (hDlg, IDC_CREATE_NAME, disk_name, 30); - disk_creatediskfile (full_path, 0, (drive_type)SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_GETCURSEL, 0, 0L), disk_name, ischecked (hDlg, IDC_FLOPPY_FFS), ischecked (hDlg, IDC_FLOPPY_BOOTABLE)); + disk_creatediskfile (full_path, 0, (drive_type)SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_GETCURSEL, 0, 0L), disk_name, ischecked (hDlg, IDC_FLOPPY_FFS), ischecked (hDlg, IDC_FLOPPY_BOOTABLE), NULL); } break; case IDC_CREATE_RAW: TCHAR disk_name[32]; disk_name[0] = 0; disk_name[31] = 0; GetDlgItemText (hDlg, IDC_CREATE_NAME, disk_name, 30); - disk_creatediskfile (full_path, 1, (drive_type)SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_GETCURSEL, 0, 0L), disk_name, ischecked (hDlg, IDC_FLOPPY_FFS), ischecked (hDlg, IDC_FLOPPY_BOOTABLE)); + disk_creatediskfile (full_path, 1, (drive_type)SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_GETCURSEL, 0, 0L), disk_name, ischecked (hDlg, IDC_FLOPPY_FFS), ischecked (hDlg, IDC_FLOPPY_BOOTABLE), NULL); break; case IDC_LOAD: if (target_cfgfile_load (&workprefs, full_path, 0, 0) == 0) { @@ -5468,6 +5468,11 @@ static void enable_for_chipsetdlg (HWND hDlg) workprefs.immediate_blits = 0; CheckDlgButton (hDlg, IDC_BLITIMM, FALSE); } + if (workprefs.immediate_blits && workprefs.waiting_blits) { + workprefs.waiting_blits = 0; + CheckDlgButton (hDlg, IDC_BLITWAIT, FALSE); + } + ew (hDlg, IDC_BLITWAIT, workprefs.immediate_blits ? FALSE : TRUE); ew (hDlg, IDC_CS_EXT, workprefs.cs_compatible ? TRUE : FALSE); } @@ -14183,6 +14188,21 @@ static void createTreeView (HWND hDlg) static int dialog_x_offset, dialog_y_offset; +static bool dodialogmousemove (void) +{ + if (full_property_sheet || isfullscreen () <= 0) + return false; + if (currprefs.gfx_size_fs.width >= 640 && currprefs.gfx_size.height >= 480) + return false; + struct MultiDisplay *mdc = getdisplay (&currprefs); + for (int i = 0; Displays[i].monitorid; i++) { + struct MultiDisplay *md = &Displays[i]; + if (md->rect.right - md->rect.left >= 800 && md->rect.bottom - md->rect.top >= 600 && md != mdc) + return false; + } + return true; +} + static void centerWindow (HWND hDlg) { RECT rc, rcDlg, rcOwner; @@ -14201,13 +14221,17 @@ static void centerWindow (HWND hDlg) } else if (isfullscreen () > 0) { regqueryint (NULL, _T("GUIPosFSX"), &x); regqueryint (NULL, _T("GUIPosFSY"), &y); + if (dodialogmousemove ()) { + x = 0; + y = 0; + } } SetForegroundWindow (hDlg); - pt1.x = x; - pt1.y = y; - pt2.x = x + 16; - pt2.y = y + GetSystemMetrics (SM_CYMENU) + GetSystemMetrics (SM_CYBORDER); - if (MonitorFromPoint (pt1, MONITOR_DEFAULTTONULL) == NULL || MonitorFromPoint (pt2, MONITOR_DEFAULTTONULL) == NULL) { + pt1.x = x + 100; + pt1.y = y + (GetSystemMetrics (SM_CYMENU) + GetSystemMetrics (SM_CYBORDER)) / 2; + pt2.x = x + 640 - 100; + pt2.y = pt1.y; + if (MonitorFromPoint (pt1, MONITOR_DEFAULTTONULL) == NULL && MonitorFromPoint (pt2, MONITOR_DEFAULTTONULL) == NULL) { if (isfullscreen () > 0) { GetWindowRect (owner, &rcOwner); GetWindowRect (hDlg, &rcDlg); @@ -14221,7 +14245,7 @@ static void centerWindow (HWND hDlg) pt1.y = y; pt2.x = x + 16; pt2.y = y + GetSystemMetrics (SM_CYMENU) + GetSystemMetrics (SM_CYBORDER); - if (MonitorFromPoint (pt1, MONITOR_DEFAULTTONULL) == NULL || MonitorFromPoint (pt2, MONITOR_DEFAULTTONULL) == NULL) { + if (MonitorFromPoint (pt1, MONITOR_DEFAULTTONULL) == NULL && MonitorFromPoint (pt2, MONITOR_DEFAULTTONULL) == NULL) { x = 0; y = 0; } @@ -14717,17 +14741,6 @@ static int init_page (int tmpl, int icon, int title, } static RECT dialog_rect; -static bool dodialogmousemove (void) -{ - if (full_property_sheet || isfullscreen () <= 0) - return false; - for (int i = 0; Displays[i].monitorid; i++) { - struct MultiDisplay *md = &Displays[i]; - if (md->rect.right - md->rect.left >= 640 && md->rect.bottom - md->rect.top >= 480) - return false; - } - return true; -} static void dialogmousemove (HWND hDlg) { diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 2e11a298..59461d18 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,6 +1,35 @@ - restore only single input target to default. +Beta 11: + +- END special qualifier didn't work when combined with other qualifiers, some END + shortcuts leaked key presses to emulated + Amiga side (b10) +- GUI wasn't centered and/or scrolling if single monitor, full screen mode and resolution smaller than 640x480. (b6) + Automatically center to screen if GUI title bar isn't visible on any monitor. Two or more monitors and >800x600 resolution + desktop in any monitor = always allow manual GUI positioning. +- Wait for Blitter changes: + - Does nothing in 68000 cycle-exact mode. + - Approximate CPU speed or 68020 CE: Pause CPU if blitter would steal all CPU cycles + - Fastest possible: Any kind of active blit pauses CPU if writing to any blitter register. + - Logged if triggered (only first 10 times) +- Quickstart modes (except 68000 CE) enables Wait for Blitter option. +- Wait for Blitter GUI only sets above "automatic" mode, manual config file editing supports forced "always" and "only if not idle" modes. + (for debugging purposes) +- RTG video capturing uses now RTG vsync timing, not (possibly very different) custom chipset vsync timing. +- Added UAE Boot ROM AOS "heart beat" vblank interrupt, do not sync clock or check filesystem insertions if heart beat counter + does not change = OS has been taken over, prevents possible memory corruption if program also overwrote system structures. +- RTC year tens digit was not in correct BCD format, probably no program cared about the difference. (Bug since the beginning) +- Extended adf writing was disabled, forgotten debugging and it was also disabled in 2.4.1. Oops. (241b11) +- POTGO register state was not fully reset when loading state, disabled mouse right/middle button in some situations. + (for example Sound of Silents) +- AUDxDAT manual audio mode and new period was written to AUDxPER: new period value was loaded too late, after first + 8-bit sample was finished. +- AUDxVOL is 7-bit register (64-127 = max volume, 128 = 0, 129 = 1 and so on..). Actual volume range is 0-64. +- Sinc interpolator updated from UADE (from few years ago, better late than never..) +- Debugger 'm' command didn't show last byte of memory region. +- Log COPJMPx while copper is waiting blitter cycle conflict. Does not yet emulate blitter pointer = COPxLC copy. + Beta 10: - BPLxDAT CPU/Copper writes are now accurately emulated. (Blerkenwiegel/Scoopex) diff --git a/sinctable.cpp b/sinctable.cpp index a373d01b..e8058462 100644 --- a/sinctable.cpp +++ b/sinctable.cpp @@ -1,5 +1,9 @@ + /* + * Table generated by contrib/sinc-integral.py. + */ + /* tables are: a500 off, a500 on, a1200 off, a1200 on, vanilla. */ -static const int winsinc_integral[5][2048] = { +const int winsinc_integral[5][2048] = { { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131070,