add Vic20 emu for Teensy41 and add USB keyboard support to c64 emu

pull/9/head
jean-marcharvengt 2022-02-02 23:29:01 +01:00
rodzic 7da55b5657
commit babf855c4e
35 zmienionych plików z 43492 dodań i 20470 usunięć

Wyświetl plik

@ -0,0 +1,361 @@
#include "emuapi.h"
#ifdef HAS_SND
#include "AudioPlaySystem.h"
#include <Arduino.h>
#define SAMPLERATE AUDIO_SAMPLE_RATE_EXACT
#define CLOCKFREQ 985248
#ifndef CUSTOM_SND
PROGMEM static const short square[]={
32767,32767,32767,32767,
32767,32767,32767,32767,
32767,32767,32767,32767,
32767,32767,32767,32767,
32767,32767,32767,32767,
32767,32767,32767,32767,
32767,32767,32767,32767,
32767,32767,32767,32767,
-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,
};
PROGMEM const short noise[] {
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,32767,-32767,
-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,
-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767,
-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,-32767,32767,32767,-32767,
-32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,-32767,-32767,
32767,-32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
32767,-32767,32767,-32767,-32767,32767,32767,-32767,-32767,32767,-32767,32767,32767,32767,-32767,-32767,
32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
32767,-32767,32767,-32767,-32767,32767,32767,-32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767,
32767,32767,-32767,-32767,-32767,32767,-32767,-32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,
32767,-32767,32767,-32767,-32767,32767,32767,32767,32767,32767,-32767,32767,-32767,32767,-32767,-32767,
};
#define NOISEBSIZE 0x100
typedef struct
{
unsigned int spos;
unsigned int sinc;
unsigned int vol;
} Channel;
static Channel chan[6] = {
{0,0,0},
{0,0,0},
{0,0,0},
{0,0,0},
{0,0,0},
{0,0,0} };
#endif
volatile bool playing = false;
static void snd_Reset(void)
{
#ifndef CUSTOM_SND
chan[0].vol = 0;
chan[1].vol = 0;
chan[2].vol = 0;
chan[3].vol = 0;
chan[4].vol = 0;
chan[5].vol = 0;
chan[0].sinc = 0;
chan[1].sinc = 0;
chan[2].sinc = 0;
chan[3].sinc = 0;
chan[4].sinc = 0;
chan[5].sinc = 0;
#endif
}
#ifdef CUSTOM_SND
//extern "C" {
void SND_Process(void *sndbuffer, int sndn);
//}
#endif
FASTRUN void AudioPlaySystem::snd_Mixer(short * stream, int len )
{
if (playing)
{
#ifdef CUSTOM_SND
SND_Process((void*)stream, len);
#else
int i;
long s;
len = len >> 1;
short v0=chan[0].vol;
short v1=chan[1].vol;
short v2=chan[2].vol;
short v3=chan[3].vol;
short v4=chan[4].vol;
short v5=chan[5].vol;
for (i=0;i<len;i++)
{
s =((v0*square[(chan[0].spos>>8)&0x3f])>>11);
s+=((v1*square[(chan[1].spos>>8)&0x3f])>>11);
s+=((v2*square[(chan[2].spos>>8)&0x3f])>>11);
s+=((v3*noise[(chan[3].spos>>8)&(NOISEBSIZE-1)])>>11);
s+=((v4*noise[(chan[4].spos>>8)&(NOISEBSIZE-1)])>>11);
s+=((v5*noise[(chan[5].spos>>8)&(NOISEBSIZE-1)])>>11);
*stream++ = (short)(s);
*stream++ = (short)(s);
chan[0].spos += chan[0].sinc;
chan[1].spos += chan[1].sinc;
chan[2].spos += chan[2].sinc;
chan[3].spos += chan[3].sinc;
chan[4].spos += chan[4].sinc;
chan[5].spos += chan[5].sinc;
}
#endif
}
}
void AudioPlaySystem::begin(void)
{
this->reset();
}
void AudioPlaySystem::start(void)
{
playing = true;
}
void AudioPlaySystem::setSampleParameters(float clockfreq, float samplerate) {
}
void AudioPlaySystem::reset(void)
{
snd_Reset();
}
void AudioPlaySystem::stop(void)
{
//__disable_irq();
playing = false;
//__enable_irq();
}
bool AudioPlaySystem::isPlaying(void)
{
return playing;
}
void AudioPlaySystem::sound(int C, int F, int V) {
#ifndef CUSTOM_SND
if (C < 6) {
chan[C].vol = V;
chan[C].sinc = F>>1;
}
#endif
}
void AudioPlaySystem::step(void) {
}
#ifndef HAS_T4_VGA
/*******************************************************************
Experimental I2S interrupt based sound driver for PCM51xx !!!
*******************************************************************/
FLASHMEM static void set_audioClock(int nfact, int32_t nmult, uint32_t ndiv, bool force) // sets PLL4
{
if (!force && (CCM_ANALOG_PLL_AUDIO & CCM_ANALOG_PLL_AUDIO_ENABLE)) return;
CCM_ANALOG_PLL_AUDIO = CCM_ANALOG_PLL_AUDIO_BYPASS | CCM_ANALOG_PLL_AUDIO_ENABLE
| CCM_ANALOG_PLL_AUDIO_POST_DIV_SELECT(2) // 2: 1/4; 1: 1/2; 0: 1/1
| CCM_ANALOG_PLL_AUDIO_DIV_SELECT(nfact);
CCM_ANALOG_PLL_AUDIO_NUM = nmult & CCM_ANALOG_PLL_AUDIO_NUM_MASK;
CCM_ANALOG_PLL_AUDIO_DENOM = ndiv & CCM_ANALOG_PLL_AUDIO_DENOM_MASK;
CCM_ANALOG_PLL_AUDIO &= ~CCM_ANALOG_PLL_AUDIO_POWERDOWN;//Switch on PLL
while (!(CCM_ANALOG_PLL_AUDIO & CCM_ANALOG_PLL_AUDIO_LOCK)) {}; //Wait for pll-lock
const int div_post_pll = 1; // other values: 2,4
CCM_ANALOG_MISC2 &= ~(CCM_ANALOG_MISC2_DIV_MSB | CCM_ANALOG_MISC2_DIV_LSB);
if(div_post_pll>1) CCM_ANALOG_MISC2 |= CCM_ANALOG_MISC2_DIV_LSB;
if(div_post_pll>3) CCM_ANALOG_MISC2 |= CCM_ANALOG_MISC2_DIV_MSB;
CCM_ANALOG_PLL_AUDIO &= ~CCM_ANALOG_PLL_AUDIO_BYPASS;//Disable Bypass
}
#define AUDIO_SAMPLE_RATE_EXACT 11025.0 //44117.64706 //11025.0 //22050.0 //44117.64706 //31778.0
FLASHMEM static void config_sai1()
{
CCM_CCGR5 |= CCM_CCGR5_SAI1(CCM_CCGR_ON);
double fs = AUDIO_SAMPLE_RATE_EXACT;
// PLL between 27*24 = 648MHz und 54*24=1296MHz
int n1 = 4; //SAI prescaler 4 => (n1*n2) = multiple of 4
int n2 = 1 + (24000000 * 27) / (fs * 256 * n1);
double C = (fs * 256 * n1 * n2) / 24000000;
int c0 = C;
int c2 = 10000;
int c1 = C * c2 - (c0 * c2);
set_audioClock(c0, c1, c2, true);
// clear SAI1_CLK register locations
CCM_CSCMR1 = (CCM_CSCMR1 & ~(CCM_CSCMR1_SAI1_CLK_SEL_MASK))
| CCM_CSCMR1_SAI1_CLK_SEL(2); // &0x03 // (0,1,2): PLL3PFD0, PLL5, PLL4
n1 = n1 / 2; //Double Speed for TDM
CCM_CS1CDR = (CCM_CS1CDR & ~(CCM_CS1CDR_SAI1_CLK_PRED_MASK | CCM_CS1CDR_SAI1_CLK_PODF_MASK))
| CCM_CS1CDR_SAI1_CLK_PRED(n1 - 1) // &0x07
| CCM_CS1CDR_SAI1_CLK_PODF(n2 - 1); // &0x3f
IOMUXC_GPR_GPR1 = (IOMUXC_GPR_GPR1 & ~(IOMUXC_GPR_GPR1_SAI1_MCLK1_SEL_MASK))
| (IOMUXC_GPR_GPR1_SAI1_MCLK_DIR | IOMUXC_GPR_GPR1_SAI1_MCLK1_SEL(0)); //Select MCLK
// configure transmitter
int rsync = 0;
int tsync = 1;
I2S1_TMR = 0;
I2S1_TCR1 = I2S_TCR1_RFW(1);
I2S1_TCR2 = I2S_TCR2_SYNC(tsync) | I2S_TCR2_BCP // sync=0; tx is async;
| (I2S_TCR2_BCD | I2S_TCR2_DIV((1)) | I2S_TCR2_MSEL(1));
I2S1_TCR3 = I2S_TCR3_TCE;
I2S1_TCR4 = I2S_TCR4_FRSZ((2-1)) | I2S_TCR4_SYWD((32-1)) | I2S_TCR4_MF
| I2S_TCR4_FSD | I2S_TCR4_FSE | I2S_TCR4_FSP;
I2S1_TCR5 = I2S_TCR5_WNW((32-1)) | I2S_TCR5_W0W((32-1)) | I2S_TCR5_FBT((32-1));
I2S1_RMR = 0;
I2S1_RCR1 = I2S_RCR1_RFW(1);
I2S1_RCR2 = I2S_RCR2_SYNC(rsync) | I2S_RCR2_BCP // sync=0; rx is async;
| (I2S_RCR2_BCD | I2S_RCR2_DIV((1)) | I2S_RCR2_MSEL(1));
I2S1_RCR3 = I2S_RCR3_RCE;
I2S1_RCR4 = I2S_RCR4_FRSZ((2-1)) | I2S_RCR4_SYWD((32-1)) | I2S_RCR4_MF
| I2S_RCR4_FSE | I2S_RCR4_FSP | I2S_RCR4_FSD;
I2S1_RCR5 = I2S_RCR5_WNW((32-1)) | I2S_RCR5_W0W((32-1)) | I2S_RCR5_FBT((32-1));
//CORE_PIN23_CONFIG = 3; // MCLK
CORE_PIN21_CONFIG = 3; // RX_BCLK
CORE_PIN20_CONFIG = 3; // RX_SYNC
CORE_PIN7_CONFIG = 3; // TX_DATA0
I2S1_RCSR |= I2S_RCSR_RE | I2S_RCSR_BCE;
I2S1_TCSR = I2S_TCSR_TE | I2S_TCSR_BCE | I2S_TCSR_FRDE ;//<-- not using DMA */;
}
//DMAMEM __attribute__((aligned(32))) static uint32_t i2s_tx[1024];
static bool fillfirsthalf = true;
static uint16_t cnt = 0;
static uint16_t sampleBufferSize = 0;
static void (*fillsamples)(short * stream, int len) = nullptr;
static uint32_t * i2s_tx_buffer __attribute__((aligned(32)));
static uint16_t * i2s_tx_buffer16;
static uint16_t * txreg = (uint16_t *)((uint32_t)&I2S1_TDR0 + 2);
FASTRUN void AudioPlaySystem::AUDIO_isr() {
*txreg = i2s_tx_buffer16[cnt];
cnt = cnt + 1;
cnt = cnt & (sampleBufferSize*2-1);
if (cnt == 0) {
fillfirsthalf = false;
NVIC_SET_PENDING(IRQ_SOFTWARE);
}
else if (cnt == sampleBufferSize) {
fillfirsthalf = true;
NVIC_SET_PENDING(IRQ_SOFTWARE);
}
/*
I2S1_TDR0 = i2s_tx_buffer[cnt];
cnt = cnt + 1;
cnt = cnt & (sampleBufferSize-1);
if (cnt == 0) {
fillfirsthalf = false;
NVIC_SET_PENDING(IRQ_SOFTWARE);
}
else if (cnt == sampleBufferSize/2) {
fillfirsthalf = true;
NVIC_SET_PENDING(IRQ_SOFTWARE);
}
*/
}
FASTRUN void AudioPlaySystem::SOFTWARE_isr() {
//Serial.println("x");
if (fillfirsthalf) {
fillsamples((short *)i2s_tx_buffer, sampleBufferSize);
arm_dcache_flush_delete((void*)i2s_tx_buffer, (sampleBufferSize/2)*sizeof(uint32_t));
}
else {
fillsamples((short *)&i2s_tx_buffer[sampleBufferSize/2], sampleBufferSize);
arm_dcache_flush_delete((void*)&i2s_tx_buffer[sampleBufferSize/2], (sampleBufferSize/2)*sizeof(uint32_t));
}
}
// display VGA image
FLASHMEM void AudioPlaySystem::begin_audio(int samplesize, void (*callback)(short * stream, int len))
{
fillsamples = callback;
i2s_tx_buffer = (uint32_t*)malloc(samplesize*sizeof(uint32_t)); //&i2s_tx[0];
if (i2s_tx_buffer == NULL) {
Serial.println("could not allocate audio samples");
return;
}
memset((void*)i2s_tx_buffer,0, samplesize*sizeof(uint32_t));
arm_dcache_flush_delete((void*)i2s_tx_buffer, samplesize*sizeof(uint32_t));
i2s_tx_buffer16 = (uint16_t*)i2s_tx_buffer;
sampleBufferSize = samplesize;
config_sai1();
attachInterruptVector(IRQ_SAI1, AUDIO_isr);
NVIC_ENABLE_IRQ(IRQ_SAI1);
NVIC_SET_PRIORITY(IRQ_QTIMER3, 0); // 0 highest priority, 255 = lowest priority
NVIC_SET_PRIORITY(IRQ_SAI1, 127);
attachInterruptVector(IRQ_SOFTWARE, SOFTWARE_isr);
NVIC_SET_PRIORITY(IRQ_SOFTWARE, 208);
NVIC_ENABLE_IRQ(IRQ_SOFTWARE);
I2S1_TCSR |= 1<<8; // start generating TX FIFO interrupts
Serial.print("Audio sample buffer = ");
Serial.println(samplesize);
}
FLASHMEM void AudioPlaySystem::end_audio()
{
if (i2s_tx_buffer != NULL) {
free(i2s_tx_buffer);
}
}
#endif
#endif

Wyświetl plik

@ -0,0 +1,34 @@
#ifndef audioplaysystem_h_
#define audioplaysystem_h_
#ifdef HAS_SND
#include "platform_config.h"
class AudioPlaySystem
{
public:
AudioPlaySystem(void) { };
void begin(void);
void setSampleParameters(float clockfreq, float samplerate);
void reset(void);
void start(void);
void stop(void);
bool isPlaying(void);
void sound(int C, int F, int V);
void buzz(int size, int val);
void step(void);
static void snd_Mixer(short * stream, int len );
#ifndef HAS_T4_VGA
void begin_audio(int samplesize, void (*callback)(short * stream, int len));
void end_audio();
static void AUDIO_isr(void);
static void SOFTWARE_isr(void);
#endif
};
#endif
#endif

Wyświetl plik

@ -0,0 +1,21 @@
#include "IC.h"
IC::IC() : cycles(0) {
}
IC::~IC() {
}
uint32_t IC::getCycles() {
return this->cycles;
}
uint32_t IC::getClockSpeed() {
return this->clockSpeed;
}
void IC::setClockSpeed(uint32_t clock) {
this->clockSpeed = clock;
}

Wyświetl plik

@ -0,0 +1,28 @@
#ifndef _H_IC
#define _H_IC
#include <stdint.h>
/*
Simple base class for integrated circuits.
*/
class IC {
public:
IC();
~IC();
// Getters
uint32_t getCycles();
uint32_t getClockSpeed();
// Setters
void setClockSpeed(uint32_t clock);
protected:
// Derived classes handle incrementing this counter
uint32_t cycles;
// Determines the maximum frequenzy an IC can operate in hertz
uint32_t clockSpeed;
};
#endif

Wyświetl plik

@ -0,0 +1,20 @@
#ifndef _H_MOS6502MEMORY
#define _H_MOS6502MEMORY
#include <stdint.h>
extern uint8_t vicmemory[];
#define readWord(location) (vicmemory[location])
#define writeWord(location,value) {vicmemory[location]=value;}
//extern uint8_t readWord( uint16_t location);
//extern void writeWord( uint16_t location, uint8_t value);
#define silentReadWord(location) (vicmemory[location])
#define silentWriteWord(location,value) {vicmemory[location]=value;}
#define silentReadDWord(location) (vicmemory[location] | vicmemory[location + 1] << 8)
#define silentWriteDWord(location,value) {vicmemory[location]=uint8_t(value & 0xFF); vicmemory[location + 1]=(uint8_t)((value >> 8) & 0xFF);}
#endif

Wyświetl plik

@ -0,0 +1,183 @@
#include "MOS6522.h"
#include "MOS6502Memory.h"
MOS6522::MOS6522() : IC()
, keyPressed(0)
, shiftPressed(false)
, cbmPressed(false) {
// Set clock speed
this->setClockSpeed(2000000);
}
MOS6522::~MOS6522() {
}
void MOS6522::setCpu(mos6502 *omos6502) {
this->omos6502 = omos6502;
}
void MOS6522::setKeyPressed(uint16_t key) {
/* Store high byte first
= 0x9120 << 8 | 0x9121
*/
keyPressed = key;
}
void MOS6522::setShiftPressed(bool state) {
this->shiftPressed = state;
}
void MOS6522::setCbmPressed(bool state) {
this->cbmPressed = state;
}
void MOS6522::setJoyStickPressed(Vic20JoyStickButton button, bool state) {
this->joyStick[button] = state;
}
void MOS6522::initialize() {
// Clear joystick memory
writeWord(0x9111, 0xFF);
}
void MOS6522::tick() {
// Tick timer cycle
this->tickTimers();
// Handle input in this cycle
this->joy1Input();
this->joy2Input();
this->keyboardInput();
// Increment cycles counter
this->cycles += 1;
}
void MOS6522::joy1Input() {
// Handle joystick input on VIA1
uint8_t via1PortAValue = silentReadWord(via1PORTA);
via1PortAValue |= 0x3c;
if (joyStick[Vic20JoyStickButton::Fire]) {
via1PortAValue &= ~0x20;
}
if (joyStick[Vic20JoyStickButton::Up]) {
via1PortAValue &= ~0x04;
}
if (joyStick[Vic20JoyStickButton::Down]) {
via1PortAValue &= ~0x08;
}
if (joyStick[Vic20JoyStickButton::Left]) {
via1PortAValue &= ~0x10;
}
silentWriteWord(via1PORTA, via1PortAValue);
silentWriteWord(via1PORTAMIRROR, via1PortAValue);
}
void MOS6522::joy2Input() {
uint8_t via2PortBValue = silentReadWord(this->via2PORTB);
// If this bit is input, set it to default value, else leave it as it is so it won't mess up keyboard input
if (!(silentReadWord(via2PortBDDR) & 0x80)) {
via2PortBValue |= 0x80;
}
// Joystick RIGHT ison VIA 2
if (joyStick[Vic20JoyStickButton::Right]) {
via2PortBValue &= ~0x80;
}
silentWriteWord(via2PORTB, via2PortBValue);
}
void MOS6522::keyboardInput() {
uint8_t via2PortAValue = silentReadWord(this->via2PORTA);
uint8_t via2PortBValue = silentReadWord(this->via2PORTB);
// Get row and column of key press
uint8_t column = (keyPressed >> 8) & 0xFF; // output
uint8_t row = keyPressed & 0xFF; //input
// Check whether keyboard should be scanned
if (via2PortBValue == 0) {
// If port b is 0 then the vic is asking whether any keys are pressed on the keyboard
via2PortAValue = keyPressed == 0 ? 0xFF : row;
}
else {
// Return keyboard row depending on column state
via2PortAValue = (via2PortBValue == column ? (row == 0 ? 0xFF : row) : 0xFF);
}
if ((via2PortBValue == 0xF7) && shiftPressed) {
// Return row of shift key
via2PortAValue = 0xFD & (keyPressed == 0 ? 0xFF : (column == 0xF7 ? row : 0xFF));
} else if (via2PortBValue == 0xDF && cbmPressed) {
// Return row of cbm key
via2PortAValue = 0xFE & (keyPressed == 0 ? 0xFF : (column == 0xDF ? row : 0xFF));
}
silentWriteWord(this->via2PORTA, via2PortAValue);
silentWriteWord(this->via2PORTAMIRROR, via2PortAValue);
}
void MOS6522::tickTimers() {
// Grab values of timer related registers
uint8_t interruptEnable = readWord(this->irqEnableAddress);
uint8_t interruptFlags = readWord(this->irqFlagsAddress);
// Get timer values
uint16_t timer1 = silentReadDWord(this->via2timer1DAddress);
uint16_t timer2 = silentReadDWord(this->via1timer2DAddress);
// If timer1 is active, decrement it
if (timer1 > 0) {
silentWriteDWord(this->via2timer1DAddress, --timer1);
}
if (timer1 == 0) {
// Set interrupt flag
interruptFlags |= 0x40;
silentWriteWord(this->irqFlagsAddress, interruptFlags);
}
// If timer2 is active and no latch, decrement it
if (silentReadWord(this->via2timer2HighByteLatch) != 0) {
if (timer2 > 0) {
silentWriteDWord(this->via1timer2DAddress, --timer2);
}
if (timer2 == 0) {
// Reset high byte latch
silentWriteDWord(this->via1timer2DAddress, silentReadDWord(this->via2timer2LowByteLatch));
silentWriteDWord(this->via2timer2HighByteLatch, 0);
// Set interrupt flag
interruptFlags |= 0x20;
silentWriteWord(this->irqFlagsAddress, interruptFlags);
}
}
// Check if an interrupt request exists in the system
if (interruptFlags & interruptEnable & 0x7F) {
// Send an interrupt request to the cpu
//if (omos6502->interrupt()) {
if (omos6502->IRQ()) {
uint8_t auxControl = readWord(this->auxControlAddress);
// Post interrupt operation
if (interruptFlags & 0x40) {
// Determine what to do with timer based on auxiliary control register
if (auxControl & 0x40) {
// Continuous interrupt
silentWriteDWord(this->via2timer1DAddress, silentReadDWord(this->via2timer1LowByteLatch));
}
// Reset interrupt flag
interruptFlags &= ~0x40;
silentWriteWord(irqFlagsAddress, interruptFlags);
}
if (interruptFlags & 0x20) {
// Reset interrupt flag
interruptFlags &= ~0x20;
silentWriteWord(irqFlagsAddress, interruptFlags);
}
}
}
}

Wyświetl plik

@ -0,0 +1,101 @@
#ifndef _H_MOS6522
#define _H_MOS6522
#include "IC.h"
#include "mos6502.h"
/*
Notes,
This single object will serve as emulation
for both VIA chips in the VIC-20.
References,
http://vic-20.appspot.com/docs/viausage.txt
http://vic-20.appspot.com/docs/vickey.txt
*/
class MOS6522 : public IC {
public:
MOS6522();
~MOS6522();
// Joystick
enum Vic20JoyStickButton { Fire = 0, Up = 1, Down = 2, Left = 3, Right = 4 };
// Via joystick interface
void setJoyStickPressed(Vic20JoyStickButton button, bool state);
// Via 2 Keyboard interface
void setKeyPressed(uint16_t key);
void setShiftPressed(bool state);
void setCbmPressed(bool state);
// Interface
void tick();
// Organize operations into separate methods for cleaner code
void tickTimers();
void joy1Input();
void joy2Input();
void keyboardInput();
void setCpu(mos6502 *omos6502);
void initialize();
private:
// Cpu reference
mos6502 *omos6502;
// Via 1 & 2 Joystick
bool joyStick[5];
// Via 2 Keyboard
uint16_t keyPressed;
bool shiftPressed;
bool cbmPressed;
// VIA 1 Joystick addresses
static const uint16_t via1PORTB = 0x9110;
static const uint16_t via1PORTA = 0x9111;
static const uint16_t via1PORTAMIRROR = 0x911F;
// Port A
static const uint8_t joyStickUpBit = 0x2;
static const uint8_t joyStickDownBit = 0x4;
static const uint8_t joyStickLeftBit = 0x8;
static const uint8_t joyStickFireBit = 0x10;
// VIA 1 ddrs
static const uint16_t via1PortBDDR = 0x9112;
static const uint16_t via1PortADDR = 0x9113;
// VIA 1 Timer
static const uint16_t via1timer2DAddress = 0x9118; //and 0x9119
// Via 2 Keyboard addresses + joystick right
static const uint16_t via2PORTB = 0x9120;
static const uint16_t via2PORTA = 0x9121;
static const uint16_t via2PORTAMIRROR = 0x912F;
// Port B
static const uint8_t joyStickRightBit = 0x80;
// VIA 2 ddrs
static const uint16_t via2PortBDDR = 0x9122;
static const uint16_t via2PortADDR = 0x9123;
// VIA 2 Timer
static const uint16_t via2timer1LowByteLatch = 0x9124;
static const uint16_t via2timer1HighByteLatch = 0x9125;
static const uint16_t via2timer1DAddress = 0x9126; //and 0x9127
static const uint16_t via2timer2LowByteLatch = 0x9128;
static const uint16_t via2timer2HighByteLatch = 0x9129;
// Via 2 Registers
static const uint16_t auxControlAddress = 0x912B;
static const uint16_t irqFlagsAddress = 0x912D;
static const uint16_t irqEnableAddress = 0x912E;
};
#endif

Wyświetl plik

@ -0,0 +1,320 @@
#include "MOS6561.h"
extern "C" {
#include "emuapi.h"
#include "platform_config.h"
}
#ifdef HAS_T4_VGA
#include "vga_t_dma.h"
typedef uint8_t Pixel;
#else
#include "tft_t_dma.h"
typedef uint16_t Pixel;
#endif
#define WIN_W TFT_WIDTH
#define WIN_H TFT_HEIGHT
//#include <stdio.h>
// definitions for easy access to registers
#define REG_COLPAGE_BASE (0x9400) // 0x9400+0x200 = 0x9600 unexpanded
#define REG_SCRPAGE_LO ((readWord(0x9002) & 0x80)<< 2) // 0x0200
#define REG_COLPAGE_LO ((readWord(0x9002) & 0x80)<< 2) // 0x0200
#define REG_NB_COLUMNS (readWord(0x9002) & 0x7F)
#define REG_RASTER_LO_RD (0x9003) // 0x80 >> 7
#define REG_DOUBLE_HEIGHT (readWord(0x9003) & 0x01)
#define REG_NB_ROWS ((readWord(0x9003) & 0x7E) >> 1) //x2 => 46
#define REG_RASTER_HI_RD (0x9004) // << 1 // 1E00 unexpanded?
#define REG_CHRMAP_PT (readWord(0x9005) & 0x0F)
#define REG_SCRPAGE_HIGH ((readWord(0x9005) & 0xF0) << 6) // 0x2C00
#define REG_AUXILIARY_COLOUR ((readWord(0x900E) & 0xF0) >> 4)
#define REG_BORDER_COLOUR (readWord(0x900F) & 0x7)
#define REG_BACKGROUND_COLOUR ((readWord(0x900F) & 0xF0) >> 4)
#define REG_HORI_OFFSET ((readWord(0x9000) & 0x7F)
#define REG_VERT_OFFSET ((readWord(0x9001) & 0xFF)
// C R H V
// 16 16 +6 +16
// 22 23 0 0
// 24 28 -3 -9
// 25 30 -3 -12
// 27 33 -5 -19
static Pixel vicPalette[16];
static uint16_t remap[16] = {
0x8000,
0x8400,
0x8800,
0x8c00,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x1000,
0x1400,
0x1800,
0x1c00
};
MOS6561::MOS6561() : IC(), curRow(0), frameReady(true) {
// Set clock speed
this->setClockSpeed(1108000);
}
MOS6561::~MOS6561() {
}
void MOS6561::initialize() {
// Initialize VIC palette
vicPalette[0] = RGBVAL16(0, 0, 0);
vicPalette[1] = RGBVAL16(255, 255, 255);
vicPalette[2] = RGBVAL16((182), (31), (33));
vicPalette[3] = RGBVAL16((77), (240), (255));
vicPalette[4] = RGBVAL16((180), (63), (255));
vicPalette[5] = RGBVAL16((68), (226), (55));
vicPalette[6] = RGBVAL16((15), (87), (247));
vicPalette[7] = RGBVAL16((220), (215), (27));
vicPalette[8] = RGBVAL16((202), (84), (0));
vicPalette[9] = RGBVAL16((233), (176), (114));
vicPalette[10] = RGBVAL16((231), (146), (147));
vicPalette[11] = RGBVAL16((154), (247), (253));
vicPalette[12] = RGBVAL16((224), (159), (255));
vicPalette[13] = RGBVAL16((143), (228), (147));
vicPalette[14] = RGBVAL16((130), (144), (255));
vicPalette[15] = RGBVAL16((229), (222), (133));
}
void MOS6561::renderBorder(uint16_t raster){
if (raster < WIN_H) {
Pixel bcol = vicPalette[REG_BORDER_COLOUR];
Pixel * dst = (Pixel *)emu_LineBuffer(raster);
for (int x=0; x < WIN_W; x++) {
*dst++ = bcol;
}
}
}
void MOS6561::renderLine(uint16_t raster, uint16_t row, uint8_t rowHeight, uint8_t chrLine) {
int curRow = row;
int nbRow = REG_NB_ROWS;
if ( (rowHeight == 16) && (nbRow >= 23) ) {
curRow = curRow/2;
nbRow = nbRow/2;
}
if (raster < WIN_H)
{
int nbCol = REG_NB_COLUMNS;
int bWidth = (WIN_W - nbCol*8)/2;
#define bakcol 0
#define borcol 1
#define forcol 2
#define auxcol 3
Pixel cols[4];
uint16_t screenPage = (REG_SCRPAGE_HIGH & ~0x2000) + REG_SCRPAGE_LO;
uint8_t * charPointer = &vicmemory[screenPage + (curRow * nbCol)];
uint16_t colourPage = REG_COLPAGE_BASE + REG_COLPAGE_LO;
uint8_t * colPointer = &vicmemory[colourPage + (curRow * nbCol)];
cols[borcol] = vicPalette[REG_BORDER_COLOUR];
cols[bakcol] = vicPalette[REG_BACKGROUND_COLOUR];
// Border Left
Pixel * dst = (Pixel *)emu_LineBuffer(raster);
for (int x=0; x < bWidth; x++) {
*dst++ = cols[borcol];
}
uint16_t chardefbase = remap[REG_CHRMAP_PT];
for (int x = 0; x < nbCol; x +=1)
{
uint16_t charpt = chardefbase + charPointer[x]*rowHeight + chrLine;
if ( (charpt > 0x2000) && (charpt < 0x3000) )
charpt += 0x6000;
uint8_t characterByte = vicmemory[charpt];
uint8_t colour = colPointer[x] & 0x7;
uint8_t multiColour = colPointer[x] & 0x8;
cols[forcol] = vicPalette[colour];
if (!multiColour) {
Pixel * dest = dst;
for (int a = 0; a < 8; a++) {
if ((characterByte << a) & 0x80) {
*dest++ = cols[forcol];
}
else {
*dest++ = cols[bakcol];
}
}
}
else {
Pixel * dest = dst;
cols[auxcol] = vicPalette[REG_AUXILIARY_COLOUR];
for (int a = 0; a < 8; a += 2) {
// Set colour
Pixel col = cols[((characterByte << a) & 0xC0) >> 6];
*dest++ = col;
*dest++ = col;
}
}
dst +=8;
}
// Border Right
for (int x=0; x < bWidth; x++) {
*dst++ = cols[borcol];
}
}
}
void MOS6561::renderRow(uint16_t raster, uint16_t row, uint8_t rowHeight)
{
int curRow = row;
int nbRow = REG_NB_ROWS;
//printf("rows %d of %d, cols=%d, rowHeight:%d\n", curRow, nbRow, nbCol, rowHeight);
if ( (rowHeight == 16) && (nbRow >= 23) ) {
curRow = curRow/2;
nbRow = nbRow/2;
}
if ((raster+curRow*rowHeight) < WIN_H)
{
int nbCol = REG_NB_COLUMNS;
int bWidth = (WIN_W - nbCol*8)/2;
#define bakcol 0
#define borcol 1
#define forcol 2
#define auxcol 3
Pixel cols[4];
uint16_t screenPage = (REG_SCRPAGE_HIGH & ~0x2000) + REG_SCRPAGE_LO;
uint8_t * charPointer = &vicmemory[screenPage + (curRow * nbCol)];
uint16_t colourPage = REG_COLPAGE_BASE + REG_COLPAGE_LO;
uint8_t * colPointer = &vicmemory[colourPage + (curRow * nbCol)];
cols[borcol] = vicPalette[REG_BORDER_COLOUR];
cols[bakcol] = vicPalette[REG_BACKGROUND_COLOUR];
for (int line=0; line < rowHeight; line++) {
// Border Left
Pixel * dst = (Pixel *)emu_LineBuffer(curRow*rowHeight+line+raster);
for (int x=0; x < bWidth; x++) {
*dst++ = cols[borcol];
}
uint16_t chardefbase = remap[REG_CHRMAP_PT];
for (int x = 0; x < nbCol; x +=1)
{
uint16_t charpt = chardefbase + charPointer[x]*rowHeight + line;
if ( (charpt > 0x2000) && (charpt < 0x3000) )
charpt += 0x6000;
uint8_t characterByte = vicmemory[charpt];
uint8_t colour = colPointer[x] & 0x7;
uint8_t multiColour = colPointer[x] & 0x8;
cols[forcol] = vicPalette[colour];
if (!multiColour) {
Pixel * dest = dst;
for (int a = 0; a < 8; a++) {
if ((characterByte << a) & 0x80) {
*dest++ = cols[forcol];
}
else {
*dest++ = cols[bakcol];
}
}
}
else {
Pixel * dest = dst;
cols[auxcol] = vicPalette[REG_AUXILIARY_COLOUR];
for (int a = 0; a < 8; a += 2) {
// Set colour
Pixel col = cols[((characterByte << a) & 0xC0) >> 6];
*dest++ = col;
*dest++ = col;
}
}
dst +=8;
}
// Border Right
for (int x=0; x < bWidth; x++) {
*dst++ = cols[borcol];
}
}
}
}
void MOS6561::renderFrame() {
this->frameReady = false;
}
bool MOS6561::isFrameReady() {
return this->frameReady;
}
void MOS6561::tick(int nbcycles) {
// Increment raster counter
uint16_t raster = readWord(REG_RASTER_HI_RD) << 1 | readWord(REG_RASTER_LO_RD) >> 7;
if (cycles % cyclesPerScanline == 0) {
uint8_t rowHeight = (REG_DOUBLE_HEIGHT?16:8);
if (raster <= lastScanline) {
raster += 1;
}
else {
raster = 0;
visScanlines = REG_NB_ROWS * rowHeight;
if ( (rowHeight == 16) && (REG_NB_ROWS >= 23) ) {
visScanlines = REG_NB_ROWS * 8;
}
firstVisibleScanline = (WIN_H-visScanlines)/2;
}
writeWord(REG_RASTER_LO_RD, (raster & 0x1) << 7 | (readWord(REG_RASTER_LO_RD) & 0x7F));
writeWord(REG_RASTER_HI_RD, raster >> 1);
if (visScanlines) {
if (raster < firstVisibleScanline) {
renderBorder(raster);
}
// If not blanking, update screen
else if (raster >= firstVisibleScanline && raster < (firstVisibleScanline+visScanlines)) {
// Update video
uint8_t chrLine = (raster-firstVisibleScanline) % rowHeight;
//renderLine(raster, this->curRow, rowHeight, chrLine);
if (chrLine == rowHeight-1) {
renderRow(firstVisibleScanline, this->curRow, rowHeight);
this->curRow++;
// End of screen reached
if (this->curRow >= REG_NB_ROWS) {
this->curRow = 0;
frameReady = true;
}
}
}
else {
renderBorder(raster);
}
}
}
// Increment cycle counter
this->cycles += nbcycles;
}

Wyświetl plik

@ -0,0 +1,51 @@
#ifndef _H_MOS6561
#define _H_MOS6561
#include <stdint.h>
#include "IC.h"
#include "MOS6502Memory.h"
/*
References,
http://vic-20.appspot.com/docs/6561.txt
http://vic-20.appspot.com/docs/vicregs.txt
http://vic-20.appspot.com/docs/6561help.txt
*/
class MOS6561 : public IC {
public:
MOS6561();
~MOS6561();
// Interface
void tick(int cycles);
void initialize();
// Getters, mostly depend on memory
bool isFrameReady();
void renderFrame();
void renderBorder(uint16_t raster);
void renderRow(uint16_t raster, uint16_t row, uint8_t rowHeight);
void renderLine(uint16_t raster, uint16_t row, uint8_t rowHeight, uint8_t chrLine);
private:
// Used as counters
uint8_t curRow;
uint16_t firstVisibleScanline;
uint16_t visScanlines;
// Determines if a full frame has been drawn
bool frameReady;
static const uint16_t lastScanline = 312;
public:
static const int cyclesPerScanline = 71;
static const uint16_t Audio1Register = 0x900A;
static const uint16_t Audio2Register = 0x900B;
static const uint16_t Audio3Register = 0x900C;
static const uint16_t Audio4Register = 0x900D;
static const uint16_t AudioVolRegister = 0x900E;
};
#endif

Wyświetl plik

@ -0,0 +1,514 @@
const unsigned char PROGMEM basicrom[8192] = {
0x78,0xE3,0x67,0xE4,0x43,0x42,0x4D,0x42,0x41,0x53,0x49,0x43,0x30,0xC8,0x41,0xC7,
0x1D,0xCD,0xF7,0xC8,0xA4,0xCB,0xBE,0xCB,0x80,0xD0,0x05,0xCC,0xA4,0xC9,0x9F,0xC8,
0x70,0xC8,0x27,0xC9,0x1C,0xC8,0x82,0xC8,0xD1,0xC8,0x3A,0xC9,0x2E,0xC8,0x4A,0xC9,
0x2C,0xD8,0x64,0xE1,0x52,0xE1,0x61,0xE1,0xB2,0xD3,0x23,0xD8,0x7F,0xCA,0x9F,0xCA,
0x56,0xC8,0x9B,0xC6,0x5D,0xC6,0x85,0xCA,0x26,0xE1,0xBA,0xE1,0xC3,0xE1,0x7A,0xCB,
0x41,0xC6,0x39,0xDC,0xCC,0xDC,0x58,0xDC,0x00,0x00,0x7D,0xD3,0x9E,0xD3,0x71,0xDF,
0x94,0xE0,0xEA,0xD9,0xED,0xDF,0x61,0xE2,0x68,0xE2,0xB1,0xE2,0x0B,0xE3,0x0D,0xD8,
0x7C,0xD7,0x65,0xD4,0xAD,0xD7,0x8B,0xD7,0xEC,0xD6,0x00,0xD7,0x2C,0xD7,0x37,0xD7,
0x79,0x69,0xD8,0x79,0x52,0xD8,0x7B,0x2A,0xDA,0x7B,0x11,0xDB,0x7F,0x7A,0xDF,0x50,
0xE8,0xCF,0x46,0xE5,0xCF,0x7D,0xB3,0xDF,0x5A,0xD3,0xCE,0x64,0x15,0xD0,0x45,0x4E,
0xC4,0x46,0x4F,0xD2,0x4E,0x45,0x58,0xD4,0x44,0x41,0x54,0xC1,0x49,0x4E,0x50,0x55,
0x54,0xA3,0x49,0x4E,0x50,0x55,0xD4,0x44,0x49,0xCD,0x52,0x45,0x41,0xC4,0x4C,0x45,
0xD4,0x47,0x4F,0x54,0xCF,0x52,0x55,0xCE,0x49,0xC6,0x52,0x45,0x53,0x54,0x4F,0x52,
0xC5,0x47,0x4F,0x53,0x55,0xC2,0x52,0x45,0x54,0x55,0x52,0xCE,0x52,0x45,0xCD,0x53,
0x54,0x4F,0xD0,0x4F,0xCE,0x57,0x41,0x49,0xD4,0x4C,0x4F,0x41,0xC4,0x53,0x41,0x56,
0xC5,0x56,0x45,0x52,0x49,0x46,0xD9,0x44,0x45,0xC6,0x50,0x4F,0x4B,0xC5,0x50,0x52,
0x49,0x4E,0x54,0xA3,0x50,0x52,0x49,0x4E,0xD4,0x43,0x4F,0x4E,0xD4,0x4C,0x49,0x53,
0xD4,0x43,0x4C,0xD2,0x43,0x4D,0xC4,0x53,0x59,0xD3,0x4F,0x50,0x45,0xCE,0x43,0x4C,
0x4F,0x53,0xC5,0x47,0x45,0xD4,0x4E,0x45,0xD7,0x54,0x41,0x42,0xA8,0x54,0xCF,0x46,
0xCE,0x53,0x50,0x43,0xA8,0x54,0x48,0x45,0xCE,0x4E,0x4F,0xD4,0x53,0x54,0x45,0xD0,
0xAB,0xAD,0xAA,0xAF,0xDE,0x41,0x4E,0xC4,0x4F,0xD2,0xBE,0xBD,0xBC,0x53,0x47,0xCE,
0x49,0x4E,0xD4,0x41,0x42,0xD3,0x55,0x53,0xD2,0x46,0x52,0xC5,0x50,0x4F,0xD3,0x53,
0x51,0xD2,0x52,0x4E,0xC4,0x4C,0x4F,0xC7,0x45,0x58,0xD0,0x43,0x4F,0xD3,0x53,0x49,
0xCE,0x54,0x41,0xCE,0x41,0x54,0xCE,0x50,0x45,0x45,0xCB,0x4C,0x45,0xCE,0x53,0x54,
0x52,0xA4,0x56,0x41,0xCC,0x41,0x53,0xC3,0x43,0x48,0x52,0xA4,0x4C,0x45,0x46,0x54,
0xA4,0x52,0x49,0x47,0x48,0x54,0xA4,0x4D,0x49,0x44,0xA4,0x47,0xCF,0x00,0x54,0x4F,
0x4F,0x20,0x4D,0x41,0x4E,0x59,0x20,0x46,0x49,0x4C,0x45,0xD3,0x46,0x49,0x4C,0x45,
0x20,0x4F,0x50,0x45,0xCE,0x46,0x49,0x4C,0x45,0x20,0x4E,0x4F,0x54,0x20,0x4F,0x50,
0x45,0xCE,0x46,0x49,0x4C,0x45,0x20,0x4E,0x4F,0x54,0x20,0x46,0x4F,0x55,0x4E,0xC4,
0x44,0x45,0x56,0x49,0x43,0x45,0x20,0x4E,0x4F,0x54,0x20,0x50,0x52,0x45,0x53,0x45,
0x4E,0xD4,0x4E,0x4F,0x54,0x20,0x49,0x4E,0x50,0x55,0x54,0x20,0x46,0x49,0x4C,0xC5,
0x4E,0x4F,0x54,0x20,0x4F,0x55,0x54,0x50,0x55,0x54,0x20,0x46,0x49,0x4C,0xC5,0x4D,
0x49,0x53,0x53,0x49,0x4E,0x47,0x20,0x46,0x49,0x4C,0x45,0x20,0x4E,0x41,0x4D,0xC5,
0x49,0x4C,0x4C,0x45,0x47,0x41,0x4C,0x20,0x44,0x45,0x56,0x49,0x43,0x45,0x20,0x4E,
0x55,0x4D,0x42,0x45,0xD2,0x4E,0x45,0x58,0x54,0x20,0x57,0x49,0x54,0x48,0x4F,0x55,
0x54,0x20,0x46,0x4F,0xD2,0x53,0x59,0x4E,0x54,0x41,0xD8,0x52,0x45,0x54,0x55,0x52,
0x4E,0x20,0x57,0x49,0x54,0x48,0x4F,0x55,0x54,0x20,0x47,0x4F,0x53,0x55,0xC2,0x4F,
0x55,0x54,0x20,0x4F,0x46,0x20,0x44,0x41,0x54,0xC1,0x49,0x4C,0x4C,0x45,0x47,0x41,
0x4C,0x20,0x51,0x55,0x41,0x4E,0x54,0x49,0x54,0xD9,0x4F,0x56,0x45,0x52,0x46,0x4C,
0x4F,0xD7,0x4F,0x55,0x54,0x20,0x4F,0x46,0x20,0x4D,0x45,0x4D,0x4F,0x52,0xD9,0x55,
0x4E,0x44,0x45,0x46,0x27,0x44,0x20,0x53,0x54,0x41,0x54,0x45,0x4D,0x45,0x4E,0xD4,
0x42,0x41,0x44,0x20,0x53,0x55,0x42,0x53,0x43,0x52,0x49,0x50,0xD4,0x52,0x45,0x44,
0x49,0x4D,0x27,0x44,0x20,0x41,0x52,0x52,0x41,0xD9,0x44,0x49,0x56,0x49,0x53,0x49,
0x4F,0x4E,0x20,0x42,0x59,0x20,0x5A,0x45,0x52,0xCF,0x49,0x4C,0x4C,0x45,0x47,0x41,
0x4C,0x20,0x44,0x49,0x52,0x45,0x43,0xD4,0x54,0x59,0x50,0x45,0x20,0x4D,0x49,0x53,
0x4D,0x41,0x54,0x43,0xC8,0x53,0x54,0x52,0x49,0x4E,0x47,0x20,0x54,0x4F,0x4F,0x20,
0x4C,0x4F,0x4E,0xC7,0x46,0x49,0x4C,0x45,0x20,0x44,0x41,0x54,0xC1,0x46,0x4F,0x52,
0x4D,0x55,0x4C,0x41,0x20,0x54,0x4F,0x4F,0x20,0x43,0x4F,0x4D,0x50,0x4C,0x45,0xD8,
0x43,0x41,0x4E,0x27,0x54,0x20,0x43,0x4F,0x4E,0x54,0x49,0x4E,0x55,0xC5,0x55,0x4E,
0x44,0x45,0x46,0x27,0x44,0x20,0x46,0x55,0x4E,0x43,0x54,0x49,0x4F,0xCE,0x56,0x45,
0x52,0x49,0x46,0xD9,0x4C,0x4F,0x41,0xC4,0x9E,0xC1,0xAC,0xC1,0xB5,0xC1,0xC2,0xC1,
0xD0,0xC1,0xE2,0xC1,0xF0,0xC1,0xFF,0xC1,0x10,0xC2,0x25,0xC2,0x35,0xC2,0x3B,0xC2,
0x4F,0xC2,0x5A,0xC2,0x6A,0xC2,0x72,0xC2,0x7F,0xC2,0x90,0xC2,0x9D,0xC2,0xAA,0xC2,
0xBA,0xC2,0xC8,0xC2,0xD5,0xC2,0xE4,0xC2,0xED,0xC2,0x00,0xC3,0x0E,0xC3,0x1E,0xC3,
0x24,0xC3,0x83,0xC3,0x0D,0x4F,0x4B,0x0D,0x00,0x0D,0x20,0x45,0x52,0x52,0x4F,0x52,
0x00,0x20,0x49,0x4E,0x20,0x00,0x0D,0x0A,0x52,0x45,0x41,0x44,0x59,0x2E,0x0D,0x0A,
0x00,0x0D,0x0A,0x42,0x52,0x45,0x41,0x4B,0x00,0xA0,0xBA,0xE8,0xE8,0xE8,0xE8,0xBD,
0x01,0x01,0xC9,0x81,0xD0,0x21,0xA5,0x4A,0xD0,0x0A,0xBD,0x02,0x01,0x85,0x49,0xBD,
0x03,0x01,0x85,0x4A,0xDD,0x03,0x01,0xD0,0x07,0xA5,0x49,0xDD,0x02,0x01,0xF0,0x07,
0x8A,0x18,0x69,0x12,0xAA,0xD0,0xD8,0x60,0x20,0x08,0xC4,0x85,0x31,0x84,0x32,0x38,
0xA5,0x5A,0xE5,0x5F,0x85,0x22,0xA8,0xA5,0x5B,0xE5,0x60,0xAA,0xE8,0x98,0xF0,0x23,
0xA5,0x5A,0x38,0xE5,0x22,0x85,0x5A,0xB0,0x03,0xC6,0x5B,0x38,0xA5,0x58,0xE5,0x22,
0x85,0x58,0xB0,0x08,0xC6,0x59,0x90,0x04,0xB1,0x5A,0x91,0x58,0x88,0xD0,0xF9,0xB1,
0x5A,0x91,0x58,0xC6,0x5B,0xC6,0x59,0xCA,0xD0,0xF2,0x60,0x0A,0x69,0x3E,0xB0,0x35,
0x85,0x22,0xBA,0xE4,0x22,0x90,0x2E,0x60,0xC4,0x34,0x90,0x28,0xD0,0x04,0xC5,0x33,
0x90,0x22,0x48,0xA2,0x09,0x98,0x48,0xB5,0x57,0xCA,0x10,0xFA,0x20,0x26,0xD5,0xA2,
0xF7,0x68,0x95,0x61,0xE8,0x30,0xFA,0x68,0xA8,0x68,0xC4,0x34,0x90,0x06,0xD0,0x05,
0xC5,0x33,0xB0,0x01,0x60,0xA2,0x10,0x6C,0x00,0x03,0x8A,0x0A,0xAA,0xBD,0x26,0xC3,
0x85,0x22,0xBD,0x27,0xC3,0x85,0x23,0x20,0xCC,0xFF,0xA9,0x00,0x85,0x13,0x20,0xD7,
0xCA,0x20,0x45,0xCB,0xA0,0x00,0xB1,0x22,0x48,0x29,0x7F,0x20,0x47,0xCB,0xC8,0x68,
0x10,0xF4,0x20,0x7A,0xC6,0xA9,0x69,0xA0,0xC3,0x20,0x1E,0xCB,0xA4,0x3A,0xC8,0xF0,
0x03,0x20,0xC2,0xDD,0xA9,0x76,0xA0,0xC3,0x20,0x1E,0xCB,0xA9,0x80,0x20,0x90,0xFF,
0x6C,0x02,0x03,0x20,0x60,0xC5,0x86,0x7A,0x84,0x7B,0x20,0x73,0x00,0xAA,0xF0,0xF0,
0xA2,0xFF,0x86,0x3A,0x90,0x06,0x20,0x79,0xC5,0x4C,0xE1,0xC7,0x20,0x6B,0xC9,0x20,
0x79,0xC5,0x84,0x0B,0x20,0x13,0xC6,0x90,0x44,0xA0,0x01,0xB1,0x5F,0x85,0x23,0xA5,
0x2D,0x85,0x22,0xA5,0x60,0x85,0x25,0xA5,0x5F,0x88,0xF1,0x5F,0x18,0x65,0x2D,0x85,
0x2D,0x85,0x24,0xA5,0x2E,0x69,0xFF,0x85,0x2E,0xE5,0x60,0xAA,0x38,0xA5,0x5F,0xE5,
0x2D,0xA8,0xB0,0x03,0xE8,0xC6,0x25,0x18,0x65,0x22,0x90,0x03,0xC6,0x23,0x18,0xB1,
0x22,0x91,0x24,0xC8,0xD0,0xF9,0xE6,0x23,0xE6,0x25,0xCA,0xD0,0xF2,0x20,0x59,0xC6,
0x20,0x33,0xC5,0xAD,0x00,0x02,0xF0,0x88,0x18,0xA5,0x2D,0x85,0x5A,0x65,0x0B,0x85,
0x58,0xA4,0x2E,0x84,0x5B,0x90,0x01,0xC8,0x84,0x59,0x20,0xB8,0xC3,0xA5,0x14,0xA4,
0x15,0x8D,0xFE,0x01,0x8C,0xFF,0x01,0xA5,0x31,0xA4,0x32,0x85,0x2D,0x84,0x2E,0xA4,
0x0B,0x88,0xB9,0xFC,0x01,0x91,0x5F,0x88,0x10,0xF8,0x20,0x59,0xC6,0x20,0x33,0xC5,
0x4C,0x80,0xC4,0xA5,0x2B,0xA4,0x2C,0x85,0x22,0x84,0x23,0x18,0xA0,0x01,0xB1,0x22,
0xF0,0x1D,0xA0,0x04,0xC8,0xB1,0x22,0xD0,0xFB,0xC8,0x98,0x65,0x22,0xAA,0xA0,0x00,
0x91,0x22,0xA5,0x23,0x69,0x00,0xC8,0x91,0x22,0x86,0x22,0x85,0x23,0x90,0xDD,0x60,
0xA2,0x00,0x20,0x0F,0xE1,0xC9,0x0D,0xF0,0x0D,0x9D,0x00,0x02,0xE8,0xE0,0x59,0x90,
0xF1,0xA2,0x17,0x4C,0x37,0xC4,0x4C,0xCA,0xCA,0x6C,0x04,0x03,0xA6,0x7A,0xA0,0x04,
0x84,0x0F,0xBD,0x00,0x02,0x10,0x07,0xC9,0xFF,0xF0,0x3E,0xE8,0xD0,0xF4,0xC9,0x20,
0xF0,0x37,0x85,0x08,0xC9,0x22,0xF0,0x56,0x24,0x0F,0x70,0x2D,0xC9,0x3F,0xD0,0x04,
0xA9,0x99,0xD0,0x25,0xC9,0x30,0x90,0x04,0xC9,0x3C,0x90,0x1D,0x84,0x71,0xA0,0x00,
0x84,0x0B,0x88,0x86,0x7A,0xCA,0xC8,0xE8,0xBD,0x00,0x02,0x38,0xF9,0x9E,0xC0,0xF0,
0xF5,0xC9,0x80,0xD0,0x30,0x05,0x0B,0xA4,0x71,0xE8,0xC8,0x99,0xFB,0x01,0xB9,0xFB,
0x01,0xF0,0x36,0x38,0xE9,0x3A,0xF0,0x04,0xC9,0x49,0xD0,0x02,0x85,0x0F,0x38,0xE9,
0x55,0xD0,0x9F,0x85,0x08,0xBD,0x00,0x02,0xF0,0xDF,0xC5,0x08,0xF0,0xDB,0xC8,0x99,
0xFB,0x01,0xE8,0xD0,0xF0,0xA6,0x7A,0xE6,0x0B,0xC8,0xB9,0x9D,0xC0,0x10,0xFA,0xB9,
0x9E,0xC0,0xD0,0xB4,0xBD,0x00,0x02,0x10,0xBE,0x99,0xFD,0x01,0xC6,0x7B,0xA9,0xFF,
0x85,0x7A,0x60,0xA5,0x2B,0xA6,0x2C,0xA0,0x01,0x85,0x5F,0x86,0x60,0xB1,0x5F,0xF0,
0x1F,0xC8,0xC8,0xA5,0x15,0xD1,0x5F,0x90,0x18,0xF0,0x03,0x88,0xD0,0x09,0xA5,0x14,
0x88,0xD1,0x5F,0x90,0x0C,0xF0,0x0A,0x88,0xB1,0x5F,0xAA,0x88,0xB1,0x5F,0xB0,0xD7,
0x18,0x60,0xD0,0xFD,0xA9,0x00,0xA8,0x91,0x2B,0xC8,0x91,0x2B,0xA5,0x2B,0x18,0x69,
0x02,0x85,0x2D,0xA5,0x2C,0x69,0x00,0x85,0x2E,0x20,0x8E,0xC6,0xA9,0x00,0xD0,0x2D,
0x20,0xE7,0xFF,0xA5,0x37,0xA4,0x38,0x85,0x33,0x84,0x34,0xA5,0x2D,0xA4,0x2E,0x85,
0x2F,0x84,0x30,0x85,0x31,0x84,0x32,0x20,0x1D,0xC8,0xA2,0x19,0x86,0x16,0x68,0xA8,
0x68,0xA2,0xFA,0x9A,0x48,0x98,0x48,0xA9,0x00,0x85,0x3E,0x85,0x10,0x60,0x18,0xA5,
0x2B,0x69,0xFF,0x85,0x7A,0xA5,0x2C,0x69,0xFF,0x85,0x7B,0x60,0x90,0x06,0xF0,0x04,
0xC9,0xAB,0xD0,0xE9,0x20,0x6B,0xC9,0x20,0x13,0xC6,0x20,0x79,0x00,0xF0,0x0C,0xC9,
0xAB,0xD0,0x8E,0x20,0x73,0x00,0x20,0x6B,0xC9,0xD0,0x86,0x68,0x68,0xA5,0x14,0x05,
0x15,0xD0,0x06,0xA9,0xFF,0x85,0x14,0x85,0x15,0xA0,0x01,0x84,0x0F,0xB1,0x5F,0xF0,
0x43,0x20,0x2C,0xC8,0x20,0xD7,0xCA,0xC8,0xB1,0x5F,0xAA,0xC8,0xB1,0x5F,0xC5,0x15,
0xD0,0x04,0xE4,0x14,0xF0,0x02,0xB0,0x2C,0x84,0x49,0x20,0xCD,0xDD,0xA9,0x20,0xA4,
0x49,0x29,0x7F,0x20,0x47,0xCB,0xC9,0x22,0xD0,0x06,0xA5,0x0F,0x49,0xFF,0x85,0x0F,
0xC8,0xF0,0x11,0xB1,0x5F,0xD0,0x10,0xA8,0xB1,0x5F,0xAA,0xC8,0xB1,0x5F,0x86,0x5F,
0x85,0x60,0xD0,0xB5,0x4C,0x74,0xC4,0x6C,0x06,0x03,0x10,0xD7,0xC9,0xFF,0xF0,0xD3,
0x24,0x0F,0x30,0xCF,0x38,0xE9,0x7F,0xAA,0x84,0x49,0xA0,0xFF,0xCA,0xF0,0x08,0xC8,
0xB9,0x9E,0xC0,0x10,0xFA,0x30,0xF5,0xC8,0xB9,0x9E,0xC0,0x30,0xB2,0x20,0x47,0xCB,
0xD0,0xF5,0xA9,0x80,0x85,0x10,0x20,0xA5,0xC9,0x20,0x8A,0xC3,0xD0,0x05,0x8A,0x69,
0x0F,0xAA,0x9A,0x68,0x68,0xA9,0x09,0x20,0xFB,0xC3,0x20,0x06,0xC9,0x18,0x98,0x65,
0x7A,0x48,0xA5,0x7B,0x69,0x00,0x48,0xA5,0x3A,0x48,0xA5,0x39,0x48,0xA9,0xA4,0x20,
0xFF,0xCE,0x20,0x8D,0xCD,0x20,0x8A,0xCD,0xA5,0x66,0x09,0x7F,0x25,0x62,0x85,0x62,
0xA9,0x8B,0xA0,0xC7,0x85,0x22,0x84,0x23,0x4C,0x43,0xCE,0xA9,0xBC,0xA0,0xD9,0x20,
0xA2,0xDB,0x20,0x79,0x00,0xC9,0xA9,0xD0,0x06,0x20,0x73,0x00,0x20,0x8A,0xCD,0x20,
0x2B,0xDC,0x20,0x38,0xCE,0xA5,0x4A,0x48,0xA5,0x49,0x48,0xA9,0x81,0x48,0x20,0x2C,
0xC8,0xA5,0x7A,0xA4,0x7B,0xC0,0x02,0xEA,0xF0,0x04,0x85,0x3D,0x84,0x3E,0xA0,0x00,
0xB1,0x7A,0xD0,0x43,0xA0,0x02,0xB1,0x7A,0x18,0xD0,0x03,0x4C,0x4B,0xC8,0xC8,0xB1,
0x7A,0x85,0x39,0xC8,0xB1,0x7A,0x85,0x3A,0x98,0x65,0x7A,0x85,0x7A,0x90,0x02,0xE6,
0x7B,0x6C,0x08,0x03,0x20,0x73,0x00,0x20,0xED,0xC7,0x4C,0xAE,0xC7,0xF0,0x3C,0xE9,
0x80,0x90,0x11,0xC9,0x23,0xB0,0x17,0x0A,0xA8,0xB9,0x0D,0xC0,0x48,0xB9,0x0C,0xC0,
0x48,0x4C,0x73,0x00,0x4C,0xA5,0xC9,0xC9,0x3A,0xF0,0xD6,0x4C,0x08,0xCF,0xC9,0x4B,
0xD0,0xF9,0x20,0x73,0x00,0xA9,0xA4,0x20,0xFF,0xCE,0x4C,0xA0,0xC8,0x38,0xA5,0x2B,
0xE9,0x01,0xA4,0x2C,0xB0,0x01,0x88,0x85,0x41,0x84,0x42,0x60,0x20,0xE1,0xFF,0xB0,
0x01,0x18,0xD0,0x3C,0xA5,0x7A,0xA4,0x7B,0xA6,0x3A,0xE8,0xF0,0x0C,0x85,0x3D,0x84,
0x3E,0xA5,0x39,0xA4,0x3A,0x85,0x3B,0x84,0x3C,0x68,0x68,0xA9,0x81,0xA0,0xC3,0x90,
0x03,0x4C,0x69,0xC4,0x4C,0x74,0xC4,0xD0,0x17,0xA2,0x1A,0xA4,0x3E,0xD0,0x03,0x4C,
0x37,0xC4,0xA5,0x3D,0x85,0x7A,0x84,0x7B,0xA5,0x3B,0xA4,0x3C,0x85,0x39,0x84,0x3A,
0x60,0x08,0xA9,0x00,0x20,0x90,0xFF,0x28,0xD0,0x03,0x4C,0x59,0xC6,0x20,0x60,0xC6,
0x4C,0x97,0xC8,0xA9,0x03,0x20,0xFB,0xC3,0xA5,0x7B,0x48,0xA5,0x7A,0x48,0xA5,0x3A,
0x48,0xA5,0x39,0x48,0xA9,0x8D,0x48,0x20,0x79,0x00,0x20,0xA0,0xC8,0x4C,0xAE,0xC7,
0x20,0x6B,0xC9,0x20,0x09,0xC9,0x38,0xA5,0x39,0xE5,0x14,0xA5,0x3A,0xE5,0x15,0xB0,
0x0B,0x98,0x38,0x65,0x7A,0xA6,0x7B,0x90,0x07,0xE8,0xB0,0x04,0xA5,0x2B,0xA6,0x2C,
0x20,0x17,0xC6,0x90,0x1E,0xA5,0x5F,0xE9,0x01,0x85,0x7A,0xA5,0x60,0xE9,0x00,0x85,
0x7B,0x60,0xD0,0xFD,0xA9,0xFF,0x85,0x4A,0x20,0x8A,0xC3,0x9A,0xC9,0x8D,0xF0,0x0B,
0xA2,0x0C,0x2C,0xA2,0x11,0x4C,0x37,0xC4,0x4C,0x08,0xCF,0x68,0x68,0x85,0x39,0x68,
0x85,0x3A,0x68,0x85,0x7A,0x68,0x85,0x7B,0x20,0x06,0xC9,0x98,0x18,0x65,0x7A,0x85,
0x7A,0x90,0x02,0xE6,0x7B,0x60,0xA2,0x3A,0x2C,0xA2,0x00,0x86,0x07,0xA0,0x00,0x84,
0x08,0xA5,0x08,0xA6,0x07,0x85,0x07,0x86,0x08,0xB1,0x7A,0xF0,0xE8,0xC5,0x08,0xF0,
0xE4,0xC8,0xC9,0x22,0xD0,0xF3,0xF0,0xE9,0x20,0x9E,0xCD,0x20,0x79,0x00,0xC9,0x89,
0xF0,0x05,0xA9,0xA7,0x20,0xFF,0xCE,0xA5,0x61,0xD0,0x05,0x20,0x09,0xC9,0xF0,0xBB,
0x20,0x79,0x00,0xB0,0x03,0x4C,0xA0,0xC8,0x4C,0xED,0xC7,0x20,0x9E,0xD7,0x48,0xC9,
0x8D,0xF0,0x04,0xC9,0x89,0xD0,0x91,0xC6,0x65,0xD0,0x04,0x68,0x4C,0xEF,0xC7,0x20,
0x73,0x00,0x20,0x6B,0xC9,0xC9,0x2C,0xF0,0xEE,0x68,0x60,0xA2,0x00,0x86,0x14,0x86,
0x15,0xB0,0xF7,0xE9,0x2F,0x85,0x07,0xA5,0x15,0x85,0x22,0xC9,0x19,0xB0,0xD4,0xA5,
0x14,0x0A,0x26,0x22,0x0A,0x26,0x22,0x65,0x14,0x85,0x14,0xA5,0x22,0x65,0x15,0x85,
0x15,0x06,0x14,0x26,0x15,0xA5,0x14,0x65,0x07,0x85,0x14,0x90,0x02,0xE6,0x15,0x20,
0x73,0x00,0x4C,0x71,0xC9,0x20,0x8B,0xD0,0x85,0x49,0x84,0x4A,0xA9,0xB2,0x20,0xFF,
0xCE,0xA5,0x0E,0x48,0xA5,0x0D,0x48,0x20,0x9E,0xCD,0x68,0x2A,0x20,0x90,0xCD,0xD0,
0x18,0x68,0x10,0x12,0x20,0x1B,0xDC,0x20,0xBF,0xD1,0xA0,0x00,0xA5,0x64,0x91,0x49,
0xC8,0xA5,0x65,0x91,0x49,0x60,0x4C,0xD0,0xDB,0x68,0xA4,0x4A,0xC0,0xDF,0xD0,0x4C,
0x20,0xA6,0xD6,0xC9,0x06,0xD0,0x3D,0xA0,0x00,0x84,0x61,0x84,0x66,0x84,0x71,0x20,
0x1D,0xCA,0x20,0xE2,0xDA,0xE6,0x71,0xA4,0x71,0x20,0x1D,0xCA,0x20,0x0C,0xDC,0xAA,
0xF0,0x05,0xE8,0x8A,0x20,0xED,0xDA,0xA4,0x71,0xC8,0xC0,0x06,0xD0,0xDF,0x20,0xE2,
0xDA,0x20,0x9B,0xDC,0xA6,0x64,0xA4,0x63,0xA5,0x65,0x4C,0xDB,0xFF,0xB1,0x22,0x20,
0x80,0x00,0x90,0x03,0x4C,0x48,0xD2,0xE9,0x2F,0x4C,0x7E,0xDD,0xA0,0x02,0xB1,0x64,
0xC5,0x34,0x90,0x17,0xD0,0x07,0x88,0xB1,0x64,0xC5,0x33,0x90,0x0E,0xA4,0x65,0xC4,
0x2E,0x90,0x08,0xD0,0x0D,0xA5,0x64,0xC5,0x2D,0xB0,0x07,0xA5,0x64,0xA4,0x65,0x4C,
0x68,0xCA,0xA0,0x00,0xB1,0x64,0x20,0x75,0xD4,0xA5,0x50,0xA4,0x51,0x85,0x6F,0x84,
0x70,0x20,0x7A,0xD6,0xA9,0x61,0xA0,0x00,0x85,0x50,0x84,0x51,0x20,0xDB,0xD6,0xA0,
0x00,0xB1,0x50,0x91,0x49,0xC8,0xB1,0x50,0x91,0x49,0xC8,0xB1,0x50,0x91,0x49,0x60,
0x20,0x86,0xCA,0x4C,0xB5,0xCB,0x20,0x9E,0xD7,0xF0,0x05,0xA9,0x2C,0x20,0xFF,0xCE,
0x08,0x86,0x13,0x20,0x15,0xE1,0x28,0x4C,0xA0,0xCA,0x20,0x21,0xCB,0x20,0x79,0x00,
0xF0,0x35,0xF0,0x43,0xC9,0xA3,0xF0,0x50,0xC9,0xA6,0x18,0xF0,0x4B,0xC9,0x2C,0xF0,
0x37,0xC9,0x3B,0xF0,0x5E,0x20,0x9E,0xCD,0x24,0x0D,0x30,0xDE,0x20,0xDD,0xDD,0x20,
0x87,0xD4,0x20,0x21,0xCB,0x20,0x3B,0xCB,0xD0,0xD3,0xA9,0x00,0x9D,0x00,0x02,0xA2,
0xFF,0xA0,0x01,0xA5,0x13,0xD0,0x10,0xA9,0x0D,0x20,0x47,0xCB,0x24,0x13,0x10,0x05,
0xA9,0x0A,0x20,0x47,0xCB,0x49,0xFF,0x60,0x38,0x20,0xF0,0xFF,0x98,0x38,0xE9,0x0B,
0xB0,0xFC,0x49,0xFF,0x69,0x01,0xD0,0x16,0x08,0x38,0x20,0xF0,0xFF,0x84,0x09,0x20,
0x9B,0xD7,0xC9,0x29,0xD0,0x59,0x28,0x90,0x06,0x8A,0xE5,0x09,0x90,0x05,0xAA,0xE8,
0xCA,0xD0,0x06,0x20,0x73,0x00,0x4C,0xA2,0xCA,0x20,0x3B,0xCB,0xD0,0xF2,0x20,0x87,
0xD4,0x20,0xA6,0xD6,0xAA,0xA0,0x00,0xE8,0xCA,0xF0,0xBC,0xB1,0x22,0x20,0x47,0xCB,
0xC8,0xC9,0x0D,0xD0,0xF3,0x20,0xE5,0xCA,0x4C,0x28,0xCB,0xA5,0x13,0xF0,0x03,0xA9,
0x20,0x2C,0xA9,0x1D,0x2C,0xA9,0x3F,0x20,0x09,0xE1,0x29,0xFF,0x60,0xA5,0x11,0xF0,
0x11,0x30,0x04,0xA0,0xFF,0xD0,0x04,0xA5,0x3F,0xA4,0x40,0x85,0x39,0x84,0x3A,0x4C,
0x08,0xCF,0xA5,0x13,0xF0,0x05,0xA2,0x18,0x4C,0x37,0xC4,0xA9,0x0C,0xA0,0xCD,0x20,
0x1E,0xCB,0xA5,0x3D,0xA4,0x3E,0x85,0x7A,0x84,0x7B,0x60,0x20,0xA6,0xD3,0xC9,0x23,
0xD0,0x10,0x20,0x73,0x00,0x20,0x9E,0xD7,0xA9,0x2C,0x20,0xFF,0xCE,0x86,0x13,0x20,
0x1B,0xE1,0xA2,0x01,0xA0,0x02,0xA9,0x00,0x8D,0x01,0x02,0xA9,0x40,0x20,0x0F,0xCC,
0xA6,0x13,0xD0,0x13,0x60,0x20,0x9E,0xD7,0xA9,0x2C,0x20,0xFF,0xCE,0x86,0x13,0x20,
0x1B,0xE1,0x20,0xCE,0xCB,0xA5,0x13,0x20,0xCC,0xFF,0xA2,0x00,0x86,0x13,0x60,0xC9,
0x22,0xD0,0x0B,0x20,0xBD,0xCE,0xA9,0x3B,0x20,0xFF,0xCE,0x20,0x21,0xCB,0x20,0xA6,
0xD3,0xA9,0x2C,0x8D,0xFF,0x01,0x20,0xF9,0xCB,0xA5,0x13,0xF0,0x0D,0x20,0xB7,0xFF,
0x29,0x02,0xF0,0x06,0x20,0xB5,0xCB,0x4C,0xF8,0xC8,0xAD,0x00,0x02,0xD0,0x1E,0xA5,
0x13,0xD0,0xE3,0x20,0x06,0xC9,0x4C,0xFB,0xC8,0xA5,0x13,0xD0,0x06,0x20,0x45,0xCB,
0x20,0x3B,0xCB,0x4C,0x60,0xC5,0xA6,0x41,0xA4,0x42,0xA9,0x98,0x2C,0xA9,0x00,0x85,
0x11,0x86,0x43,0x84,0x44,0x20,0x8B,0xD0,0x85,0x49,0x84,0x4A,0xA5,0x7A,0xA4,0x7B,
0x85,0x4B,0x84,0x4C,0xA6,0x43,0xA4,0x44,0x86,0x7A,0x84,0x7B,0x20,0x79,0x00,0xD0,
0x20,0x24,0x11,0x50,0x0C,0x20,0x21,0xE1,0x8D,0x00,0x02,0xA2,0xFF,0xA0,0x01,0xD0,
0x0C,0x30,0x75,0xA5,0x13,0xD0,0x03,0x20,0x45,0xCB,0x20,0xF9,0xCB,0x86,0x7A,0x84,
0x7B,0x20,0x73,0x00,0x24,0x0D,0x10,0x31,0x24,0x11,0x50,0x09,0xE8,0x86,0x7A,0xA9,
0x00,0x85,0x07,0xF0,0x0C,0x85,0x07,0xC9,0x22,0xF0,0x07,0xA9,0x3A,0x85,0x07,0xA9,
0x2C,0x18,0x85,0x08,0xA5,0x7A,0xA4,0x7B,0x69,0x00,0x90,0x01,0xC8,0x20,0x8D,0xD4,
0x20,0xE2,0xD7,0x20,0xDA,0xC9,0x4C,0x91,0xCC,0x20,0xF3,0xDC,0xA5,0x0E,0x20,0xC2,
0xC9,0x20,0x79,0x00,0xF0,0x07,0xC9,0x2C,0xF0,0x03,0x4C,0x4D,0xCB,0xA5,0x7A,0xA4,
0x7B,0x85,0x43,0x84,0x44,0xA5,0x4B,0xA4,0x4C,0x85,0x7A,0x84,0x7B,0x20,0x79,0x00,
0xF0,0x2D,0x20,0xFD,0xCE,0x4C,0x15,0xCC,0x20,0x06,0xC9,0xC8,0xAA,0xD0,0x12,0xA2,
0x0D,0xC8,0xB1,0x7A,0xF0,0x6C,0xC8,0xB1,0x7A,0x85,0x3F,0xC8,0xB1,0x7A,0xC8,0x85,
0x40,0x20,0xFB,0xC8,0x20,0x79,0x00,0xAA,0xE0,0x83,0xD0,0xDC,0x4C,0x51,0xCC,0xA5,
0x43,0xA4,0x44,0xA6,0x11,0x10,0x03,0x4C,0x27,0xC8,0xA0,0x00,0xB1,0x43,0xF0,0x0B,
0xA5,0x13,0xD0,0x07,0xA9,0xFC,0xA0,0xCC,0x4C,0x1E,0xCB,0x60,0x3F,0x45,0x58,0x54,
0x52,0x41,0x20,0x49,0x47,0x4E,0x4F,0x52,0x45,0x44,0x0D,0x00,0x3F,0x52,0x45,0x44,
0x4F,0x20,0x46,0x52,0x4F,0x4D,0x20,0x53,0x54,0x41,0x52,0x54,0x0D,0x00,0xD0,0x04,
0xA0,0x00,0xF0,0x03,0x20,0x8B,0xD0,0x85,0x49,0x84,0x4A,0x20,0x8A,0xC3,0xF0,0x05,
0xA2,0x0A,0x4C,0x37,0xC4,0x9A,0x8A,0x18,0x69,0x04,0x48,0x69,0x06,0x85,0x24,0x68,
0xA0,0x01,0x20,0xA2,0xDB,0xBA,0xBD,0x09,0x01,0x85,0x66,0xA5,0x49,0xA4,0x4A,0x20,
0x67,0xD8,0x20,0xD0,0xDB,0xA0,0x01,0x20,0x5D,0xDC,0xBA,0x38,0xFD,0x09,0x01,0xF0,
0x17,0xBD,0x0F,0x01,0x85,0x39,0xBD,0x10,0x01,0x85,0x3A,0xBD,0x12,0x01,0x85,0x7A,
0xBD,0x11,0x01,0x85,0x7B,0x4C,0xAE,0xC7,0x8A,0x69,0x11,0xAA,0x9A,0x20,0x79,0x00,
0xC9,0x2C,0xD0,0xF1,0x20,0x73,0x00,0x20,0x24,0xCD,0x20,0x9E,0xCD,0x18,0x24,0x38,
0x24,0x0D,0x30,0x03,0xB0,0x03,0x60,0xB0,0xFD,0xA2,0x16,0x4C,0x37,0xC4,0xA6,0x7A,
0xD0,0x02,0xC6,0x7B,0xC6,0x7A,0xA2,0x00,0x24,0x48,0x8A,0x48,0xA9,0x01,0x20,0xFB,
0xC3,0x20,0x83,0xCE,0xA9,0x00,0x85,0x4D,0x20,0x79,0x00,0x38,0xE9,0xB1,0x90,0x17,
0xC9,0x03,0xB0,0x13,0xC9,0x01,0x2A,0x49,0x01,0x45,0x4D,0xC5,0x4D,0x90,0x61,0x85,
0x4D,0x20,0x73,0x00,0x4C,0xBB,0xCD,0xA6,0x4D,0xD0,0x2C,0xB0,0x7B,0x69,0x07,0x90,
0x77,0x65,0x0D,0xD0,0x03,0x4C,0x3D,0xD6,0x69,0xFF,0x85,0x22,0x0A,0x65,0x22,0xA8,
0x68,0xD9,0x80,0xC0,0xB0,0x67,0x20,0x8D,0xCD,0x48,0x20,0x20,0xCE,0x68,0xA4,0x4B,
0x10,0x17,0xAA,0xF0,0x56,0xD0,0x5F,0x46,0x0D,0x8A,0x2A,0xA6,0x7A,0xD0,0x02,0xC6,
0x7B,0xC6,0x7A,0xA0,0x1B,0x85,0x4D,0xD0,0xD7,0xD9,0x80,0xC0,0xB0,0x48,0x90,0xD9,
0xB9,0x82,0xC0,0x48,0xB9,0x81,0xC0,0x48,0x20,0x33,0xCE,0xA5,0x4D,0x4C,0xA9,0xCD,
0x4C,0x08,0xCF,0xA5,0x66,0xBE,0x80,0xC0,0xA8,0x68,0x85,0x22,0xE6,0x22,0x68,0x85,
0x23,0x98,0x48,0x20,0x1B,0xDC,0xA5,0x65,0x48,0xA5,0x64,0x48,0xA5,0x63,0x48,0xA5,
0x62,0x48,0xA5,0x61,0x48,0x6C,0x22,0x00,0xA0,0xFF,0x68,0xF0,0x23,0xC9,0x64,0xF0,
0x03,0x20,0x8D,0xCD,0x84,0x4B,0x68,0x4A,0x85,0x12,0x68,0x85,0x69,0x68,0x85,0x6A,
0x68,0x85,0x6B,0x68,0x85,0x6C,0x68,0x85,0x6D,0x68,0x85,0x6E,0x45,0x66,0x85,0x6F,
0xA5,0x61,0x60,0x6C,0x0A,0x03,0xA9,0x00,0x85,0x0D,0x20,0x73,0x00,0xB0,0x03,0x4C,
0xF3,0xDC,0x20,0x13,0xD1,0x90,0x03,0x4C,0x28,0xCF,0xC9,0xFF,0xD0,0x0F,0xA9,0xA8,
0xA0,0xCE,0x20,0xA2,0xDB,0x4C,0x73,0x00,0x82,0x49,0x0F,0xDA,0xA1,0xC9,0x2E,0xF0,
0xDE,0xC9,0xAB,0xF0,0x58,0xC9,0xAA,0xF0,0xD1,0xC9,0x22,0xD0,0x0F,0xA5,0x7A,0xA4,
0x7B,0x69,0x00,0x90,0x01,0xC8,0x20,0x87,0xD4,0x4C,0xE2,0xD7,0xC9,0xA8,0xD0,0x13,
0xA0,0x18,0xD0,0x3B,0x20,0xBF,0xD1,0xA5,0x65,0x49,0xFF,0xA8,0xA5,0x64,0x49,0xFF,
0x4C,0x91,0xD3,0xC9,0xA5,0xD0,0x03,0x4C,0xF4,0xD3,0xC9,0xB4,0x90,0x03,0x4C,0xA7,
0xCF,0x20,0xFA,0xCE,0x20,0x9E,0xCD,0xA9,0x29,0x2C,0xA9,0x28,0x2C,0xA9,0x2C,0xA0,
0x00,0xD1,0x7A,0xD0,0x03,0x4C,0x73,0x00,0xA2,0x0B,0x4C,0x37,0xC4,0xA0,0x15,0x68,
0x68,0x4C,0xFA,0xCD,0x38,0xA5,0x64,0xE9,0x00,0xA5,0x65,0xE9,0xC0,0x90,0x08,0xA9,
0x87,0xE5,0x64,0xA9,0xE3,0xE5,0x65,0x60,0x20,0x8B,0xD0,0x85,0x64,0x84,0x65,0xA6,
0x45,0xA4,0x46,0xA5,0x0D,0xF0,0x26,0xA9,0x00,0x85,0x70,0x20,0x14,0xCF,0x90,0x1C,
0xE0,0x54,0xD0,0x18,0xC0,0xC9,0xD0,0x14,0x20,0x84,0xCF,0x84,0x5E,0x88,0x84,0x71,
0xA0,0x06,0x84,0x5D,0xA0,0x24,0x20,0x68,0xDE,0x4C,0x6F,0xD4,0x60,0x24,0x0E,0x10,
0x0D,0xA0,0x00,0xB1,0x64,0xAA,0xC8,0xB1,0x64,0xA8,0x8A,0x4C,0x91,0xD3,0x20,0x14,
0xCF,0x90,0x2D,0xE0,0x54,0xD0,0x1B,0xC0,0x49,0xD0,0x25,0x20,0x84,0xCF,0x98,0xA2,
0xA0,0x4C,0x4F,0xDC,0x20,0xDE,0xFF,0x86,0x64,0x84,0x63,0x85,0x65,0xA0,0x00,0x84,
0x62,0x60,0xE0,0x53,0xD0,0x0A,0xC0,0x54,0xD0,0x06,0x20,0xB7,0xFF,0x4C,0x3C,0xDC,
0xA5,0x64,0xA4,0x65,0x4C,0xA2,0xDB,0x0A,0x48,0xAA,0x20,0x73,0x00,0xE0,0x8F,0x90,
0x20,0x20,0xFA,0xCE,0x20,0x9E,0xCD,0x20,0xFD,0xCE,0x20,0x8F,0xCD,0x68,0xAA,0xA5,
0x65,0x48,0xA5,0x64,0x48,0x8A,0x48,0x20,0x9E,0xD7,0x68,0xA8,0x8A,0x48,0x4C,0xD6,
0xCF,0x20,0xF1,0xCE,0x68,0xA8,0xB9,0xEA,0xBF,0x85,0x55,0xB9,0xEB,0xBF,0x85,0x56,
0x20,0x54,0x00,0x4C,0x8D,0xCD,0xA0,0xFF,0x2C,0xA0,0x00,0x84,0x0B,0x20,0xBF,0xD1,
0xA5,0x64,0x45,0x0B,0x85,0x07,0xA5,0x65,0x45,0x0B,0x85,0x08,0x20,0xFC,0xDB,0x20,
0xBF,0xD1,0xA5,0x65,0x45,0x0B,0x25,0x08,0x45,0x0B,0xA8,0xA5,0x64,0x45,0x0B,0x25,
0x07,0x45,0x0B,0x4C,0x91,0xD3,0x20,0x90,0xCD,0xB0,0x13,0xA5,0x6E,0x09,0x7F,0x25,
0x6A,0x85,0x6A,0xA9,0x69,0xA0,0x00,0x20,0x5B,0xDC,0xAA,0x4C,0x61,0xD0,0xA9,0x00,
0x85,0x0D,0xC6,0x4D,0x20,0xA6,0xD6,0x85,0x61,0x86,0x62,0x84,0x63,0xA5,0x6C,0xA4,
0x6D,0x20,0xAA,0xD6,0x86,0x6C,0x84,0x6D,0xAA,0x38,0xE5,0x61,0xF0,0x08,0xA9,0x01,
0x90,0x04,0xA6,0x61,0xA9,0xFF,0x85,0x66,0xA0,0xFF,0xE8,0xC8,0xCA,0xD0,0x07,0xA6,
0x66,0x30,0x0F,0x18,0x90,0x0C,0xB1,0x6C,0xD1,0x62,0xF0,0xEF,0xA2,0xFF,0xB0,0x02,
0xA2,0x01,0xE8,0x8A,0x2A,0x25,0x12,0xF0,0x02,0xA9,0xFF,0x4C,0x3C,0xDC,0x20,0xFD,
0xCE,0xAA,0x20,0x90,0xD0,0x20,0x79,0x00,0xD0,0xF4,0x60,0xA2,0x00,0x20,0x79,0x00,
0x86,0x0C,0x85,0x45,0x20,0x79,0x00,0x20,0x13,0xD1,0xB0,0x03,0x4C,0x08,0xCF,0xA2,
0x00,0x86,0x0D,0x86,0x0E,0x20,0x73,0x00,0x90,0x05,0x20,0x13,0xD1,0x90,0x0B,0xAA,
0x20,0x73,0x00,0x90,0xFB,0x20,0x13,0xD1,0xB0,0xF6,0xC9,0x24,0xD0,0x06,0xA9,0xFF,
0x85,0x0D,0xD0,0x10,0xC9,0x25,0xD0,0x13,0xA5,0x10,0xD0,0xD0,0xA9,0x80,0x85,0x0E,
0x05,0x45,0x85,0x45,0x8A,0x09,0x80,0xAA,0x20,0x73,0x00,0x86,0x46,0x38,0x05,0x10,
0xE9,0x28,0xD0,0x03,0x4C,0xD1,0xD1,0xA0,0x00,0x84,0x10,0xA5,0x2D,0xA6,0x2E,0x86,
0x60,0x85,0x5F,0xE4,0x30,0xD0,0x04,0xC5,0x2F,0xF0,0x22,0xA5,0x45,0xD1,0x5F,0xD0,
0x08,0xA5,0x46,0xC8,0xD1,0x5F,0xF0,0x7D,0x88,0x18,0xA5,0x5F,0x69,0x07,0x90,0xE1,
0xE8,0xD0,0xDC,0xC9,0x41,0x90,0x05,0xE9,0x5B,0x38,0xE9,0xA5,0x60,0x68,0x48,0xC9,
0x2A,0xD0,0x05,0xA9,0x13,0xA0,0xDF,0x60,0xA5,0x45,0xA4,0x46,0xC9,0x54,0xD0,0x0B,
0xC0,0xC9,0xF0,0xEF,0xC0,0x49,0xD0,0x03,0x4C,0x08,0xCF,0xC9,0x53,0xD0,0x04,0xC0,
0x54,0xF0,0xF5,0xA5,0x2F,0xA4,0x30,0x85,0x5F,0x84,0x60,0xA5,0x31,0xA4,0x32,0x85,
0x5A,0x84,0x5B,0x18,0x69,0x07,0x90,0x01,0xC8,0x85,0x58,0x84,0x59,0x20,0xB8,0xC3,
0xA5,0x58,0xA4,0x59,0xC8,0x85,0x2F,0x84,0x30,0xA0,0x00,0xA5,0x45,0x91,0x5F,0xC8,
0xA5,0x46,0x91,0x5F,0xA9,0x00,0xC8,0x91,0x5F,0xC8,0x91,0x5F,0xC8,0x91,0x5F,0xC8,
0x91,0x5F,0xC8,0x91,0x5F,0xA5,0x5F,0x18,0x69,0x02,0xA4,0x60,0x90,0x01,0xC8,0x85,
0x47,0x84,0x48,0x60,0xA5,0x0B,0x0A,0x69,0x05,0x65,0x5F,0xA4,0x60,0x90,0x01,0xC8,
0x85,0x58,0x84,0x59,0x60,0x90,0x80,0x00,0x00,0x00,0x20,0xBF,0xD1,0xA5,0x64,0xA4,
0x65,0x60,0x20,0x73,0x00,0x20,0x9E,0xCD,0x20,0x8D,0xCD,0xA5,0x66,0x30,0x0D,0xA5,
0x61,0xC9,0x90,0x90,0x09,0xA9,0xA5,0xA0,0xD1,0x20,0x5B,0xDC,0xD0,0x7A,0x4C,0x9B,
0xDC,0xA5,0x0C,0x05,0x0E,0x48,0xA5,0x0D,0x48,0xA0,0x00,0x98,0x48,0xA5,0x46,0x48,
0xA5,0x45,0x48,0x20,0xB2,0xD1,0x68,0x85,0x45,0x68,0x85,0x46,0x68,0xA8,0xBA,0xBD,
0x02,0x01,0x48,0xBD,0x01,0x01,0x48,0xA5,0x64,0x9D,0x02,0x01,0xA5,0x65,0x9D,0x01,
0x01,0xC8,0x20,0x79,0x00,0xC9,0x2C,0xF0,0xD2,0x84,0x0B,0x20,0xF7,0xCE,0x68,0x85,
0x0D,0x68,0x85,0x0E,0x29,0x7F,0x85,0x0C,0xA6,0x2F,0xA5,0x30,0x86,0x5F,0x85,0x60,
0xC5,0x32,0xD0,0x04,0xE4,0x31,0xF0,0x39,0xA0,0x00,0xB1,0x5F,0xC8,0xC5,0x45,0xD0,
0x06,0xA5,0x46,0xD1,0x5F,0xF0,0x16,0xC8,0xB1,0x5F,0x18,0x65,0x5F,0xAA,0xC8,0xB1,
0x5F,0x65,0x60,0x90,0xD7,0xA2,0x12,0x2C,0xA2,0x0E,0x4C,0x37,0xC4,0xA2,0x13,0xA5,
0x0C,0xD0,0xF7,0x20,0x94,0xD1,0xA5,0x0B,0xA0,0x04,0xD1,0x5F,0xD0,0xE7,0x4C,0xEA,
0xD2,0x20,0x94,0xD1,0x20,0x08,0xC4,0xA0,0x00,0x84,0x72,0xA2,0x05,0xA5,0x45,0x91,
0x5F,0x10,0x01,0xCA,0xC8,0xA5,0x46,0x91,0x5F,0x10,0x02,0xCA,0xCA,0x86,0x71,0xA5,
0x0B,0xC8,0xC8,0xC8,0x91,0x5F,0xA2,0x0B,0xA9,0x00,0x24,0x0C,0x50,0x08,0x68,0x18,
0x69,0x01,0xAA,0x68,0x69,0x00,0xC8,0x91,0x5F,0xC8,0x8A,0x91,0x5F,0x20,0x4C,0xD3,
0x86,0x71,0x85,0x72,0xA4,0x22,0xC6,0x0B,0xD0,0xDC,0x65,0x59,0xB0,0x5D,0x85,0x59,
0xA8,0x8A,0x65,0x58,0x90,0x03,0xC8,0xF0,0x52,0x20,0x08,0xC4,0x85,0x31,0x84,0x32,
0xA9,0x00,0xE6,0x72,0xA4,0x71,0xF0,0x05,0x88,0x91,0x58,0xD0,0xFB,0xC6,0x59,0xC6,
0x72,0xD0,0xF5,0xE6,0x59,0x38,0xA5,0x31,0xE5,0x5F,0xA0,0x02,0x91,0x5F,0xA5,0x32,
0xC8,0xE5,0x60,0x91,0x5F,0xA5,0x0C,0xD0,0x62,0xC8,0xB1,0x5F,0x85,0x0B,0xA9,0x00,
0x85,0x71,0x85,0x72,0xC8,0x68,0xAA,0x85,0x64,0x68,0x85,0x65,0xD1,0x5F,0x90,0x0E,
0xD0,0x06,0xC8,0x8A,0xD1,0x5F,0x90,0x07,0x4C,0x45,0xD2,0x4C,0x35,0xC4,0xC8,0xA5,
0x72,0x05,0x71,0x18,0xF0,0x0A,0x20,0x4C,0xD3,0x8A,0x65,0x64,0xAA,0x98,0xA4,0x22,
0x65,0x65,0x86,0x71,0xC6,0x0B,0xD0,0xCA,0x85,0x72,0xA2,0x05,0xA5,0x45,0x10,0x01,
0xCA,0xA5,0x46,0x10,0x02,0xCA,0xCA,0x86,0x28,0xA9,0x00,0x20,0x55,0xD3,0x8A,0x65,
0x58,0x85,0x47,0x98,0x65,0x59,0x85,0x48,0xA8,0xA5,0x47,0x60,0x84,0x22,0xB1,0x5F,
0x85,0x28,0x88,0xB1,0x5F,0x85,0x29,0xA9,0x10,0x85,0x5D,0xA2,0x00,0xA0,0x00,0x8A,
0x0A,0xAA,0x98,0x2A,0xA8,0xB0,0xA4,0x06,0x71,0x26,0x72,0x90,0x0B,0x18,0x8A,0x65,
0x28,0xAA,0x98,0x65,0x29,0xA8,0xB0,0x93,0xC6,0x5D,0xD0,0xE3,0x60,0xA5,0x0D,0xF0,
0x03,0x20,0xA6,0xD6,0x20,0x26,0xD5,0x38,0xA5,0x33,0xE5,0x31,0xA8,0xA5,0x34,0xE5,
0x32,0xA2,0x00,0x86,0x0D,0x85,0x62,0x84,0x63,0xA2,0x90,0x4C,0x44,0xDC,0x38,0x20,
0xF0,0xFF,0xA9,0x00,0xF0,0xEB,0xA6,0x3A,0xE8,0xD0,0xA0,0xA2,0x15,0x2C,0xA2,0x1B,
0x4C,0x37,0xC4,0x20,0xE1,0xD3,0x20,0xA6,0xD3,0x20,0xFA,0xCE,0xA9,0x80,0x85,0x10,
0x20,0x8B,0xD0,0x20,0x8D,0xCD,0x20,0xF7,0xCE,0xA9,0xB2,0x20,0xFF,0xCE,0x48,0xA5,
0x48,0x48,0xA5,0x47,0x48,0xA5,0x7B,0x48,0xA5,0x7A,0x48,0x20,0xF8,0xC8,0x4C,0x4F,
0xD4,0xA9,0xA5,0x20,0xFF,0xCE,0x09,0x80,0x85,0x10,0x20,0x92,0xD0,0x85,0x4E,0x84,
0x4F,0x4C,0x8D,0xCD,0x20,0xE1,0xD3,0xA5,0x4F,0x48,0xA5,0x4E,0x48,0x20,0xF1,0xCE,
0x20,0x8D,0xCD,0x68,0x85,0x4E,0x68,0x85,0x4F,0xA0,0x02,0xB1,0x4E,0x85,0x47,0xAA,
0xC8,0xB1,0x4E,0xF0,0x99,0x85,0x48,0xC8,0xB1,0x47,0x48,0x88,0x10,0xFA,0xA4,0x48,
0x20,0xD4,0xDB,0xA5,0x7B,0x48,0xA5,0x7A,0x48,0xB1,0x4E,0x85,0x7A,0xC8,0xB1,0x4E,
0x85,0x7B,0xA5,0x48,0x48,0xA5,0x47,0x48,0x20,0x8A,0xCD,0x68,0x85,0x4E,0x68,0x85,
0x4F,0x20,0x79,0x00,0xF0,0x03,0x4C,0x08,0xCF,0x68,0x85,0x7A,0x68,0x85,0x7B,0xA0,
0x00,0x68,0x91,0x4E,0x68,0xC8,0x91,0x4E,0x68,0xC8,0x91,0x4E,0x68,0xC8,0x91,0x4E,
0x68,0xC8,0x91,0x4E,0x60,0x20,0x8D,0xCD,0xA0,0x00,0x20,0xDF,0xDD,0x68,0x68,0xA9,
0xFF,0xA0,0x00,0xF0,0x12,0xA6,0x64,0xA4,0x65,0x86,0x50,0x84,0x51,0x20,0xF4,0xD4,
0x86,0x62,0x84,0x63,0x85,0x61,0x60,0xA2,0x22,0x86,0x07,0x86,0x08,0x85,0x6F,0x84,
0x70,0x85,0x62,0x84,0x63,0xA0,0xFF,0xC8,0xB1,0x6F,0xF0,0x0C,0xC5,0x07,0xF0,0x04,
0xC5,0x08,0xD0,0xF3,0xC9,0x22,0xF0,0x01,0x18,0x84,0x61,0x98,0x65,0x6F,0x85,0x71,
0xA6,0x70,0x90,0x01,0xE8,0x86,0x72,0xA5,0x70,0xF0,0x04,0xC9,0x02,0xD0,0x0B,0x98,
0x20,0x75,0xD4,0xA6,0x6F,0xA4,0x70,0x20,0x88,0xD6,0xA6,0x16,0xE0,0x22,0xD0,0x05,
0xA2,0x19,0x4C,0x37,0xC4,0xA5,0x61,0x95,0x00,0xA5,0x62,0x95,0x01,0xA5,0x63,0x95,
0x02,0xA0,0x00,0x86,0x64,0x84,0x65,0x84,0x70,0x88,0x84,0x0D,0x86,0x17,0xE8,0xE8,
0xE8,0x86,0x16,0x60,0x46,0x0F,0x48,0x49,0xFF,0x38,0x65,0x33,0xA4,0x34,0xB0,0x01,
0x88,0xC4,0x32,0x90,0x11,0xD0,0x04,0xC5,0x31,0x90,0x0B,0x85,0x33,0x84,0x34,0x85,
0x35,0x84,0x36,0xAA,0x68,0x60,0xA2,0x10,0xA5,0x0F,0x30,0xB6,0x20,0x26,0xD5,0xA9,
0x80,0x85,0x0F,0x68,0xD0,0xD0,0xA6,0x37,0xA5,0x38,0x86,0x33,0x85,0x34,0xA0,0x00,
0x84,0x4F,0x84,0x4E,0xA5,0x31,0xA6,0x32,0x85,0x5F,0x86,0x60,0xA9,0x19,0xA2,0x00,
0x85,0x22,0x86,0x23,0xC5,0x16,0xF0,0x05,0x20,0xC7,0xD5,0xF0,0xF7,0xA9,0x07,0x85,
0x53,0xA5,0x2D,0xA6,0x2E,0x85,0x22,0x86,0x23,0xE4,0x30,0xD0,0x04,0xC5,0x2F,0xF0,
0x05,0x20,0xBD,0xD5,0xF0,0xF3,0x85,0x58,0x86,0x59,0xA9,0x03,0x85,0x53,0xA5,0x58,
0xA6,0x59,0xE4,0x32,0xD0,0x07,0xC5,0x31,0xD0,0x03,0x4C,0x06,0xD6,0x85,0x22,0x86,
0x23,0xA0,0x00,0xB1,0x22,0xAA,0xC8,0xB1,0x22,0x08,0xC8,0xB1,0x22,0x65,0x58,0x85,
0x58,0xC8,0xB1,0x22,0x65,0x59,0x85,0x59,0x28,0x10,0xD3,0x8A,0x30,0xD0,0xC8,0xB1,
0x22,0xA0,0x00,0x0A,0x69,0x05,0x65,0x22,0x85,0x22,0x90,0x02,0xE6,0x23,0xA6,0x23,
0xE4,0x59,0xD0,0x04,0xC5,0x58,0xF0,0xBA,0x20,0xC7,0xD5,0xF0,0xF3,0xB1,0x22,0x30,
0x35,0xC8,0xB1,0x22,0x10,0x30,0xC8,0xB1,0x22,0xF0,0x2B,0xC8,0xB1,0x22,0xAA,0xC8,
0xB1,0x22,0xC5,0x34,0x90,0x06,0xD0,0x1E,0xE4,0x33,0xB0,0x1A,0xC5,0x60,0x90,0x16,
0xD0,0x04,0xE4,0x5F,0x90,0x10,0x86,0x5F,0x85,0x60,0xA5,0x22,0xA6,0x23,0x85,0x4E,
0x86,0x4F,0xA5,0x53,0x85,0x55,0xA5,0x53,0x18,0x65,0x22,0x85,0x22,0x90,0x02,0xE6,
0x23,0xA6,0x23,0xA0,0x00,0x60,0xA5,0x4F,0x05,0x4E,0xF0,0xF5,0xA5,0x55,0x29,0x04,
0x4A,0xA8,0x85,0x55,0xB1,0x4E,0x65,0x5F,0x85,0x5A,0xA5,0x60,0x69,0x00,0x85,0x5B,
0xA5,0x33,0xA6,0x34,0x85,0x58,0x86,0x59,0x20,0xBF,0xC3,0xA4,0x55,0xC8,0xA5,0x58,
0x91,0x4E,0xAA,0xE6,0x59,0xA5,0x59,0xC8,0x91,0x4E,0x4C,0x2A,0xD5,0xA5,0x65,0x48,
0xA5,0x64,0x48,0x20,0x83,0xCE,0x20,0x8F,0xCD,0x68,0x85,0x6F,0x68,0x85,0x70,0xA0,
0x00,0xB1,0x6F,0x18,0x71,0x64,0x90,0x05,0xA2,0x17,0x4C,0x37,0xC4,0x20,0x75,0xD4,
0x20,0x7A,0xD6,0xA5,0x50,0xA4,0x51,0x20,0xAA,0xD6,0x20,0x8C,0xD6,0xA5,0x6F,0xA4,
0x70,0x20,0xAA,0xD6,0x20,0xCA,0xD4,0x4C,0xB8,0xCD,0xA0,0x00,0xB1,0x6F,0x48,0xC8,
0xB1,0x6F,0xAA,0xC8,0xB1,0x6F,0xA8,0x68,0x86,0x22,0x84,0x23,0xA8,0xF0,0x0A,0x48,
0x88,0xB1,0x22,0x91,0x35,0x98,0xD0,0xF8,0x68,0x18,0x65,0x35,0x85,0x35,0x90,0x02,
0xE6,0x36,0x60,0x20,0x8F,0xCD,0xA5,0x64,0xA4,0x65,0x85,0x22,0x84,0x23,0x20,0xDB,
0xD6,0x08,0xA0,0x00,0xB1,0x22,0x48,0xC8,0xB1,0x22,0xAA,0xC8,0xB1,0x22,0xA8,0x68,
0x28,0xD0,0x13,0xC4,0x34,0xD0,0x0F,0xE4,0x33,0xD0,0x0B,0x48,0x18,0x65,0x33,0x85,
0x33,0x90,0x02,0xE6,0x34,0x68,0x86,0x22,0x84,0x23,0x60,0xC4,0x18,0xD0,0x0C,0xC5,
0x17,0xD0,0x08,0x85,0x16,0xE9,0x03,0x85,0x17,0xA0,0x00,0x60,0x20,0xA1,0xD7,0x8A,
0x48,0xA9,0x01,0x20,0x7D,0xD4,0x68,0xA0,0x00,0x91,0x62,0x68,0x68,0x4C,0xCA,0xD4,
0x20,0x61,0xD7,0xD1,0x50,0x98,0x90,0x04,0xB1,0x50,0xAA,0x98,0x48,0x8A,0x48,0x20,
0x7D,0xD4,0xA5,0x50,0xA4,0x51,0x20,0xAA,0xD6,0x68,0xA8,0x68,0x18,0x65,0x22,0x85,
0x22,0x90,0x02,0xE6,0x23,0x98,0x20,0x8C,0xD6,0x4C,0xCA,0xD4,0x20,0x61,0xD7,0x18,
0xF1,0x50,0x49,0xFF,0x4C,0x06,0xD7,0xA9,0xFF,0x85,0x65,0x20,0x79,0x00,0xC9,0x29,
0xF0,0x06,0x20,0xFD,0xCE,0x20,0x9E,0xD7,0x20,0x61,0xD7,0xF0,0x4B,0xCA,0x8A,0x48,
0x18,0xA2,0x00,0xF1,0x50,0xB0,0xB6,0x49,0xFF,0xC5,0x65,0x90,0xB1,0xA5,0x65,0xB0,
0xAD,0x20,0xF7,0xCE,0x68,0xA8,0x68,0x85,0x55,0x68,0x68,0x68,0xAA,0x68,0x85,0x50,
0x68,0x85,0x51,0xA5,0x55,0x48,0x98,0x48,0xA0,0x00,0x8A,0x60,0x20,0x82,0xD7,0x4C,
0xA2,0xD3,0x20,0xA3,0xD6,0xA2,0x00,0x86,0x0D,0xA8,0x60,0x20,0x82,0xD7,0xF0,0x08,
0xA0,0x00,0xB1,0x22,0xA8,0x4C,0xA2,0xD3,0x4C,0x48,0xD2,0x20,0x73,0x00,0x20,0x8A,
0xCD,0x20,0xB8,0xD1,0xA6,0x64,0xD0,0xF0,0xA6,0x65,0x4C,0x79,0x00,0x20,0x82,0xD7,
0xD0,0x03,0x4C,0xF7,0xD8,0xA6,0x7A,0xA4,0x7B,0x86,0x71,0x84,0x72,0xA6,0x22,0x86,
0x7A,0x18,0x65,0x22,0x85,0x24,0xA6,0x23,0x86,0x7B,0x90,0x01,0xE8,0x86,0x25,0xA0,
0x00,0xB1,0x24,0x48,0x98,0x91,0x24,0x20,0x79,0x00,0x20,0xF3,0xDC,0x68,0xA0,0x00,
0x91,0x24,0xA6,0x71,0xA4,0x72,0x86,0x7A,0x84,0x7B,0x60,0x20,0x8A,0xCD,0x20,0xF7,
0xD7,0x20,0xFD,0xCE,0x4C,0x9E,0xD7,0xA5,0x66,0x30,0x9D,0xA5,0x61,0xC9,0x91,0xB0,
0x97,0x20,0x9B,0xDC,0xA5,0x64,0xA4,0x65,0x84,0x14,0x85,0x15,0x60,0xA5,0x15,0x48,
0xA5,0x14,0x48,0x20,0xF7,0xD7,0xA0,0x00,0xB1,0x14,0xA8,0x68,0x85,0x14,0x68,0x85,
0x15,0x4C,0xA2,0xD3,0x20,0xEB,0xD7,0x8A,0xA0,0x00,0x91,0x14,0x60,0x20,0xEB,0xD7,
0x86,0x49,0xA2,0x00,0x20,0x79,0x00,0xF0,0x03,0x20,0xF1,0xD7,0x86,0x4A,0xA0,0x00,
0xB1,0x14,0x45,0x4A,0x25,0x49,0xF0,0xF8,0x60,0xA9,0x11,0xA0,0xDF,0x4C,0x67,0xD8,
0x20,0x8C,0xDA,0xA5,0x66,0x49,0xFF,0x85,0x66,0x45,0x6E,0x85,0x6F,0xA5,0x61,0x4C,
0x6A,0xD8,0x20,0x99,0xD9,0x90,0x3C,0x20,0x8C,0xDA,0xD0,0x03,0x4C,0xFC,0xDB,0xA6,
0x70,0x86,0x56,0xA2,0x69,0xA5,0x69,0xA8,0xF0,0xCE,0x38,0xE5,0x61,0xF0,0x24,0x90,
0x12,0x84,0x61,0xA4,0x6E,0x84,0x66,0x49,0xFF,0x69,0x00,0xA0,0x00,0x84,0x56,0xA2,
0x61,0xD0,0x04,0xA0,0x00,0x84,0x70,0xC9,0xF9,0x30,0xC7,0xA8,0xA5,0x70,0x56,0x01,
0x20,0xB0,0xD9,0x24,0x6F,0x10,0x57,0xA0,0x61,0xE0,0x69,0xF0,0x02,0xA0,0x69,0x38,
0x49,0xFF,0x65,0x56,0x85,0x70,0xB9,0x04,0x00,0xF5,0x04,0x85,0x65,0xB9,0x03,0x00,
0xF5,0x03,0x85,0x64,0xB9,0x02,0x00,0xF5,0x02,0x85,0x63,0xB9,0x01,0x00,0xF5,0x01,
0x85,0x62,0xB0,0x03,0x20,0x47,0xD9,0xA0,0x00,0x98,0x18,0xA6,0x62,0xD0,0x4A,0xA6,
0x63,0x86,0x62,0xA6,0x64,0x86,0x63,0xA6,0x65,0x86,0x64,0xA6,0x70,0x86,0x65,0x84,
0x70,0x69,0x08,0xC9,0x20,0xD0,0xE4,0xA9,0x00,0x85,0x61,0x85,0x66,0x60,0x65,0x56,
0x85,0x70,0xA5,0x65,0x65,0x6D,0x85,0x65,0xA5,0x64,0x65,0x6C,0x85,0x64,0xA5,0x63,
0x65,0x6B,0x85,0x63,0xA5,0x62,0x65,0x6A,0x85,0x62,0x4C,0x36,0xD9,0x69,0x01,0x06,
0x70,0x26,0x65,0x26,0x64,0x26,0x63,0x26,0x62,0x10,0xF2,0x38,0xE5,0x61,0xB0,0xC7,
0x49,0xFF,0x69,0x01,0x85,0x61,0x90,0x0E,0xE6,0x61,0xF0,0x42,0x66,0x62,0x66,0x63,
0x66,0x64,0x66,0x65,0x66,0x70,0x60,0xA5,0x66,0x49,0xFF,0x85,0x66,0xA5,0x62,0x49,
0xFF,0x85,0x62,0xA5,0x63,0x49,0xFF,0x85,0x63,0xA5,0x64,0x49,0xFF,0x85,0x64,0xA5,
0x65,0x49,0xFF,0x85,0x65,0xA5,0x70,0x49,0xFF,0x85,0x70,0xE6,0x70,0xD0,0x0E,0xE6,
0x65,0xD0,0x0A,0xE6,0x64,0xD0,0x06,0xE6,0x63,0xD0,0x02,0xE6,0x62,0x60,0xA2,0x0F,
0x4C,0x37,0xC4,0xA2,0x25,0xB4,0x04,0x84,0x70,0xB4,0x03,0x94,0x04,0xB4,0x02,0x94,
0x03,0xB4,0x01,0x94,0x02,0xA4,0x68,0x94,0x01,0x69,0x08,0x30,0xE8,0xF0,0xE6,0xE9,
0x08,0xA8,0xA5,0x70,0xB0,0x14,0x16,0x01,0x90,0x02,0xF6,0x01,0x76,0x01,0x76,0x01,
0x76,0x02,0x76,0x03,0x76,0x04,0x6A,0xC8,0xD0,0xEC,0x18,0x60,0x81,0x00,0x00,0x00,
0x00,0x03,0x7F,0x5E,0x56,0xCB,0x79,0x80,0x13,0x9B,0x0B,0x64,0x80,0x76,0x38,0x93,
0x16,0x82,0x38,0xAA,0x3B,0x20,0x80,0x35,0x04,0xF3,0x34,0x81,0x35,0x04,0xF3,0x34,
0x80,0x80,0x00,0x00,0x00,0x80,0x31,0x72,0x17,0xF8,0x20,0x2B,0xDC,0xF0,0x02,0x10,
0x03,0x4C,0x48,0xD2,0xA5,0x61,0xE9,0x7F,0x48,0xA9,0x80,0x85,0x61,0xA9,0xD6,0xA0,
0xD9,0x20,0x67,0xD8,0xA9,0xDB,0xA0,0xD9,0x20,0x0F,0xDB,0xA9,0xBC,0xA0,0xD9,0x20,
0x50,0xD8,0xA9,0xC1,0xA0,0xD9,0x20,0x40,0xE0,0xA9,0xE0,0xA0,0xD9,0x20,0x67,0xD8,
0x68,0x20,0x7E,0xDD,0xA9,0xE5,0xA0,0xD9,0x20,0x8C,0xDA,0xD0,0x03,0x4C,0x8B,0xDA,
0x20,0xB7,0xDA,0xA9,0x00,0x85,0x26,0x85,0x27,0x85,0x28,0x85,0x29,0xA5,0x70,0x20,
0x59,0xDA,0xA5,0x65,0x20,0x59,0xDA,0xA5,0x64,0x20,0x59,0xDA,0xA5,0x63,0x20,0x59,
0xDA,0xA5,0x62,0x20,0x5E,0xDA,0x4C,0x8F,0xDB,0xD0,0x03,0x4C,0x83,0xD9,0x4A,0x09,
0x80,0xA8,0x90,0x19,0x18,0xA5,0x29,0x65,0x6D,0x85,0x29,0xA5,0x28,0x65,0x6C,0x85,
0x28,0xA5,0x27,0x65,0x6B,0x85,0x27,0xA5,0x26,0x65,0x6A,0x85,0x26,0x66,0x26,0x66,
0x27,0x66,0x28,0x66,0x29,0x66,0x70,0x98,0x4A,0xD0,0xD6,0x60,0x85,0x22,0x84,0x23,
0xA0,0x04,0xB1,0x22,0x85,0x6D,0x88,0xB1,0x22,0x85,0x6C,0x88,0xB1,0x22,0x85,0x6B,
0x88,0xB1,0x22,0x85,0x6E,0x45,0x66,0x85,0x6F,0xA5,0x6E,0x09,0x80,0x85,0x6A,0x88,
0xB1,0x22,0x85,0x69,0xA5,0x61,0x60,0xA5,0x69,0xF0,0x1F,0x18,0x65,0x61,0x90,0x04,
0x30,0x1D,0x18,0x2C,0x10,0x14,0x69,0x80,0x85,0x61,0xD0,0x03,0x4C,0xFB,0xD8,0xA5,
0x6F,0x85,0x66,0x60,0xA5,0x66,0x49,0xFF,0x30,0x05,0x68,0x68,0x4C,0xF7,0xD8,0x4C,
0x7E,0xD9,0x20,0x0C,0xDC,0xAA,0xF0,0x10,0x18,0x69,0x02,0xB0,0xF2,0xA2,0x00,0x86,
0x6F,0x20,0x77,0xD8,0xE6,0x61,0xF0,0xE7,0x60,0x84,0x20,0x00,0x00,0x00,0x20,0x0C,
0xDC,0xA9,0xF9,0xA0,0xDA,0xA2,0x00,0x86,0x6F,0x20,0xA2,0xDB,0x4C,0x12,0xDB,0x20,
0x8C,0xDA,0xF0,0x76,0x20,0x1B,0xDC,0xA9,0x00,0x38,0xE5,0x61,0x85,0x61,0x20,0xB7,
0xDA,0xE6,0x61,0xF0,0xBA,0xA2,0xFC,0xA9,0x01,0xA4,0x6A,0xC4,0x62,0xD0,0x10,0xA4,
0x6B,0xC4,0x63,0xD0,0x0A,0xA4,0x6C,0xC4,0x64,0xD0,0x04,0xA4,0x6D,0xC4,0x65,0x08,
0x2A,0x90,0x09,0xE8,0x95,0x29,0xF0,0x32,0x10,0x34,0xA9,0x01,0x28,0xB0,0x0E,0x06,
0x6D,0x26,0x6C,0x26,0x6B,0x26,0x6A,0xB0,0xE6,0x30,0xCE,0x10,0xE2,0xA8,0xA5,0x6D,
0xE5,0x65,0x85,0x6D,0xA5,0x6C,0xE5,0x64,0x85,0x6C,0xA5,0x6B,0xE5,0x63,0x85,0x6B,
0xA5,0x6A,0xE5,0x62,0x85,0x6A,0x98,0x4C,0x4F,0xDB,0xA9,0x40,0xD0,0xCE,0x0A,0x0A,
0x0A,0x0A,0x0A,0x0A,0x85,0x70,0x28,0x4C,0x8F,0xDB,0xA2,0x14,0x4C,0x37,0xC4,0xA5,
0x26,0x85,0x62,0xA5,0x27,0x85,0x63,0xA5,0x28,0x85,0x64,0xA5,0x29,0x85,0x65,0x4C,
0xD7,0xD8,0x85,0x22,0x84,0x23,0xA0,0x04,0xB1,0x22,0x85,0x65,0x88,0xB1,0x22,0x85,
0x64,0x88,0xB1,0x22,0x85,0x63,0x88,0xB1,0x22,0x85,0x66,0x09,0x80,0x85,0x62,0x88,
0xB1,0x22,0x85,0x61,0x84,0x70,0x60,0xA2,0x5C,0x2C,0xA2,0x57,0xA0,0x00,0xF0,0x04,
0xA6,0x49,0xA4,0x4A,0x20,0x1B,0xDC,0x86,0x22,0x84,0x23,0xA0,0x04,0xA5,0x65,0x91,
0x22,0x88,0xA5,0x64,0x91,0x22,0x88,0xA5,0x63,0x91,0x22,0x88,0xA5,0x66,0x09,0x7F,
0x25,0x62,0x91,0x22,0x88,0xA5,0x61,0x91,0x22,0x84,0x70,0x60,0xA5,0x6E,0x85,0x66,
0xA2,0x05,0xB5,0x68,0x95,0x60,0xCA,0xD0,0xF9,0x86,0x70,0x60,0x20,0x1B,0xDC,0xA2,
0x06,0xB5,0x60,0x95,0x68,0xCA,0xD0,0xF9,0x86,0x70,0x60,0xA5,0x61,0xF0,0xFB,0x06,
0x70,0x90,0xF7,0x20,0x6F,0xD9,0xD0,0xF2,0x4C,0x38,0xD9,0xA5,0x61,0xF0,0x09,0xA5,
0x66,0x2A,0xA9,0xFF,0xB0,0x02,0xA9,0x01,0x60,0x20,0x2B,0xDC,0x85,0x62,0xA9,0x00,
0x85,0x63,0xA2,0x88,0xA5,0x62,0x49,0xFF,0x2A,0xA9,0x00,0x85,0x65,0x85,0x64,0x86,
0x61,0x85,0x70,0x85,0x66,0x4C,0xD2,0xD8,0x46,0x66,0x60,0x85,0x24,0x84,0x25,0xA0,
0x00,0xB1,0x24,0xC8,0xAA,0xF0,0xC4,0xB1,0x24,0x45,0x66,0x30,0xC2,0xE4,0x61,0xD0,
0x21,0xB1,0x24,0x09,0x80,0xC5,0x62,0xD0,0x19,0xC8,0xB1,0x24,0xC5,0x63,0xD0,0x12,
0xC8,0xB1,0x24,0xC5,0x64,0xD0,0x0B,0xC8,0xA9,0x7F,0xC5,0x70,0xB1,0x24,0xE5,0x65,
0xF0,0x28,0xA5,0x66,0x90,0x02,0x49,0xFF,0x4C,0x31,0xDC,0xA5,0x61,0xF0,0x4A,0x38,
0xE9,0xA0,0x24,0x66,0x10,0x09,0xAA,0xA9,0xFF,0x85,0x68,0x20,0x4D,0xD9,0x8A,0xA2,
0x61,0xC9,0xF9,0x10,0x06,0x20,0x99,0xD9,0x84,0x68,0x60,0xA8,0xA5,0x66,0x29,0x80,
0x46,0x62,0x05,0x62,0x85,0x62,0x20,0xB0,0xD9,0x84,0x68,0x60,0xA5,0x61,0xC9,0xA0,
0xB0,0x20,0x20,0x9B,0xDC,0x84,0x70,0xA5,0x66,0x84,0x66,0x49,0x80,0x2A,0xA9,0xA0,
0x85,0x61,0xA5,0x65,0x85,0x07,0x4C,0xD2,0xD8,0x85,0x62,0x85,0x63,0x85,0x64,0x85,
0x65,0xA8,0x60,0xA0,0x00,0xA2,0x0A,0x94,0x5D,0xCA,0x10,0xFB,0x90,0x0F,0xC9,0x2D,
0xD0,0x04,0x86,0x67,0xF0,0x04,0xC9,0x2B,0xD0,0x05,0x20,0x73,0x00,0x90,0x5B,0xC9,
0x2E,0xF0,0x2E,0xC9,0x45,0xD0,0x30,0x20,0x73,0x00,0x90,0x17,0xC9,0xAB,0xF0,0x0E,
0xC9,0x2D,0xF0,0x0A,0xC9,0xAA,0xF0,0x08,0xC9,0x2B,0xF0,0x04,0xD0,0x07,0x66,0x60,
0x20,0x73,0x00,0x90,0x5C,0x24,0x60,0x10,0x0E,0xA9,0x00,0x38,0xE5,0x5E,0x4C,0x49,
0xDD,0x66,0x5F,0x24,0x5F,0x50,0xC3,0xA5,0x5E,0x38,0xE5,0x5D,0x85,0x5E,0xF0,0x12,
0x10,0x09,0x20,0xFE,0xDA,0xE6,0x5E,0xD0,0xF9,0xF0,0x07,0x20,0xE2,0xDA,0xC6,0x5E,
0xD0,0xF9,0xA5,0x67,0x30,0x01,0x60,0x4C,0xB4,0xDF,0x48,0x24,0x5F,0x10,0x02,0xE6,
0x5D,0x20,0xE2,0xDA,0x68,0x38,0xE9,0x30,0x20,0x7E,0xDD,0x4C,0x0A,0xDD,0x48,0x20,
0x0C,0xDC,0x68,0x20,0x3C,0xDC,0xA5,0x6E,0x45,0x66,0x85,0x6F,0xA6,0x61,0x4C,0x6A,
0xD8,0xA5,0x5E,0xC9,0x0A,0x90,0x09,0xA9,0x64,0x24,0x60,0x30,0x11,0x4C,0x7E,0xD9,
0x0A,0x0A,0x18,0x65,0x5E,0x0A,0x18,0xA0,0x00,0x71,0x7A,0x38,0xE9,0x30,0x85,0x5E,
0x4C,0x30,0xDD,0x9B,0x3E,0xBC,0x1F,0xFD,0x9E,0x6E,0x6B,0x27,0xFD,0x9E,0x6E,0x6B,
0x28,0x00,0xA9,0x71,0xA0,0xC3,0x20,0xDA,0xDD,0xA5,0x3A,0xA6,0x39,0x85,0x62,0x86,
0x63,0xA2,0x90,0x38,0x20,0x49,0xDC,0x20,0xDF,0xDD,0x4C,0x1E,0xCB,0xA0,0x01,0xA9,
0x20,0x24,0x66,0x10,0x02,0xA9,0x2D,0x99,0xFF,0x00,0x85,0x66,0x84,0x71,0xC8,0xA9,
0x30,0xA6,0x61,0xD0,0x03,0x4C,0x04,0xDF,0xA9,0x00,0xE0,0x80,0xF0,0x02,0xB0,0x09,
0xA9,0xBD,0xA0,0xDD,0x20,0x28,0xDA,0xA9,0xF7,0x85,0x5D,0xA9,0xB8,0xA0,0xDD,0x20,
0x5B,0xDC,0xF0,0x1E,0x10,0x12,0xA9,0xB3,0xA0,0xDD,0x20,0x5B,0xDC,0xF0,0x02,0x10,
0x0E,0x20,0xE2,0xDA,0xC6,0x5D,0xD0,0xEE,0x20,0xFE,0xDA,0xE6,0x5D,0xD0,0xDC,0x20,
0x49,0xD8,0x20,0x9B,0xDC,0xA2,0x01,0xA5,0x5D,0x18,0x69,0x0A,0x30,0x09,0xC9,0x0B,
0xB0,0x06,0x69,0xFF,0xAA,0xA9,0x02,0x38,0xE9,0x02,0x85,0x5E,0x86,0x5D,0x8A,0xF0,
0x02,0x10,0x13,0xA4,0x71,0xA9,0x2E,0xC8,0x99,0xFF,0x00,0x8A,0xF0,0x06,0xA9,0x30,
0xC8,0x99,0xFF,0x00,0x84,0x71,0xA0,0x00,0xA2,0x80,0xA5,0x65,0x18,0x79,0x19,0xDF,
0x85,0x65,0xA5,0x64,0x79,0x18,0xDF,0x85,0x64,0xA5,0x63,0x79,0x17,0xDF,0x85,0x63,
0xA5,0x62,0x79,0x16,0xDF,0x85,0x62,0xE8,0xB0,0x04,0x10,0xDE,0x30,0x02,0x30,0xDA,
0x8A,0x90,0x04,0x49,0xFF,0x69,0x0A,0x69,0x2F,0xC8,0xC8,0xC8,0xC8,0x84,0x47,0xA4,
0x71,0xC8,0xAA,0x29,0x7F,0x99,0xFF,0x00,0xC6,0x5D,0xD0,0x06,0xA9,0x2E,0xC8,0x99,
0xFF,0x00,0x84,0x71,0xA4,0x47,0x8A,0x49,0xFF,0x29,0x80,0xAA,0xC0,0x24,0xF0,0x04,
0xC0,0x3C,0xD0,0xA6,0xA4,0x71,0xB9,0xFF,0x00,0x88,0xC9,0x30,0xF0,0xF8,0xC9,0x2E,
0xF0,0x01,0xC8,0xA9,0x2B,0xA6,0x5E,0xF0,0x2E,0x10,0x08,0xA9,0x00,0x38,0xE5,0x5E,
0xAA,0xA9,0x2D,0x99,0x01,0x01,0xA9,0x45,0x99,0x00,0x01,0x8A,0xA2,0x2F,0x38,0xE8,
0xE9,0x0A,0xB0,0xFB,0x69,0x3A,0x99,0x03,0x01,0x8A,0x99,0x02,0x01,0xA9,0x00,0x99,
0x04,0x01,0xF0,0x08,0x99,0xFF,0x00,0xA9,0x00,0x99,0x00,0x01,0xA9,0x00,0xA0,0x01,
0x60,0x80,0x00,0x00,0x00,0x00,0xFA,0x0A,0x1F,0x00,0x00,0x98,0x96,0x80,0xFF,0xF0,
0xBD,0xC0,0x00,0x01,0x86,0xA0,0xFF,0xFF,0xD8,0xF0,0x00,0x00,0x03,0xE8,0xFF,0xFF,
0xFF,0x9C,0x00,0x00,0x00,0x0A,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x0A,0x80,0x00,0x03,
0x4B,0xC0,0xFF,0xFF,0x73,0x60,0x00,0x00,0x0E,0x10,0xFF,0xFF,0xFD,0xA8,0x00,0x00,
0x00,0x3C,0xBF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0x20,0x0C,0xDC,0xA9,0x11,0xA0,0xDF,0x20,0xA2,0xDB,0xF0,0x70,0xA5,0x69,0xD0,
0x03,0x4C,0xF9,0xD8,0xA2,0x4E,0xA0,0x00,0x20,0xD4,0xDB,0xA5,0x6E,0x10,0x0F,0x20,
0xCC,0xDC,0xA9,0x4E,0xA0,0x00,0x20,0x5B,0xDC,0xD0,0x03,0x98,0xA4,0x07,0x20,0xFE,
0xDB,0x98,0x48,0x20,0xEA,0xD9,0xA9,0x4E,0xA0,0x00,0x20,0x28,0xDA,0x20,0xED,0xDF,
0x68,0x4A,0x90,0x0A,0xA5,0x61,0xF0,0x06,0xA5,0x66,0x49,0xFF,0x85,0x66,0x60,0x81,
0x38,0xAA,0x3B,0x29,0x07,0x71,0x34,0x58,0x3E,0x56,0x74,0x16,0x7E,0xB3,0x1B,0x77,
0x2F,0xEE,0xE3,0x85,0x7A,0x1D,0x84,0x1C,0x2A,0x7C,0x63,0x59,0x58,0x0A,0x7E,0x75,
0xFD,0xE7,0xC6,0x80,0x31,0x72,0x18,0x10,0x81,0x00,0x00,0x00,0x00,0xA9,0xBF,0xA0,
0xDF,0x20,0x28,0xDA,0xA5,0x70,0x69,0x50,0x90,0x03,0x20,0x23,0xDC,0x85,0x56,0x20,
};

Wyświetl plik

@ -0,0 +1,258 @@
const unsigned char PROGMEM charrom[4096] = {
0x1C,0x22,0x4A,0x56,0x4C,0x20,0x1E,0x00,0x18,0x24,0x42,0x7E,0x42,0x42,0x42,0x00,
0x7C,0x22,0x22,0x3C,0x22,0x22,0x7C,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,
0x78,0x24,0x22,0x22,0x22,0x24,0x78,0x00,0x7E,0x40,0x40,0x78,0x40,0x40,0x7E,0x00,
0x7E,0x40,0x40,0x78,0x40,0x40,0x40,0x00,0x1C,0x22,0x40,0x4E,0x42,0x22,0x1C,0x00,
0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,
0x0E,0x04,0x04,0x04,0x04,0x44,0x38,0x00,0x42,0x44,0x48,0x70,0x48,0x44,0x42,0x00,
0x40,0x40,0x40,0x40,0x40,0x40,0x7E,0x00,0x42,0x66,0x5A,0x5A,0x42,0x42,0x42,0x00,
0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x00,0x18,0x24,0x42,0x42,0x42,0x24,0x18,0x00,
0x7C,0x42,0x42,0x7C,0x40,0x40,0x40,0x00,0x18,0x24,0x42,0x42,0x4A,0x24,0x1A,0x00,
0x7C,0x42,0x42,0x7C,0x48,0x44,0x42,0x00,0x3C,0x42,0x40,0x3C,0x02,0x42,0x3C,0x00,
0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,
0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x42,0x42,0x42,0x5A,0x5A,0x66,0x42,0x00,
0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x00,0x22,0x22,0x22,0x1C,0x08,0x08,0x08,0x00,
0x7E,0x02,0x04,0x18,0x20,0x40,0x7E,0x00,0x3C,0x20,0x20,0x20,0x20,0x20,0x3C,0x00,
0x0C,0x10,0x10,0x3C,0x10,0x70,0x6E,0x00,0x3C,0x04,0x04,0x04,0x04,0x04,0x3C,0x00,
0x00,0x08,0x1C,0x2A,0x08,0x08,0x08,0x08,0x00,0x00,0x10,0x20,0x7F,0x20,0x10,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x00,0x00,0x08,0x00,
0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x24,0x24,0x7E,0x24,0x7E,0x24,0x24,0x00,
0x08,0x1E,0x28,0x1C,0x0A,0x3C,0x08,0x00,0x00,0x62,0x64,0x08,0x10,0x26,0x46,0x00,
0x30,0x48,0x48,0x30,0x4A,0x44,0x3A,0x00,0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,
0x04,0x08,0x10,0x10,0x10,0x08,0x04,0x00,0x20,0x10,0x08,0x08,0x08,0x10,0x20,0x00,
0x08,0x2A,0x1C,0x3E,0x1C,0x2A,0x08,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x10,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x00,
0x3C,0x42,0x46,0x5A,0x62,0x42,0x3C,0x00,0x08,0x18,0x28,0x08,0x08,0x08,0x3E,0x00,
0x3C,0x42,0x02,0x0C,0x30,0x40,0x7E,0x00,0x3C,0x42,0x02,0x1C,0x02,0x42,0x3C,0x00,
0x04,0x0C,0x14,0x24,0x7E,0x04,0x04,0x00,0x7E,0x40,0x78,0x04,0x02,0x44,0x38,0x00,
0x1C,0x20,0x40,0x7C,0x42,0x42,0x3C,0x00,0x7E,0x42,0x04,0x08,0x10,0x10,0x10,0x00,
0x3C,0x42,0x42,0x3C,0x42,0x42,0x3C,0x00,0x3C,0x42,0x42,0x3E,0x02,0x04,0x38,0x00,
0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x08,0x10,
0x0E,0x18,0x30,0x60,0x30,0x18,0x0E,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,
0x70,0x18,0x0C,0x06,0x0C,0x18,0x70,0x00,0x3C,0x42,0x02,0x0C,0x10,0x00,0x10,0x00,
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x08,0x1C,0x3E,0x7F,0x7F,0x1C,0x3E,0x00,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,
0x08,0x08,0x08,0x04,0x03,0x00,0x00,0x00,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x3C,0x7E,0x7E,0x7E,0x7E,0x3C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x36,0x7F,0x7F,0x7F,0x3E,0x1C,0x08,0x00,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x08,
0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x00,0x3C,0x42,0x42,0x42,0x42,0x3C,0x00,
0x08,0x1C,0x2A,0x77,0x2A,0x08,0x08,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x08,0x1C,0x3E,0x7F,0x3E,0x1C,0x08,0x00,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,
0xA0,0x50,0xA0,0x50,0xA0,0x50,0xA0,0x50,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
0x00,0x00,0x01,0x3E,0x54,0x14,0x14,0x00,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0xAA,0x55,0xAA,0x55,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x08,0x08,0x08,0x08,0x0F,0x08,0x08,0x08,
0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF8,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,
0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,
0xE3,0xDD,0xB5,0xA9,0xB3,0xDF,0xE1,0xFF,0xE7,0xDB,0xBD,0x81,0xBD,0xBD,0xBD,0xFF,
0x83,0xDD,0xDD,0xC3,0xDD,0xDD,0x83,0xFF,0xE3,0xDD,0xBF,0xBF,0xBF,0xDD,0xE3,0xFF,
0x87,0xDB,0xDD,0xDD,0xDD,0xDB,0x87,0xFF,0x81,0xBF,0xBF,0x87,0xBF,0xBF,0x81,0xFF,
0x81,0xBF,0xBF,0x87,0xBF,0xBF,0xBF,0xFF,0xE3,0xDD,0xBF,0xB1,0xBD,0xDD,0xE3,0xFF,
0xBD,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0xFF,0xE3,0xF7,0xF7,0xF7,0xF7,0xF7,0xE3,0xFF,
0xF1,0xFB,0xFB,0xFB,0xFB,0xBB,0xC7,0xFF,0xBD,0xBB,0xB7,0x8F,0xB7,0xBB,0xBD,0xFF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x81,0xFF,0xBD,0x99,0xA5,0xA5,0xBD,0xBD,0xBD,0xFF,
0xBD,0x9D,0xAD,0xB5,0xB9,0xBD,0xBD,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,
0x83,0xBD,0xBD,0x83,0xBF,0xBF,0xBF,0xFF,0xE7,0xDB,0xBD,0xBD,0xB5,0xDB,0xE5,0xFF,
0x83,0xBD,0xBD,0x83,0xB7,0xBB,0xBD,0xFF,0xC3,0xBD,0xBF,0xC3,0xFD,0xBD,0xC3,0xFF,
0xC1,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,
0xBD,0xBD,0xBD,0xDB,0xDB,0xE7,0xE7,0xFF,0xBD,0xBD,0xBD,0xA5,0xA5,0x99,0xBD,0xFF,
0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xFF,0xDD,0xDD,0xDD,0xE3,0xF7,0xF7,0xF7,0xFF,
0x81,0xFD,0xFB,0xE7,0xDF,0xBF,0x81,0xFF,0xC3,0xDF,0xDF,0xDF,0xDF,0xDF,0xC3,0xFF,
0xF3,0xEF,0xEF,0xC3,0xEF,0x8F,0x91,0xFF,0xC3,0xFB,0xFB,0xFB,0xFB,0xFB,0xC3,0xFF,
0xFF,0xF7,0xE3,0xD5,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,0xEF,0xDF,0x80,0xDF,0xEF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,0xF7,0xFF,
0xDB,0xDB,0xDB,0xFF,0xFF,0xFF,0xFF,0xFF,0xDB,0xDB,0x81,0xDB,0x81,0xDB,0xDB,0xFF,
0xF7,0xE1,0xD7,0xE3,0xF5,0xC3,0xF7,0xFF,0xFF,0x9D,0x9B,0xF7,0xEF,0xD9,0xB9,0xFF,
0xCF,0xB7,0xB7,0xCF,0xB5,0xBB,0xC5,0xFF,0xFB,0xF7,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF7,0xEF,0xEF,0xEF,0xF7,0xFB,0xFF,0xDF,0xEF,0xF7,0xF7,0xF7,0xEF,0xDF,0xFF,
0xF7,0xD5,0xE3,0xC1,0xE3,0xD5,0xF7,0xFF,0xFF,0xF7,0xF7,0xC1,0xF7,0xF7,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xF7,0xEF,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0xFF,
0xC3,0xBD,0xB9,0xA5,0x9D,0xBD,0xC3,0xFF,0xF7,0xE7,0xD7,0xF7,0xF7,0xF7,0xC1,0xFF,
0xC3,0xBD,0xFD,0xF3,0xCF,0xBF,0x81,0xFF,0xC3,0xBD,0xFD,0xE3,0xFD,0xBD,0xC3,0xFF,
0xFB,0xF3,0xEB,0xDB,0x81,0xFB,0xFB,0xFF,0x81,0xBF,0x87,0xFB,0xFD,0xBB,0xC7,0xFF,
0xE3,0xDF,0xBF,0x83,0xBD,0xBD,0xC3,0xFF,0x81,0xBD,0xFB,0xF7,0xEF,0xEF,0xEF,0xFF,
0xC3,0xBD,0xBD,0xC3,0xBD,0xBD,0xC3,0xFF,0xC3,0xBD,0xBD,0xC1,0xFD,0xFB,0xC7,0xFF,
0xFF,0xFF,0xF7,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xF7,0xF7,0xEF,
0xF1,0xE7,0xCF,0x9F,0xCF,0xE7,0xF1,0xFF,0xFF,0xFF,0x81,0xFF,0x81,0xFF,0xFF,0xFF,
0x8F,0xE7,0xF3,0xF9,0xF3,0xE7,0x8F,0xFF,0xC3,0xBD,0xFD,0xF3,0xEF,0xFF,0xEF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xF7,0xE3,0xC1,0x80,0x80,0xE3,0xC1,0xFF,
0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,
0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFF,0xFF,0xFF,0xFF,0x1F,0xEF,0xF7,0xF7,
0xF7,0xF7,0xF7,0xFB,0xFC,0xFF,0xFF,0xFF,0xF7,0xF7,0xF7,0xEF,0x1F,0xFF,0xFF,0xFF,
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xC3,0x81,0x81,0x81,0x81,0xC3,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xC9,0x80,0x80,0x80,0xC1,0xE3,0xF7,0xFF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFB,0xF7,0xF7,
0x7E,0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0x7E,0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,
0xF7,0xE3,0xD5,0x88,0xD5,0xF7,0xF7,0xFF,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,
0xF7,0xE3,0xC1,0x80,0xC1,0xE3,0xF7,0xFF,0xF7,0xF7,0xF7,0xF7,0x00,0xF7,0xF7,0xF7,
0x5F,0xAF,0x5F,0xAF,0x5F,0xAF,0x5F,0xAF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,
0xFF,0xFF,0xFE,0xC1,0xAB,0xEB,0xEB,0xFF,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
0xFF,0xFF,0xFF,0xFF,0x55,0xAA,0x55,0xAA,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF7,0xF7,0xF7,0xF7,0xF0,0xF7,0xF7,0xF7,
0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF7,0xF7,0xF7,0xF7,0xF0,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x07,0xF7,0xF7,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xF0,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x07,0xF7,0xF7,0xF7,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,
0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xF7,0xF7,0xF7,0xF7,0x07,0xFF,0xFF,0xFF,
0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0,
0x1C,0x22,0x4A,0x56,0x4C,0x20,0x1E,0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x3A,0x00,
0x40,0x40,0x5C,0x62,0x42,0x62,0x5C,0x00,0x00,0x00,0x3C,0x42,0x40,0x42,0x3C,0x00,
0x02,0x02,0x3A,0x46,0x42,0x46,0x3A,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x3C,0x00,
0x0C,0x12,0x10,0x7C,0x10,0x10,0x10,0x00,0x00,0x00,0x3A,0x46,0x46,0x3A,0x02,0x3C,
0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x1C,0x00,
0x04,0x00,0x0C,0x04,0x04,0x04,0x44,0x38,0x40,0x40,0x44,0x48,0x50,0x68,0x44,0x00,
0x18,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,0x00,0x76,0x49,0x49,0x49,0x49,0x00,
0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,
0x00,0x00,0x5C,0x62,0x62,0x5C,0x40,0x40,0x00,0x00,0x3A,0x46,0x46,0x3A,0x02,0x02,
0x00,0x00,0x5C,0x62,0x40,0x40,0x40,0x00,0x00,0x00,0x3E,0x40,0x3C,0x02,0x7C,0x00,
0x10,0x10,0x7C,0x10,0x10,0x12,0x0C,0x00,0x00,0x00,0x42,0x42,0x42,0x46,0x3A,0x00,
0x00,0x00,0x42,0x42,0x42,0x24,0x18,0x00,0x00,0x00,0x41,0x49,0x49,0x49,0x36,0x00,
0x00,0x00,0x42,0x24,0x18,0x24,0x42,0x00,0x00,0x00,0x42,0x42,0x46,0x3A,0x02,0x3C,
0x00,0x00,0x7E,0x04,0x18,0x20,0x7E,0x00,0x3C,0x20,0x20,0x20,0x20,0x20,0x3C,0x00,
0x0C,0x10,0x10,0x3C,0x10,0x70,0x6E,0x00,0x3C,0x04,0x04,0x04,0x04,0x04,0x3C,0x00,
0x00,0x08,0x1C,0x2A,0x08,0x08,0x08,0x08,0x00,0x00,0x10,0x20,0x7F,0x20,0x10,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x00,0x00,0x08,0x00,
0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x24,0x24,0x7E,0x24,0x7E,0x24,0x24,0x00,
0x08,0x1E,0x28,0x1C,0x0A,0x3C,0x08,0x00,0x00,0x62,0x64,0x08,0x10,0x26,0x46,0x00,
0x30,0x48,0x48,0x30,0x4A,0x44,0x3A,0x00,0x04,0x08,0x10,0x00,0x00,0x00,0x00,0x00,
0x04,0x08,0x10,0x10,0x10,0x08,0x04,0x00,0x20,0x10,0x08,0x08,0x08,0x10,0x20,0x00,
0x08,0x2A,0x1C,0x3E,0x1C,0x2A,0x08,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x10,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x00,
0x3C,0x42,0x46,0x5A,0x62,0x42,0x3C,0x00,0x08,0x18,0x28,0x08,0x08,0x08,0x3E,0x00,
0x3C,0x42,0x02,0x0C,0x30,0x40,0x7E,0x00,0x3C,0x42,0x02,0x1C,0x02,0x42,0x3C,0x00,
0x04,0x0C,0x14,0x24,0x7E,0x04,0x04,0x00,0x7E,0x40,0x78,0x04,0x02,0x44,0x38,0x00,
0x1C,0x20,0x40,0x7C,0x42,0x42,0x3C,0x00,0x7E,0x42,0x04,0x08,0x10,0x10,0x10,0x00,
0x3C,0x42,0x42,0x3C,0x42,0x42,0x3C,0x00,0x3C,0x42,0x42,0x3E,0x02,0x04,0x38,0x00,
0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x08,0x10,
0x0E,0x18,0x30,0x60,0x30,0x18,0x0E,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,
0x70,0x18,0x0C,0x06,0x0C,0x18,0x70,0x00,0x3C,0x42,0x02,0x0C,0x10,0x00,0x10,0x00,
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x18,0x24,0x42,0x7E,0x42,0x42,0x42,0x00,
0x7C,0x22,0x22,0x3C,0x22,0x22,0x7C,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,
0x78,0x24,0x22,0x22,0x22,0x24,0x78,0x00,0x7E,0x40,0x40,0x78,0x40,0x40,0x7E,0x00,
0x7E,0x40,0x40,0x78,0x40,0x40,0x40,0x00,0x1C,0x22,0x40,0x4E,0x42,0x22,0x1C,0x00,
0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,
0x0E,0x04,0x04,0x04,0x04,0x44,0x38,0x00,0x42,0x44,0x48,0x70,0x48,0x44,0x42,0x00,
0x40,0x40,0x40,0x40,0x40,0x40,0x7E,0x00,0x42,0x66,0x5A,0x5A,0x42,0x42,0x42,0x00,
0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x00,0x18,0x24,0x42,0x42,0x42,0x24,0x18,0x00,
0x7C,0x42,0x42,0x7C,0x40,0x40,0x40,0x00,0x18,0x24,0x42,0x42,0x4A,0x24,0x1A,0x00,
0x7C,0x42,0x42,0x7C,0x48,0x44,0x42,0x00,0x3C,0x42,0x40,0x3C,0x02,0x42,0x3C,0x00,
0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,
0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x42,0x42,0x42,0x5A,0x5A,0x66,0x42,0x00,
0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x00,0x22,0x22,0x22,0x1C,0x08,0x08,0x08,0x00,
0x7E,0x02,0x04,0x18,0x20,0x40,0x7E,0x00,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,
0xA0,0x50,0xA0,0x50,0xA0,0x50,0xA0,0x50,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
0xCC,0xCC,0x33,0x33,0xCC,0xCC,0x33,0x33,0xCC,0x66,0x33,0x99,0xCC,0x66,0x33,0x99,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0xAA,0x55,0xAA,0x55,0x99,0x33,0x66,0xCC,0x99,0x33,0x66,0xCC,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x08,0x08,0x08,0x08,0x0F,0x08,0x08,0x08,
0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF8,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
0x01,0x02,0x44,0x48,0x50,0x60,0x40,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,
0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,
0xE3,0xDD,0xB5,0xA9,0xB3,0xDF,0xE1,0xFF,0xFF,0xFF,0xC7,0xFB,0xC3,0xBB,0xC5,0xFF,
0xBF,0xBF,0xA3,0x9D,0xBD,0x9D,0xA3,0xFF,0xFF,0xFF,0xC3,0xBD,0xBF,0xBD,0xC3,0xFF,
0xFD,0xFD,0xC5,0xB9,0xBD,0xB9,0xC5,0xFF,0xFF,0xFF,0xC3,0xBD,0x81,0xBF,0xC3,0xFF,
0xF3,0xED,0xEF,0x83,0xEF,0xEF,0xEF,0xFF,0xFF,0xFF,0xC5,0xB9,0xB9,0xC5,0xFD,0xC3,
0xBF,0xBF,0xA3,0x9D,0xBD,0xBD,0xBD,0xFF,0xF7,0xFF,0xE7,0xF7,0xF7,0xF7,0xE3,0xFF,
0xFB,0xFF,0xF3,0xFB,0xFB,0xFB,0xBB,0xC7,0xBF,0xBF,0xBB,0xB7,0xAF,0x97,0xBB,0xFF,
0xE7,0xF7,0xF7,0xF7,0xF7,0xF7,0xE3,0xFF,0xFF,0xFF,0x89,0xB6,0xB6,0xB6,0xB6,0xFF,
0xFF,0xFF,0xA3,0x9D,0xBD,0xBD,0xBD,0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xC3,0xFF,
0xFF,0xFF,0xA3,0x9D,0x9D,0xA3,0xBF,0xBF,0xFF,0xFF,0xC5,0xB9,0xB9,0xC5,0xFD,0xFD,
0xFF,0xFF,0xA3,0x9D,0xBF,0xBF,0xBF,0xFF,0xFF,0xFF,0xC1,0xBF,0xC3,0xFD,0x83,0xFF,
0xEF,0xEF,0x83,0xEF,0xEF,0xED,0xF3,0xFF,0xFF,0xFF,0xBD,0xBD,0xBD,0xB9,0xC5,0xFF,
0xFF,0xFF,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,0xFF,0xBE,0xB6,0xB6,0xB6,0xC9,0xFF,
0xFF,0xFF,0xBD,0xDB,0xE7,0xDB,0xBD,0xFF,0xFF,0xFF,0xBD,0xBD,0xB9,0xC5,0xFD,0xC3,
0xFF,0xFF,0x81,0xFB,0xE7,0xDF,0x81,0xFF,0xC3,0xDF,0xDF,0xDF,0xDF,0xDF,0xC3,0xFF,
0xF3,0xEF,0xEF,0xC3,0xEF,0x8F,0x91,0xFF,0xC3,0xFB,0xFB,0xFB,0xFB,0xFB,0xC3,0xFF,
0xFF,0xF7,0xE3,0xD5,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,0xEF,0xDF,0x80,0xDF,0xEF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,0xF7,0xFF,
0xDB,0xDB,0xDB,0xFF,0xFF,0xFF,0xFF,0xFF,0xDB,0xDB,0x81,0xDB,0x81,0xDB,0xDB,0xFF,
0xF7,0xE1,0xD7,0xE3,0xF5,0xC3,0xF7,0xFF,0xFF,0x9D,0x9B,0xF7,0xEF,0xD9,0xB9,0xFF,
0xCF,0xB7,0xB7,0xCF,0xB5,0xBB,0xC5,0xFF,0xFB,0xF7,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF7,0xEF,0xEF,0xEF,0xF7,0xFB,0xFF,0xDF,0xEF,0xF7,0xF7,0xF7,0xEF,0xDF,0xFF,
0xF7,0xD5,0xE3,0xC1,0xE3,0xD5,0xF7,0xFF,0xFF,0xF7,0xF7,0xC1,0xF7,0xF7,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xF7,0xEF,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0xFF,
0xC3,0xBD,0xB9,0xA5,0x9D,0xBD,0xC3,0xFF,0xF7,0xE7,0xD7,0xF7,0xF7,0xF7,0xC1,0xFF,
0xC3,0xBD,0xFD,0xF3,0xCF,0xBF,0x81,0xFF,0xC3,0xBD,0xFD,0xE3,0xFD,0xBD,0xC3,0xFF,
0xFB,0xF3,0xEB,0xDB,0x81,0xFB,0xFB,0xFF,0x81,0xBF,0x87,0xFB,0xFD,0xBB,0xC7,0xFF,
0xE3,0xDF,0xBF,0x83,0xBD,0xBD,0xC3,0xFF,0x81,0xBD,0xFB,0xF7,0xEF,0xEF,0xEF,0xFF,
0xC3,0xBD,0xBD,0xC3,0xBD,0xBD,0xC3,0xFF,0xC3,0xBD,0xBD,0xC1,0xFD,0xFB,0xC7,0xFF,
0xFF,0xFF,0xF7,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xF7,0xF7,0xEF,
0xF1,0xE7,0xCF,0x9F,0xCF,0xE7,0xF1,0xFF,0xFF,0xFF,0x81,0xFF,0x81,0xFF,0xFF,0xFF,
0x8F,0xE7,0xF3,0xF9,0xF3,0xE7,0x8F,0xFF,0xC3,0xBD,0xFD,0xF3,0xEF,0xFF,0xEF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0x81,0xBD,0xBD,0xBD,0xFF,
0x83,0xDD,0xDD,0xC3,0xDD,0xDD,0x83,0xFF,0xE3,0xDD,0xBF,0xBF,0xBF,0xDD,0xE3,0xFF,
0x87,0xDB,0xDD,0xDD,0xDD,0xDB,0x87,0xFF,0x81,0xBF,0xBF,0x87,0xBF,0xBF,0x81,0xFF,
0x81,0xBF,0xBF,0x87,0xBF,0xBF,0xBF,0xFF,0xE3,0xDD,0xBF,0xB1,0xBD,0xDD,0xE3,0xFF,
0xBD,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0xFF,0xE3,0xF7,0xF7,0xF7,0xF7,0xF7,0xE3,0xFF,
0xF1,0xFB,0xFB,0xFB,0xFB,0xBB,0xC7,0xFF,0xBD,0xBB,0xB7,0x8F,0xB7,0xBB,0xBD,0xFF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x81,0xFF,0xBD,0x99,0xA5,0xA5,0xBD,0xBD,0xBD,0xFF,
0xBD,0x9D,0xAD,0xB5,0xB9,0xBD,0xBD,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,
0x83,0xBD,0xBD,0x83,0xBF,0xBF,0xBF,0xFF,0xE7,0xDB,0xBD,0xBD,0xB5,0xDB,0xE5,0xFF,
0x83,0xBD,0xBD,0x83,0xB7,0xBB,0xBD,0xFF,0xC3,0xBD,0xBF,0xC3,0xFD,0xBD,0xC3,0xFF,
0xC1,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,
0xBD,0xBD,0xBD,0xDB,0xDB,0xE7,0xE7,0xFF,0xBD,0xBD,0xBD,0xA5,0xA5,0x99,0xBD,0xFF,
0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xFF,0xDD,0xDD,0xDD,0xE3,0xF7,0xF7,0xF7,0xFF,
0x81,0xFD,0xFB,0xE7,0xDF,0xBF,0x81,0xFF,0xF7,0xF7,0xF7,0xF7,0x00,0xF7,0xF7,0xF7,
0x5F,0xAF,0x5F,0xAF,0x5F,0xAF,0x5F,0xAF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,
0x33,0x33,0xCC,0xCC,0x33,0x33,0xCC,0xCC,0x33,0x99,0xCC,0x66,0x33,0x99,0xCC,0x66,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
0xFF,0xFF,0xFF,0xFF,0x55,0xAA,0x55,0xAA,0x66,0xCC,0x99,0x33,0x66,0xCC,0x99,0x33,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF7,0xF7,0xF7,0xF7,0xF0,0xF7,0xF7,0xF7,
0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF7,0xF7,0xF7,0xF7,0xF0,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x07,0xF7,0xF7,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xF0,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x00,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x07,0xF7,0xF7,0xF7,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0xFE,0xFD,0xBB,0xB7,0xAF,0x9F,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,
0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xF7,0xF7,0xF7,0xF7,0x07,0xFF,0xFF,0xFF,
0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0,
};

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,214 @@
#ifndef EMUAPI_H
#define EMUAPI_H
#include "platform_config.h"
#define CUSTOM_SND 1
//#define TIMER_REND 1
#define EXTRA_HEAP 0x10
// Title: < >
#define TITLE " Vic20 Emulator "
#define ROMSDIR "v20"
#define emu_Init(ROM) { v20_Init(); v20_Start(ROM);}
#define emu_Step(x) { v20_Step(); }
#define emu_Input(x) { v20_Input(x); }
#define MAX_FILENAME_PATH 64
#define NB_FILE_HANDLER 4
#define PALETTE_SIZE 256
#define VID_FRAME_SKIP 0x0
#define TFT_VBUFFER_YCROP 0
#define SINGLELINE_RENDERING 1
#define R32(rgb) ((rgb>>16)&0xff)
#define G32(rgb) ((rgb>>8)&0xff)
#define B32(rgb) (rgb & 0xff)
#define ACTION_NONE 0
#define ACTION_MAXKBDVAL 16
#define ACTION_EXITKBD 128
#define ACTION_RUN1 129
#define ACTION_RUN2 130
#define ACTION_RUN3 131
#ifdef KEYMAP_PRESENT
#define keylables_map0_0 (char *)"QWERTYUIOP\x1a"
#define keylables_map0_1 (char *)" ASDFGHJKL\x19"
#define keylables_map0_2 (char *)" ZXCVBNM,.;/"
#define keylables_map0_3 (char *)" +\x10-"
const unsigned short key_map0[] = {
'Q','W','E','R','T','Y','U','I','O','P',157, //default C64 uppercase always
0,'A','S','D','F','G','H','J','K','L',10,
0,'Z','X','C','V','B','N','M',',','.',';','/',
0,0,0,0,
0,'+',' ','-'
};
#define keylables_map1_0 (char *)"1234567890 "
#define keylables_map1_1 (char *)" "
#define keylables_map1_2 (char *)" "
#define keylables_map1_3 (char *)" "
const unsigned short key_map1[] = {
'1','2','3','4','5','6','7','8','9','0',0, // digit keys
0, 0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,
0,0,' ',0
};
#define keylables_map2_0 (char *)"!\"#$%^&*()@"
#define keylables_map2_1 (char *)" "
#define keylables_map2_2 (char *)" <>:?"
#define keylables_map2_3 (char *)" =\x10_"
const unsigned short key_map2[] = {
'!','"','#','$','%','^','&','*','(',')','@', // shiftothers
0, 0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,'<','>',':','?',
153,151,150,152, //U L R D
0,'=',' ','_'
};
#define keylables_map3_0 (char *)"\x11\x12\x13\x14\x15\x16\x17\x18 "
#define keylables_map3_1 (char *)" "
#define keylables_map3_2 (char *)" "
#define keylables_map3_3 (char *)" "
const unsigned short key_map3[] = {
129,130,131,132,133,134,135,136,0,0,0, // function keys
0, 0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,
0,0,' ',0
};
#define keylables_map4_0 (char *)"QWERTYUIOP@"
#define keylables_map4_1 (char *)" ASDFGHJKL\x19"
#define keylables_map4_2 (char *)" ZXCVBNM<>:?"
#define keylables_map4_3 (char *)" =\x10_"
const unsigned short key_map4[] = {
'Q','W','E','R','T','Y','U','I','O','P','@', //shift uppercase
0,'A','S','D','F','G','H','J','K','L',10,
0,'Z','X','C','V','B','N','M','<','>',':','?',
0,0,0,0,
0,'=',' ','_'
};
#define keylables_map5_0 (char *)" "
#define keylables_map5_1 (char *)" "
#define keylables_map5_2 (char *)" "
#define keylables_map5_3 (char *)" "
const unsigned short key_map5[] = {
0,0,0,0,0,0,0,0,0,0,0, // extra keys
0, 0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,0,0,0,0,
153,151,150,152, //U L R D
0,0,' ',0
};
const unsigned short matkeys[] = {
0x004,0x008,0x108,0x104,0x208,0x204,0x308,0x304,0x408,0x404,0x410, // row 1
0x502,0x002,0x020,0x102,0x120,0x202,0x220,0x302,0x320,0x402,0x420, // row 2
0x508,0x001,0x040,0x101,0x140,0x201,0x240,0x210,0x340,0x301,0x401,0x440, // row 3
0x504,0x520,0x540,0x501, // UP LEFT RIGHT DOWN
0x510,0x010,0x110,0x310, // row 4
};
#endif
#define MASK_JOY2_RIGHT 0x0001
#define MASK_JOY2_LEFT 0x0002
#define MASK_JOY2_UP 0x0004
#define MASK_JOY2_DOWN 0x0008
#define MASK_JOY2_BTN 0x0010
#define MASK_KEY_USER1 0x0020
#define MASK_KEY_USER2 0x0040
#define MASK_KEY_USER3 0x0080
#define MASK_JOY1_RIGHT 0x0100
#define MASK_JOY1_LEFT 0x0200
#define MASK_JOY1_UP 0x0400
#define MASK_JOY1_DOWN 0x0800
#define MASK_JOY1_BTN 0x1000
#define MASK_KEY_USER4 0x2000
#ifdef __cplusplus
extern "C" {
#endif
extern void emu_init(void);
extern void emu_start(void);
extern void emu_printf(const char * text);
extern void emu_printi(int val);
extern void emu_printh(int val);
extern void * emu_Malloc(unsigned int size);
extern void * emu_MallocI(unsigned int size);
extern void emu_Free(void * pt);
extern int emu_FileOpen(const char * filepath, const char * mode);
extern int emu_FileRead(void * buf, int size, int handler);
extern int emu_FileGetc(int handler);
extern int emu_FileSeek(int handler, int seek, int origin);
extern int emu_FileTell(int handler);
extern void emu_FileClose(int handler);
extern unsigned int emu_FileSize(const char * filepath);
extern unsigned int emu_LoadFile(const char * filepath, void * buf, int size);
extern unsigned int emu_LoadFileSeek(const char * filepath, void * buf, int size, int seek);
extern void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index);
extern void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride);
extern void emu_DrawLine(unsigned char * VBuf, int width, int height, int line);
extern void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line);
extern void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line);
extern void emu_CopyLine(int width, int height, int ysrc, int ydst);
extern void emu_DrawVsync(void);
extern int emu_FrameSkip(void);
extern void * emu_LineBuffer(int line);
extern void emu_tweakVideo(int shiftdelta, int numdelta, int denomdelta);
extern bool menuActive(void);
extern char * menuSelection(void);
extern char * menuSecondSelection(void);
extern void toggleMenu(bool on);
extern int handleMenu(unsigned short bClick);
extern int handleOSKB(void);
extern void toggleOSKB(bool forceon);
extern void emu_InitJoysticks(void);
extern int emu_SwapJoysticks(int statusOnly);
extern unsigned short emu_DebounceLocalKeys(void);
extern int emu_ReadKeys(void);
extern int emu_GetPad(void);
extern int emu_GetMouse(int *x, int *y, int *buts);
extern int emu_MouseDetected(void);
extern int emu_KeyboardDetected(void);
extern int emu_ReadAnalogJoyX(int min, int max);
extern int emu_ReadAnalogJoyY(int min, int max);
extern int emu_ReadI2CKeyboard(void);
extern unsigned char emu_ReadI2CKeyboard2(int row);
extern void emu_KeyboardOnUp(int keymodifer, int key);
extern void emu_KeyboardOnDown(int keymodifer, int key);
extern void emu_MidiOnDataReceived(unsigned char data);
extern void emu_sndPlaySound(int chan, int volume, int freq);
extern void emu_sndPlayBuzz(int size, int val);
extern void emu_sndInit();
extern void emu_resetus(void);
extern int emu_us(void);
extern int emu_setKeymap(int index);
#ifdef __cplusplus
}
#endif
#endif

Wyświetl plik

@ -0,0 +1,148 @@
// Font: c64_lower.64c
PROGMEM const unsigned char font8x8[128][8] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F
{ 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7f, 0x00 }, // Space // 0x10
{ 0x00, 0x27, 0x31, 0x27, 0x21, 0x71, 0x00, 0x00 }, // F1 // 0x11
{ 0x00, 0x77, 0x41, 0x77, 0x11, 0x71, 0x00, 0x00 }, // F2
{ 0x00, 0x77, 0x41, 0x77, 0x41, 0x71, 0x00, 0x00 }, // F3
{ 0x00, 0x17, 0x51, 0x77, 0x41, 0x41, 0x00, 0x00 }, // F4
{ 0x00, 0x77, 0x11, 0x77, 0x41, 0x71, 0x00, 0x00 }, // F5
{ 0x00, 0x77, 0x11, 0x77, 0x51, 0x71, 0x00, 0x00 }, // F6
{ 0x00, 0x77, 0x41, 0x47, 0x41, 0x41, 0x00, 0x00 }, // F7
{ 0x00, 0x77, 0x51, 0x77, 0x51, 0x71, 0x00, 0x00 }, // F8 // 0x18
{ 0x00, 0x00, 0x20, 0x24, 0x3e, 0x04, 0x00, 0x00 }, // Return // 0x19
{ 0x00, 0x59, 0x4b, 0x5b, 0x4b, 0xd9, 0x00, 0x00 }, // Del // 0x1A
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019
//{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space)
{ 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!)
{ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (")
{ 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#)
{ 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($)
{ 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%)
{ 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&)
{ 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (')
{ 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (()
{ 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ())
{ 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*)
{ 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,)
{ 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.)
{ 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/)
{ 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0)
{ 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1)
{ 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2)
{ 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3)
{ 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4)
{ 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5)
{ 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6)
{ 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7)
{ 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8)
{ 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9)
{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:)
{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (//)
{ 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<)
{ 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=)
{ 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>)
{ 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?)
{ 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@)
{ 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A)
{ 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B)
{ 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C)
{ 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D)
{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E)
{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F)
{ 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G)
{ 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H)
{ 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I)
{ 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J)
{ 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K)
{ 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L)
{ 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M)
{ 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N)
{ 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O)
{ 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P)
{ 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q)
{ 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R)
{ 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S)
{ 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T)
{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U)
{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V)
{ 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W)
{ 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X)
{ 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y)
{ 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z)
{ 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([)
{ 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\)
{ 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (])
{ 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_)
{ 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`)
{ 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a)
{ 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b)
{ 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c)
{ 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d)
{ 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e)
{ 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f)
{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g)
{ 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h)
{ 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i)
{ 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j)
{ 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k)
{ 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l)
{ 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m)
{ 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n)
{ 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o)
{ 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p)
{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q)
{ 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r)
{ 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s)
{ 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t)
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u)
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v)
{ 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w)
{ 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x)
{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y)
{ 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z)
{ 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({)
{ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|)
{ 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (})
{ 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~)
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F
};

Wyświetl plik

@ -0,0 +1,124 @@
#ifndef IOPINS_H
#define IOPINS_H
#include "platform_config.h"
#ifdef TEECOMPUTER
// Teecomputer layout
// VGA
// R 3 2K
// R 4 1K
// R 33 500
// G 11 2K
// G 13 1K
// G 2 500
// B 10 820
// B 12 390
// HSYNC 15 82
// VSYNC 8 82
// Display
#define TFT_SCLK 27
#define TFT_MOSI 26
#define TFT_MISO 255
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 23
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 255 // 255 for ILI/ST if connected to 3.3V or 24 if really needed
// SD
#define SD_CS BUILTIN_SDCARD
// Audio
#define AUDIO_I2S_DIN 7
#define AUDIO_I2S_BCK 21
#define AUDIO_I2S_LCK 20
// Keyboard matrix
#define KLED 14
//Cols (out)
//pico 1,2,3,4,5,14
//teen 16,6,24,25,28,31
#define KCOLOUT1 16
#define KCOLOUT2 6
#define KCOLOUT3 24
#define KCOLOUT4 25
#define KCOLOUT5 28
#define KCOLOUT6 31
//Rows (in)
//pico 9,8,6,15,7,22
//teen 19,18,17,5,29,30,32 //5,6,16,17,18,19
#define KROWIN1 19
#define KROWIN2 18
#define KROWIN3 17
#define KROWIN4 5
#define KROWIN5 29
#define KROWIN6 30
#define KROWIN7 32
#define PIN_KEY_USER1 41
#define PIN_KEY_USER2 40
// Second joystick (external)
#define PIN_JOY1_BTN 34
#define PIN_JOY1_1 35 // UP
#define PIN_JOY1_2 36 // DOWN
#define PIN_JOY1_3 38 // RIGHT
#define PIN_JOY1_4 37 // LEFT
#else
// Original Layout
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// SD
#define SD_CS BUILTIN_SDCARD
// I2C keyboard
#define I2C_SCL_IO 19
#define I2C_SDA_IO 18
// Analog joystick (primary) for JOY2 and 5 extra buttons
#ifdef HAS_T4_VGA
#define PIN_JOY2_A1X A3
#define PIN_JOY2_A2Y A2
#define PIN_JOY2_BTN 14
#define PIN_KEY_USER1 22
#define PIN_KEY_USER2 23
// Second joystick
#define PIN_JOY1_BTN 34
#define PIN_JOY1_1 35 // UP
#define PIN_JOY1_2 36 // DOWN
#define PIN_JOY1_3 38 // RIGHT
#define PIN_JOY1_4 37 // LEFT
#else
#define PIN_JOY2_A1X A1
#define PIN_JOY2_A2Y A2
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#endif
#endif

Wyświetl plik

@ -0,0 +1,514 @@
const unsigned char PROGMEM kernalrom[8192] = {
0x0F,0xDC,0xA5,0x61,0xC9,0x88,0x90,0x03,0x20,0xD4,0xDA,0x20,0xCC,0xDC,0xA5,0x07,
0x18,0x69,0x81,0xF0,0xF3,0x38,0xE9,0x01,0x48,0xA2,0x05,0xB5,0x69,0xB4,0x61,0x95,
0x61,0x94,0x69,0xCA,0x10,0xF5,0xA5,0x56,0x85,0x70,0x20,0x53,0xD8,0x20,0xB4,0xDF,
0xA9,0xC4,0xA0,0xDF,0x20,0x56,0xE0,0xA9,0x00,0x85,0x6F,0x68,0x20,0xB9,0xDA,0x60,
0x85,0x71,0x84,0x72,0x20,0xCA,0xDB,0xA9,0x57,0x20,0x28,0xDA,0x20,0x5A,0xE0,0xA9,
0x57,0xA0,0x00,0x4C,0x28,0xDA,0x85,0x71,0x84,0x72,0x20,0xC7,0xDB,0xB1,0x71,0x85,
0x67,0xA4,0x71,0xC8,0x98,0xD0,0x02,0xE6,0x72,0x85,0x71,0xA4,0x72,0x20,0x28,0xDA,
0xA5,0x71,0xA4,0x72,0x18,0x69,0x05,0x90,0x01,0xC8,0x85,0x71,0x84,0x72,0x20,0x67,
0xD8,0xA9,0x5C,0xA0,0x00,0xC6,0x67,0xD0,0xE4,0x60,0x98,0x35,0x44,0x7A,0x00,0x68,
0x28,0xB1,0x46,0x00,0x20,0x2B,0xDC,0x30,0x37,0xD0,0x20,0x20,0xF3,0xFF,0x86,0x22,
0x84,0x23,0xA0,0x04,0xB1,0x22,0x85,0x62,0xC8,0xB1,0x22,0x85,0x64,0xA0,0x08,0xB1,
0x22,0x85,0x63,0xC8,0xB1,0x22,0x85,0x65,0x4C,0xE0,0xE0,0xA9,0x8B,0xA0,0x00,0x20,
0xA2,0xDB,0xA9,0x8A,0xA0,0xE0,0x20,0x28,0xDA,0xA9,0x8F,0xA0,0xE0,0x20,0x67,0xD8,
0xA6,0x65,0xA5,0x62,0x85,0x65,0x86,0x62,0xA6,0x63,0xA5,0x64,0x85,0x63,0x86,0x64,
0xA9,0x00,0x85,0x66,0xA5,0x61,0x85,0x70,0xA9,0x80,0x85,0x61,0x20,0xD7,0xD8,0xA2,
0x8B,0xA0,0x00,0x4C,0xD4,0xDB,0xC9,0xF0,0xD0,0x07,0x84,0x38,0x86,0x37,0x4C,0x63,
0xC6,0xAA,0xD0,0x02,0xA2,0x1E,0x4C,0x37,0xC4,0x20,0xD2,0xFF,0xB0,0xE8,0x60,0x20,
0xCF,0xFF,0xB0,0xE2,0x60,0x20,0xC9,0xFF,0xB0,0xDC,0x60,0x20,0xC6,0xFF,0xB0,0xD6,
0x60,0x20,0xE4,0xFF,0xB0,0xD0,0x60,0x20,0x8A,0xCD,0x20,0xF7,0xD7,0xA9,0xE1,0x48,
0xA9,0x43,0x48,0xAD,0x0F,0x03,0x48,0xAD,0x0C,0x03,0xAE,0x0D,0x03,0xAC,0x0E,0x03,
0x28,0x6C,0x14,0x00,0x08,0x8D,0x0C,0x03,0x8E,0x0D,0x03,0x8C,0x0E,0x03,0x68,0x8D,
0x0F,0x03,0x60,0x20,0xD1,0xE1,0xA6,0x2D,0xA4,0x2E,0xA9,0x2B,0x20,0xD8,0xFF,0xB0,
0x95,0x60,0xA9,0x01,0x2C,0xA9,0x00,0x85,0x0A,0x20,0xD1,0xE1,0xA5,0x0A,0xA6,0x2B,
0xA4,0x2C,0x20,0xD5,0xFF,0xB0,0x57,0xA5,0x0A,0xF0,0x1A,0xA2,0x1C,0x20,0xB7,0xFF,
0x29,0x10,0xF0,0x03,0x4C,0x37,0xC4,0xA5,0x7A,0xC9,0x02,0xF0,0x07,0xA9,0x64,0xA0,
0xC3,0x4C,0x1E,0xCB,0x60,0x20,0xB7,0xFF,0x29,0xBF,0xF0,0x05,0xA2,0x1D,0x4C,0x37,
0xC4,0xA5,0x7B,0xC9,0x02,0xD0,0x0E,0x86,0x2D,0x84,0x2E,0xA9,0x76,0xA0,0xC3,0x20,
0x1E,0xCB,0x4C,0x2A,0xC5,0x20,0x8E,0xC6,0x4C,0x76,0xE4,0x20,0x16,0xE2,0x20,0xC0,
0xFF,0xB0,0x0B,0x60,0x20,0x16,0xE2,0xA5,0x49,0x20,0xC3,0xFF,0x90,0xC6,0x4C,0xF6,
0xE0,0xA9,0x00,0x20,0xBD,0xFF,0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF,0x20,0x03,0xE2,
0x20,0x54,0xE2,0x20,0x03,0xE2,0x20,0xFD,0xE1,0xA0,0x00,0x86,0x49,0x20,0xBA,0xFF,
0x20,0x03,0xE2,0x20,0xFD,0xE1,0x8A,0xA8,0xA6,0x49,0x4C,0xBA,0xFF,0x20,0x0B,0xE2,
0x4C,0x9E,0xD7,0x20,0x79,0x00,0xD0,0x02,0x68,0x68,0x60,0x20,0xFD,0xCE,0x20,0x79,
0x00,0xD0,0xF7,0x4C,0x08,0xCF,0xA9,0x00,0x20,0xBD,0xFF,0x20,0x0E,0xE2,0x20,0x9E,
0xD7,0x86,0x49,0x8A,0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF,0x20,0x03,0xE2,0x20,0xFD,
0xE1,0x86,0x4A,0xA0,0x00,0xA5,0x49,0xE0,0x03,0x90,0x01,0x88,0x20,0xBA,0xFF,0x20,
0x03,0xE2,0x20,0xFD,0xE1,0x8A,0xA8,0xA6,0x4A,0xA5,0x49,0x20,0xBA,0xFF,0x20,0x03,
0xE2,0x20,0x0B,0xE2,0x20,0x9E,0xCD,0x20,0xA3,0xD6,0xA6,0x22,0xA4,0x23,0x4C,0xBD,
0xFF,0xA9,0xDD,0xA0,0xE2,0x20,0x67,0xD8,0x20,0x0C,0xDC,0xA9,0xE2,0xA0,0xE2,0xA6,
0x6E,0x20,0x07,0xDB,0x20,0x0C,0xDC,0x20,0xCC,0xDC,0xA9,0x00,0x85,0x6F,0x20,0x53,
0xD8,0xA9,0xE7,0xA0,0xE2,0x20,0x50,0xD8,0xA5,0x66,0x48,0x10,0x0D,0x20,0x49,0xD8,
0xA5,0x66,0x30,0x09,0xA5,0x12,0x49,0xFF,0x85,0x12,0x20,0xB4,0xDF,0xA9,0xE7,0xA0,
0xE2,0x20,0x67,0xD8,0x68,0x10,0x03,0x20,0xB4,0xDF,0xA9,0xEC,0xA0,0xE2,0x4C,0x40,
0xE0,0x20,0xCA,0xDB,0xA9,0x00,0x85,0x12,0x20,0x68,0xE2,0xA2,0x4E,0xA0,0x00,0x20,
0xF3,0xE0,0xA9,0x57,0xA0,0x00,0x20,0xA2,0xDB,0xA9,0x00,0x85,0x66,0xA5,0x12,0x20,
0xD9,0xE2,0xA9,0x4E,0xA0,0x00,0x4C,0x0F,0xDB,0x48,0x4C,0x9A,0xE2,0x81,0x49,0x0F,
0xDA,0xA2,0x83,0x49,0x0F,0xDA,0xA2,0x7F,0x00,0x00,0x00,0x00,0x05,0x84,0xE6,0x1A,
0x2D,0x1B,0x86,0x28,0x07,0xFB,0xF8,0x87,0x99,0x68,0x89,0x01,0x87,0x23,0x35,0xDF,
0xE1,0x86,0xA5,0x5D,0xE7,0x28,0x83,0x49,0x0F,0xDA,0xA2,0xA5,0x66,0x48,0x10,0x03,
0x20,0xB4,0xDF,0xA5,0x61,0x48,0xC9,0x81,0x90,0x07,0xA9,0xBC,0xA0,0xD9,0x20,0x0F,
0xDB,0xA9,0x3B,0xA0,0xE3,0x20,0x40,0xE0,0x68,0xC9,0x81,0x90,0x07,0xA9,0xDD,0xA0,
0xE2,0x20,0x50,0xD8,0x68,0x10,0x03,0x4C,0xB4,0xDF,0x60,0x0B,0x76,0xB3,0x83,0xBD,
0xD3,0x79,0x1E,0xF4,0xA6,0xF5,0x7B,0x83,0xFC,0xB0,0x10,0x7C,0x0C,0x1F,0x67,0xCA,
0x7C,0xDE,0x53,0xCB,0xC1,0x7D,0x14,0x64,0x70,0x4C,0x7D,0xB7,0xEA,0x51,0x7A,0x7D,
0x63,0x30,0x88,0x7E,0x7E,0x92,0x44,0x99,0x3A,0x7E,0x4C,0xCC,0x91,0xC7,0x7F,0xAA,
0xAA,0xAA,0x13,0x81,0x00,0x00,0x00,0x00,0x20,0x5B,0xE4,0x20,0xA4,0xE3,0x20,0x04,
0xE4,0xA2,0xFB,0x9A,0x4C,0x74,0xC4,0xE6,0x7A,0xD0,0x02,0xE6,0x7B,0xAD,0x60,0xEA,
0xC9,0x3A,0xB0,0x0A,0xC9,0x20,0xF0,0xEF,0x38,0xE9,0x30,0x38,0xE9,0xD0,0x60,0x80,
0x4F,0xC7,0x52,0x58,0xA9,0x4C,0x85,0x54,0x85,0x00,0xA9,0x48,0xA0,0xD2,0x85,0x01,
0x84,0x02,0xA9,0x91,0xA0,0xD3,0x85,0x05,0x84,0x06,0xA9,0xAA,0xA0,0xD1,0x85,0x03,
0x84,0x04,0xA2,0x1C,0xBD,0x87,0xE3,0x95,0x73,0xCA,0x10,0xF8,0xA9,0x03,0x85,0x53,
0xA9,0x00,0x85,0x68,0x85,0x13,0x85,0x18,0xA2,0x01,0x8E,0xFD,0x01,0x8E,0xFC,0x01,
0xA2,0x19,0x86,0x16,0x38,0x20,0x9C,0xFF,0x86,0x2B,0x84,0x2C,0x38,0x20,0x99,0xFF,
0x86,0x37,0x84,0x38,0x86,0x33,0x84,0x34,0xA0,0x00,0x98,0x91,0x2B,0xE6,0x2B,0xD0,
0x02,0xE6,0x2C,0x60,0xA5,0x2B,0xA4,0x2C,0x20,0x08,0xC4,0xA9,0x36,0xA0,0xE4,0x20,
0x1E,0xCB,0xA5,0x37,0x38,0xE5,0x2B,0xAA,0xA5,0x38,0xE5,0x2C,0x20,0xCD,0xDD,0xA9,
0x29,0xA0,0xE4,0x20,0x1E,0xCB,0x4C,0x44,0xC6,0x20,0x42,0x59,0x54,0x45,0x53,0x20,
0x46,0x52,0x45,0x45,0x0D,0x00,0x93,0x2A,0x2A,0x2A,0x2A,0x20,0x43,0x42,0x4D,0x20,
0x42,0x41,0x53,0x49,0x43,0x20,0x56,0x32,0x20,0x2A,0x2A,0x2A,0x2A,0x0D,0x00,0x3A,
0xC4,0x83,0xC4,0x7C,0xC5,0x1A,0xC7,0xE4,0xC7,0x86,0xCE,0xA2,0x0B,0xBD,0x4F,0xE4,
0x9D,0x00,0x03,0xCA,0x10,0xF7,0x60,0x20,0xCC,0xFF,0xA9,0x00,0x85,0x13,0x20,0x7A,
0xC6,0x58,0x4C,0x74,0xC4,0x41,0x20,0x33,0xC5,0x4C,0x77,0xC6,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xAD,0x2C,0x91,0x29,0xDF,0x8D,0x2C,0x91,0x60,0xAD,0x2C,0x91,0x09,0x20,0x8D,0x2C,
0x91,0x60,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,0x4A,0x60,0xA6,0xB9,0x4C,0x47,
0xF6,0x8A,0xD0,0x08,0xA5,0xC3,0x85,0xAE,0xA5,0xC4,0x85,0xAF,0x4C,0x6A,0xF6,0x20,
0xE3,0xF8,0x90,0x03,0x68,0xA9,0x00,0x4C,0x9E,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xA2,0x10,0xA0,0x91,0x60,0xA2,0x16,0xA0,0x17,0x60,0xB0,0x07,0x86,0xD6,0x84,0xD3,
0x20,0x87,0xE5,0xA6,0xD6,0xA4,0xD3,0x60,0x20,0xBB,0xE5,0xAD,0x88,0x02,0x29,0xFD,
0x0A,0x0A,0x09,0x80,0x8D,0x05,0x90,0xAD,0x88,0x02,0x29,0x02,0xF0,0x08,0xA9,0x80,
0x0D,0x02,0x90,0x8D,0x02,0x90,0xA9,0x00,0x8D,0x91,0x02,0x85,0xCF,0xA9,0xDC,0x8D,
0x8F,0x02,0xA9,0xEB,0x8D,0x90,0x02,0xA9,0x0A,0x8D,0x89,0x02,0x8D,0x8C,0x02,0xA9,
0x06,0x8D,0x86,0x02,0xA9,0x04,0x8D,0x8B,0x02,0xA9,0x0C,0x85,0xCD,0x85,0xCC,0xAD,
0x88,0x02,0x09,0x80,0xA8,0xA9,0x00,0xAA,0x94,0xD9,0x18,0x69,0x16,0x90,0x01,0xC8,
0xE8,0xE0,0x18,0xD0,0xF3,0xA9,0xFF,0x95,0xD9,0xA2,0x16,0x20,0x8D,0xEA,0xCA,0x10,
0xFA,0xA0,0x00,0x84,0xD3,0x84,0xD6,0xA6,0xD6,0xA5,0xD3,0xB4,0xD9,0x30,0x08,0x18,
0x69,0x16,0x85,0xD3,0xCA,0x10,0xF4,0xB5,0xD9,0x29,0x03,0x0D,0x88,0x02,0x85,0xD2,
0xBD,0xFD,0xED,0x85,0xD1,0xA9,0x15,0xE8,0xB4,0xD9,0x30,0x06,0x18,0x69,0x16,0xE8,
0x10,0xF6,0x85,0xD5,0x60,0x20,0xBB,0xE5,0x4C,0x81,0xE5,0xA9,0x03,0x85,0x9A,0xA9,
0x00,0x85,0x99,0xA2,0x10,0xBD,0xE3,0xED,0x9D,0xFF,0x8F,0xCA,0xD0,0xF7,0x60,0xAC,
0x77,0x02,0xA2,0x00,0xBD,0x78,0x02,0x9D,0x77,0x02,0xE8,0xE4,0xC6,0xD0,0xF5,0xC6,
0xC6,0x98,0x58,0x18,0x60,0x20,0x42,0xE7,0xA5,0xC6,0x85,0xCC,0x8D,0x92,0x02,0xF0,
0xF7,0x78,0xA5,0xCF,0xF0,0x0C,0xA5,0xCE,0xAE,0x87,0x02,0xA0,0x00,0x84,0xCF,0x20,
0xA1,0xEA,0x20,0xCF,0xE5,0xC9,0x83,0xD0,0x10,0xA2,0x09,0x78,0x86,0xC6,0xBD,0xF3,
0xED,0x9D,0x76,0x02,0xCA,0xD0,0xF7,0xF0,0xCF,0xC9,0x0D,0xD0,0xC8,0xA4,0xD5,0x84,
0xD0,0xB1,0xD1,0xC9,0x20,0xD0,0x03,0x88,0xD0,0xF7,0xC8,0x84,0xC8,0xA0,0x00,0x8C,
0x92,0x02,0x84,0xD3,0x84,0xD4,0xA5,0xC9,0x30,0x1D,0xA6,0xD6,0x20,0x19,0xE7,0xE4,
0xC9,0xD0,0x14,0xD0,0x12,0xA5,0xCA,0x85,0xD3,0xC5,0xC8,0x90,0x0A,0xB0,0x42,0x98,
0x48,0x8A,0x48,0xA5,0xD0,0xF0,0x91,0xA4,0xD3,0xB1,0xD1,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0x85,0xD7,0x29,0x3F,0x06,0xD7,0x24,0xD7,0x10,0x02,0x09,0x80,0x90,0x04,
0xA6,0xD4,0xD0,0x04,0x70,0x02,0x09,0x40,0xE6,0xD3,0x20,0xB8,0xE6,0xC4,0xC8,0xD0,
0x17,0xA9,0x00,0x85,0xD0,0xA9,0x0D,0xA6,0x99,0xE0,0x03,0xF0,0x06,0xA6,0x9A,0xE0,
0x03,0xF0,0x03,0x20,0x42,0xE7,0xA9,0x0D,0x85,0xD7,0x68,0xAA,0x68,0xA8,0xA5,0xD7,
0xC9,0xDE,0xD0,0x02,0xA9,0xFF,0x18,0x60,0xC9,0x22,0xD0,0x08,0xA5,0xD4,0x49,0x01,
0x85,0xD4,0xA9,0x22,0x60,0x09,0x40,0xA6,0xC7,0xF0,0x02,0x09,0x80,0xA6,0xD8,0xF0,
0x02,0xC6,0xD8,0xAE,0x86,0x02,0x20,0xA1,0xEA,0x20,0xEA,0xE6,0x68,0xA8,0xA5,0xD8,
0xF0,0x02,0x46,0xD4,0x68,0xAA,0x68,0x18,0x58,0x60,0x20,0xFA,0xE8,0xE6,0xD3,0xA5,
0xD5,0xC5,0xD3,0xB0,0x37,0xC9,0x57,0xF0,0x2A,0xAD,0x92,0x02,0xF0,0x03,0x4C,0xF0,
0xE9,0xA6,0xD6,0xE0,0x17,0x90,0x07,0x20,0x75,0xE9,0xC6,0xD6,0xA6,0xD6,0x16,0xD9,
0x56,0xD9,0x4C,0x5B,0xED,0x69,0x16,0x85,0xD5,0xB5,0xD9,0x30,0x03,0xCA,0xD0,0xF9,
0x4C,0x7E,0xEA,0xC6,0xD6,0x20,0xC3,0xE8,0xA9,0x00,0x85,0xD3,0x60,0xA6,0xD6,0xD0,
0x06,0x86,0xD3,0x68,0x68,0xD0,0xA5,0xCA,0x86,0xD6,0x20,0x87,0xE5,0xA4,0xD5,0x84,
0xD3,0x60,0x48,0x85,0xD7,0x8A,0x48,0x98,0x48,0xA9,0x00,0x85,0xD0,0xA4,0xD3,0xA5,
0xD7,0x10,0x03,0x4C,0x00,0xE8,0xC9,0x0D,0xD0,0x03,0x4C,0xD8,0xE8,0xC9,0x20,0x90,
0x10,0xC9,0x60,0x90,0x04,0x29,0xDF,0xD0,0x02,0x29,0x3F,0x20,0xB8,0xE6,0x4C,0xC7,
0xE6,0xA6,0xD8,0xF0,0x03,0x4C,0xCB,0xE6,0xC9,0x14,0xD0,0x2E,0x98,0xD0,0x06,0x20,
0x2D,0xE7,0x4C,0x9F,0xE7,0x20,0xE8,0xE8,0x88,0x84,0xD3,0x20,0xB2,0xEA,0xC8,0xB1,
0xD1,0x88,0x91,0xD1,0xC8,0xB1,0xF3,0x88,0x91,0xF3,0xC8,0xC4,0xD5,0xD0,0xEF,0xA9,
0x20,0x91,0xD1,0xAD,0x86,0x02,0x91,0xF3,0x10,0x4D,0xA6,0xD4,0xF0,0x03,0x4C,0xCB,
0xE6,0xC9,0x12,0xD0,0x02,0x85,0xC7,0xC9,0x13,0xD0,0x03,0x20,0x81,0xE5,0xC9,0x1D,
0xD0,0x17,0xC8,0x20,0xFA,0xE8,0x84,0xD3,0x88,0xC4,0xD5,0x90,0x09,0xC6,0xD6,0x20,
0xC3,0xE8,0xA0,0x00,0x84,0xD3,0x4C,0xDC,0xE6,0xC9,0x11,0xD0,0x1D,0x18,0x98,0x69,
0x16,0xA8,0xE6,0xD6,0xC5,0xD5,0x90,0xEC,0xF0,0xEA,0xC6,0xD6,0xE9,0x16,0x90,0x04,
0x85,0xD3,0xD0,0xF8,0x20,0xC3,0xE8,0x4C,0xDC,0xE6,0x20,0x12,0xE9,0x4C,0x21,0xED,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0x29,0x7F,0xC9,0x7F,0xD0,0x02,0xA9,0x5E,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xC9,0x20,0x90,0x03,0x4C,0xC5,0xE6,0xC9,0x0D,0xD0,0x03,0x4C,0xD8,
0xE8,0xA6,0xD4,0xD0,0x3F,0xC9,0x14,0xD0,0x37,0xA4,0xD5,0xB1,0xD1,0xC9,0x20,0xD0,
0x04,0xC4,0xD3,0xD0,0x07,0xC0,0x57,0xF0,0x24,0x20,0xEE,0xE9,0xA4,0xD5,0x20,0xB2,
0xEA,0x88,0xB1,0xD1,0xC8,0x91,0xD1,0x88,0xB1,0xF3,0xC8,0x91,0xF3,0x88,0xC4,0xD3,
0xD0,0xEF,0xA9,0x20,0x91,0xD1,0xAD,0x86,0x02,0x91,0xF3,0xE6,0xD8,0x4C,0xDC,0xE6,
0xA6,0xD8,0xF0,0x05,0x09,0x40,0x4C,0xCB,0xE6,0xC9,0x11,0xD0,0x16,0xA6,0xD6,0xF0,
0x37,0xC6,0xD6,0xA5,0xD3,0x38,0xE9,0x16,0x90,0x04,0x85,0xD3,0x10,0x2A,0x20,0x87,
0xE5,0xD0,0x25,0xC9,0x12,0xD0,0x04,0xA9,0x00,0x85,0xC7,0xC9,0x1D,0xD0,0x12,0x98,
0xF0,0x09,0x20,0xE8,0xE8,0x88,0x84,0xD3,0x4C,0xDC,0xE6,0x20,0x2D,0xE7,0x4C,0xDC,
0xE6,0xC9,0x13,0xD0,0x06,0x20,0x5F,0xE5,0x4C,0xDC,0xE6,0x09,0x80,0x20,0x12,0xE9,
0x4C,0x30,0xED,0x46,0xC9,0xA6,0xD6,0xE8,0xE0,0x17,0xD0,0x03,0x20,0x75,0xE9,0xB5,
0xD9,0x10,0xF4,0x86,0xD6,0x4C,0x87,0xE5,0xA2,0x00,0x86,0xD8,0x86,0xC7,0x86,0xD4,
0x86,0xD3,0x20,0xC3,0xE8,0x4C,0xDC,0xE6,0xA2,0x04,0xA9,0x00,0xC5,0xD3,0xF0,0x07,
0x18,0x69,0x16,0xCA,0xD0,0xF6,0x60,0xC6,0xD6,0x60,0xA2,0x04,0xA9,0x15,0xC5,0xD3,
0xF0,0x07,0x18,0x69,0x16,0xCA,0xD0,0xF6,0x60,0xA6,0xD6,0xE0,0x17,0xF0,0x02,0xE6,
0xD6,0x60,0xA2,0x07,0xDD,0x21,0xE9,0xF0,0x04,0xCA,0x10,0xF8,0x60,0x8E,0x86,0x02,
0x60,0x90,0x05,0x1C,0x9F,0x9C,0x1E,0x1F,0x9E,0xEF,0xA1,0xDF,0xA6,0xE1,0xB1,0xE2,
0xB2,0xE3,0xB3,0xE4,0xB4,0xE5,0xB5,0xE6,0xB6,0xE7,0xB7,0xE8,0xB8,0xE9,0xB9,0xFA,
0xBA,0xFB,0xBB,0xFC,0xBC,0xEC,0xBD,0xFE,0xBE,0x84,0xBF,0xF7,0xC0,0xF8,0xDB,0xF9,
0xDD,0xEA,0xDE,0x5E,0xE0,0x5B,0xE1,0x5D,0xE2,0x40,0xB0,0x61,0xB1,0x78,0xDB,0x79,
0xDD,0x66,0xB6,0x77,0xC0,0x70,0xF0,0x71,0xF1,0x72,0xF2,0x73,0xF3,0x74,0xF4,0x75,
0xF5,0x76,0xF6,0x7D,0xFD,0xA5,0xAC,0x48,0xA5,0xAD,0x48,0xA5,0xAE,0x48,0xA5,0xAF,
0x48,0xA2,0xFF,0xC6,0xD6,0xC6,0xC9,0xC6,0xF2,0xE8,0x20,0x7E,0xEA,0xE0,0x16,0xB0,
0x0C,0xBD,0xFE,0xED,0x85,0xAC,0xB5,0xDA,0x20,0x56,0xEA,0x30,0xEC,0x20,0x8D,0xEA,
0xA2,0x00,0xB5,0xD9,0x29,0x7F,0xB4,0xDA,0x10,0x02,0x09,0x80,0x95,0xD9,0xE8,0xE0,
0x16,0xD0,0xEF,0xA5,0xEF,0x09,0x80,0x85,0xEF,0xA5,0xD9,0x10,0xC4,0xE6,0xD6,0xE6,
0xF2,0xA9,0xFB,0x8D,0x20,0x91,0xAD,0x21,0x91,0xC9,0xFE,0x08,0xA9,0xF7,0x8D,0x20,
0x91,0x28,0xD0,0x0B,0xA0,0x00,0xEA,0xCA,0xD0,0xFC,0x88,0xD0,0xF9,0x84,0xC6,0xA6,
0xD6,0x68,0x85,0xAF,0x68,0x85,0xAE,0x68,0x85,0xAD,0x68,0x85,0xAC,0x60,0xA6,0xD6,
0xE8,0xB5,0xD9,0x10,0xFB,0x86,0xF2,0xE0,0x16,0xF0,0x0D,0x90,0x0B,0x20,0x75,0xE9,
0xA6,0xF2,0xCA,0xC6,0xD6,0x4C,0x0E,0xE7,0xA5,0xAC,0x48,0xA5,0xAD,0x48,0xA5,0xAE,
0x48,0xA5,0xAF,0x48,0xA2,0x17,0xCA,0x20,0x7E,0xEA,0xE4,0xF2,0x90,0x0E,0xF0,0x0C,
0xBD,0xFC,0xED,0x85,0xAC,0xB5,0xD8,0x20,0x56,0xEA,0x30,0xEA,0x20,0x8D,0xEA,0xA2,
0x15,0xE4,0xF2,0x90,0x0F,0xB5,0xDA,0x29,0x7F,0xB4,0xD9,0x10,0x02,0x09,0x80,0x95,
0xDA,0xCA,0xD0,0xED,0xA6,0xF2,0x20,0x0E,0xE7,0x68,0x85,0xAF,0x68,0x85,0xAE,0x68,
0x85,0xAD,0x68,0x85,0xAC,0x60,0x29,0x03,0x0D,0x88,0x02,0x85,0xAD,0x20,0x6E,0xEA,
0xA0,0x15,0xB1,0xAC,0x91,0xD1,0xB1,0xAE,0x91,0xF3,0x88,0x10,0xF5,0x60,0x20,0xB2,
0xEA,0xA5,0xAC,0x85,0xAE,0xA5,0xAD,0x29,0x03,0x09,0x94,0x85,0xAF,0x60,0xBD,0xFD,
0xED,0x85,0xD1,0xB5,0xD9,0x29,0x03,0x0D,0x88,0x02,0x85,0xD2,0x60,0xA0,0x15,0x20,
0x7E,0xEA,0x20,0xB2,0xEA,0xA9,0x20,0x91,0xD1,0xA9,0x01,0x91,0xF3,0x88,0x10,0xF5,
0x60,0xA8,0xA9,0x02,0x85,0xCD,0x20,0xB2,0xEA,0x98,0xA4,0xD3,0x91,0xD1,0x8A,0x91,
0xF3,0x60,0xA5,0xD1,0x85,0xF3,0xA5,0xD2,0x29,0x03,0x09,0x94,0x85,0xF4,0x60,0x20,
0xEA,0xFF,0xA5,0xCC,0xD0,0x29,0xC6,0xCD,0xD0,0x25,0xA9,0x14,0x85,0xCD,0xA4,0xD3,
0x46,0xCF,0xAE,0x87,0x02,0xB1,0xD1,0xB0,0x11,0xE6,0xCF,0x85,0xCE,0x20,0xB2,0xEA,
0xB1,0xF3,0x8D,0x87,0x02,0xAE,0x86,0x02,0xA5,0xCE,0x49,0x80,0x20,0xAA,0xEA,0xAD,
0x1F,0x91,0x29,0x40,0xF0,0x0B,0xA0,0x00,0x84,0xC0,0xAD,0x1C,0x91,0x09,0x02,0xD0,
0x09,0xA5,0xC0,0xD0,0x0D,0xAD,0x1C,0x91,0x29,0xFD,0x2C,0x1E,0x91,0x70,0x03,0x8D,
0x1C,0x91,0x20,0x1E,0xEB,0x2C,0x24,0x91,0x68,0xA8,0x68,0xAA,0x68,0x40,0xA9,0x00,
0x8D,0x8D,0x02,0xA0,0x40,0x84,0xCB,0x8D,0x20,0x91,0xAE,0x21,0x91,0xE0,0xFF,0xF0,
0x5E,0xA9,0xFE,0x8D,0x20,0x91,0xA0,0x00,0xA9,0x5E,0x85,0xF5,0xA9,0xEC,0x85,0xF6,
0xA2,0x08,0xAD,0x21,0x91,0xCD,0x21,0x91,0xD0,0xF6,0x4A,0xB0,0x16,0x48,0xB1,0xF5,
0xC9,0x05,0xB0,0x0C,0xC9,0x03,0xF0,0x08,0x0D,0x8D,0x02,0x8D,0x8D,0x02,0x10,0x02,
0x84,0xCB,0x68,0xC8,0xC0,0x41,0xB0,0x09,0xCA,0xD0,0xDF,0x38,0x2E,0x20,0x91,0xD0,
0xCF,0x6C,0x8F,0x02,0xA4,0xCB,0xB1,0xF5,0xAA,0xC4,0xC5,0xF0,0x07,0xA0,0x10,0x8C,
0x8C,0x02,0xD0,0x36,0x29,0x7F,0x2C,0x8A,0x02,0x30,0x16,0x70,0x49,0xC9,0x7F,0xF0,
0x29,0xC9,0x14,0xF0,0x0C,0xC9,0x20,0xF0,0x08,0xC9,0x1D,0xF0,0x04,0xC9,0x11,0xD0,
0x35,0xAC,0x8C,0x02,0xF0,0x05,0xCE,0x8C,0x02,0xD0,0x2B,0xCE,0x8B,0x02,0xD0,0x26,
0xA0,0x04,0x8C,0x8B,0x02,0xA4,0xC6,0x88,0x10,0x1C,0xA4,0xCB,0x84,0xC5,0xAC,0x8D,
0x02,0x8C,0x8E,0x02,0xE0,0xFF,0xF0,0x0E,0x8A,0xA6,0xC6,0xEC,0x89,0x02,0xB0,0x06,
0x9D,0x77,0x02,0xE8,0x86,0xC6,0xA9,0xF7,0x8D,0x20,0x91,0x60,0xAD,0x8D,0x02,0xC9,
0x03,0xD0,0x2C,0xCD,0x8E,0x02,0xF0,0xEE,0xAD,0x91,0x02,0x30,0x56,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xAD,0x05,0x90,0x49,0x02,0x8D,0x05,0x90,0xEA,0xEA,0xEA,0xEA,0x4C,0x43,0xEC,0x0A,
0xC9,0x08,0x90,0x04,0xA9,0x06,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xAA,0xBD,0x46,0xEC,0x85,0xF5,0xBD,0x47,
0xEC,0x85,0xF6,0x4C,0x74,0xEB,0x5E,0xEC,0x9F,0xEC,0xE0,0xEC,0xA3,0xED,0x5E,0xEC,
0x9F,0xEC,0x69,0xED,0xA3,0xED,0x21,0xED,0x69,0xED,0x69,0xED,0xA3,0xED,0x31,0x33,
0x35,0x37,0x39,0x2B,0x5C,0x14,0x5F,0x57,0x52,0x59,0x49,0x50,0x2A,0x0D,0x04,0x41,
0x44,0x47,0x4A,0x4C,0x3B,0x1D,0x03,0x01,0x58,0x56,0x4E,0x2C,0x2F,0x11,0x20,0x5A,
0x43,0x42,0x4D,0x2E,0x01,0x85,0x02,0x53,0x46,0x48,0x4B,0x3A,0x3D,0x86,0x51,0x45,
0x54,0x55,0x4F,0x40,0x5E,0x87,0x32,0x34,0x36,0x38,0x30,0x2D,0x13,0x88,0xFF,0x21,
0x23,0x25,0x27,0x29,0xDB,0xA9,0x94,0x5F,0xD7,0xD2,0xD9,0xC9,0xD0,0xC0,0x8D,0x04,
0xC1,0xC4,0xC7,0xCA,0xCC,0x5D,0x9D,0x83,0x01,0xD8,0xD6,0xCE,0x3C,0x3F,0x91,0xA0,
0xDA,0xC3,0xC2,0xCD,0x3E,0x01,0x89,0x02,0xD3,0xC6,0xC8,0xCB,0x5B,0x3D,0x8A,0xD1,
0xC5,0xD4,0xD5,0xCF,0xBA,0xDE,0x8B,0x22,0x24,0x26,0x28,0x30,0xDD,0x93,0x8C,0xFF,
0x21,0x23,0x25,0x27,0x29,0xA6,0xA8,0x94,0x5F,0xB3,0xB2,0xB7,0xA2,0xAF,0xDF,0x8D,
0x04,0xB0,0xAC,0xA5,0xB5,0xB6,0x5D,0x9D,0x83,0x01,0xBD,0xBE,0xAA,0x3C,0x3F,0x91,
0xA0,0xAD,0xBC,0xBF,0xA7,0x3E,0x01,0x89,0x02,0xAE,0xBB,0xB4,0xA1,0x5B,0x3D,0x8A,
0xAB,0xB1,0xA3,0xB8,0xB9,0xA4,0xDE,0x8B,0x22,0x24,0x26,0x28,0x30,0xDC,0x93,0x8C,
0xFF,0xC9,0x0E,0xD0,0x0B,0xA9,0x02,0x0D,0x05,0x90,0x8D,0x05,0x90,0x4C,0xDC,0xE6,
0xC9,0x8E,0xD0,0x0B,0xA9,0xFD,0x2D,0x05,0x90,0x8D,0x05,0x90,0x4C,0xDC,0xE6,0xC9,
0x08,0xD0,0x0A,0xA9,0x80,0x0D,0x91,0x02,0x8D,0x91,0x02,0x30,0xEF,0xC9,0x09,0xD0,
0xEB,0xA9,0x7F,0x2D,0x91,0x02,0x8D,0x91,0x02,0x10,0xE1,0xE8,0xB5,0xD9,0x09,0x80,
0x95,0xD9,0xCA,0xA5,0xD5,0x18,0x4C,0x15,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x04,0xFF,0xFF,0xFF,0xFF,0xFF,0xE2,0x9D,0x83,0x01,0xFF,0xFF,0xFF,0xFF,
0xFF,0x91,0xA0,0xFF,0xFF,0xFF,0xFF,0xEE,0x01,0x89,0x02,0xFF,0xFF,0xFF,0xFF,0xE1,
0xFD,0x8A,0xFF,0xFF,0xFF,0xFF,0xFF,0xB0,0xE0,0x8B,0xF2,0xF4,0xF6,0xFF,0xF0,0xED,
0x93,0x8C,0xFF,0x90,0x1C,0x9C,0x1F,0x12,0xFF,0xFF,0xFF,0x06,0xFF,0x12,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x05,0x9F,0x1E,0x9E,0x92,
0xFF,0xFF,0xFF,0xFF,0x05,0x19,0x16,0x2E,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1B,0x4C,0x4F,0x41,0x44,0x0D,0x52,0x55,0x4E,0x0D,0x00,0x16,0x2C,
0x42,0x58,0x6E,0x84,0x9A,0xB0,0xC6,0xDC,0xF2,0x08,0x1E,0x34,0x4A,0x60,0x76,0x8C,
0xA2,0xB8,0xCE,0xE4,0x09,0x40,0x2C,0x09,0x20,0x20,0x60,0xF1,0x48,0x24,0x94,0x10,
0x0A,0x38,0x66,0xA3,0x20,0x49,0xEE,0x46,0x94,0x46,0xA3,0x68,0x85,0x95,0x20,0xA0,
0xE4,0xC9,0x3F,0xD0,0x03,0x20,0x84,0xEF,0xAD,0x1F,0x91,0x09,0x80,0x8D,0x1F,0x91,
0x20,0x8D,0xEF,0x20,0xA0,0xE4,0x20,0x96,0xEF,0x78,0x20,0xA0,0xE4,0x20,0xB2,0xE4,
0x4A,0xB0,0x61,0x20,0x84,0xEF,0x24,0xA3,0x10,0x0C,0x20,0xB2,0xE4,0x4A,0x90,0xFA,
0x20,0xB2,0xE4,0x4A,0xB0,0xFA,0x20,0xB2,0xE4,0x4A,0x90,0xFA,0x20,0x8D,0xEF,0xA9,
0x08,0x85,0xA5,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,0x4A,0x4A,0x90,0x38,0x66,
0x95,0xB0,0x05,0x20,0xA9,0xE4,0xD0,0x03,0x20,0xA0,0xE4,0x20,0x84,0xEF,0xEA,0xEA,
0xEA,0xEA,0xAD,0x2C,0x91,0x29,0xDF,0x09,0x02,0x8D,0x2C,0x91,0xC6,0xA5,0xD0,0xD3,
0xA9,0x04,0x8D,0x29,0x91,0xAD,0x2D,0x91,0x29,0x20,0xD0,0x0B,0x20,0xB2,0xE4,0x4A,
0xB0,0xF3,0x58,0x60,0xA9,0x80,0x2C,0xA9,0x03,0x20,0x6A,0xFE,0x58,0x18,0x90,0x49,
0x85,0x95,0x20,0x40,0xEE,0xAD,0x1F,0x91,0x29,0x7F,0x8D,0x1F,0x91,0x60,0x85,0x95,
0x20,0x40,0xEE,0x78,0x20,0xA9,0xE4,0x20,0xC5,0xEE,0x20,0x84,0xEF,0x20,0xB2,0xE4,
0xB0,0xFB,0x58,0x60,0x24,0x94,0x30,0x05,0x38,0x66,0x94,0xD0,0x05,0x48,0x20,0x49,
0xEE,0x68,0x85,0x95,0x18,0x60,0x20,0x8D,0xEF,0xAD,0x1F,0x91,0x09,0x80,0x8D,0x1F,
0x91,0xA9,0x5F,0x2C,0xA9,0x3F,0x20,0x1C,0xEE,0x20,0xC5,0xEE,0x8A,0xA2,0x0B,0xCA,
0xD0,0xFD,0xAA,0x20,0x84,0xEF,0x4C,0xA0,0xE4,0x78,0xA9,0x00,0x85,0xA5,0x20,0x84,
0xEF,0x20,0xB2,0xE4,0x90,0xFB,0x20,0xA0,0xE4,0xA9,0x01,0x8D,0x29,0x91,0xAD,0x2D,
0x91,0x29,0x20,0xD0,0x07,0x20,0xB2,0xE4,0xB0,0xF4,0x90,0x18,0xA5,0xA5,0xF0,0x05,
0xA9,0x02,0x4C,0xB9,0xEE,0x20,0xA9,0xE4,0x20,0x0C,0xEF,0xA9,0x40,0x20,0x6A,0xFE,
0xE6,0xA5,0xD0,0xD5,0xA9,0x08,0x85,0xA5,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,
0x4A,0x90,0xF5,0x4A,0x66,0xA4,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,0x4A,0xB0,
0xF5,0xC6,0xA5,0xD0,0xE3,0x20,0xA9,0xE4,0xA5,0x90,0xF0,0x03,0x20,0x0C,0xEF,0xA5,
0xA4,0x58,0x18,0x60,0xAD,0x2C,0x91,0x29,0xFD,0x8D,0x2C,0x91,0x60,0xAD,0x2C,0x91,
0x09,0x02,0x8D,0x2C,0x91,0x60,0xA9,0x04,0x8D,0x29,0x91,0xAD,0x2D,0x91,0x29,0x20,
0xF0,0xF9,0x60,0xA5,0xB4,0xF0,0x47,0x30,0x3F,0x46,0xB6,0xA2,0x00,0x90,0x01,0xCA,
0x8A,0x45,0xBD,0x85,0xBD,0xC6,0xB4,0xF0,0x06,0x8A,0x29,0x20,0x85,0xB5,0x60,0xA9,
0x20,0x2C,0x94,0x02,0xF0,0x14,0x30,0x1C,0x70,0x14,0xA5,0xBD,0xD0,0x01,0xCA,0xC6,
0xB4,0xAD,0x93,0x02,0x10,0xE3,0xC6,0xB4,0xD0,0xDF,0xE6,0xB4,0xD0,0xF0,0xA5,0xBD,
0xF0,0xED,0xD0,0xEA,0x70,0xE9,0x50,0xE6,0xE6,0xB4,0xA2,0xFF,0xD0,0xCB,0xAD,0x94,
0x02,0x4A,0x90,0x07,0x2C,0x20,0x91,0x10,0x1D,0x50,0x1E,0xA9,0x00,0x85,0xBD,0x85,
0xB5,0xAE,0x98,0x02,0x86,0xB4,0xAC,0x9D,0x02,0xCC,0x9E,0x02,0xF0,0x13,0xB1,0xF9,
0x85,0xB6,0xEE,0x9D,0x02,0x60,0xA9,0x40,0x2C,0xA9,0x10,0x0D,0x97,0x02,0x8D,0x97,
0x02,0xA9,0x40,0x8D,0x1E,0x91,0x60,0xA2,0x09,0xA9,0x20,0x2C,0x93,0x02,0xF0,0x01,
0xCA,0x50,0x02,0xCA,0xCA,0x60,0xA6,0xA9,0xD0,0x2E,0xC6,0xA8,0xF0,0x31,0x30,0x0D,
0xA5,0xA7,0x45,0xAB,0x85,0xAB,0x46,0xA7,0x66,0xAA,0x60,0xC6,0xA8,0xA5,0xA7,0xF0,
0x62,0xAD,0x93,0x02,0x0A,0xA9,0x01,0x65,0xA8,0xD0,0xEF,0xA9,0x90,0x8D,0x1E,0x91,
0x85,0xA9,0xA9,0x20,0x8D,0x1E,0x91,0x60,0xA5,0xA7,0xD0,0xEF,0x85,0xA9,0x60,0xAC,
0x9B,0x02,0xC8,0xCC,0x9C,0x02,0xF0,0x2A,0x8C,0x9B,0x02,0x88,0xA5,0xAA,0xAE,0x98,
0x02,0xE0,0x09,0xF0,0x04,0x4A,0xE8,0xD0,0xF8,0x91,0xF7,0xA9,0x20,0x2C,0x94,0x02,
0xF0,0xB9,0x30,0xB6,0xA5,0xA7,0x45,0xAB,0xF0,0x03,0x70,0xAE,0x2C,0x50,0xAB,0xA9,
0x01,0x2C,0xA9,0x04,0x2C,0xA9,0x80,0x2C,0xA9,0x02,0x0D,0x97,0x02,0x8D,0x97,0x02,
0x4C,0x5B,0xF0,0xA5,0xAA,0xD0,0xF1,0xF0,0xEC,0x4C,0x96,0xF7,0x85,0x9A,0xAD,0x94,
0x02,0x4A,0x90,0x27,0xA9,0x02,0x2C,0x10,0x91,0x10,0x1D,0xD0,0x1E,0xAD,0x1E,0x91,
0x29,0x30,0xD0,0xF9,0x2C,0x10,0x91,0x70,0xFB,0xAD,0x10,0x91,0x09,0x02,0x8D,0x10,
0x91,0x2C,0x10,0x91,0x70,0x05,0x30,0xF9,0x20,0x16,0xF0,0x18,0x60,0xAC,0x9E,0x02,
0xC8,0xCC,0x9D,0x02,0xF0,0xF7,0x8C,0x9E,0x02,0x88,0x91,0xF9,0x2C,0x1E,0x91,0x50,
0x01,0x60,0xAD,0x99,0x02,0x8D,0x14,0x91,0xAD,0x9A,0x02,0x8D,0x15,0x91,0xA9,0xC0,
0x8D,0x1E,0x91,0x4C,0xEE,0xEF,0x85,0x99,0xAD,0x94,0x02,0x4A,0x90,0x28,0x29,0x08,
0xF0,0x24,0xA9,0x02,0x2C,0x10,0x91,0x10,0xBF,0xF0,0x19,0x2C,0x1E,0x91,0x70,0xFB,
0xAD,0x10,0x91,0x29,0xFD,0x8D,0x10,0x91,0xAD,0x10,0x91,0x29,0x04,0xF0,0xF9,0xA9,
0x90,0x8D,0x1E,0x91,0x18,0x60,0xAD,0x1E,0x91,0x29,0x30,0xF0,0xF2,0x18,0x60,0xAC,
0x9C,0x02,0xCC,0x9B,0x02,0xF0,0x06,0xB1,0xF7,0xEE,0x9C,0x02,0x60,0xA9,0x00,0x60,
0x48,0xAD,0x1E,0x91,0xF0,0x0C,0xAD,0x1E,0x91,0x29,0x60,0xD0,0xF9,0xA9,0x10,0x8D,
0x1E,0x91,0x68,0x60,0x0D,0x49,0x2F,0x4F,0x20,0x45,0x52,0x52,0x4F,0x52,0x20,0xA3,
0x0D,0x53,0x45,0x41,0x52,0x43,0x48,0x49,0x4E,0x47,0xA0,0x46,0x4F,0x52,0xA0,0x0D,
0x50,0x52,0x45,0x53,0x53,0x20,0x50,0x4C,0x41,0x59,0x20,0x4F,0x4E,0x20,0x54,0x41,
0x50,0xC5,0x50,0x52,0x45,0x53,0x53,0x20,0x52,0x45,0x43,0x4F,0x52,0x44,0x20,0x26,
0x20,0x50,0x4C,0x41,0x59,0x20,0x4F,0x4E,0x20,0x54,0x41,0x50,0xC5,0x0D,0x4C,0x4F,
0x41,0x44,0x49,0x4E,0xC7,0x0D,0x53,0x41,0x56,0x49,0x4E,0x47,0xA0,0x0D,0x56,0x45,
0x52,0x49,0x46,0x59,0x49,0x4E,0xC7,0x0D,0x46,0x4F,0x55,0x4E,0x44,0xA0,0x0D,0x4F,
0x4B,0x8D,0x24,0x9D,0x10,0x0D,0xB9,0x74,0xF1,0x08,0x29,0x7F,0x20,0xD2,0xFF,0xC8,
0x28,0x10,0xF3,0x18,0x60,0xA5,0x99,0xD0,0x08,0xA5,0xC6,0xF0,0x6D,0x78,0x4C,0xCF,
0xE5,0xC9,0x02,0xD0,0x18,0x84,0x97,0x20,0x4F,0xF1,0xA4,0x97,0x18,0x60,0xA5,0x99,
0xD0,0x0B,0xA5,0xD3,0x85,0xCA,0xA5,0xD6,0x85,0xC9,0x4C,0x4F,0xE6,0xC9,0x03,0xD0,
0x09,0x85,0xD0,0xA5,0xD5,0x85,0xC8,0x4C,0x4F,0xE6,0xB0,0x38,0xC9,0x02,0xF0,0x3F,
0x86,0x97,0x20,0x50,0xF2,0xB0,0x16,0x48,0x20,0x50,0xF2,0xB0,0x0D,0xD0,0x05,0xA9,
0x40,0x20,0x6A,0xFE,0xC6,0xA6,0xA6,0x97,0x68,0x60,0xAA,0x68,0x8A,0xA6,0x97,0x60,
0x20,0x8A,0xF8,0xD0,0x0B,0x20,0xC0,0xF8,0xB0,0x11,0xA9,0x00,0x85,0xA6,0xF0,0xF0,
0xB1,0xB2,0x18,0x60,0xA5,0x90,0xF0,0x04,0xA9,0x0D,0x18,0x60,0x4C,0x19,0xEF,0x20,
0x05,0xF2,0xB0,0x05,0xC9,0x00,0xF0,0xF7,0x18,0x60,0x48,0xA5,0x9A,0xC9,0x03,0xD0,
0x04,0x68,0x4C,0x42,0xE7,0x90,0x04,0x68,0x4C,0xE4,0xEE,0xC9,0x02,0xF0,0x2A,0x68,
0x85,0x9E,0x48,0x8A,0x48,0x98,0x48,0x20,0x8A,0xF8,0xD0,0x0E,0x20,0xE3,0xF8,0xB0,
0x0E,0xA9,0x02,0xA0,0x00,0x91,0xB2,0xC8,0x84,0xA6,0xA5,0x9E,0x91,0xB2,0x18,0x68,
0xA8,0x68,0xAA,0x68,0x90,0x02,0xA9,0x00,0x60,0x68,0x86,0x97,0x84,0x9E,0x20,0xED,
0xF0,0xA6,0x97,0xA4,0x9E,0x18,0x60,0x20,0xCF,0xF3,0xF0,0x03,0x4C,0x84,0xF7,0x20,
0xDF,0xF3,0xA5,0xBA,0xF0,0x16,0xC9,0x03,0xF0,0x12,0xB0,0x14,0xC9,0x02,0xD0,0x03,
0x4C,0x16,0xF1,0xA6,0xB9,0xE0,0x60,0xF0,0x03,0x4C,0x8D,0xF7,0x85,0x99,0x18,0x60,
0xAA,0x20,0x14,0xEE,0xA5,0xB9,0x10,0x06,0x20,0xD3,0xEE,0x4C,0x01,0xF3,0x20,0xCE,
0xEE,0x8A,0x24,0x90,0x10,0xE6,0x4C,0x8A,0xF7,0x20,0xCF,0xF3,0xF0,0x03,0x4C,0x84,
0xF7,0x20,0xDF,0xF3,0xA5,0xBA,0xD0,0x03,0x4C,0x90,0xF7,0xC9,0x03,0xF0,0x0F,0xB0,
0x11,0xC9,0x02,0xD0,0x03,0x4C,0xBC,0xF0,0xA6,0xB9,0xE0,0x60,0xF0,0xEA,0x85,0x9A,
0x18,0x60,0xAA,0x20,0x17,0xEE,0xA5,0xB9,0x10,0x05,0x20,0xC5,0xEE,0xD0,0x03,0x20,
0xC0,0xEE,0x8A,0x24,0x90,0x10,0xE7,0x4C,0x8A,0xF7,0x20,0xD4,0xF3,0xF0,0x02,0x18,
0x60,0x20,0xDF,0xF3,0x8A,0x48,0xA5,0xBA,0xF0,0x57,0xC9,0x03,0xF0,0x53,0xB0,0x4E,
0xC9,0x02,0xD0,0x29,0x68,0x20,0xB2,0xF3,0xA9,0x7D,0x8D,0x1E,0x91,0xA9,0x06,0x8D,
0x10,0x91,0xA9,0xEE,0x8D,0x1C,0x91,0x20,0x75,0xFE,0xA5,0xF8,0xF0,0x01,0xC8,0xA5,
0xFA,0xF0,0x01,0xC8,0xA9,0x00,0x85,0xF8,0x85,0xFA,0x4C,0x3C,0xF5,0xA5,0xB9,0x29,
0x0F,0xF0,0x1E,0x20,0x4D,0xF8,0xA9,0x00,0x20,0x90,0xF2,0x4C,0xCF,0xE4,0xB0,0x2E,
0xA5,0xB9,0xC9,0x62,0xD0,0x0B,0xA9,0x05,0x20,0xE7,0xF7,0x4C,0xB1,0xF3,0x20,0xDA,
0xF6,0x68,0xAA,0xC6,0x98,0xE4,0x98,0xF0,0x14,0xA4,0x98,0xB9,0x59,0x02,0x9D,0x59,
0x02,0xB9,0x63,0x02,0x9D,0x63,0x02,0xB9,0x6D,0x02,0x9D,0x6D,0x02,0x18,0x60,0xA9,
0x00,0x85,0x90,0x8A,0xA6,0x98,0xCA,0x30,0x15,0xDD,0x59,0x02,0xD0,0xF8,0x60,0xBD,
0x59,0x02,0x85,0xB8,0xBD,0x63,0x02,0x85,0xBA,0xBD,0x6D,0x02,0x85,0xB9,0x60,0xA9,
0x00,0x85,0x98,0xA2,0x03,0xE4,0x9A,0xB0,0x03,0x20,0x04,0xEF,0xE4,0x99,0xB0,0x03,
0x20,0xF6,0xEE,0x86,0x9A,0xA9,0x00,0x85,0x99,0x60,0xA6,0xB8,0xD0,0x03,0x4C,0x8D,
0xF7,0x20,0xCF,0xF3,0xD0,0x03,0x4C,0x81,0xF7,0xA6,0x98,0xE0,0x0A,0x90,0x03,0x4C,
0x7E,0xF7,0xE6,0x98,0xA5,0xB8,0x9D,0x59,0x02,0xA5,0xB9,0x09,0x60,0x85,0xB9,0x9D,
0x6D,0x02,0xA5,0xBA,0x9D,0x63,0x02,0xF0,0x5A,0xC9,0x03,0xF0,0x56,0x90,0x05,0x20,
0x95,0xF4,0x90,0x4F,0xC9,0x02,0xD0,0x03,0x4C,0xC7,0xF4,0x20,0x4D,0xF8,0xB0,0x03,
0x4C,0x96,0xF7,0xA5,0xB9,0x29,0x0F,0xD0,0x1F,0x20,0x94,0xF8,0xB0,0x36,0x20,0x47,
0xF6,0xA5,0xB7,0xF0,0x0A,0x20,0x67,0xF8,0x90,0x18,0xF0,0x28,0x4C,0x87,0xF7,0x20,
0xAF,0xF7,0xF0,0x20,0x90,0x0C,0xB0,0xF4,0x20,0xB7,0xF8,0xB0,0x17,0xA9,0x04,0x20,
0xE7,0xF7,0xA9,0xBF,0xA4,0xB9,0xC0,0x60,0xF0,0x07,0xA0,0x00,0xA9,0x02,0x91,0xB2,
0x98,0x85,0xA6,0x18,0x60,0xA5,0xB9,0x30,0x2C,0xA4,0xB7,0xF0,0x28,0xA5,0xBA,0x20,
0x17,0xEE,0xA5,0xB9,0x09,0xF0,0x20,0xC0,0xEE,0xA5,0x90,0x10,0x05,0x68,0x68,0x4C,
0x8A,0xF7,0xA5,0xB7,0xF0,0x0C,0xA0,0x00,0xB1,0xBB,0x20,0xE4,0xEE,0xC8,0xC4,0xB7,
0xD0,0xF6,0x20,0x04,0xEF,0x18,0x60,0xA9,0x06,0x8D,0x12,0x91,0x8D,0x10,0x91,0xA9,
0xEE,0x8D,0x1C,0x91,0xA0,0x00,0x8C,0x97,0x02,0xC4,0xB7,0xF0,0x0A,0xB1,0xBB,0x99,
0x93,0x02,0xC8,0xC0,0x04,0xD0,0xF2,0x20,0x27,0xF0,0x8E,0x98,0x02,0xAD,0x93,0x02,
0x29,0x0F,0xD0,0x00,0x0A,0xAA,0xBD,0x5A,0xFF,0x0A,0xA8,0xBD,0x5B,0xFF,0x2A,0x48,
0x98,0x69,0xC8,0x8D,0x99,0x02,0x68,0x69,0x00,0x8D,0x9A,0x02,0xAD,0x94,0x02,0x4A,
0x90,0x09,0xAD,0x20,0x91,0x0A,0xB0,0x03,0x4C,0x16,0xF0,0xAD,0x9B,0x02,0x8D,0x9C,
0x02,0xAD,0x9E,0x02,0x8D,0x9D,0x02,0x20,0x75,0xFE,0xA5,0xF8,0xD0,0x05,0x88,0x84,
0xF8,0x86,0xF7,0xA5,0xFA,0xD0,0x05,0x88,0x84,0xFA,0x86,0xF9,0x38,0xA9,0xF0,0x4C,
0x7B,0xFE,0x86,0xC3,0x84,0xC4,0x6C,0x30,0x03,0x85,0x93,0xA9,0x00,0x85,0x90,0xA5,
0xBA,0xD0,0x03,0x4C,0x96,0xF7,0xC9,0x03,0xF0,0xF9,0x90,0x6E,0xA4,0xB7,0xD0,0x03,
0x4C,0x93,0xF7,0x20,0xBC,0xE4,0xA9,0x60,0x85,0xB9,0x20,0x95,0xF4,0xA5,0xBA,0x20,
0x14,0xEE,0xA5,0xB9,0x20,0xCE,0xEE,0x20,0x19,0xEF,0x85,0xAE,0xA5,0x90,0x4A,0x4A,
0xB0,0x45,0x20,0x19,0xEF,0x85,0xAF,0x20,0xC1,0xE4,0xA9,0xFD,0x25,0x90,0x85,0x90,
0x20,0xE1,0xFF,0xD0,0x03,0x4C,0xCB,0xF6,0x20,0x19,0xEF,0xAA,0xA5,0x90,0x4A,0x4A,
0xB0,0xE8,0x8A,0xA4,0x93,0xF0,0x0C,0xA0,0x00,0xD1,0xAE,0xF0,0x08,0xA9,0x10,0x20,
0x6A,0xFE,0x2C,0x91,0xAE,0xE6,0xAE,0xD0,0x02,0xE6,0xAF,0x24,0x90,0x50,0xCB,0x20,
0xF6,0xEE,0x20,0xDA,0xF6,0x90,0x7A,0x4C,0x87,0xF7,0xC9,0x02,0xD0,0x03,0x4C,0xB9,
0xF0,0x20,0x4D,0xF8,0xB0,0x03,0x4C,0x96,0xF7,0x20,0x94,0xF8,0xB0,0x68,0x20,0x47,
0xF6,0xA5,0xB7,0xF0,0x09,0x20,0x67,0xF8,0x90,0x0B,0xF0,0x5A,0xB0,0xD9,0x20,0xAF,
0xF7,0xF0,0x53,0xB0,0xD2,0xA5,0x90,0x29,0x10,0x38,0xD0,0x4A,0xE0,0x01,0xF0,0x11,
0xE0,0x03,0xD0,0xDD,0xA0,0x01,0xB1,0xB2,0x85,0xC3,0xC8,0xB1,0xB2,0x85,0xC4,0xB0,
0x04,0xA5,0xB9,0xD0,0xEF,0xA0,0x03,0xB1,0xB2,0xA0,0x01,0xF1,0xB2,0xAA,0xA0,0x04,
0xB1,0xB2,0xA0,0x02,0xF1,0xB2,0xA8,0x18,0x8A,0x65,0xC3,0x85,0xAE,0x98,0x65,0xC4,
0x85,0xAF,0xA5,0xC3,0x85,0xC1,0xA5,0xC4,0x85,0xC2,0x20,0x6A,0xF6,0x20,0xC9,0xF8,
0x24,0x18,0xA6,0xAE,0xA4,0xAF,0x60,0xA5,0x9D,0x10,0x1E,0xA0,0x0C,0x20,0xE6,0xF1,
0xA5,0xB7,0xF0,0x15,0xA0,0x17,0x20,0xE6,0xF1,0xA4,0xB7,0xF0,0x0C,0xA0,0x00,0xB1,
0xBB,0x20,0xD2,0xFF,0xC8,0xC4,0xB7,0xD0,0xF6,0x60,0xA0,0x49,0xA5,0x93,0xF0,0x02,
0xA0,0x59,0x4C,0xE2,0xF1,0x86,0xAE,0x84,0xAF,0xAA,0xB5,0x00,0x85,0xC1,0xB5,0x01,
0x85,0xC2,0x6C,0x32,0x03,0xA5,0xBA,0xD0,0x03,0x4C,0x96,0xF7,0xC9,0x03,0xF0,0xF9,
0x90,0x5F,0xA9,0x61,0x85,0xB9,0xA4,0xB7,0xD0,0x03,0x4C,0x93,0xF7,0x20,0x95,0xF4,
0x20,0x28,0xF7,0xA5,0xBA,0x20,0x17,0xEE,0xA5,0xB9,0x20,0xC0,0xEE,0xA0,0x00,0x20,
0xD2,0xFB,0xA5,0xAC,0x20,0xE4,0xEE,0xA5,0xAD,0x20,0xE4,0xEE,0x20,0x11,0xFD,0xB0,
0x16,0xB1,0xAC,0x20,0xE4,0xEE,0x20,0xE1,0xFF,0xD0,0x07,0x20,0xDA,0xF6,0xA9,0x00,
0x38,0x60,0x20,0x1B,0xFD,0xD0,0xE5,0x20,0x04,0xEF,0x24,0xB9,0x30,0x11,0xA5,0xBA,
0x20,0x17,0xEE,0xA5,0xB9,0x29,0xEF,0x09,0xE0,0x20,0xC0,0xEE,0x20,0x04,0xEF,0x18,
0x60,0xC9,0x02,0xD0,0x03,0x4C,0xB9,0xF0,0x20,0x4D,0xF8,0x90,0x8C,0x20,0xB7,0xF8,
0xB0,0x25,0x20,0x28,0xF7,0xA2,0x03,0xA5,0xB9,0x29,0x01,0xD0,0x02,0xA2,0x01,0x8A,
0x20,0xE7,0xF7,0xB0,0x12,0x20,0xE6,0xF8,0xB0,0x0D,0xA5,0xB9,0x29,0x02,0xF0,0x06,
0xA9,0x05,0x20,0xE7,0xF7,0x24,0x18,0x60,0xA5,0x9D,0x10,0xFB,0xA0,0x51,0x20,0xE6,
0xF1,0x4C,0x59,0xF6,0xA2,0x00,0xE6,0xA2,0xD0,0x06,0xE6,0xA1,0xD0,0x02,0xE6,0xA0,
0x38,0xA5,0xA2,0xE9,0x01,0xA5,0xA1,0xE9,0x1A,0xA5,0xA0,0xE9,0x4F,0x90,0x06,0x86,
0xA0,0x86,0xA1,0x86,0xA2,0xAD,0x2F,0x91,0xCD,0x2F,0x91,0xD0,0xF8,0x85,0x91,0x60,
0x78,0xA5,0xA2,0xA6,0xA1,0xA4,0xA0,0x78,0x85,0xA2,0x86,0xA1,0x84,0xA0,0x58,0x60,
0xA5,0x91,0xC9,0xFE,0xD0,0x07,0x08,0x20,0xCC,0xFF,0x85,0xC6,0x28,0x60,0xA9,0x01,
0x2C,0xA9,0x02,0x2C,0xA9,0x03,0x2C,0xA9,0x04,0x2C,0xA9,0x05,0x2C,0xA9,0x06,0x2C,
0xA9,0x07,0x2C,0xA9,0x08,0x2C,0xA9,0x09,0x48,0x20,0xCC,0xFF,0xA0,0x00,0x24,0x9D,
0x50,0x0A,0x20,0xE6,0xF1,0x68,0x48,0x09,0x30,0x20,0xD2,0xFF,0x68,0x38,0x60,0xA5,
0x93,0x48,0x20,0xC0,0xF8,0x68,0x85,0x93,0xB0,0x2C,0xA0,0x00,0xB1,0xB2,0xC9,0x05,
0xF0,0x24,0xC9,0x01,0xF0,0x08,0xC9,0x03,0xF0,0x04,0xC9,0x04,0xD0,0xE1,0xAA,0x24,
0x9D,0x10,0x11,0xA0,0x63,0x20,0xE6,0xF1,0xA0,0x05,0xB1,0xB2,0x20,0xD2,0xFF,0xC8,
0xC0,0x15,0xD0,0xF6,0x18,0x88,0x60,0x85,0x9E,0x20,0x4D,0xF8,0x90,0x5E,0xA5,0xC2,
0x48,0xA5,0xC1,0x48,0xA5,0xAF,0x48,0xA5,0xAE,0x48,0xA0,0xBF,0xA9,0x20,0x91,0xB2,
0x88,0xD0,0xFB,0xA5,0x9E,0x91,0xB2,0xC8,0xA5,0xC1,0x91,0xB2,0xC8,0xA5,0xC2,0x91,
0xB2,0xC8,0xA5,0xAE,0x91,0xB2,0xC8,0xA5,0xAF,0x91,0xB2,0xC8,0x84,0x9F,0xA0,0x00,
0x84,0x9E,0xA4,0x9E,0xC4,0xB7,0xF0,0x0C,0xB1,0xBB,0xA4,0x9F,0x91,0xB2,0xE6,0x9E,
0xE6,0x9F,0xD0,0xEE,0x20,0x54,0xF8,0xA9,0x69,0x85,0xAB,0x20,0xEA,0xF8,0xA8,0x68,
0x85,0xAE,0x68,0x85,0xAF,0x68,0x85,0xC1,0x68,0x85,0xC2,0x98,0x60,0xA6,0xB2,0xA4,
0xB3,0xC0,0x02,0x60,0x20,0x4D,0xF8,0x8A,0x85,0xC1,0x18,0x69,0xC0,0x85,0xAE,0x98,
0x85,0xC2,0x69,0x00,0x85,0xAF,0x60,0x20,0xAF,0xF7,0xB0,0x1D,0xA0,0x05,0x84,0x9F,
0xA0,0x00,0x84,0x9E,0xC4,0xB7,0xF0,0x10,0xB1,0xBB,0xA4,0x9F,0xD1,0xB2,0xD0,0xE7,
0xE6,0x9E,0xE6,0x9F,0xA4,0x9E,0xD0,0xEC,0x18,0x60,0x20,0x4D,0xF8,0xE6,0xA6,0xA4,
0xA6,0xC0,0xC0,0x60,0x20,0xAB,0xF8,0xF0,0x1C,0xA0,0x1B,0x20,0xE6,0xF1,0x20,0x4B,
0xF9,0x20,0xAB,0xF8,0xD0,0xF8,0xA0,0x6A,0x4C,0xE6,0xF1,0xA9,0x40,0x2C,0x1F,0x91,
0xD0,0x03,0x2C,0x1F,0x91,0x18,0x60,0x20,0xAB,0xF8,0xF0,0xF9,0xA0,0x2E,0xD0,0xDB,
0xA9,0x00,0x85,0x90,0x85,0x93,0x20,0x54,0xF8,0x20,0x94,0xF8,0xB0,0x1F,0x78,0xA9,
0x00,0x85,0xAA,0x85,0xB4,0x85,0xB0,0x85,0x9E,0x85,0x9F,0x85,0x9C,0xA9,0x82,0xA2,
0x0E,0xD0,0x11,0x20,0x54,0xF8,0xA9,0x14,0x85,0xAB,0x20,0xB7,0xF8,0xB0,0x68,0x78,
0xA9,0xA0,0xA2,0x08,0xA0,0x7F,0x8C,0x2E,0x91,0x8D,0x2E,0x91,0x20,0x60,0xF1,0xAD,
0x14,0x03,0x8D,0x9F,0x02,0xAD,0x15,0x03,0x8D,0xA0,0x02,0x20,0xFB,0xFC,0xA9,0x02,
0x85,0xBE,0x20,0xDB,0xFB,0xAD,0x1C,0x91,0x29,0xFD,0x09,0x0C,0x8D,0x1C,0x91,0x85,
0xC0,0xA2,0xFF,0xA0,0xFF,0x88,0xD0,0xFD,0xCA,0xD0,0xF8,0x8D,0x29,0x91,0x58,0xAD,
0xA0,0x02,0xCD,0x15,0x03,0x18,0xF0,0x1F,0x20,0x4B,0xF9,0xAD,0x2D,0x91,0x29,0x40,
0xF0,0xED,0xAD,0x14,0x91,0x20,0x34,0xF7,0x4C,0x2F,0xF9,0x20,0xE1,0xFF,0x18,0xD0,
0x0B,0x20,0xCF,0xFC,0x38,0x68,0x68,0xA9,0x00,0x8D,0xA0,0x02,0x60,0x86,0xB1,0xA5,
0xB0,0x0A,0x0A,0x18,0x65,0xB0,0x18,0x65,0xB1,0x85,0xB1,0xA9,0x00,0x24,0xB0,0x30,
0x01,0x2A,0x06,0xB1,0x2A,0x06,0xB1,0x2A,0xAA,0xAD,0x28,0x91,0xC9,0x15,0x90,0xF9,
0x65,0xB1,0x8D,0x24,0x91,0x8A,0x6D,0x29,0x91,0x8D,0x25,0x91,0x58,0x60,0xAE,0x29,
0x91,0xA0,0xFF,0x98,0xED,0x28,0x91,0xEC,0x29,0x91,0xD0,0xF2,0x86,0xB1,0xAA,0x8C,
0x28,0x91,0x8C,0x29,0x91,0x98,0xE5,0xB1,0x86,0xB1,0x4A,0x66,0xB1,0x4A,0x66,0xB1,
0xA5,0xB0,0x18,0x69,0x3C,0x2C,0x21,0x91,0xC5,0xB1,0xB0,0x4A,0xA6,0x9C,0xF0,0x03,
0x4C,0xAD,0xFA,0xA6,0xA3,0x30,0x1B,0xA2,0x00,0x69,0x30,0x65,0xB0,0xC5,0xB1,0xB0,
0x1C,0xE8,0x69,0x26,0x65,0xB0,0xC5,0xB1,0xB0,0x17,0x69,0x2C,0x65,0xB0,0xC5,0xB1,
0x90,0x03,0x4C,0x60,0xFA,0xA5,0xB4,0xF0,0x1D,0x85,0xA8,0xD0,0x19,0xE6,0xA9,0xB0,
0x02,0xC6,0xA9,0x38,0xE9,0x13,0xE5,0xB1,0x65,0x92,0x85,0x92,0xA5,0xA4,0x49,0x01,
0x85,0xA4,0xF0,0x21,0x86,0xD7,0xA5,0xB4,0xF0,0x18,0x2C,0x2D,0x91,0x50,0x13,0xA9,
0x00,0x85,0xA4,0xA5,0xA3,0x10,0x30,0x30,0xC9,0xA2,0xA6,0x20,0x5D,0xF9,0xA5,0x9B,
0xD0,0xC3,0x4C,0x56,0xFF,0xA5,0x92,0xF0,0x07,0x30,0x03,0xC6,0xB0,0x2C,0xE6,0xB0,
0xA9,0x00,0x85,0x92,0xE4,0xD7,0xD0,0x0F,0x8A,0xD0,0xAA,0xA5,0xA9,0x30,0xC7,0xC9,
0x10,0x90,0xC3,0x85,0x96,0xB0,0xBF,0x8A,0x45,0x9B,0x85,0x9B,0xA5,0xB4,0xF0,0xD2,
0xC6,0xA3,0x30,0xC5,0x46,0xD7,0x66,0xBF,0xA2,0xDA,0x20,0x5D,0xF9,0x4C,0x56,0xFF,
0xA5,0x96,0xF0,0x04,0xA5,0xB4,0xF0,0x04,0xA5,0xA3,0x10,0x85,0x46,0xB1,0xA9,0x93,
0x38,0xE5,0xB1,0x65,0xB0,0x0A,0xAA,0x20,0x5D,0xF9,0xE6,0x9C,0xA5,0xB4,0xD0,0x11,
0xA5,0x96,0xF0,0x26,0x85,0xA8,0xA9,0x00,0x85,0x96,0xA9,0xC0,0x8D,0x2E,0x91,0x85,
0xB4,0xA5,0x96,0x85,0xB5,0xF0,0x09,0xA9,0x00,0x85,0xB4,0xA9,0x40,0x8D,0x2E,0x91,
0xA5,0xBF,0x85,0xBD,0xA5,0xA8,0x05,0xA9,0x85,0xB6,0x4C,0x56,0xFF,0x20,0xDB,0xFB,
0x85,0x9C,0xA2,0xDA,0x20,0x5D,0xF9,0xA5,0xBE,0xF0,0x02,0x85,0xA7,0xA9,0x0F,0x24,
0xAA,0x10,0x17,0xA5,0xB5,0xD0,0x0C,0xA6,0xBE,0xCA,0xD0,0x0B,0xA9,0x08,0x20,0x6A,
0xFE,0xD0,0x04,0xA9,0x00,0x85,0xAA,0x4C,0x56,0xFF,0x70,0x31,0xD0,0x18,0xA5,0xB5,
0xD0,0xF5,0xA5,0xB6,0xD0,0xF1,0xA5,0xA7,0x4A,0xA5,0xBD,0x30,0x03,0x90,0x18,0x18,
0xB0,0x15,0x29,0x0F,0x85,0xAA,0xC6,0xAA,0xD0,0xDD,0xA9,0x40,0x85,0xAA,0x20,0xD2,
0xFB,0xA9,0x00,0x85,0xAB,0xF0,0xD0,0xA9,0x80,0x85,0xAA,0xD0,0xCA,0xA5,0xB5,0xF0,
0x0A,0xA9,0x04,0x20,0x6A,0xFE,0xA9,0x00,0x4C,0x97,0xFB,0x20,0x11,0xFD,0x90,0x03,
0x4C,0x95,0xFB,0xA6,0xA7,0xCA,0xF0,0x2D,0xA5,0x93,0xF0,0x0C,0xA0,0x00,0xA5,0xBD,
0xD1,0xAC,0xF0,0x04,0xA9,0x01,0x85,0xB6,0xA5,0xB6,0xF0,0x4B,0xA2,0x3D,0xE4,0x9E,
0x90,0x3E,0xA6,0x9E,0xA5,0xAD,0x9D,0x01,0x01,0xA5,0xAC,0x9D,0x00,0x01,0xE8,0xE8,
0x86,0x9E,0x4C,0x87,0xFB,0xA6,0x9F,0xE4,0x9E,0xF0,0x35,0xA5,0xAC,0xDD,0x00,0x01,
0xD0,0x2E,0xA5,0xAD,0xDD,0x01,0x01,0xD0,0x27,0xE6,0x9F,0xE6,0x9F,0xA5,0x93,0xF0,
0x0B,0xA5,0xBD,0xA0,0x00,0xD1,0xAC,0xF0,0x17,0xC8,0x84,0xB6,0xA5,0xB6,0xF0,0x07,
0xA9,0x10,0x20,0x6A,0xFE,0xD0,0x09,0xA5,0x93,0xD0,0x05,0xA8,0xA5,0xBD,0x91,0xAC,
0x20,0x1B,0xFD,0xD0,0x3A,0xA9,0x80,0x85,0xAA,0xA6,0xBE,0xCA,0x30,0x02,0x86,0xBE,
0xC6,0xA7,0xF0,0x08,0xA5,0x9E,0xD0,0x27,0x85,0xBE,0xF0,0x23,0x20,0xCF,0xFC,0x20,
0xD2,0xFB,0xA0,0x00,0x84,0xAB,0xB1,0xAC,0x45,0xAB,0x85,0xAB,0x20,0x1B,0xFD,0x20,
0x11,0xFD,0x90,0xF2,0xA5,0xAB,0x45,0xBD,0xF0,0x05,0xA9,0x20,0x20,0x6A,0xFE,0x4C,
0x56,0xFF,0xA5,0xC2,0x85,0xAD,0xA5,0xC1,0x85,0xAC,0x60,0xA9,0x08,0x85,0xA3,0xA9,
0x00,0x85,0xA4,0x85,0xA8,0x85,0x9B,0x85,0xA9,0x60,0xA5,0xBD,0x4A,0xA9,0x60,0x90,
0x02,0xA9,0xB0,0xA2,0x00,0x8D,0x28,0x91,0x8E,0x29,0x91,0xAD,0x20,0x91,0x49,0x08,
0x8D,0x20,0x91,0x29,0x08,0x60,0x38,0x66,0xAD,0x30,0x3C,0xA5,0xA8,0xD0,0x12,0xA9,
0x10,0xA2,0x01,0x20,0xF5,0xFB,0xD0,0x2F,0xE6,0xA8,0xA5,0xAD,0x10,0x29,0x4C,0x95,
0xFC,0xA5,0xA9,0xD0,0x09,0x20,0xF1,0xFB,0xD0,0x1D,0xE6,0xA9,0xD0,0x19,0x20,0xEA,
0xFB,0xD0,0x14,0xA5,0xA4,0x49,0x01,0x85,0xA4,0xF0,0x0F,0xA5,0xBD,0x49,0x01,0x85,
0xBD,0x29,0x01,0x45,0x9B,0x85,0x9B,0x4C,0x56,0xFF,0x46,0xBD,0xC6,0xA3,0xA5,0xA3,
0xF0,0x3A,0x10,0xF3,0x20,0xDB,0xFB,0x58,0xA5,0xA5,0xF0,0x12,0xA2,0x00,0x86,0xD7,
0xC6,0xA5,0xA6,0xBE,0xE0,0x02,0xD0,0x02,0x09,0x80,0x85,0xBD,0xD0,0xD9,0x20,0x11,
0xFD,0x90,0x0A,0xD0,0x91,0xE6,0xAD,0xA5,0xD7,0x85,0xBD,0xB0,0xCA,0xA0,0x00,0xB1,
0xAC,0x85,0xBD,0x45,0xD7,0x85,0xD7,0x20,0x1B,0xFD,0xD0,0xBB,0xA5,0x9B,0x49,0x01,
0x85,0xBD,0x4C,0x56,0xFF,0xC6,0xBE,0xD0,0x03,0x20,0x08,0xFD,0xA9,0x50,0x85,0xA7,
0xA2,0x08,0x78,0x20,0xFB,0xFC,0xD0,0xEA,0xA9,0x78,0x20,0xF3,0xFB,0xD0,0xE3,0xC6,
0xA7,0xD0,0xDF,0x20,0xDB,0xFB,0xC6,0xAB,0x10,0xD8,0xA2,0x0A,0x20,0xFB,0xFC,0x58,
0xE6,0xAB,0xA5,0xBE,0xF0,0x30,0x20,0xD2,0xFB,0xA2,0x09,0x86,0xA5,0xD0,0x85,0x08,
0x78,0x20,0x08,0xFD,0xA9,0x7F,0x8D,0x2E,0x91,0xA9,0xF7,0x8D,0x20,0x91,0xA9,0x40,
0x8D,0x2B,0x91,0x20,0x39,0xFE,0xAD,0xA0,0x02,0xF0,0x09,0x8D,0x15,0x03,0xAD,0x9F,
0x02,0x8D,0x14,0x03,0x28,0x60,0x20,0xCF,0xFC,0xF0,0x97,0xBD,0xE9,0xFD,0x8D,0x14,
0x03,0xBD,0xEA,0xFD,0x8D,0x15,0x03,0x60,0xAD,0x1C,0x91,0x09,0x0E,0x8D,0x1C,0x91,
0x60,0x38,0xA5,0xAC,0xE5,0xAE,0xA5,0xAD,0xE5,0xAF,0x60,0xE6,0xAC,0xD0,0x02,0xE6,
0xAD,0x60,0xA2,0xFF,0x78,0x9A,0xD8,0x20,0x3F,0xFD,0xD0,0x03,0x6C,0x00,0xA0,0x20,
0x8D,0xFD,0x20,0x52,0xFD,0x20,0xF9,0xFD,0x20,0x18,0xE5,0x58,0x6C,0x00,0xC0,0xA2,
0x05,0xBD,0x4C,0xFD,0xDD,0x03,0xA0,0xD0,0x03,0xCA,0xD0,0xF5,0x60,0x41,0x30,0xC3,
0xC2,0xCD,0xA2,0x6D,0xA0,0xFD,0x18,0x86,0xC3,0x84,0xC4,0xA0,0x1F,0xB9,0x14,0x03,
0xB0,0x02,0xB1,0xC3,0x91,0xC3,0x99,0x14,0x03,0x88,0x10,0xF1,0x60,0xBF,0xEA,0xD2,
0xFE,0xAD,0xFE,0x0A,0xF4,0x4A,0xF3,0xC7,0xF2,0x09,0xF3,0xF3,0xF3,0x0E,0xF2,0x7A,
0xF2,0x70,0xF7,0xF5,0xF1,0xEF,0xF3,0xD2,0xFE,0x49,0xF5,0x85,0xF6,0xA9,0x00,0xAA,
0x95,0x00,0x9D,0x00,0x02,0x9D,0x00,0x03,0xE8,0xD0,0xF5,0xA2,0x3C,0xA0,0x03,0x86,
0xB2,0x84,0xB3,0x85,0xC1,0x85,0x97,0x8D,0x81,0x02,0xA8,0xA9,0x04,0x85,0xC2,0xE6,
0xC1,0xD0,0x02,0xE6,0xC2,0x20,0x91,0xFE,0xA5,0x97,0xF0,0x22,0xB0,0xF1,0xA4,0xC2,
0xA6,0xC1,0xC0,0x20,0x90,0x25,0xC0,0x21,0xB0,0x08,0xA0,0x1E,0x8C,0x88,0x02,0x4C,
0x7B,0xFE,0xA9,0x12,0x8D,0x82,0x02,0xA9,0x10,0x8D,0x88,0x02,0xD0,0xF1,0x90,0xCF,
0xA5,0xC2,0x8D,0x82,0x02,0x85,0x97,0xC9,0x11,0x90,0xC4,0x20,0xC3,0xE5,0x4C,0xEB,
0xFD,0xA8,0xFC,0x0B,0xFC,0xBF,0xEA,0x8E,0xF9,0xA9,0x7F,0x8D,0x1E,0x91,0x8D,0x2E,
0x91,0xA9,0x40,0x8D,0x2B,0x91,0xA9,0x40,0x8D,0x1B,0x91,0xA9,0xFE,0x8D,0x1C,0x91,
0xA9,0xDE,0x8D,0x2C,0x91,0xA2,0x00,0x8E,0x12,0x91,0xA2,0xFF,0x8E,0x22,0x91,0xA2,
0x00,0x8E,0x23,0x91,0xA2,0x80,0x8E,0x13,0x91,0xA2,0x00,0x8E,0x1F,0x91,0x20,0x84,
0xEF,0xA9,0x82,0x8D,0x1E,0x91,0x20,0x8D,0xEF,0xA9,0xC0,0x8D,0x2E,0x91,0xA9,0x89,
0x8D,0x24,0x91,0xA9,0x42,0x8D,0x25,0x91,0x60,0x85,0xB7,0x86,0xBB,0x84,0xBC,0x60,
0x85,0xB8,0x86,0xBA,0x84,0xB9,0x60,0xA5,0xBA,0xC9,0x02,0xD0,0x0B,0xAD,0x97,0x02,
0xA9,0x00,0x8D,0x97,0x02,0x60,0x85,0x9D,0xA5,0x90,0x05,0x90,0x85,0x90,0x60,0x8D,
0x85,0x02,0x60,0x90,0x06,0xAE,0x83,0x02,0xAC,0x84,0x02,0x8E,0x83,0x02,0x8C,0x84,
0x02,0x60,0x90,0x06,0xAE,0x81,0x02,0xAC,0x82,0x02,0x8E,0x81,0x02,0x8C,0x82,0x02,
0x60,0xB1,0xC1,0xAA,0xA9,0x55,0x91,0xC1,0xD1,0xC1,0xD0,0x08,0x6A,0x91,0xC1,0xD1,
0xC1,0xD0,0x01,0xA9,0x18,0x8A,0x91,0xC1,0x60,0x78,0x6C,0x18,0x03,0x48,0x8A,0x48,
0x98,0x48,0xAD,0x1D,0x91,0x10,0x48,0x2D,0x1E,0x91,0xAA,0x29,0x02,0xF0,0x1F,0x20,
0x3F,0xFD,0xD0,0x03,0x6C,0x02,0xA0,0x2C,0x11,0x91,0x20,0x34,0xF7,0x20,0xE1,0xFF,
0xD0,0x2D,0x20,0x52,0xFD,0x20,0xF9,0xFD,0x20,0x18,0xE5,0x6C,0x02,0xC0,0xAD,0x1E,
0x91,0x09,0x80,0x48,0xA9,0x7F,0x8D,0x1E,0x91,0x8A,0x29,0x40,0xF0,0x14,0xA9,0xCE,
0x05,0xB5,0x8D,0x1C,0x91,0xAD,0x14,0x91,0x68,0x8D,0x1E,0x91,0x20,0xA3,0xEF,0x4C,
0x56,0xFF,0x8A,0x29,0x20,0xF0,0x25,0xAD,0x10,0x91,0x29,0x01,0x85,0xA7,0xAD,0x18,
0x91,0xE9,0x16,0x6D,0x99,0x02,0x8D,0x18,0x91,0xAD,0x19,0x91,0x6D,0x9A,0x02,0x8D,
0x19,0x91,0x68,0x8D,0x1E,0x91,0x20,0x36,0xF0,0x4C,0x56,0xFF,0x8A,0x29,0x10,0xF0,
0x25,0xAD,0x93,0x02,0x29,0x0F,0xD0,0x00,0x0A,0xAA,0xBD,0x5A,0xFF,0x8D,0x18,0x91,
0xBD,0x5B,0xFF,0x8D,0x19,0x91,0xAD,0x10,0x91,0x68,0x09,0x20,0x29,0xEF,0x8D,0x1E,
0x91,0xAE,0x98,0x02,0x86,0xA8,0x68,0xA8,0x68,0xAA,0x68,0x40,0x92,0x27,0x40,0x1A,
0xC6,0x11,0x74,0x0E,0xEE,0x0C,0x45,0x06,0xF1,0x02,0x46,0x01,0xB8,0x00,0x71,0x00,
0x2A,0x00,0x48,0x8A,0x48,0x98,0x48,0xBA,0xBD,0x04,0x01,0x29,0x10,0xF0,0x03,0x6C,
0x16,0x03,0x6C,0x14,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x4C,0x52,0xFD,0x4C,0x57,0xFD,
0x4C,0x66,0xFE,0x4C,0xC0,0xEE,0x4C,0xCE,0xEE,0x4C,0x73,0xFE,0x4C,0x82,0xFE,0x4C,
0x1E,0xEB,0x4C,0x6F,0xFE,0x4C,0x19,0xEF,0x4C,0xE4,0xEE,0x4C,0xF6,0xEE,0x4C,0x04,
0xEF,0x4C,0x17,0xEE,0x4C,0x14,0xEE,0x4C,0x57,0xFE,0x4C,0x50,0xFE,0x4C,0x49,0xFE,
0x6C,0x1A,0x03,0x6C,0x1C,0x03,0x6C,0x1E,0x03,0x6C,0x20,0x03,0x6C,0x22,0x03,0x6C,
0x24,0x03,0x6C,0x26,0x03,0x4C,0x42,0xF5,0x4C,0x75,0xF6,0x4C,0x67,0xF7,0x4C,0x60,
0xF7,0x6C,0x28,0x03,0x6C,0x2A,0x03,0x6C,0x2C,0x03,0x4C,0x34,0xF7,0x4C,0x05,0xE5,
0x4C,0x0A,0xE5,0x4C,0x00,0xE5,0xFF,0xFF,0xFF,0xFF,0xA9,0xFE,0x22,0xFD,0x72,0xFF,
};

Wyświetl plik

@ -0,0 +1,514 @@
const unsigned char kernalrom[8192] = {
0x0F,0xDC,0xA5,0x61,0xC9,0x88,0x90,0x03,0x20,0xD4,0xDA,0x20,0xCC,0xDC,0xA5,0x07,
0x18,0x69,0x81,0xF0,0xF3,0x38,0xE9,0x01,0x48,0xA2,0x05,0xB5,0x69,0xB4,0x61,0x95,
0x61,0x94,0x69,0xCA,0x10,0xF5,0xA5,0x56,0x85,0x70,0x20,0x53,0xD8,0x20,0xB4,0xDF,
0xA9,0xC4,0xA0,0xDF,0x20,0x56,0xE0,0xA9,0x00,0x85,0x6F,0x68,0x20,0xB9,0xDA,0x60,
0x85,0x71,0x84,0x72,0x20,0xCA,0xDB,0xA9,0x57,0x20,0x28,0xDA,0x20,0x5A,0xE0,0xA9,
0x57,0xA0,0x00,0x4C,0x28,0xDA,0x85,0x71,0x84,0x72,0x20,0xC7,0xDB,0xB1,0x71,0x85,
0x67,0xA4,0x71,0xC8,0x98,0xD0,0x02,0xE6,0x72,0x85,0x71,0xA4,0x72,0x20,0x28,0xDA,
0xA5,0x71,0xA4,0x72,0x18,0x69,0x05,0x90,0x01,0xC8,0x85,0x71,0x84,0x72,0x20,0x67,
0xD8,0xA9,0x5C,0xA0,0x00,0xC6,0x67,0xD0,0xE4,0x60,0x98,0x35,0x44,0x7A,0x00,0x68,
0x28,0xB1,0x46,0x00,0x20,0x2B,0xDC,0x30,0x37,0xD0,0x20,0x20,0xF3,0xFF,0x86,0x22,
0x84,0x23,0xA0,0x04,0xB1,0x22,0x85,0x62,0xC8,0xB1,0x22,0x85,0x64,0xA0,0x08,0xB1,
0x22,0x85,0x63,0xC8,0xB1,0x22,0x85,0x65,0x4C,0xE0,0xE0,0xA9,0x8B,0xA0,0x00,0x20,
0xA2,0xDB,0xA9,0x8A,0xA0,0xE0,0x20,0x28,0xDA,0xA9,0x8F,0xA0,0xE0,0x20,0x67,0xD8,
0xA6,0x65,0xA5,0x62,0x85,0x65,0x86,0x62,0xA6,0x63,0xA5,0x64,0x85,0x63,0x86,0x64,
0xA9,0x00,0x85,0x66,0xA5,0x61,0x85,0x70,0xA9,0x80,0x85,0x61,0x20,0xD7,0xD8,0xA2,
0x8B,0xA0,0x00,0x4C,0xD4,0xDB,0xC9,0xF0,0xD0,0x07,0x84,0x38,0x86,0x37,0x4C,0x63,
0xC6,0xAA,0xD0,0x02,0xA2,0x1E,0x4C,0x37,0xC4,0x20,0xD2,0xFF,0xB0,0xE8,0x60,0x20,
0xCF,0xFF,0xB0,0xE2,0x60,0x20,0xC9,0xFF,0xB0,0xDC,0x60,0x20,0xC6,0xFF,0xB0,0xD6,
0x60,0x20,0xE4,0xFF,0xB0,0xD0,0x60,0x20,0x8A,0xCD,0x20,0xF7,0xD7,0xA9,0xE1,0x48,
0xA9,0x43,0x48,0xAD,0x0F,0x03,0x48,0xAD,0x0C,0x03,0xAE,0x0D,0x03,0xAC,0x0E,0x03,
0x28,0x6C,0x14,0x00,0x08,0x8D,0x0C,0x03,0x8E,0x0D,0x03,0x8C,0x0E,0x03,0x68,0x8D,
0x0F,0x03,0x60,0x20,0xD1,0xE1,0xA6,0x2D,0xA4,0x2E,0xA9,0x2B,0x20,0xD8,0xFF,0xB0,
0x95,0x60,0xA9,0x01,0x2C,0xA9,0x00,0x85,0x0A,0x20,0xD1,0xE1,0xA5,0x0A,0xA6,0x2B,
0xA4,0x2C,0x20,0xD5,0xFF,0xB0,0x57,0xA5,0x0A,0xF0,0x1A,0xA2,0x1C,0x20,0xB7,0xFF,
0x29,0x10,0xF0,0x03,0x4C,0x37,0xC4,0xA5,0x7A,0xC9,0x02,0xF0,0x07,0xA9,0x64,0xA0,
0xC3,0x4C,0x1E,0xCB,0x60,0x20,0xB7,0xFF,0x29,0xBF,0xF0,0x05,0xA2,0x1D,0x4C,0x37,
0xC4,0xA5,0x7B,0xC9,0x02,0xD0,0x0E,0x86,0x2D,0x84,0x2E,0xA9,0x76,0xA0,0xC3,0x20,
0x1E,0xCB,0x4C,0x2A,0xC5,0x20,0x8E,0xC6,0x4C,0x76,0xE4,0x20,0x16,0xE2,0x20,0xC0,
0xFF,0xB0,0x0B,0x60,0x20,0x16,0xE2,0xA5,0x49,0x20,0xC3,0xFF,0x90,0xC6,0x4C,0xF6,
0xE0,0xA9,0x00,0x20,0xBD,0xFF,0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF,0x20,0x03,0xE2,
0x20,0x54,0xE2,0x20,0x03,0xE2,0x20,0xFD,0xE1,0xA0,0x00,0x86,0x49,0x20,0xBA,0xFF,
0x20,0x03,0xE2,0x20,0xFD,0xE1,0x8A,0xA8,0xA6,0x49,0x4C,0xBA,0xFF,0x20,0x0B,0xE2,
0x4C,0x9E,0xD7,0x20,0x79,0x00,0xD0,0x02,0x68,0x68,0x60,0x20,0xFD,0xCE,0x20,0x79,
0x00,0xD0,0xF7,0x4C,0x08,0xCF,0xA9,0x00,0x20,0xBD,0xFF,0x20,0x0E,0xE2,0x20,0x9E,
0xD7,0x86,0x49,0x8A,0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF,0x20,0x03,0xE2,0x20,0xFD,
0xE1,0x86,0x4A,0xA0,0x00,0xA5,0x49,0xE0,0x03,0x90,0x01,0x88,0x20,0xBA,0xFF,0x20,
0x03,0xE2,0x20,0xFD,0xE1,0x8A,0xA8,0xA6,0x4A,0xA5,0x49,0x20,0xBA,0xFF,0x20,0x03,
0xE2,0x20,0x0B,0xE2,0x20,0x9E,0xCD,0x20,0xA3,0xD6,0xA6,0x22,0xA4,0x23,0x4C,0xBD,
0xFF,0xA9,0xDD,0xA0,0xE2,0x20,0x67,0xD8,0x20,0x0C,0xDC,0xA9,0xE2,0xA0,0xE2,0xA6,
0x6E,0x20,0x07,0xDB,0x20,0x0C,0xDC,0x20,0xCC,0xDC,0xA9,0x00,0x85,0x6F,0x20,0x53,
0xD8,0xA9,0xE7,0xA0,0xE2,0x20,0x50,0xD8,0xA5,0x66,0x48,0x10,0x0D,0x20,0x49,0xD8,
0xA5,0x66,0x30,0x09,0xA5,0x12,0x49,0xFF,0x85,0x12,0x20,0xB4,0xDF,0xA9,0xE7,0xA0,
0xE2,0x20,0x67,0xD8,0x68,0x10,0x03,0x20,0xB4,0xDF,0xA9,0xEC,0xA0,0xE2,0x4C,0x40,
0xE0,0x20,0xCA,0xDB,0xA9,0x00,0x85,0x12,0x20,0x68,0xE2,0xA2,0x4E,0xA0,0x00,0x20,
0xF3,0xE0,0xA9,0x57,0xA0,0x00,0x20,0xA2,0xDB,0xA9,0x00,0x85,0x66,0xA5,0x12,0x20,
0xD9,0xE2,0xA9,0x4E,0xA0,0x00,0x4C,0x0F,0xDB,0x48,0x4C,0x9A,0xE2,0x81,0x49,0x0F,
0xDA,0xA2,0x83,0x49,0x0F,0xDA,0xA2,0x7F,0x00,0x00,0x00,0x00,0x05,0x84,0xE6,0x1A,
0x2D,0x1B,0x86,0x28,0x07,0xFB,0xF8,0x87,0x99,0x68,0x89,0x01,0x87,0x23,0x35,0xDF,
0xE1,0x86,0xA5,0x5D,0xE7,0x28,0x83,0x49,0x0F,0xDA,0xA2,0xA5,0x66,0x48,0x10,0x03,
0x20,0xB4,0xDF,0xA5,0x61,0x48,0xC9,0x81,0x90,0x07,0xA9,0xBC,0xA0,0xD9,0x20,0x0F,
0xDB,0xA9,0x3B,0xA0,0xE3,0x20,0x40,0xE0,0x68,0xC9,0x81,0x90,0x07,0xA9,0xDD,0xA0,
0xE2,0x20,0x50,0xD8,0x68,0x10,0x03,0x4C,0xB4,0xDF,0x60,0x0B,0x76,0xB3,0x83,0xBD,
0xD3,0x79,0x1E,0xF4,0xA6,0xF5,0x7B,0x83,0xFC,0xB0,0x10,0x7C,0x0C,0x1F,0x67,0xCA,
0x7C,0xDE,0x53,0xCB,0xC1,0x7D,0x14,0x64,0x70,0x4C,0x7D,0xB7,0xEA,0x51,0x7A,0x7D,
0x63,0x30,0x88,0x7E,0x7E,0x92,0x44,0x99,0x3A,0x7E,0x4C,0xCC,0x91,0xC7,0x7F,0xAA,
0xAA,0xAA,0x13,0x81,0x00,0x00,0x00,0x00,0x20,0x5B,0xE4,0x20,0xA4,0xE3,0x20,0x04,
0xE4,0xA2,0xFB,0x9A,0x4C,0x74,0xC4,0xE6,0x7A,0xD0,0x02,0xE6,0x7B,0xAD,0x60,0xEA,
0xC9,0x3A,0xB0,0x0A,0xC9,0x20,0xF0,0xEF,0x38,0xE9,0x30,0x38,0xE9,0xD0,0x60,0x80,
0x4F,0xC7,0x52,0x58,0xA9,0x4C,0x85,0x54,0x85,0x00,0xA9,0x48,0xA0,0xD2,0x85,0x01,
0x84,0x02,0xA9,0x91,0xA0,0xD3,0x85,0x05,0x84,0x06,0xA9,0xAA,0xA0,0xD1,0x85,0x03,
0x84,0x04,0xA2,0x1C,0xBD,0x87,0xE3,0x95,0x73,0xCA,0x10,0xF8,0xA9,0x03,0x85,0x53,
0xA9,0x00,0x85,0x68,0x85,0x13,0x85,0x18,0xA2,0x01,0x8E,0xFD,0x01,0x8E,0xFC,0x01,
0xA2,0x19,0x86,0x16,0x38,0x20,0x9C,0xFF,0x86,0x2B,0x84,0x2C,0x38,0x20,0x99,0xFF,
0x86,0x37,0x84,0x38,0x86,0x33,0x84,0x34,0xA0,0x00,0x98,0x91,0x2B,0xE6,0x2B,0xD0,
0x02,0xE6,0x2C,0x60,0xA5,0x2B,0xA4,0x2C,0x20,0x08,0xC4,0xA9,0x36,0xA0,0xE4,0x20,
0x1E,0xCB,0xA5,0x37,0x38,0xE5,0x2B,0xAA,0xA5,0x38,0xE5,0x2C,0x20,0xCD,0xDD,0xA9,
0x29,0xA0,0xE4,0x20,0x1E,0xCB,0x4C,0x44,0xC6,0x20,0x42,0x59,0x54,0x45,0x53,0x20,
0x46,0x52,0x45,0x45,0x0D,0x00,0x93,0x2A,0x2A,0x2A,0x2A,0x20,0x43,0x42,0x4D,0x20,
0x42,0x41,0x53,0x49,0x43,0x20,0x56,0x32,0x20,0x2A,0x2A,0x2A,0x2A,0x0D,0x00,0x3A,
0xC4,0x83,0xC4,0x7C,0xC5,0x1A,0xC7,0xE4,0xC7,0x86,0xCE,0xA2,0x0B,0xBD,0x4F,0xE4,
0x9D,0x00,0x03,0xCA,0x10,0xF7,0x60,0x20,0xCC,0xFF,0xA9,0x00,0x85,0x13,0x20,0x7A,
0xC6,0x58,0x4C,0x74,0xC4,0xE8,0x20,0x33,0xC5,0x4C,0x77,0xC6,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xAD,0x2C,0x91,0x29,0xDF,0x8D,0x2C,0x91,0x60,0xAD,0x2C,0x91,0x09,0x20,0x8D,0x2C,
0x91,0x60,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,0x4A,0x60,0xA6,0xB9,0x4C,0x47,
0xF6,0x8A,0xD0,0x08,0xA5,0xC3,0x85,0xAE,0xA5,0xC4,0x85,0xAF,0x4C,0x6A,0xF6,0x20,
0xE3,0xF8,0x90,0x03,0x68,0xA9,0x00,0x4C,0x9E,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xA2,0x10,0xA0,0x91,0x60,0xA2,0x16,0xA0,0x17,0x60,0xB0,0x07,0x86,0xD6,0x84,0xD3,
0x20,0x87,0xE5,0xA6,0xD6,0xA4,0xD3,0x60,0x20,0xBB,0xE5,0xAD,0x88,0x02,0x29,0xFD,
0x0A,0x0A,0x09,0x80,0x8D,0x05,0x90,0xAD,0x88,0x02,0x29,0x02,0xF0,0x08,0xA9,0x80,
0x0D,0x02,0x90,0x8D,0x02,0x90,0xA9,0x00,0x8D,0x91,0x02,0x85,0xCF,0xA9,0xDC,0x8D,
0x8F,0x02,0xA9,0xEB,0x8D,0x90,0x02,0xA9,0x0A,0x8D,0x89,0x02,0x8D,0x8C,0x02,0xA9,
0x06,0x8D,0x86,0x02,0xA9,0x04,0x8D,0x8B,0x02,0xA9,0x0C,0x85,0xCD,0x85,0xCC,0xAD,
0x88,0x02,0x09,0x80,0xA8,0xA9,0x00,0xAA,0x94,0xD9,0x18,0x69,0x16,0x90,0x01,0xC8,
0xE8,0xE0,0x18,0xD0,0xF3,0xA9,0xFF,0x95,0xD9,0xA2,0x16,0x20,0x8D,0xEA,0xCA,0x10,
0xFA,0xA0,0x00,0x84,0xD3,0x84,0xD6,0xA6,0xD6,0xA5,0xD3,0xB4,0xD9,0x30,0x08,0x18,
0x69,0x16,0x85,0xD3,0xCA,0x10,0xF4,0xB5,0xD9,0x29,0x03,0x0D,0x88,0x02,0x85,0xD2,
0xBD,0xFD,0xED,0x85,0xD1,0xA9,0x15,0xE8,0xB4,0xD9,0x30,0x06,0x18,0x69,0x16,0xE8,
0x10,0xF6,0x85,0xD5,0x60,0x20,0xBB,0xE5,0x4C,0x81,0xE5,0xA9,0x03,0x85,0x9A,0xA9,
0x00,0x85,0x99,0xA2,0x10,0xBD,0xE3,0xED,0x9D,0xFF,0x8F,0xCA,0xD0,0xF7,0x60,0xAC,
0x77,0x02,0xA2,0x00,0xBD,0x78,0x02,0x9D,0x77,0x02,0xE8,0xE4,0xC6,0xD0,0xF5,0xC6,
0xC6,0x98,0x58,0x18,0x60,0x20,0x42,0xE7,0xA5,0xC6,0x85,0xCC,0x8D,0x92,0x02,0xF0,
0xF7,0x78,0xA5,0xCF,0xF0,0x0C,0xA5,0xCE,0xAE,0x87,0x02,0xA0,0x00,0x84,0xCF,0x20,
0xA1,0xEA,0x20,0xCF,0xE5,0xC9,0x83,0xD0,0x10,0xA2,0x09,0x78,0x86,0xC6,0xBD,0xF3,
0xED,0x9D,0x76,0x02,0xCA,0xD0,0xF7,0xF0,0xCF,0xC9,0x0D,0xD0,0xC8,0xA4,0xD5,0x84,
0xD0,0xB1,0xD1,0xC9,0x20,0xD0,0x03,0x88,0xD0,0xF7,0xC8,0x84,0xC8,0xA0,0x00,0x8C,
0x92,0x02,0x84,0xD3,0x84,0xD4,0xA5,0xC9,0x30,0x1D,0xA6,0xD6,0x20,0x19,0xE7,0xE4,
0xC9,0xD0,0x14,0xD0,0x12,0xA5,0xCA,0x85,0xD3,0xC5,0xC8,0x90,0x0A,0xB0,0x42,0x98,
0x48,0x8A,0x48,0xA5,0xD0,0xF0,0x91,0xA4,0xD3,0xB1,0xD1,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0x85,0xD7,0x29,0x3F,0x06,0xD7,0x24,0xD7,0x10,0x02,0x09,0x80,0x90,0x04,
0xA6,0xD4,0xD0,0x04,0x70,0x02,0x09,0x40,0xE6,0xD3,0x20,0xB8,0xE6,0xC4,0xC8,0xD0,
0x17,0xA9,0x00,0x85,0xD0,0xA9,0x0D,0xA6,0x99,0xE0,0x03,0xF0,0x06,0xA6,0x9A,0xE0,
0x03,0xF0,0x03,0x20,0x42,0xE7,0xA9,0x0D,0x85,0xD7,0x68,0xAA,0x68,0xA8,0xA5,0xD7,
0xC9,0xDE,0xD0,0x02,0xA9,0xFF,0x18,0x60,0xC9,0x22,0xD0,0x08,0xA5,0xD4,0x49,0x01,
0x85,0xD4,0xA9,0x22,0x60,0x09,0x40,0xA6,0xC7,0xF0,0x02,0x09,0x80,0xA6,0xD8,0xF0,
0x02,0xC6,0xD8,0xAE,0x86,0x02,0x20,0xA1,0xEA,0x20,0xEA,0xE6,0x68,0xA8,0xA5,0xD8,
0xF0,0x02,0x46,0xD4,0x68,0xAA,0x68,0x18,0x58,0x60,0x20,0xFA,0xE8,0xE6,0xD3,0xA5,
0xD5,0xC5,0xD3,0xB0,0x37,0xC9,0x57,0xF0,0x2A,0xAD,0x92,0x02,0xF0,0x03,0x4C,0xF0,
0xE9,0xA6,0xD6,0xE0,0x17,0x90,0x07,0x20,0x75,0xE9,0xC6,0xD6,0xA6,0xD6,0x16,0xD9,
0x56,0xD9,0x4C,0x5B,0xED,0x69,0x16,0x85,0xD5,0xB5,0xD9,0x30,0x03,0xCA,0xD0,0xF9,
0x4C,0x7E,0xEA,0xC6,0xD6,0x20,0xC3,0xE8,0xA9,0x00,0x85,0xD3,0x60,0xA6,0xD6,0xD0,
0x06,0x86,0xD3,0x68,0x68,0xD0,0xA5,0xCA,0x86,0xD6,0x20,0x87,0xE5,0xA4,0xD5,0x84,
0xD3,0x60,0x48,0x85,0xD7,0x8A,0x48,0x98,0x48,0xA9,0x00,0x85,0xD0,0xA4,0xD3,0xA5,
0xD7,0x10,0x03,0x4C,0x00,0xE8,0xC9,0x0D,0xD0,0x03,0x4C,0xD8,0xE8,0xC9,0x20,0x90,
0x10,0xC9,0x60,0x90,0x04,0x29,0xDF,0xD0,0x02,0x29,0x3F,0x20,0xB8,0xE6,0x4C,0xC7,
0xE6,0xA6,0xD8,0xF0,0x03,0x4C,0xCB,0xE6,0xC9,0x14,0xD0,0x2E,0x98,0xD0,0x06,0x20,
0x2D,0xE7,0x4C,0x9F,0xE7,0x20,0xE8,0xE8,0x88,0x84,0xD3,0x20,0xB2,0xEA,0xC8,0xB1,
0xD1,0x88,0x91,0xD1,0xC8,0xB1,0xF3,0x88,0x91,0xF3,0xC8,0xC4,0xD5,0xD0,0xEF,0xA9,
0x20,0x91,0xD1,0xAD,0x86,0x02,0x91,0xF3,0x10,0x4D,0xA6,0xD4,0xF0,0x03,0x4C,0xCB,
0xE6,0xC9,0x12,0xD0,0x02,0x85,0xC7,0xC9,0x13,0xD0,0x03,0x20,0x81,0xE5,0xC9,0x1D,
0xD0,0x17,0xC8,0x20,0xFA,0xE8,0x84,0xD3,0x88,0xC4,0xD5,0x90,0x09,0xC6,0xD6,0x20,
0xC3,0xE8,0xA0,0x00,0x84,0xD3,0x4C,0xDC,0xE6,0xC9,0x11,0xD0,0x1D,0x18,0x98,0x69,
0x16,0xA8,0xE6,0xD6,0xC5,0xD5,0x90,0xEC,0xF0,0xEA,0xC6,0xD6,0xE9,0x16,0x90,0x04,
0x85,0xD3,0xD0,0xF8,0x20,0xC3,0xE8,0x4C,0xDC,0xE6,0x20,0x12,0xE9,0x4C,0x21,0xED,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0x29,0x7F,0xC9,0x7F,0xD0,0x02,0xA9,0x5E,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xC9,0x20,0x90,0x03,0x4C,0xC5,0xE6,0xC9,0x0D,0xD0,0x03,0x4C,0xD8,
0xE8,0xA6,0xD4,0xD0,0x3F,0xC9,0x14,0xD0,0x37,0xA4,0xD5,0xB1,0xD1,0xC9,0x20,0xD0,
0x04,0xC4,0xD3,0xD0,0x07,0xC0,0x57,0xF0,0x24,0x20,0xEE,0xE9,0xA4,0xD5,0x20,0xB2,
0xEA,0x88,0xB1,0xD1,0xC8,0x91,0xD1,0x88,0xB1,0xF3,0xC8,0x91,0xF3,0x88,0xC4,0xD3,
0xD0,0xEF,0xA9,0x20,0x91,0xD1,0xAD,0x86,0x02,0x91,0xF3,0xE6,0xD8,0x4C,0xDC,0xE6,
0xA6,0xD8,0xF0,0x05,0x09,0x40,0x4C,0xCB,0xE6,0xC9,0x11,0xD0,0x16,0xA6,0xD6,0xF0,
0x37,0xC6,0xD6,0xA5,0xD3,0x38,0xE9,0x16,0x90,0x04,0x85,0xD3,0x10,0x2A,0x20,0x87,
0xE5,0xD0,0x25,0xC9,0x12,0xD0,0x04,0xA9,0x00,0x85,0xC7,0xC9,0x1D,0xD0,0x12,0x98,
0xF0,0x09,0x20,0xE8,0xE8,0x88,0x84,0xD3,0x4C,0xDC,0xE6,0x20,0x2D,0xE7,0x4C,0xDC,
0xE6,0xC9,0x13,0xD0,0x06,0x20,0x5F,0xE5,0x4C,0xDC,0xE6,0x09,0x80,0x20,0x12,0xE9,
0x4C,0x30,0xED,0x46,0xC9,0xA6,0xD6,0xE8,0xE0,0x17,0xD0,0x03,0x20,0x75,0xE9,0xB5,
0xD9,0x10,0xF4,0x86,0xD6,0x4C,0x87,0xE5,0xA2,0x00,0x86,0xD8,0x86,0xC7,0x86,0xD4,
0x86,0xD3,0x20,0xC3,0xE8,0x4C,0xDC,0xE6,0xA2,0x04,0xA9,0x00,0xC5,0xD3,0xF0,0x07,
0x18,0x69,0x16,0xCA,0xD0,0xF6,0x60,0xC6,0xD6,0x60,0xA2,0x04,0xA9,0x15,0xC5,0xD3,
0xF0,0x07,0x18,0x69,0x16,0xCA,0xD0,0xF6,0x60,0xA6,0xD6,0xE0,0x17,0xF0,0x02,0xE6,
0xD6,0x60,0xA2,0x07,0xDD,0x21,0xE9,0xF0,0x04,0xCA,0x10,0xF8,0x60,0x8E,0x86,0x02,
0x60,0x90,0x05,0x1C,0x9F,0x9C,0x1E,0x1F,0x9E,0xEF,0xA1,0xDF,0xA6,0xE1,0xB1,0xE2,
0xB2,0xE3,0xB3,0xE4,0xB4,0xE5,0xB5,0xE6,0xB6,0xE7,0xB7,0xE8,0xB8,0xE9,0xB9,0xFA,
0xBA,0xFB,0xBB,0xFC,0xBC,0xEC,0xBD,0xFE,0xBE,0x84,0xBF,0xF7,0xC0,0xF8,0xDB,0xF9,
0xDD,0xEA,0xDE,0x5E,0xE0,0x5B,0xE1,0x5D,0xE2,0x40,0xB0,0x61,0xB1,0x78,0xDB,0x79,
0xDD,0x66,0xB6,0x77,0xC0,0x70,0xF0,0x71,0xF1,0x72,0xF2,0x73,0xF3,0x74,0xF4,0x75,
0xF5,0x76,0xF6,0x7D,0xFD,0xA5,0xAC,0x48,0xA5,0xAD,0x48,0xA5,0xAE,0x48,0xA5,0xAF,
0x48,0xA2,0xFF,0xC6,0xD6,0xC6,0xC9,0xC6,0xF2,0xE8,0x20,0x7E,0xEA,0xE0,0x16,0xB0,
0x0C,0xBD,0xFE,0xED,0x85,0xAC,0xB5,0xDA,0x20,0x56,0xEA,0x30,0xEC,0x20,0x8D,0xEA,
0xA2,0x00,0xB5,0xD9,0x29,0x7F,0xB4,0xDA,0x10,0x02,0x09,0x80,0x95,0xD9,0xE8,0xE0,
0x16,0xD0,0xEF,0xA5,0xEF,0x09,0x80,0x85,0xEF,0xA5,0xD9,0x10,0xC4,0xE6,0xD6,0xE6,
0xF2,0xA9,0xFB,0x8D,0x20,0x91,0xAD,0x21,0x91,0xC9,0xFE,0x08,0xA9,0xF7,0x8D,0x20,
0x91,0x28,0xD0,0x0B,0xA0,0x00,0xEA,0xCA,0xD0,0xFC,0x88,0xD0,0xF9,0x84,0xC6,0xA6,
0xD6,0x68,0x85,0xAF,0x68,0x85,0xAE,0x68,0x85,0xAD,0x68,0x85,0xAC,0x60,0xA6,0xD6,
0xE8,0xB5,0xD9,0x10,0xFB,0x86,0xF2,0xE0,0x16,0xF0,0x0D,0x90,0x0B,0x20,0x75,0xE9,
0xA6,0xF2,0xCA,0xC6,0xD6,0x4C,0x0E,0xE7,0xA5,0xAC,0x48,0xA5,0xAD,0x48,0xA5,0xAE,
0x48,0xA5,0xAF,0x48,0xA2,0x17,0xCA,0x20,0x7E,0xEA,0xE4,0xF2,0x90,0x0E,0xF0,0x0C,
0xBD,0xFC,0xED,0x85,0xAC,0xB5,0xD8,0x20,0x56,0xEA,0x30,0xEA,0x20,0x8D,0xEA,0xA2,
0x15,0xE4,0xF2,0x90,0x0F,0xB5,0xDA,0x29,0x7F,0xB4,0xD9,0x10,0x02,0x09,0x80,0x95,
0xDA,0xCA,0xD0,0xED,0xA6,0xF2,0x20,0x0E,0xE7,0x68,0x85,0xAF,0x68,0x85,0xAE,0x68,
0x85,0xAD,0x68,0x85,0xAC,0x60,0x29,0x03,0x0D,0x88,0x02,0x85,0xAD,0x20,0x6E,0xEA,
0xA0,0x15,0xB1,0xAC,0x91,0xD1,0xB1,0xAE,0x91,0xF3,0x88,0x10,0xF5,0x60,0x20,0xB2,
0xEA,0xA5,0xAC,0x85,0xAE,0xA5,0xAD,0x29,0x03,0x09,0x94,0x85,0xAF,0x60,0xBD,0xFD,
0xED,0x85,0xD1,0xB5,0xD9,0x29,0x03,0x0D,0x88,0x02,0x85,0xD2,0x60,0xA0,0x15,0x20,
0x7E,0xEA,0x20,0xB2,0xEA,0xA9,0x20,0x91,0xD1,0xA9,0x01,0x91,0xF3,0x88,0x10,0xF5,
0x60,0xA8,0xA9,0x02,0x85,0xCD,0x20,0xB2,0xEA,0x98,0xA4,0xD3,0x91,0xD1,0x8A,0x91,
0xF3,0x60,0xA5,0xD1,0x85,0xF3,0xA5,0xD2,0x29,0x03,0x09,0x94,0x85,0xF4,0x60,0x20,
0xEA,0xFF,0xA5,0xCC,0xD0,0x29,0xC6,0xCD,0xD0,0x25,0xA9,0x14,0x85,0xCD,0xA4,0xD3,
0x46,0xCF,0xAE,0x87,0x02,0xB1,0xD1,0xB0,0x11,0xE6,0xCF,0x85,0xCE,0x20,0xB2,0xEA,
0xB1,0xF3,0x8D,0x87,0x02,0xAE,0x86,0x02,0xA5,0xCE,0x49,0x80,0x20,0xAA,0xEA,0xAD,
0x1F,0x91,0x29,0x40,0xF0,0x0B,0xA0,0x00,0x84,0xC0,0xAD,0x1C,0x91,0x09,0x02,0xD0,
0x09,0xA5,0xC0,0xD0,0x0D,0xAD,0x1C,0x91,0x29,0xFD,0x2C,0x1E,0x91,0x70,0x03,0x8D,
0x1C,0x91,0x20,0x1E,0xEB,0x2C,0x24,0x91,0x68,0xA8,0x68,0xAA,0x68,0x40,0xA9,0x00,
0x8D,0x8D,0x02,0xA0,0x40,0x84,0xCB,0x8D,0x20,0x91,0xAE,0x21,0x91,0xE0,0xFF,0xF0,
0x5E,0xA9,0xFE,0x8D,0x20,0x91,0xA0,0x00,0xA9,0x5E,0x85,0xF5,0xA9,0xEC,0x85,0xF6,
0xA2,0x08,0xAD,0x21,0x91,0xCD,0x21,0x91,0xD0,0xF6,0x4A,0xB0,0x16,0x48,0xB1,0xF5,
0xC9,0x05,0xB0,0x0C,0xC9,0x03,0xF0,0x08,0x0D,0x8D,0x02,0x8D,0x8D,0x02,0x10,0x02,
0x84,0xCB,0x68,0xC8,0xC0,0x41,0xB0,0x09,0xCA,0xD0,0xDF,0x38,0x2E,0x20,0x91,0xD0,
0xCF,0x6C,0x8F,0x02,0xA4,0xCB,0xB1,0xF5,0xAA,0xC4,0xC5,0xF0,0x07,0xA0,0x10,0x8C,
0x8C,0x02,0xD0,0x36,0x29,0x7F,0x2C,0x8A,0x02,0x30,0x16,0x70,0x49,0xC9,0x7F,0xF0,
0x29,0xC9,0x14,0xF0,0x0C,0xC9,0x20,0xF0,0x08,0xC9,0x1D,0xF0,0x04,0xC9,0x11,0xD0,
0x35,0xAC,0x8C,0x02,0xF0,0x05,0xCE,0x8C,0x02,0xD0,0x2B,0xCE,0x8B,0x02,0xD0,0x26,
0xA0,0x04,0x8C,0x8B,0x02,0xA4,0xC6,0x88,0x10,0x1C,0xA4,0xCB,0x84,0xC5,0xAC,0x8D,
0x02,0x8C,0x8E,0x02,0xE0,0xFF,0xF0,0x0E,0x8A,0xA6,0xC6,0xEC,0x89,0x02,0xB0,0x06,
0x9D,0x77,0x02,0xE8,0x86,0xC6,0xA9,0xF7,0x8D,0x20,0x91,0x60,0xAD,0x8D,0x02,0xC9,
0x03,0xD0,0x2C,0xCD,0x8E,0x02,0xF0,0xEE,0xAD,0x91,0x02,0x30,0x56,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xAD,0x05,0x90,0x49,0x02,0x8D,0x05,0x90,0xEA,0xEA,0xEA,0xEA,0x4C,0x43,0xEC,0x0A,
0xC9,0x08,0x90,0x04,0xA9,0x06,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,
0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xEA,0xAA,0xBD,0x46,0xEC,0x85,0xF5,0xBD,0x47,
0xEC,0x85,0xF6,0x4C,0x74,0xEB,0x5E,0xEC,0x9F,0xEC,0xE0,0xEC,0xA3,0xED,0x5E,0xEC,
0x9F,0xEC,0x69,0xED,0xA3,0xED,0x21,0xED,0x69,0xED,0x69,0xED,0xA3,0xED,0x31,0x33,
0x35,0x37,0x39,0x2B,0x5C,0x14,0x5F,0x57,0x52,0x59,0x49,0x50,0x2A,0x0D,0x04,0x41,
0x44,0x47,0x4A,0x4C,0x3B,0x1D,0x03,0x01,0x58,0x56,0x4E,0x2C,0x2F,0x11,0x20,0x5A,
0x43,0x42,0x4D,0x2E,0x01,0x85,0x02,0x53,0x46,0x48,0x4B,0x3A,0x3D,0x86,0x51,0x45,
0x54,0x55,0x4F,0x40,0x5E,0x87,0x32,0x34,0x36,0x38,0x30,0x2D,0x13,0x88,0xFF,0x21,
0x23,0x25,0x27,0x29,0xDB,0xA9,0x94,0x5F,0xD7,0xD2,0xD9,0xC9,0xD0,0xC0,0x8D,0x04,
0xC1,0xC4,0xC7,0xCA,0xCC,0x5D,0x9D,0x83,0x01,0xD8,0xD6,0xCE,0x3C,0x3F,0x91,0xA0,
0xDA,0xC3,0xC2,0xCD,0x3E,0x01,0x89,0x02,0xD3,0xC6,0xC8,0xCB,0x5B,0x3D,0x8A,0xD1,
0xC5,0xD4,0xD5,0xCF,0xBA,0xDE,0x8B,0x22,0x24,0x26,0x28,0x30,0xDD,0x93,0x8C,0xFF,
0x21,0x23,0x25,0x27,0x29,0xA6,0xA8,0x94,0x5F,0xB3,0xB2,0xB7,0xA2,0xAF,0xDF,0x8D,
0x04,0xB0,0xAC,0xA5,0xB5,0xB6,0x5D,0x9D,0x83,0x01,0xBD,0xBE,0xAA,0x3C,0x3F,0x91,
0xA0,0xAD,0xBC,0xBF,0xA7,0x3E,0x01,0x89,0x02,0xAE,0xBB,0xB4,0xA1,0x5B,0x3D,0x8A,
0xAB,0xB1,0xA3,0xB8,0xB9,0xA4,0xDE,0x8B,0x22,0x24,0x26,0x28,0x30,0xDC,0x93,0x8C,
0xFF,0xC9,0x0E,0xD0,0x0B,0xA9,0x02,0x0D,0x05,0x90,0x8D,0x05,0x90,0x4C,0xDC,0xE6,
0xC9,0x8E,0xD0,0x0B,0xA9,0xFD,0x2D,0x05,0x90,0x8D,0x05,0x90,0x4C,0xDC,0xE6,0xC9,
0x08,0xD0,0x0A,0xA9,0x80,0x0D,0x91,0x02,0x8D,0x91,0x02,0x30,0xEF,0xC9,0x09,0xD0,
0xEB,0xA9,0x7F,0x2D,0x91,0x02,0x8D,0x91,0x02,0x10,0xE1,0xE8,0xB5,0xD9,0x09,0x80,
0x95,0xD9,0xCA,0xA5,0xD5,0x18,0x4C,0x15,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x04,0xFF,0xFF,0xFF,0xFF,0xFF,0xE2,0x9D,0x83,0x01,0xFF,0xFF,0xFF,0xFF,
0xFF,0x91,0xA0,0xFF,0xFF,0xFF,0xFF,0xEE,0x01,0x89,0x02,0xFF,0xFF,0xFF,0xFF,0xE1,
0xFD,0x8A,0xFF,0xFF,0xFF,0xFF,0xFF,0xB0,0xE0,0x8B,0xF2,0xF4,0xF6,0xFF,0xF0,0xED,
0x93,0x8C,0xFF,0x90,0x1C,0x9C,0x1F,0x12,0xFF,0xFF,0xFF,0x06,0xFF,0x12,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x05,0x9F,0x1E,0x9E,0x92,
0xFF,0xFF,0xFF,0xFF,0x0C,0x26,0x16,0x2E,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1B,0x4C,0x4F,0x41,0x44,0x0D,0x52,0x55,0x4E,0x0D,0x00,0x16,0x2C,
0x42,0x58,0x6E,0x84,0x9A,0xB0,0xC6,0xDC,0xF2,0x08,0x1E,0x34,0x4A,0x60,0x76,0x8C,
0xA2,0xB8,0xCE,0xE4,0x09,0x40,0x2C,0x09,0x20,0x20,0x60,0xF1,0x48,0x24,0x94,0x10,
0x0A,0x38,0x66,0xA3,0x20,0x49,0xEE,0x46,0x94,0x46,0xA3,0x68,0x85,0x95,0x20,0xA0,
0xE4,0xC9,0x3F,0xD0,0x03,0x20,0x84,0xEF,0xAD,0x1F,0x91,0x09,0x80,0x8D,0x1F,0x91,
0x20,0x8D,0xEF,0x20,0xA0,0xE4,0x20,0x96,0xEF,0x78,0x20,0xA0,0xE4,0x20,0xB2,0xE4,
0x4A,0xB0,0x61,0x20,0x84,0xEF,0x24,0xA3,0x10,0x0C,0x20,0xB2,0xE4,0x4A,0x90,0xFA,
0x20,0xB2,0xE4,0x4A,0xB0,0xFA,0x20,0xB2,0xE4,0x4A,0x90,0xFA,0x20,0x8D,0xEF,0xA9,
0x08,0x85,0xA5,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,0x4A,0x4A,0x90,0x38,0x66,
0x95,0xB0,0x05,0x20,0xA9,0xE4,0xD0,0x03,0x20,0xA0,0xE4,0x20,0x84,0xEF,0xEA,0xEA,
0xEA,0xEA,0xAD,0x2C,0x91,0x29,0xDF,0x09,0x02,0x8D,0x2C,0x91,0xC6,0xA5,0xD0,0xD3,
0xA9,0x04,0x8D,0x29,0x91,0xAD,0x2D,0x91,0x29,0x20,0xD0,0x0B,0x20,0xB2,0xE4,0x4A,
0xB0,0xF3,0x58,0x60,0xA9,0x80,0x2C,0xA9,0x03,0x20,0x6A,0xFE,0x58,0x18,0x90,0x49,
0x85,0x95,0x20,0x40,0xEE,0xAD,0x1F,0x91,0x29,0x7F,0x8D,0x1F,0x91,0x60,0x85,0x95,
0x20,0x40,0xEE,0x78,0x20,0xA9,0xE4,0x20,0xC5,0xEE,0x20,0x84,0xEF,0x20,0xB2,0xE4,
0xB0,0xFB,0x58,0x60,0x24,0x94,0x30,0x05,0x38,0x66,0x94,0xD0,0x05,0x48,0x20,0x49,
0xEE,0x68,0x85,0x95,0x18,0x60,0x20,0x8D,0xEF,0xAD,0x1F,0x91,0x09,0x80,0x8D,0x1F,
0x91,0xA9,0x5F,0x2C,0xA9,0x3F,0x20,0x1C,0xEE,0x20,0xC5,0xEE,0x8A,0xA2,0x0B,0xCA,
0xD0,0xFD,0xAA,0x20,0x84,0xEF,0x4C,0xA0,0xE4,0x78,0xA9,0x00,0x85,0xA5,0x20,0x84,
0xEF,0x20,0xB2,0xE4,0x90,0xFB,0x20,0xA0,0xE4,0xA9,0x01,0x8D,0x29,0x91,0xAD,0x2D,
0x91,0x29,0x20,0xD0,0x07,0x20,0xB2,0xE4,0xB0,0xF4,0x90,0x18,0xA5,0xA5,0xF0,0x05,
0xA9,0x02,0x4C,0xB9,0xEE,0x20,0xA9,0xE4,0x20,0x0C,0xEF,0xA9,0x40,0x20,0x6A,0xFE,
0xE6,0xA5,0xD0,0xD5,0xA9,0x08,0x85,0xA5,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,
0x4A,0x90,0xF5,0x4A,0x66,0xA4,0xAD,0x1F,0x91,0xCD,0x1F,0x91,0xD0,0xF8,0x4A,0xB0,
0xF5,0xC6,0xA5,0xD0,0xE3,0x20,0xA9,0xE4,0xA5,0x90,0xF0,0x03,0x20,0x0C,0xEF,0xA5,
0xA4,0x58,0x18,0x60,0xAD,0x2C,0x91,0x29,0xFD,0x8D,0x2C,0x91,0x60,0xAD,0x2C,0x91,
0x09,0x02,0x8D,0x2C,0x91,0x60,0xA9,0x04,0x8D,0x29,0x91,0xAD,0x2D,0x91,0x29,0x20,
0xF0,0xF9,0x60,0xA5,0xB4,0xF0,0x47,0x30,0x3F,0x46,0xB6,0xA2,0x00,0x90,0x01,0xCA,
0x8A,0x45,0xBD,0x85,0xBD,0xC6,0xB4,0xF0,0x06,0x8A,0x29,0x20,0x85,0xB5,0x60,0xA9,
0x20,0x2C,0x94,0x02,0xF0,0x14,0x30,0x1C,0x70,0x14,0xA5,0xBD,0xD0,0x01,0xCA,0xC6,
0xB4,0xAD,0x93,0x02,0x10,0xE3,0xC6,0xB4,0xD0,0xDF,0xE6,0xB4,0xD0,0xF0,0xA5,0xBD,
0xF0,0xED,0xD0,0xEA,0x70,0xE9,0x50,0xE6,0xE6,0xB4,0xA2,0xFF,0xD0,0xCB,0xAD,0x94,
0x02,0x4A,0x90,0x07,0x2C,0x20,0x91,0x10,0x1D,0x50,0x1E,0xA9,0x00,0x85,0xBD,0x85,
0xB5,0xAE,0x98,0x02,0x86,0xB4,0xAC,0x9D,0x02,0xCC,0x9E,0x02,0xF0,0x13,0xB1,0xF9,
0x85,0xB6,0xEE,0x9D,0x02,0x60,0xA9,0x40,0x2C,0xA9,0x10,0x0D,0x97,0x02,0x8D,0x97,
0x02,0xA9,0x40,0x8D,0x1E,0x91,0x60,0xA2,0x09,0xA9,0x20,0x2C,0x93,0x02,0xF0,0x01,
0xCA,0x50,0x02,0xCA,0xCA,0x60,0xA6,0xA9,0xD0,0x2E,0xC6,0xA8,0xF0,0x31,0x30,0x0D,
0xA5,0xA7,0x45,0xAB,0x85,0xAB,0x46,0xA7,0x66,0xAA,0x60,0xC6,0xA8,0xA5,0xA7,0xF0,
0x62,0xAD,0x93,0x02,0x0A,0xA9,0x01,0x65,0xA8,0xD0,0xEF,0xA9,0x90,0x8D,0x1E,0x91,
0x85,0xA9,0xA9,0x20,0x8D,0x1E,0x91,0x60,0xA5,0xA7,0xD0,0xEF,0x85,0xA9,0x60,0xAC,
0x9B,0x02,0xC8,0xCC,0x9C,0x02,0xF0,0x2A,0x8C,0x9B,0x02,0x88,0xA5,0xAA,0xAE,0x98,
0x02,0xE0,0x09,0xF0,0x04,0x4A,0xE8,0xD0,0xF8,0x91,0xF7,0xA9,0x20,0x2C,0x94,0x02,
0xF0,0xB9,0x30,0xB6,0xA5,0xA7,0x45,0xAB,0xF0,0x03,0x70,0xAE,0x2C,0x50,0xAB,0xA9,
0x01,0x2C,0xA9,0x04,0x2C,0xA9,0x80,0x2C,0xA9,0x02,0x0D,0x97,0x02,0x8D,0x97,0x02,
0x4C,0x5B,0xF0,0xA5,0xAA,0xD0,0xF1,0xF0,0xEC,0x4C,0x96,0xF7,0x85,0x9A,0xAD,0x94,
0x02,0x4A,0x90,0x27,0xA9,0x02,0x2C,0x10,0x91,0x10,0x1D,0xD0,0x1E,0xAD,0x1E,0x91,
0x29,0x30,0xD0,0xF9,0x2C,0x10,0x91,0x70,0xFB,0xAD,0x10,0x91,0x09,0x02,0x8D,0x10,
0x91,0x2C,0x10,0x91,0x70,0x05,0x30,0xF9,0x20,0x16,0xF0,0x18,0x60,0xAC,0x9E,0x02,
0xC8,0xCC,0x9D,0x02,0xF0,0xF7,0x8C,0x9E,0x02,0x88,0x91,0xF9,0x2C,0x1E,0x91,0x50,
0x01,0x60,0xAD,0x99,0x02,0x8D,0x14,0x91,0xAD,0x9A,0x02,0x8D,0x15,0x91,0xA9,0xC0,
0x8D,0x1E,0x91,0x4C,0xEE,0xEF,0x85,0x99,0xAD,0x94,0x02,0x4A,0x90,0x28,0x29,0x08,
0xF0,0x24,0xA9,0x02,0x2C,0x10,0x91,0x10,0xBF,0xF0,0x19,0x2C,0x1E,0x91,0x70,0xFB,
0xAD,0x10,0x91,0x29,0xFD,0x8D,0x10,0x91,0xAD,0x10,0x91,0x29,0x04,0xF0,0xF9,0xA9,
0x90,0x8D,0x1E,0x91,0x18,0x60,0xAD,0x1E,0x91,0x29,0x30,0xF0,0xF2,0x18,0x60,0xAC,
0x9C,0x02,0xCC,0x9B,0x02,0xF0,0x06,0xB1,0xF7,0xEE,0x9C,0x02,0x60,0xA9,0x00,0x60,
0x48,0xAD,0x1E,0x91,0xF0,0x0C,0xAD,0x1E,0x91,0x29,0x60,0xD0,0xF9,0xA9,0x10,0x8D,
0x1E,0x91,0x68,0x60,0x0D,0x49,0x2F,0x4F,0x20,0x45,0x52,0x52,0x4F,0x52,0x20,0xA3,
0x0D,0x53,0x45,0x41,0x52,0x43,0x48,0x49,0x4E,0x47,0xA0,0x46,0x4F,0x52,0xA0,0x0D,
0x50,0x52,0x45,0x53,0x53,0x20,0x50,0x4C,0x41,0x59,0x20,0x4F,0x4E,0x20,0x54,0x41,
0x50,0xC5,0x50,0x52,0x45,0x53,0x53,0x20,0x52,0x45,0x43,0x4F,0x52,0x44,0x20,0x26,
0x20,0x50,0x4C,0x41,0x59,0x20,0x4F,0x4E,0x20,0x54,0x41,0x50,0xC5,0x0D,0x4C,0x4F,
0x41,0x44,0x49,0x4E,0xC7,0x0D,0x53,0x41,0x56,0x49,0x4E,0x47,0xA0,0x0D,0x56,0x45,
0x52,0x49,0x46,0x59,0x49,0x4E,0xC7,0x0D,0x46,0x4F,0x55,0x4E,0x44,0xA0,0x0D,0x4F,
0x4B,0x8D,0x24,0x9D,0x10,0x0D,0xB9,0x74,0xF1,0x08,0x29,0x7F,0x20,0xD2,0xFF,0xC8,
0x28,0x10,0xF3,0x18,0x60,0xA5,0x99,0xD0,0x08,0xA5,0xC6,0xF0,0x6D,0x78,0x4C,0xCF,
0xE5,0xC9,0x02,0xD0,0x18,0x84,0x97,0x20,0x4F,0xF1,0xA4,0x97,0x18,0x60,0xA5,0x99,
0xD0,0x0B,0xA5,0xD3,0x85,0xCA,0xA5,0xD6,0x85,0xC9,0x4C,0x4F,0xE6,0xC9,0x03,0xD0,
0x09,0x85,0xD0,0xA5,0xD5,0x85,0xC8,0x4C,0x4F,0xE6,0xB0,0x38,0xC9,0x02,0xF0,0x3F,
0x86,0x97,0x20,0x50,0xF2,0xB0,0x16,0x48,0x20,0x50,0xF2,0xB0,0x0D,0xD0,0x05,0xA9,
0x40,0x20,0x6A,0xFE,0xC6,0xA6,0xA6,0x97,0x68,0x60,0xAA,0x68,0x8A,0xA6,0x97,0x60,
0x20,0x8A,0xF8,0xD0,0x0B,0x20,0xC0,0xF8,0xB0,0x11,0xA9,0x00,0x85,0xA6,0xF0,0xF0,
0xB1,0xB2,0x18,0x60,0xA5,0x90,0xF0,0x04,0xA9,0x0D,0x18,0x60,0x4C,0x19,0xEF,0x20,
0x05,0xF2,0xB0,0x05,0xC9,0x00,0xF0,0xF7,0x18,0x60,0x48,0xA5,0x9A,0xC9,0x03,0xD0,
0x04,0x68,0x4C,0x42,0xE7,0x90,0x04,0x68,0x4C,0xE4,0xEE,0xC9,0x02,0xF0,0x2A,0x68,
0x85,0x9E,0x48,0x8A,0x48,0x98,0x48,0x20,0x8A,0xF8,0xD0,0x0E,0x20,0xE3,0xF8,0xB0,
0x0E,0xA9,0x02,0xA0,0x00,0x91,0xB2,0xC8,0x84,0xA6,0xA5,0x9E,0x91,0xB2,0x18,0x68,
0xA8,0x68,0xAA,0x68,0x90,0x02,0xA9,0x00,0x60,0x68,0x86,0x97,0x84,0x9E,0x20,0xED,
0xF0,0xA6,0x97,0xA4,0x9E,0x18,0x60,0x20,0xCF,0xF3,0xF0,0x03,0x4C,0x84,0xF7,0x20,
0xDF,0xF3,0xA5,0xBA,0xF0,0x16,0xC9,0x03,0xF0,0x12,0xB0,0x14,0xC9,0x02,0xD0,0x03,
0x4C,0x16,0xF1,0xA6,0xB9,0xE0,0x60,0xF0,0x03,0x4C,0x8D,0xF7,0x85,0x99,0x18,0x60,
0xAA,0x20,0x14,0xEE,0xA5,0xB9,0x10,0x06,0x20,0xD3,0xEE,0x4C,0x01,0xF3,0x20,0xCE,
0xEE,0x8A,0x24,0x90,0x10,0xE6,0x4C,0x8A,0xF7,0x20,0xCF,0xF3,0xF0,0x03,0x4C,0x84,
0xF7,0x20,0xDF,0xF3,0xA5,0xBA,0xD0,0x03,0x4C,0x90,0xF7,0xC9,0x03,0xF0,0x0F,0xB0,
0x11,0xC9,0x02,0xD0,0x03,0x4C,0xBC,0xF0,0xA6,0xB9,0xE0,0x60,0xF0,0xEA,0x85,0x9A,
0x18,0x60,0xAA,0x20,0x17,0xEE,0xA5,0xB9,0x10,0x05,0x20,0xC5,0xEE,0xD0,0x03,0x20,
0xC0,0xEE,0x8A,0x24,0x90,0x10,0xE7,0x4C,0x8A,0xF7,0x20,0xD4,0xF3,0xF0,0x02,0x18,
0x60,0x20,0xDF,0xF3,0x8A,0x48,0xA5,0xBA,0xF0,0x57,0xC9,0x03,0xF0,0x53,0xB0,0x4E,
0xC9,0x02,0xD0,0x29,0x68,0x20,0xB2,0xF3,0xA9,0x7D,0x8D,0x1E,0x91,0xA9,0x06,0x8D,
0x10,0x91,0xA9,0xEE,0x8D,0x1C,0x91,0x20,0x75,0xFE,0xA5,0xF8,0xF0,0x01,0xC8,0xA5,
0xFA,0xF0,0x01,0xC8,0xA9,0x00,0x85,0xF8,0x85,0xFA,0x4C,0x3C,0xF5,0xA5,0xB9,0x29,
0x0F,0xF0,0x1E,0x20,0x4D,0xF8,0xA9,0x00,0x20,0x90,0xF2,0x4C,0xCF,0xE4,0xB0,0x2E,
0xA5,0xB9,0xC9,0x62,0xD0,0x0B,0xA9,0x05,0x20,0xE7,0xF7,0x4C,0xB1,0xF3,0x20,0xDA,
0xF6,0x68,0xAA,0xC6,0x98,0xE4,0x98,0xF0,0x14,0xA4,0x98,0xB9,0x59,0x02,0x9D,0x59,
0x02,0xB9,0x63,0x02,0x9D,0x63,0x02,0xB9,0x6D,0x02,0x9D,0x6D,0x02,0x18,0x60,0xA9,
0x00,0x85,0x90,0x8A,0xA6,0x98,0xCA,0x30,0x15,0xDD,0x59,0x02,0xD0,0xF8,0x60,0xBD,
0x59,0x02,0x85,0xB8,0xBD,0x63,0x02,0x85,0xBA,0xBD,0x6D,0x02,0x85,0xB9,0x60,0xA9,
0x00,0x85,0x98,0xA2,0x03,0xE4,0x9A,0xB0,0x03,0x20,0x04,0xEF,0xE4,0x99,0xB0,0x03,
0x20,0xF6,0xEE,0x86,0x9A,0xA9,0x00,0x85,0x99,0x60,0xA6,0xB8,0xD0,0x03,0x4C,0x8D,
0xF7,0x20,0xCF,0xF3,0xD0,0x03,0x4C,0x81,0xF7,0xA6,0x98,0xE0,0x0A,0x90,0x03,0x4C,
0x7E,0xF7,0xE6,0x98,0xA5,0xB8,0x9D,0x59,0x02,0xA5,0xB9,0x09,0x60,0x85,0xB9,0x9D,
0x6D,0x02,0xA5,0xBA,0x9D,0x63,0x02,0xF0,0x5A,0xC9,0x03,0xF0,0x56,0x90,0x05,0x20,
0x95,0xF4,0x90,0x4F,0xC9,0x02,0xD0,0x03,0x4C,0xC7,0xF4,0x20,0x4D,0xF8,0xB0,0x03,
0x4C,0x96,0xF7,0xA5,0xB9,0x29,0x0F,0xD0,0x1F,0x20,0x94,0xF8,0xB0,0x36,0x20,0x47,
0xF6,0xA5,0xB7,0xF0,0x0A,0x20,0x67,0xF8,0x90,0x18,0xF0,0x28,0x4C,0x87,0xF7,0x20,
0xAF,0xF7,0xF0,0x20,0x90,0x0C,0xB0,0xF4,0x20,0xB7,0xF8,0xB0,0x17,0xA9,0x04,0x20,
0xE7,0xF7,0xA9,0xBF,0xA4,0xB9,0xC0,0x60,0xF0,0x07,0xA0,0x00,0xA9,0x02,0x91,0xB2,
0x98,0x85,0xA6,0x18,0x60,0xA5,0xB9,0x30,0x2C,0xA4,0xB7,0xF0,0x28,0xA5,0xBA,0x20,
0x17,0xEE,0xA5,0xB9,0x09,0xF0,0x20,0xC0,0xEE,0xA5,0x90,0x10,0x05,0x68,0x68,0x4C,
0x8A,0xF7,0xA5,0xB7,0xF0,0x0C,0xA0,0x00,0xB1,0xBB,0x20,0xE4,0xEE,0xC8,0xC4,0xB7,
0xD0,0xF6,0x20,0x04,0xEF,0x18,0x60,0xA9,0x06,0x8D,0x12,0x91,0x8D,0x10,0x91,0xA9,
0xEE,0x8D,0x1C,0x91,0xA0,0x00,0x8C,0x97,0x02,0xC4,0xB7,0xF0,0x0A,0xB1,0xBB,0x99,
0x93,0x02,0xC8,0xC0,0x04,0xD0,0xF2,0x20,0x27,0xF0,0x8E,0x98,0x02,0xAD,0x93,0x02,
0x29,0x0F,0xD0,0x00,0x0A,0xAA,0xBD,0x5A,0xFF,0x0A,0xA8,0xBD,0x5B,0xFF,0x2A,0x48,
0x98,0x69,0xC8,0x8D,0x99,0x02,0x68,0x69,0x00,0x8D,0x9A,0x02,0xAD,0x94,0x02,0x4A,
0x90,0x09,0xAD,0x20,0x91,0x0A,0xB0,0x03,0x4C,0x16,0xF0,0xAD,0x9B,0x02,0x8D,0x9C,
0x02,0xAD,0x9E,0x02,0x8D,0x9D,0x02,0x20,0x75,0xFE,0xA5,0xF8,0xD0,0x05,0x88,0x84,
0xF8,0x86,0xF7,0xA5,0xFA,0xD0,0x05,0x88,0x84,0xFA,0x86,0xF9,0x38,0xA9,0xF0,0x4C,
0x7B,0xFE,0x86,0xC3,0x84,0xC4,0x6C,0x30,0x03,0x85,0x93,0xA9,0x00,0x85,0x90,0xA5,
0xBA,0xD0,0x03,0x4C,0x96,0xF7,0xC9,0x03,0xF0,0xF9,0x90,0x6E,0xA4,0xB7,0xD0,0x03,
0x4C,0x93,0xF7,0x20,0xBC,0xE4,0xA9,0x60,0x85,0xB9,0x20,0x95,0xF4,0xA5,0xBA,0x20,
0x14,0xEE,0xA5,0xB9,0x20,0xCE,0xEE,0x20,0x19,0xEF,0x85,0xAE,0xA5,0x90,0x4A,0x4A,
0xB0,0x45,0x20,0x19,0xEF,0x85,0xAF,0x20,0xC1,0xE4,0xA9,0xFD,0x25,0x90,0x85,0x90,
0x20,0xE1,0xFF,0xD0,0x03,0x4C,0xCB,0xF6,0x20,0x19,0xEF,0xAA,0xA5,0x90,0x4A,0x4A,
0xB0,0xE8,0x8A,0xA4,0x93,0xF0,0x0C,0xA0,0x00,0xD1,0xAE,0xF0,0x08,0xA9,0x10,0x20,
0x6A,0xFE,0x2C,0x91,0xAE,0xE6,0xAE,0xD0,0x02,0xE6,0xAF,0x24,0x90,0x50,0xCB,0x20,
0xF6,0xEE,0x20,0xDA,0xF6,0x90,0x7A,0x4C,0x87,0xF7,0xC9,0x02,0xD0,0x03,0x4C,0xB9,
0xF0,0x20,0x4D,0xF8,0xB0,0x03,0x4C,0x96,0xF7,0x20,0x94,0xF8,0xB0,0x68,0x20,0x47,
0xF6,0xA5,0xB7,0xF0,0x09,0x20,0x67,0xF8,0x90,0x0B,0xF0,0x5A,0xB0,0xD9,0x20,0xAF,
0xF7,0xF0,0x53,0xB0,0xD2,0xA5,0x90,0x29,0x10,0x38,0xD0,0x4A,0xE0,0x01,0xF0,0x11,
0xE0,0x03,0xD0,0xDD,0xA0,0x01,0xB1,0xB2,0x85,0xC3,0xC8,0xB1,0xB2,0x85,0xC4,0xB0,
0x04,0xA5,0xB9,0xD0,0xEF,0xA0,0x03,0xB1,0xB2,0xA0,0x01,0xF1,0xB2,0xAA,0xA0,0x04,
0xB1,0xB2,0xA0,0x02,0xF1,0xB2,0xA8,0x18,0x8A,0x65,0xC3,0x85,0xAE,0x98,0x65,0xC4,
0x85,0xAF,0xA5,0xC3,0x85,0xC1,0xA5,0xC4,0x85,0xC2,0x20,0x6A,0xF6,0x20,0xC9,0xF8,
0x24,0x18,0xA6,0xAE,0xA4,0xAF,0x60,0xA5,0x9D,0x10,0x1E,0xA0,0x0C,0x20,0xE6,0xF1,
0xA5,0xB7,0xF0,0x15,0xA0,0x17,0x20,0xE6,0xF1,0xA4,0xB7,0xF0,0x0C,0xA0,0x00,0xB1,
0xBB,0x20,0xD2,0xFF,0xC8,0xC4,0xB7,0xD0,0xF6,0x60,0xA0,0x49,0xA5,0x93,0xF0,0x02,
0xA0,0x59,0x4C,0xE2,0xF1,0x86,0xAE,0x84,0xAF,0xAA,0xB5,0x00,0x85,0xC1,0xB5,0x01,
0x85,0xC2,0x6C,0x32,0x03,0xA5,0xBA,0xD0,0x03,0x4C,0x96,0xF7,0xC9,0x03,0xF0,0xF9,
0x90,0x5F,0xA9,0x61,0x85,0xB9,0xA4,0xB7,0xD0,0x03,0x4C,0x93,0xF7,0x20,0x95,0xF4,
0x20,0x28,0xF7,0xA5,0xBA,0x20,0x17,0xEE,0xA5,0xB9,0x20,0xC0,0xEE,0xA0,0x00,0x20,
0xD2,0xFB,0xA5,0xAC,0x20,0xE4,0xEE,0xA5,0xAD,0x20,0xE4,0xEE,0x20,0x11,0xFD,0xB0,
0x16,0xB1,0xAC,0x20,0xE4,0xEE,0x20,0xE1,0xFF,0xD0,0x07,0x20,0xDA,0xF6,0xA9,0x00,
0x38,0x60,0x20,0x1B,0xFD,0xD0,0xE5,0x20,0x04,0xEF,0x24,0xB9,0x30,0x11,0xA5,0xBA,
0x20,0x17,0xEE,0xA5,0xB9,0x29,0xEF,0x09,0xE0,0x20,0xC0,0xEE,0x20,0x04,0xEF,0x18,
0x60,0xC9,0x02,0xD0,0x03,0x4C,0xB9,0xF0,0x20,0x4D,0xF8,0x90,0x8C,0x20,0xB7,0xF8,
0xB0,0x25,0x20,0x28,0xF7,0xA2,0x03,0xA5,0xB9,0x29,0x01,0xD0,0x02,0xA2,0x01,0x8A,
0x20,0xE7,0xF7,0xB0,0x12,0x20,0xE6,0xF8,0xB0,0x0D,0xA5,0xB9,0x29,0x02,0xF0,0x06,
0xA9,0x05,0x20,0xE7,0xF7,0x24,0x18,0x60,0xA5,0x9D,0x10,0xFB,0xA0,0x51,0x20,0xE6,
0xF1,0x4C,0x59,0xF6,0xA2,0x00,0xE6,0xA2,0xD0,0x06,0xE6,0xA1,0xD0,0x02,0xE6,0xA0,
0x38,0xA5,0xA2,0xE9,0x01,0xA5,0xA1,0xE9,0x1A,0xA5,0xA0,0xE9,0x4F,0x90,0x06,0x86,
0xA0,0x86,0xA1,0x86,0xA2,0xAD,0x2F,0x91,0xCD,0x2F,0x91,0xD0,0xF8,0x85,0x91,0x60,
0x78,0xA5,0xA2,0xA6,0xA1,0xA4,0xA0,0x78,0x85,0xA2,0x86,0xA1,0x84,0xA0,0x58,0x60,
0xA5,0x91,0xC9,0xFE,0xD0,0x07,0x08,0x20,0xCC,0xFF,0x85,0xC6,0x28,0x60,0xA9,0x01,
0x2C,0xA9,0x02,0x2C,0xA9,0x03,0x2C,0xA9,0x04,0x2C,0xA9,0x05,0x2C,0xA9,0x06,0x2C,
0xA9,0x07,0x2C,0xA9,0x08,0x2C,0xA9,0x09,0x48,0x20,0xCC,0xFF,0xA0,0x00,0x24,0x9D,
0x50,0x0A,0x20,0xE6,0xF1,0x68,0x48,0x09,0x30,0x20,0xD2,0xFF,0x68,0x38,0x60,0xA5,
0x93,0x48,0x20,0xC0,0xF8,0x68,0x85,0x93,0xB0,0x2C,0xA0,0x00,0xB1,0xB2,0xC9,0x05,
0xF0,0x24,0xC9,0x01,0xF0,0x08,0xC9,0x03,0xF0,0x04,0xC9,0x04,0xD0,0xE1,0xAA,0x24,
0x9D,0x10,0x11,0xA0,0x63,0x20,0xE6,0xF1,0xA0,0x05,0xB1,0xB2,0x20,0xD2,0xFF,0xC8,
0xC0,0x15,0xD0,0xF6,0x18,0x88,0x60,0x85,0x9E,0x20,0x4D,0xF8,0x90,0x5E,0xA5,0xC2,
0x48,0xA5,0xC1,0x48,0xA5,0xAF,0x48,0xA5,0xAE,0x48,0xA0,0xBF,0xA9,0x20,0x91,0xB2,
0x88,0xD0,0xFB,0xA5,0x9E,0x91,0xB2,0xC8,0xA5,0xC1,0x91,0xB2,0xC8,0xA5,0xC2,0x91,
0xB2,0xC8,0xA5,0xAE,0x91,0xB2,0xC8,0xA5,0xAF,0x91,0xB2,0xC8,0x84,0x9F,0xA0,0x00,
0x84,0x9E,0xA4,0x9E,0xC4,0xB7,0xF0,0x0C,0xB1,0xBB,0xA4,0x9F,0x91,0xB2,0xE6,0x9E,
0xE6,0x9F,0xD0,0xEE,0x20,0x54,0xF8,0xA9,0x69,0x85,0xAB,0x20,0xEA,0xF8,0xA8,0x68,
0x85,0xAE,0x68,0x85,0xAF,0x68,0x85,0xC1,0x68,0x85,0xC2,0x98,0x60,0xA6,0xB2,0xA4,
0xB3,0xC0,0x02,0x60,0x20,0x4D,0xF8,0x8A,0x85,0xC1,0x18,0x69,0xC0,0x85,0xAE,0x98,
0x85,0xC2,0x69,0x00,0x85,0xAF,0x60,0x20,0xAF,0xF7,0xB0,0x1D,0xA0,0x05,0x84,0x9F,
0xA0,0x00,0x84,0x9E,0xC4,0xB7,0xF0,0x10,0xB1,0xBB,0xA4,0x9F,0xD1,0xB2,0xD0,0xE7,
0xE6,0x9E,0xE6,0x9F,0xA4,0x9E,0xD0,0xEC,0x18,0x60,0x20,0x4D,0xF8,0xE6,0xA6,0xA4,
0xA6,0xC0,0xC0,0x60,0x20,0xAB,0xF8,0xF0,0x1C,0xA0,0x1B,0x20,0xE6,0xF1,0x20,0x4B,
0xF9,0x20,0xAB,0xF8,0xD0,0xF8,0xA0,0x6A,0x4C,0xE6,0xF1,0xA9,0x40,0x2C,0x1F,0x91,
0xD0,0x03,0x2C,0x1F,0x91,0x18,0x60,0x20,0xAB,0xF8,0xF0,0xF9,0xA0,0x2E,0xD0,0xDB,
0xA9,0x00,0x85,0x90,0x85,0x93,0x20,0x54,0xF8,0x20,0x94,0xF8,0xB0,0x1F,0x78,0xA9,
0x00,0x85,0xAA,0x85,0xB4,0x85,0xB0,0x85,0x9E,0x85,0x9F,0x85,0x9C,0xA9,0x82,0xA2,
0x0E,0xD0,0x11,0x20,0x54,0xF8,0xA9,0x14,0x85,0xAB,0x20,0xB7,0xF8,0xB0,0x68,0x78,
0xA9,0xA0,0xA2,0x08,0xA0,0x7F,0x8C,0x2E,0x91,0x8D,0x2E,0x91,0x20,0x60,0xF1,0xAD,
0x14,0x03,0x8D,0x9F,0x02,0xAD,0x15,0x03,0x8D,0xA0,0x02,0x20,0xFB,0xFC,0xA9,0x02,
0x85,0xBE,0x20,0xDB,0xFB,0xAD,0x1C,0x91,0x29,0xFD,0x09,0x0C,0x8D,0x1C,0x91,0x85,
0xC0,0xA2,0xFF,0xA0,0xFF,0x88,0xD0,0xFD,0xCA,0xD0,0xF8,0x8D,0x29,0x91,0x58,0xAD,
0xA0,0x02,0xCD,0x15,0x03,0x18,0xF0,0x1F,0x20,0x4B,0xF9,0xAD,0x2D,0x91,0x29,0x40,
0xF0,0xED,0xAD,0x14,0x91,0x20,0x34,0xF7,0x4C,0x2F,0xF9,0x20,0xE1,0xFF,0x18,0xD0,
0x0B,0x20,0xCF,0xFC,0x38,0x68,0x68,0xA9,0x00,0x8D,0xA0,0x02,0x60,0x86,0xB1,0xA5,
0xB0,0x0A,0x0A,0x18,0x65,0xB0,0x18,0x65,0xB1,0x85,0xB1,0xA9,0x00,0x24,0xB0,0x30,
0x01,0x2A,0x06,0xB1,0x2A,0x06,0xB1,0x2A,0xAA,0xAD,0x28,0x91,0xC9,0x15,0x90,0xF9,
0x65,0xB1,0x8D,0x24,0x91,0x8A,0x6D,0x29,0x91,0x8D,0x25,0x91,0x58,0x60,0xAE,0x29,
0x91,0xA0,0xFF,0x98,0xED,0x28,0x91,0xEC,0x29,0x91,0xD0,0xF2,0x86,0xB1,0xAA,0x8C,
0x28,0x91,0x8C,0x29,0x91,0x98,0xE5,0xB1,0x86,0xB1,0x4A,0x66,0xB1,0x4A,0x66,0xB1,
0xA5,0xB0,0x18,0x69,0x3C,0x2C,0x21,0x91,0xC5,0xB1,0xB0,0x4A,0xA6,0x9C,0xF0,0x03,
0x4C,0xAD,0xFA,0xA6,0xA3,0x30,0x1B,0xA2,0x00,0x69,0x30,0x65,0xB0,0xC5,0xB1,0xB0,
0x1C,0xE8,0x69,0x26,0x65,0xB0,0xC5,0xB1,0xB0,0x17,0x69,0x2C,0x65,0xB0,0xC5,0xB1,
0x90,0x03,0x4C,0x60,0xFA,0xA5,0xB4,0xF0,0x1D,0x85,0xA8,0xD0,0x19,0xE6,0xA9,0xB0,
0x02,0xC6,0xA9,0x38,0xE9,0x13,0xE5,0xB1,0x65,0x92,0x85,0x92,0xA5,0xA4,0x49,0x01,
0x85,0xA4,0xF0,0x21,0x86,0xD7,0xA5,0xB4,0xF0,0x18,0x2C,0x2D,0x91,0x50,0x13,0xA9,
0x00,0x85,0xA4,0xA5,0xA3,0x10,0x30,0x30,0xC9,0xA2,0xA6,0x20,0x5D,0xF9,0xA5,0x9B,
0xD0,0xC3,0x4C,0x56,0xFF,0xA5,0x92,0xF0,0x07,0x30,0x03,0xC6,0xB0,0x2C,0xE6,0xB0,
0xA9,0x00,0x85,0x92,0xE4,0xD7,0xD0,0x0F,0x8A,0xD0,0xAA,0xA5,0xA9,0x30,0xC7,0xC9,
0x10,0x90,0xC3,0x85,0x96,0xB0,0xBF,0x8A,0x45,0x9B,0x85,0x9B,0xA5,0xB4,0xF0,0xD2,
0xC6,0xA3,0x30,0xC5,0x46,0xD7,0x66,0xBF,0xA2,0xDA,0x20,0x5D,0xF9,0x4C,0x56,0xFF,
0xA5,0x96,0xF0,0x04,0xA5,0xB4,0xF0,0x04,0xA5,0xA3,0x10,0x85,0x46,0xB1,0xA9,0x93,
0x38,0xE5,0xB1,0x65,0xB0,0x0A,0xAA,0x20,0x5D,0xF9,0xE6,0x9C,0xA5,0xB4,0xD0,0x11,
0xA5,0x96,0xF0,0x26,0x85,0xA8,0xA9,0x00,0x85,0x96,0xA9,0xC0,0x8D,0x2E,0x91,0x85,
0xB4,0xA5,0x96,0x85,0xB5,0xF0,0x09,0xA9,0x00,0x85,0xB4,0xA9,0x40,0x8D,0x2E,0x91,
0xA5,0xBF,0x85,0xBD,0xA5,0xA8,0x05,0xA9,0x85,0xB6,0x4C,0x56,0xFF,0x20,0xDB,0xFB,
0x85,0x9C,0xA2,0xDA,0x20,0x5D,0xF9,0xA5,0xBE,0xF0,0x02,0x85,0xA7,0xA9,0x0F,0x24,
0xAA,0x10,0x17,0xA5,0xB5,0xD0,0x0C,0xA6,0xBE,0xCA,0xD0,0x0B,0xA9,0x08,0x20,0x6A,
0xFE,0xD0,0x04,0xA9,0x00,0x85,0xAA,0x4C,0x56,0xFF,0x70,0x31,0xD0,0x18,0xA5,0xB5,
0xD0,0xF5,0xA5,0xB6,0xD0,0xF1,0xA5,0xA7,0x4A,0xA5,0xBD,0x30,0x03,0x90,0x18,0x18,
0xB0,0x15,0x29,0x0F,0x85,0xAA,0xC6,0xAA,0xD0,0xDD,0xA9,0x40,0x85,0xAA,0x20,0xD2,
0xFB,0xA9,0x00,0x85,0xAB,0xF0,0xD0,0xA9,0x80,0x85,0xAA,0xD0,0xCA,0xA5,0xB5,0xF0,
0x0A,0xA9,0x04,0x20,0x6A,0xFE,0xA9,0x00,0x4C,0x97,0xFB,0x20,0x11,0xFD,0x90,0x03,
0x4C,0x95,0xFB,0xA6,0xA7,0xCA,0xF0,0x2D,0xA5,0x93,0xF0,0x0C,0xA0,0x00,0xA5,0xBD,
0xD1,0xAC,0xF0,0x04,0xA9,0x01,0x85,0xB6,0xA5,0xB6,0xF0,0x4B,0xA2,0x3D,0xE4,0x9E,
0x90,0x3E,0xA6,0x9E,0xA5,0xAD,0x9D,0x01,0x01,0xA5,0xAC,0x9D,0x00,0x01,0xE8,0xE8,
0x86,0x9E,0x4C,0x87,0xFB,0xA6,0x9F,0xE4,0x9E,0xF0,0x35,0xA5,0xAC,0xDD,0x00,0x01,
0xD0,0x2E,0xA5,0xAD,0xDD,0x01,0x01,0xD0,0x27,0xE6,0x9F,0xE6,0x9F,0xA5,0x93,0xF0,
0x0B,0xA5,0xBD,0xA0,0x00,0xD1,0xAC,0xF0,0x17,0xC8,0x84,0xB6,0xA5,0xB6,0xF0,0x07,
0xA9,0x10,0x20,0x6A,0xFE,0xD0,0x09,0xA5,0x93,0xD0,0x05,0xA8,0xA5,0xBD,0x91,0xAC,
0x20,0x1B,0xFD,0xD0,0x3A,0xA9,0x80,0x85,0xAA,0xA6,0xBE,0xCA,0x30,0x02,0x86,0xBE,
0xC6,0xA7,0xF0,0x08,0xA5,0x9E,0xD0,0x27,0x85,0xBE,0xF0,0x23,0x20,0xCF,0xFC,0x20,
0xD2,0xFB,0xA0,0x00,0x84,0xAB,0xB1,0xAC,0x45,0xAB,0x85,0xAB,0x20,0x1B,0xFD,0x20,
0x11,0xFD,0x90,0xF2,0xA5,0xAB,0x45,0xBD,0xF0,0x05,0xA9,0x20,0x20,0x6A,0xFE,0x4C,
0x56,0xFF,0xA5,0xC2,0x85,0xAD,0xA5,0xC1,0x85,0xAC,0x60,0xA9,0x08,0x85,0xA3,0xA9,
0x00,0x85,0xA4,0x85,0xA8,0x85,0x9B,0x85,0xA9,0x60,0xA5,0xBD,0x4A,0xA9,0x60,0x90,
0x02,0xA9,0xB0,0xA2,0x00,0x8D,0x28,0x91,0x8E,0x29,0x91,0xAD,0x20,0x91,0x49,0x08,
0x8D,0x20,0x91,0x29,0x08,0x60,0x38,0x66,0xAD,0x30,0x3C,0xA5,0xA8,0xD0,0x12,0xA9,
0x10,0xA2,0x01,0x20,0xF5,0xFB,0xD0,0x2F,0xE6,0xA8,0xA5,0xAD,0x10,0x29,0x4C,0x95,
0xFC,0xA5,0xA9,0xD0,0x09,0x20,0xF1,0xFB,0xD0,0x1D,0xE6,0xA9,0xD0,0x19,0x20,0xEA,
0xFB,0xD0,0x14,0xA5,0xA4,0x49,0x01,0x85,0xA4,0xF0,0x0F,0xA5,0xBD,0x49,0x01,0x85,
0xBD,0x29,0x01,0x45,0x9B,0x85,0x9B,0x4C,0x56,0xFF,0x46,0xBD,0xC6,0xA3,0xA5,0xA3,
0xF0,0x3A,0x10,0xF3,0x20,0xDB,0xFB,0x58,0xA5,0xA5,0xF0,0x12,0xA2,0x00,0x86,0xD7,
0xC6,0xA5,0xA6,0xBE,0xE0,0x02,0xD0,0x02,0x09,0x80,0x85,0xBD,0xD0,0xD9,0x20,0x11,
0xFD,0x90,0x0A,0xD0,0x91,0xE6,0xAD,0xA5,0xD7,0x85,0xBD,0xB0,0xCA,0xA0,0x00,0xB1,
0xAC,0x85,0xBD,0x45,0xD7,0x85,0xD7,0x20,0x1B,0xFD,0xD0,0xBB,0xA5,0x9B,0x49,0x01,
0x85,0xBD,0x4C,0x56,0xFF,0xC6,0xBE,0xD0,0x03,0x20,0x08,0xFD,0xA9,0x50,0x85,0xA7,
0xA2,0x08,0x78,0x20,0xFB,0xFC,0xD0,0xEA,0xA9,0x78,0x20,0xF3,0xFB,0xD0,0xE3,0xC6,
0xA7,0xD0,0xDF,0x20,0xDB,0xFB,0xC6,0xAB,0x10,0xD8,0xA2,0x0A,0x20,0xFB,0xFC,0x58,
0xE6,0xAB,0xA5,0xBE,0xF0,0x30,0x20,0xD2,0xFB,0xA2,0x09,0x86,0xA5,0xD0,0x85,0x08,
0x78,0x20,0x08,0xFD,0xA9,0x7F,0x8D,0x2E,0x91,0xA9,0xF7,0x8D,0x20,0x91,0xA9,0x40,
0x8D,0x2B,0x91,0x20,0x39,0xFE,0xAD,0xA0,0x02,0xF0,0x09,0x8D,0x15,0x03,0xAD,0x9F,
0x02,0x8D,0x14,0x03,0x28,0x60,0x20,0xCF,0xFC,0xF0,0x97,0xBD,0xE9,0xFD,0x8D,0x14,
0x03,0xBD,0xEA,0xFD,0x8D,0x15,0x03,0x60,0xAD,0x1C,0x91,0x09,0x0E,0x8D,0x1C,0x91,
0x60,0x38,0xA5,0xAC,0xE5,0xAE,0xA5,0xAD,0xE5,0xAF,0x60,0xE6,0xAC,0xD0,0x02,0xE6,
0xAD,0x60,0xA2,0xFF,0x78,0x9A,0xD8,0x20,0x3F,0xFD,0xD0,0x03,0x6C,0x00,0xA0,0x20,
0x8D,0xFD,0x20,0x52,0xFD,0x20,0xF9,0xFD,0x20,0x18,0xE5,0x58,0x6C,0x00,0xC0,0xA2,
0x05,0xBD,0x4C,0xFD,0xDD,0x03,0xA0,0xD0,0x03,0xCA,0xD0,0xF5,0x60,0x41,0x30,0xC3,
0xC2,0xCD,0xA2,0x6D,0xA0,0xFD,0x18,0x86,0xC3,0x84,0xC4,0xA0,0x1F,0xB9,0x14,0x03,
0xB0,0x02,0xB1,0xC3,0x91,0xC3,0x99,0x14,0x03,0x88,0x10,0xF1,0x60,0xBF,0xEA,0xD2,
0xFE,0xAD,0xFE,0x0A,0xF4,0x4A,0xF3,0xC7,0xF2,0x09,0xF3,0xF3,0xF3,0x0E,0xF2,0x7A,
0xF2,0x70,0xF7,0xF5,0xF1,0xEF,0xF3,0xD2,0xFE,0x49,0xF5,0x85,0xF6,0xA9,0x00,0xAA,
0x95,0x00,0x9D,0x00,0x02,0x9D,0x00,0x03,0xE8,0xD0,0xF5,0xA2,0x3C,0xA0,0x03,0x86,
0xB2,0x84,0xB3,0x85,0xC1,0x85,0x97,0x8D,0x81,0x02,0xA8,0xA9,0x04,0x85,0xC2,0xE6,
0xC1,0xD0,0x02,0xE6,0xC2,0x20,0x91,0xFE,0xA5,0x97,0xF0,0x22,0xB0,0xF1,0xA4,0xC2,
0xA6,0xC1,0xC0,0x20,0x90,0x25,0xC0,0x21,0xB0,0x08,0xA0,0x1E,0x8C,0x88,0x02,0x4C,
0x7B,0xFE,0xA9,0x12,0x8D,0x82,0x02,0xA9,0x10,0x8D,0x88,0x02,0xD0,0xF1,0x90,0xCF,
0xA5,0xC2,0x8D,0x82,0x02,0x85,0x97,0xC9,0x11,0x90,0xC4,0x20,0xC3,0xE5,0x4C,0xEB,
0xFD,0xA8,0xFC,0x0B,0xFC,0xBF,0xEA,0x8E,0xF9,0xA9,0x7F,0x8D,0x1E,0x91,0x8D,0x2E,
0x91,0xA9,0x40,0x8D,0x2B,0x91,0xA9,0x40,0x8D,0x1B,0x91,0xA9,0xFE,0x8D,0x1C,0x91,
0xA9,0xDE,0x8D,0x2C,0x91,0xA2,0x00,0x8E,0x12,0x91,0xA2,0xFF,0x8E,0x22,0x91,0xA2,
0x00,0x8E,0x23,0x91,0xA2,0x80,0x8E,0x13,0x91,0xA2,0x00,0x8E,0x1F,0x91,0x20,0x84,
0xEF,0xA9,0x82,0x8D,0x1E,0x91,0x20,0x8D,0xEF,0xA9,0xC0,0x8D,0x2E,0x91,0xA9,0x26,
0x8D,0x24,0x91,0xA9,0x48,0x8D,0x25,0x91,0x60,0x85,0xB7,0x86,0xBB,0x84,0xBC,0x60,
0x85,0xB8,0x86,0xBA,0x84,0xB9,0x60,0xA5,0xBA,0xC9,0x02,0xD0,0x0B,0xAD,0x97,0x02,
0xA9,0x00,0x8D,0x97,0x02,0x60,0x85,0x9D,0xA5,0x90,0x05,0x90,0x85,0x90,0x60,0x8D,
0x85,0x02,0x60,0x90,0x06,0xAE,0x83,0x02,0xAC,0x84,0x02,0x8E,0x83,0x02,0x8C,0x84,
0x02,0x60,0x90,0x06,0xAE,0x81,0x02,0xAC,0x82,0x02,0x8E,0x81,0x02,0x8C,0x82,0x02,
0x60,0xB1,0xC1,0xAA,0xA9,0x55,0x91,0xC1,0xD1,0xC1,0xD0,0x08,0x6A,0x91,0xC1,0xD1,
0xC1,0xD0,0x01,0xA9,0x18,0x8A,0x91,0xC1,0x60,0x78,0x6C,0x18,0x03,0x48,0x8A,0x48,
0x98,0x48,0xAD,0x1D,0x91,0x10,0x48,0x2D,0x1E,0x91,0xAA,0x29,0x02,0xF0,0x1F,0x20,
0x3F,0xFD,0xD0,0x03,0x6C,0x02,0xA0,0x2C,0x11,0x91,0x20,0x34,0xF7,0x20,0xE1,0xFF,
0xD0,0x2D,0x20,0x52,0xFD,0x20,0xF9,0xFD,0x20,0x18,0xE5,0x6C,0x02,0xC0,0xAD,0x1E,
0x91,0x09,0x80,0x48,0xA9,0x7F,0x8D,0x1E,0x91,0x8A,0x29,0x40,0xF0,0x14,0xA9,0xCE,
0x05,0xB5,0x8D,0x1C,0x91,0xAD,0x14,0x91,0x68,0x8D,0x1E,0x91,0x20,0xA3,0xEF,0x4C,
0x56,0xFF,0x8A,0x29,0x20,0xF0,0x25,0xAD,0x10,0x91,0x29,0x01,0x85,0xA7,0xAD,0x18,
0x91,0xE9,0x16,0x6D,0x99,0x02,0x8D,0x18,0x91,0xAD,0x19,0x91,0x6D,0x9A,0x02,0x8D,
0x19,0x91,0x68,0x8D,0x1E,0x91,0x20,0x36,0xF0,0x4C,0x56,0xFF,0x8A,0x29,0x10,0xF0,
0x25,0xAD,0x93,0x02,0x29,0x0F,0xD0,0x00,0x0A,0xAA,0xBD,0x5A,0xFF,0x8D,0x18,0x91,
0xBD,0x5B,0xFF,0x8D,0x19,0x91,0xAD,0x10,0x91,0x68,0x09,0x20,0x29,0xEF,0x8D,0x1E,
0x91,0xAE,0x98,0x02,0x86,0xA8,0x68,0xA8,0x68,0xAA,0x68,0x40,0xE6,0x2A,0x78,0x1C,
0x49,0x13,0xB1,0x0F,0x0A,0x0E,0xD3,0x06,0x38,0x03,0x6A,0x01,0xD0,0x00,0x83,0x00,
0x36,0x00,0x48,0x8A,0x48,0x98,0x48,0xBA,0xBD,0x04,0x01,0x29,0x10,0xF0,0x03,0x6C,
0x16,0x03,0x6C,0x14,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x4C,0x52,0xFD,0x4C,0x57,0xFD,
0x4C,0x66,0xFE,0x4C,0xC0,0xEE,0x4C,0xCE,0xEE,0x4C,0x73,0xFE,0x4C,0x82,0xFE,0x4C,
0x1E,0xEB,0x4C,0x6F,0xFE,0x4C,0x19,0xEF,0x4C,0xE4,0xEE,0x4C,0xF6,0xEE,0x4C,0x04,
0xEF,0x4C,0x17,0xEE,0x4C,0x14,0xEE,0x4C,0x57,0xFE,0x4C,0x50,0xFE,0x4C,0x49,0xFE,
0x6C,0x1A,0x03,0x6C,0x1C,0x03,0x6C,0x1E,0x03,0x6C,0x20,0x03,0x6C,0x22,0x03,0x6C,
0x24,0x03,0x6C,0x26,0x03,0x4C,0x42,0xF5,0x4C,0x75,0xF6,0x4C,0x67,0xF7,0x4C,0x60,
0xF7,0x6C,0x28,0x03,0x6C,0x2A,0x03,0x6C,0x2C,0x03,0x4C,0x34,0xF7,0x4C,0x05,0xE5,
0x4C,0x0A,0xE5,0x4C,0x00,0xE5,0xFF,0xFF,0xFF,0xFF,0xA9,0xFE,0x22,0xFD,0x72,0xFF,
};

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,192 @@
#ifndef _H_MOS6502
#define _H_MOS6502
//============================================================================
// Name : mos6502
// Author : Gianluca Ghettini
// Version : 1.0
// Copyright :
// Description : A MOS 6502 CPU emulator written in C++
//============================================================================
#include <stdint.h>
#define NEGATIVE 0x80
#define OVERFLOW 0x40
#define CONSTANT 0x20
#define BREAK 0x10
#define DECIMAL 0x08
#define INTERRUPT 0x04
#define ZERO 0x02
#define CARRY 0x01
#define SET_NEGATIVE(x) (x ? (status |= NEGATIVE) : (status &= (~NEGATIVE)) )
#define SET_OVERFLOW(x) (x ? (status |= OVERFLOW) : (status &= (~OVERFLOW)) )
#define SET_CONSTANT(x) (x ? (status |= CONSTANT) : (status &= (~CONSTANT)) )
#define SET_BREAK(x) (x ? (status |= BREAK) : (status &= (~BREAK)) )
#define SET_DECIMAL(x) (x ? (status |= DECIMAL) : (status &= (~DECIMAL)) )
#define SET_INTERRUPT(x) (x ? (status |= INTERRUPT) : (status &= (~INTERRUPT)) )
#define SET_ZERO(x) (x ? (status |= ZERO) : (status &= (~ZERO)) )
#define SET_CARRY(x) (x ? (status |= CARRY) : (status &= (~CARRY)) )
#define IF_NEGATIVE() ((status & NEGATIVE) ? true : false)
#define IF_OVERFLOW() ((status & OVERFLOW) ? true : false)
#define IF_CONSTANT() ((status & CONSTANT) ? true : false)
#define IF_BREAK() ((status & BREAK) ? true : false)
#define IF_DECIMAL() ((status & DECIMAL) ? true : false)
#define IF_INTERRUPT() ((status & INTERRUPT) ? true : false)
#define IF_ZERO() ((status & ZERO) ? true : false)
#define IF_CARRY() ((status & CARRY) ? true : false)
class mos6502
{
private:
// registers
uint8_t A; // accumulator
uint8_t X; // X-index
uint8_t Y; // Y-index
// stack pointer
uint8_t sp;
// program counter
uint16_t pc;
// status register
uint8_t status;
typedef void (mos6502::*CodeExec)(uint16_t);
typedef uint16_t (mos6502::*AddrExec)();
struct Instr
{
AddrExec addr;
CodeExec code;
uint8_t cycles;
};
Instr InstrTable[256];
void Exec(Instr i);
bool illegalOpcode;
// addressing modes
uint16_t Addr_ACC(); // ACCUMULATOR
uint16_t Addr_IMM(); // IMMEDIATE
uint16_t Addr_ABS(); // ABSOLUTE
uint16_t Addr_ZER(); // ZERO PAGE
uint16_t Addr_ZEX(); // INDEXED-X ZERO PAGE
uint16_t Addr_ZEY(); // INDEXED-Y ZERO PAGE
uint16_t Addr_ABX(); // INDEXED-X ABSOLUTE
uint16_t Addr_ABY(); // INDEXED-Y ABSOLUTE
uint16_t Addr_IMP(); // IMPLIED
uint16_t Addr_REL(); // RELATIVE
uint16_t Addr_INX(); // INDEXED-X INDIRECT
uint16_t Addr_INY(); // INDEXED-Y INDIRECT
uint16_t Addr_ABI(); // ABSOLUTE INDIRECT
// opcodes (grouped as per datasheet)
void Op_ADC(uint16_t src);
void Op_AND(uint16_t src);
void Op_ASL(uint16_t src); void Op_ASL_ACC(uint16_t src);
void Op_BCC(uint16_t src);
void Op_BCS(uint16_t src);
void Op_BEQ(uint16_t src);
void Op_BIT(uint16_t src);
void Op_BMI(uint16_t src);
void Op_BNE(uint16_t src);
void Op_BPL(uint16_t src);
void Op_BRK(uint16_t src);
void Op_BVC(uint16_t src);
void Op_BVS(uint16_t src);
void Op_CLC(uint16_t src);
void Op_CLD(uint16_t src);
void Op_CLI(uint16_t src);
void Op_CLV(uint16_t src);
void Op_CMP(uint16_t src);
void Op_CPX(uint16_t src);
void Op_CPY(uint16_t src);
void Op_DEC(uint16_t src);
void Op_DEX(uint16_t src);
void Op_DEY(uint16_t src);
void Op_EOR(uint16_t src);
void Op_INC(uint16_t src);
void Op_INX(uint16_t src);
void Op_INY(uint16_t src);
void Op_JMP(uint16_t src);
void Op_JSR(uint16_t src);
void Op_LDA(uint16_t src);
void Op_LDX(uint16_t src);
void Op_LDY(uint16_t src);
void Op_LSR(uint16_t src); void Op_LSR_ACC(uint16_t src);
void Op_NOP(uint16_t src);
void Op_ORA(uint16_t src);
void Op_PHA(uint16_t src);
void Op_PHP(uint16_t src);
void Op_PLA(uint16_t src);
void Op_PLP(uint16_t src);
void Op_ROL(uint16_t src); void Op_ROL_ACC(uint16_t src);
void Op_ROR(uint16_t src); void Op_ROR_ACC(uint16_t src);
void Op_RTI(uint16_t src);
void Op_RTS(uint16_t src);
void Op_SBC(uint16_t src);
void Op_SEC(uint16_t src);
void Op_SED(uint16_t src);
void Op_SEI(uint16_t src);
void Op_STA(uint16_t src);
void Op_STX(uint16_t src);
void Op_STY(uint16_t src);
void Op_TAX(uint16_t src);
void Op_TAY(uint16_t src);
void Op_TSX(uint16_t src);
void Op_TXA(uint16_t src);
void Op_TXS(uint16_t src);
void Op_TYA(uint16_t src);
void Op_ILLEGAL(uint16_t src);
// IRQ, reset, NMI vectors
static const uint16_t irqVectorH = 0xFFFF;
static const uint16_t irqVectorL = 0xFFFE;
static const uint16_t rstVectorH = 0xFFFD;
static const uint16_t rstVectorL = 0xFFFC;
static const uint16_t nmiVectorH = 0xFFFB;
static const uint16_t nmiVectorL = 0xFFFA;
// read/write callbacks
//typedef void (*BusWrite)(uint16_t, uint8_t);
//typedef uint8_t (*BusRead)(uint16_t);
//BusRead Read;
//BusWrite Write;
// stack operations
inline void StackPush(uint8_t byte);
inline uint8_t StackPop();
public:
enum CycleMethod {
INST_COUNT,
CYCLE_COUNT,
};
mos6502();
void NMI();
int IRQ();
void Reset();
uint64_t Run(
int32_t cycles,
CycleMethod cycleMethod = CYCLE_COUNT);
};
#endif

Wyświetl plik

@ -0,0 +1,39 @@
#ifndef _PLATFORM_CONFIG_H_
#define _PLATFORM_CONFIG_H_
#define TEECOMPUTER 1
#ifdef TEECOMPUTER
//#define ILI9341 1
//#define ST7789 1
//#define TFTSPI1 1
#define HAS_T4_VGA 1
#define HAS_SND 1
#define HAS_USBKEY 1
#define INVX 1
#else
#define HAS_T4_VGA 1
//#define INVX 1
#define INVY 1
#define HAS_SND 1
#define HAS_USBKEY 1
#endif
//#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
//#define EXTERNAL_SD 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1
//#define USE_SDFS 1
//#define SDFSDEV "1:"
#endif

Wyświetl plik

@ -0,0 +1,204 @@
extern "C" {
#include "emuapi.h"
#include "iopins.h"
}
#include "v20.h"
#ifdef HAS_T4_VGA
#include "vga_t_dma.h"
TFT_T_DMA tft;
#else
#include "tft_t_dma.h"
TFT_T_DMA tft = TFT_T_DMA(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_MISO, TFT_TOUCH_CS, TFT_TOUCH_INT);
#endif
bool vgaMode = false;
static unsigned char palette8[PALETTE_SIZE];
static unsigned short palette16[PALETTE_SIZE];
static IntervalTimer myTimer;
volatile boolean vbl=true;
static int skip=0;
static elapsedMicros tius;
static void vblCount() {
if (vbl) {
vbl = false;
} else {
vbl = true;
}
}
void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index)
{
if (index<PALETTE_SIZE) {
//Serial.println("%d: %d %d %d\n", index, r,g,b);
palette8[index] = RGBVAL8(r,g,b);
palette16[index] = RGBVAL16(r,g,b);
}
}
void emu_DrawVsync(void)
{
volatile boolean vb=vbl;
skip += 1;
skip &= VID_FRAME_SKIP;
if (!vgaMode) {
#ifdef HAS_T4_VGA
tft.waitSync();
#else
while (vbl==vb) {};
#endif
}
}
void emu_DrawLine(unsigned char * VBuf, int width, int height, int line)
{
if (!vgaMode) {
#ifdef HAS_T4_VGA
tft.writeLine(width,1,line, VBuf, palette8);
#else
tft.writeLine(width,1,line, VBuf, palette16);
#endif
}
}
void emu_DrawLine8(unsigned char * VBuf, int width, int height, int line)
{
if (!vgaMode) {
if (skip==0) {
#ifdef HAS_T4_VGA
tft.writeLine(width,height,line, VBuf);
#endif
}
}
}
void emu_DrawLine16(unsigned short * VBuf, int width, int height, int line)
{
if (!vgaMode) {
if (skip==0) {
#ifdef HAS_T4_VGA
tft.writeLine16(width,height,line, VBuf);
#else
tft.writeLine(width,height,line, VBuf);
#endif
}
}
}
void emu_DrawScreen(unsigned char * VBuf, int width, int height, int stride)
{
if (!vgaMode) {
if (skip==0) {
#ifdef HAS_T4_VGA
tft.writeScreen(width,height-TFT_VBUFFER_YCROP,stride, VBuf+(TFT_VBUFFER_YCROP/2)*stride, palette8);
#else
tft.writeScreen(width,height-TFT_VBUFFER_YCROP,stride, VBuf+(TFT_VBUFFER_YCROP/2)*stride, palette16);
#endif
}
}
}
int emu_FrameSkip(void)
{
return skip;
}
void * emu_LineBuffer(int line)
{
if (!vgaMode) {
return (void*)tft.getLineBuffer(line);
}
}
// ****************************************************
// the setup() method runs once, when the sketch starts
// ****************************************************
void setup() {
#ifdef HAS_T4_VGA
tft.begin(VGA_MODE_320x240);
// NVIC_SET_PRIORITY(IRQ_QTIMER3, 0);
#else
tft.begin();
#endif
emu_init();
}
// ****************************************************
// the loop() method runs continuously
// ****************************************************
void loop(void)
{
if (menuActive()) {
uint16_t bClick = emu_DebounceLocalKeys();
int action = handleMenu(bClick);
char * filename = menuSelection();
if (action == ACTION_RUN1) {
toggleMenu(false);
vgaMode = false;
emu_start();
emu_Init(filename);
tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) );
tft.startDMA();
myTimer.begin(vblCount, 20000); //to run every 20ms
}
delay(20);
}
else {
uint16_t bClick = emu_DebounceLocalKeys();
emu_Input(bClick);
emu_Step();
delay(10);
//uint16_t bClick = emu_DebounceLocalKeys();
//if (bClick & MASK_KEY_USER1) {
// emu_Input(bClick);
//}
}
}
#ifdef HAS_SND
#include "AudioPlaySystem.h"
AudioPlaySystem mymixer;
void emu_sndInit() {
Serial.println("sound init");
#ifdef HAS_T4_VGA
tft.begin_audio(256, mymixer.snd_Mixer);
#else
mymixer.begin_audio(256, mymixer.snd_Mixer);
#endif
// sgtl5000_1.enable();
// sgtl5000_1.volume(0.6);
mymixer.start();
}
void emu_sndPlaySound(int chan, int volume, int freq)
{
if (chan < 6) {
mymixer.sound(chan, freq, volume);
}
/*
Serial.print(chan);
Serial.print(":" );
Serial.print(volume);
Serial.print(":" );
Serial.println(freq);
*/
}
void emu_sndPlayBuzz(int size, int val) {
mymixer.buzz(size,val);
//Serial.print((val==1)?1:0);
//Serial.print(":");
//Serial.println(size);
}
#endif

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,234 @@
/*
Based on C64 ILI9341 dma driver from Frank Bösing, 2017
*/
#ifndef _TFT_T_DMAH_
#define _TFT_T_DMAH_
#ifdef __cplusplus
#include <Arduino.h>
#include <SPI.h>
#include <DMAChannel.h>
#endif
#include "tft_t_dma_config.h"
#define RGBVAL32(r,g,b) ( (r<<16) | (g<<8) | b )
#define RGBVAL16(r,g,b) ( (((r>>3)&0x1f)<<11) | (((g>>2)&0x3f)<<5) | (((b>>3)&0x1f)<<0) )
#define RGBVAL8(r,g,b) ( (((r>>5)&0x07)<<5) | (((g>>5)&0x07)<<2) | (((b>>6)&0x3)<<0) )
#define R16(rgb) ((rgb>>8)&0xf8)
#define G16(rgb) ((rgb>>3)&0xfc)
#define B16(rgb) ((rgb<<3)&0xf8)
#define PAL_COLOR_MASK 0xff
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
//#define WIDTH 272
//#define HEIGHT 228
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4
#define SCREEN_DMA_NUM_SETTINGS NR_OF_BLOCK
#ifdef ILI9341
#define ILI9341_NOP 0x00
#define ILI9341_SWRESET 0x01
#define ILI9341_RDDID 0x04
#define ILI9341_RDDST 0x09
#define ILI9341_SLPIN 0x10
#define ILI9341_SLPOUT 0x11
#define ILI9341_PTLON 0x12
#define ILI9341_NORON 0x13
#define ILI9341_RDMODE 0x0A
#define ILI9341_RDMADCTL 0x0B
#define ILI9341_RDPIXFMT 0x0C
#define ILI9341_RDIMGFMT 0x0D
#define ILI9341_RDSELFDIAG 0x0F
#define ILI9341_INVOFF 0x20
#define ILI9341_INVON 0x21
#define ILI9341_GAMMASET 0x26
#define ILI9341_DISPOFF 0x28
#define ILI9341_DISPON 0x29
#define ILI9341_CASET 0x2A
#define ILI9341_PASET 0x2B
#define ILI9341_RAMWR 0x2C
#define ILI9341_RAMRD 0x2E
#define ILI9341_PTLAR 0x30
#define ILI9341_MADCTL 0x36
#define ILI9341_VSCRSADD 0x37
#define ILI9341_PIXFMT 0x3A
#define ILI9341_FRMCTR1 0xB1
#define ILI9341_FRMCTR2 0xB2
#define ILI9341_FRMCTR3 0xB3
#define ILI9341_INVCTR 0xB4
#define ILI9341_DFUNCTR 0xB6
#define ILI9341_PWCTR1 0xC0
#define ILI9341_PWCTR2 0xC1
#define ILI9341_PWCTR3 0xC2
#define ILI9341_PWCTR4 0xC3
#define ILI9341_PWCTR5 0xC4
#define ILI9341_VMCTR1 0xC5
#define ILI9341_VMCTR2 0xC7
#define ILI9341_RDID1 0xDA
#define ILI9341_RDID2 0xDB
#define ILI9341_RDID3 0xDC
#define ILI9341_RDID4 0xDD
#define ILI9341_GMCTRP1 0xE0
#define ILI9341_GMCTRN1 0xE1
#define ILI9341_MADCTL_MY 0x80
#define ILI9341_MADCTL_MX 0x40
#define ILI9341_MADCTL_MV 0x20
#define ILI9341_MADCTL_ML 0x10
#define ILI9341_MADCTL_RGB 0x00
#define ILI9341_MADCTL_BGR 0x08
#define ILI9341_MADCTL_MH 0x04
#define TFT_CASET ILI9341_CASET
#define TFT_PASET ILI9341_PASET
#define TFT_RAMWR ILI9341_RAMWR
#define TFT_MADCTL ILI9341_MADCTL
#endif
#ifdef ST7789
#define ST7735_NOP 0x00
#define ST7735_SWRESET 0x01
#define ST7735_RDDID 0x04
#define ST7735_RDDST 0x09
#define ST7735_SLPIN 0x10
#define ST7735_SLPOUT 0x11
#define ST7735_PTLON 0x12
#define ST7735_NORON 0x13
#define ST7735_INVOFF 0x20
#define ST7735_INVON 0x21
#define ST7735_DISPOFF 0x28
#define ST7735_DISPON 0x29
#define ST7735_CASET 0x2A
#define ST7735_RASET 0x2B
#define ST7735_RAMWR 0x2C
#define ST7735_RAMRD 0x2E
#define ST7735_PTLAR 0x30
#define ST7735_COLMOD 0x3A
#define ST7735_MADCTL 0x36
#define ST7735_FRMCTR1 0xB1
#define ST7735_FRMCTR2 0xB2
#define ST7735_FRMCTR3 0xB3
#define ST7735_INVCTR 0xB4
#define ST7735_DISSET5 0xB6
#define ST7735_PWCTR1 0xC0
#define ST7735_PWCTR2 0xC1
#define ST7735_PWCTR3 0xC2
#define ST7735_PWCTR4 0xC3
#define ST7735_PWCTR5 0xC4
#define ST7735_VMCTR1 0xC5
#define ST7735_RDID1 0xDA
#define ST7735_RDID2 0xDB
#define ST7735_RDID3 0xDC
#define ST7735_RDID4 0xDD
#define ST7735_PWCTR6 0xFC
#define ST7735_GMCTRP1 0xE0
#define ST7735_GMCTRN1 0xE1
#define ST77XX_MADCTL_MY 0x80
#define ST77XX_MADCTL_MX 0x40
#define ST77XX_MADCTL_MV 0x20
#define ST77XX_MADCTL_ML 0x10
#define ST77XX_MADCTL_RGB 0x00
#define ST77XX_MADCTL_BGR 0x08
#define ST77XX_MADCTL_MH 0x04
#define TFT_CASET ST7735_CASET
#define TFT_PASET ST7735_RASET
#define TFT_RAMWR ST7735_RAMWR
#define TFT_MADCTL ST7735_MADCTL
#endif
#ifdef __cplusplus
class TFT_T_DMA
{
public:
TFT_T_DMA(uint8_t _CS, uint8_t _DC, uint8_t _RST = 255, uint8_t _MOSI=11, uint8_t _SCLK=13, uint8_t _MISO=12, uint8_t touch_cs=38, uint8_t touch_irq=37);
void setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2);
void begin(void);
void flipscreen(bool flip);
boolean isflipped(void);
void startDMA(void);
void stopDMA();
int get_frame_buffer_size(int *width, int *height);
// Touch screen functions
#define TOUCH_ENABLED() ((_touch_cs != 255) && (_touch_irq != 255))
bool isTouching(void) { return ((!TOUCH_ENABLED())?false:(digitalRead(_touch_irq) == LOW)); }
void readRaw(uint16_t * oX, uint16_t * oY, uint16_t * oZ);
void readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ);
void callibrateTouch(uint16_t xMin,uint16_t yMin,uint16_t xMax,uint16_t yMax);
// NoDMA functions
void writeScreenNoDma(const uint16_t *pcolors);
void fillScreenNoDma(uint16_t color);
void drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize);
void drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap);
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh);
// DMA functions
uint16_t * getLineBuffer(int j);
void writeScreen(int width, int height, int stride, uint8_t *buffer, uint16_t *palette16);
void writeLine(int width, int height, int stride, uint8_t *buffer, uint16_t *palette16);
void writeLine(int width, int height, int y, uint16_t *buf);
void fillScreen(uint16_t color);
void drawText(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize);
void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void drawSprite(int16_t x, int16_t y, const uint16_t *bitmap);
void drawSprite(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh);
protected:
uint8_t _rst, _cs, _dc;
uint8_t _miso, _mosi, _sclk;
uint8_t _touch_irq=255, _touch_cs=255;
bool flipped=false;
void wait(void);
void enableTouchIrq();
};
#endif
#endif

Wyświetl plik

@ -0,0 +1,14 @@
#include "platform_config.h"
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1
//#define FLIP_SCREEN 1
//#define TFT_DEBUG 1
#if defined(__IMXRT1052__) || defined(__IMXRT1062__)
//#define TFT_STATICFB 1
#endif

Wyświetl plik

@ -0,0 +1,459 @@
#include <stdio.h>
#include <string.h>
extern "C" {
#include "emuapi.h"
#include "platform_config.h"
}
#include <Arduino.h>
// Vic 20 emulation includes
#include "mos6502.h"
#include "MOS6561.h"
#include "MOS6522.h"
#include "MOS6502Memory.h"
#include "kernalromp.h"
#include "charrom.h"
#include "basicrom.h"
static mos6502 mos;
static MOS6561 mos6561;
static MOS6522 mos6522;
uint8_t vicmemory[0x10000];;
#define VIC20FREQBASE 65535
/* noise magic */
#define NSHIFT(v, n) (((v)<<(n))|((((v)>>(23-(n)))^(v>>(18-(n))))&((1<<(n))-1)))
#define NVALUE(v) (noiseLSB[v&0xff]|noiseMID[(v>>8)&0xff]|noiseMSB[(v>>16)&0xff])
#define NSEED 0x7ffff8
/* Noise tables */
#define NOISETABLESIZE 256
static uint8_t noiseMSB[NOISETABLESIZE];
static uint8_t noiseMID[NOISETABLESIZE];
static uint8_t noiseLSB[NOISETABLESIZE];
/* needed data for one voice */
typedef struct voice_s
{
/* counter value */
int f;
/* counter step / sample */
int fs;
/* noise shift register. Note! rv may be 0 to 15 shifts 'behind' the
real noise shift register value. Remaining shifts are done when
it is referenced */
int rv;
} voice_t;
/* needed data for SID */
struct sound_s
{
/* number of voices */
voice_t v[4];
/* 4-bit volume value */
uint8_t vol;
/* internal constant used for sample rate dependent calculations */
int speed1;
};
static sound_s psid;
static void VIC_VOICE_HANDLE(int voice, int value, int shift)
{
int div = 255 - value;
if (!div)
div = 127;
if (!(value & 0x80))
psid.v[voice].fs = 0;
else
psid.v[voice].fs = psid.speed1*VIC20FREQBASE*(1 << shift)/div;
};
void SND_Process(void * stream, int len) {
int o0, o1, o2, o3;
short * sndbuf = (short *)stream;
for (int i = 0; i < len/2; i++)
{
/* addfptrs */
psid.v[0].f += psid.v[0].fs;
psid.v[1].f += psid.v[1].fs;
psid.v[2].f += psid.v[2].fs;
psid.v[3].f += psid.v[3].fs;
/* noise */
if (psid.v[3].f < psid.v[3].fs)
psid.v[3].rv = NSHIFT(psid.v[3].rv, 16);
/* voices */
o0 = (psid.v[0].f & 0x80000000) >> 2;
o1 = (psid.v[1].f & 0x80000000) >> 2;
o2 = (psid.v[2].f & 0x80000000) >> 2;
o3 = (int)NVALUE(NSHIFT(psid.v[3].rv, psid.v[3].f >> 28)) << 22;
/* sample */
uint16_t s = ((int)((o0+o1+o2+o3)>>20)-0x800)*psid.vol;
*sndbuf++ =s;
*sndbuf++ =s;
}
}
static char * strext(char * filepath) {
int str_len = strlen(filepath);
for (int i=0; i<str_len; i++) {
if ( (filepath[i] == '.') && (i != (str_len-1) ) ) {
return &filepath[i+1];
}
}
return filepath;
}
static void loadROM(char * filepath, uint16_t atMemoryLocation) {
uint16_t loadAddress;
uint16_t endAddress;
int lSize = emu_FileSize(filepath);
int f = emu_FileOpen(filepath,"r+b");
char * ext = strext(filepath);
if ( (ext[0] == 'p') || (ext[0] == 'P') ) {
unsigned char buffer[2];
emu_FileRead((char *)&buffer[0], 2,f);
loadAddress = buffer[0] | buffer[1] << 8;
endAddress = loadAddress + lSize-2;
emu_FileRead((char *)&vicmemory[loadAddress], lSize-2, f);
}
else {
switch (ext[0]) {
case '2':
loadAddress = 0x2000;
break;
case '4':
loadAddress = 0x4000;
break;
case '6':
loadAddress = 0x6000;
break;
case 'a':
case 'A':
loadAddress = 0xA000;
break;
}
endAddress = loadAddress + lSize;
emu_FileRead((char *)&vicmemory[loadAddress], lSize,f);
}
emu_FileClose(f);
// Set basic memory pointers
silentWriteDWord(0x2B, loadAddress);
silentWriteDWord(0x2D, loadAddress);
silentWriteDWord(0x2F, endAddress);
silentWriteDWord(0x31, endAddress);
silentWriteDWord(0x33, endAddress);
silentWriteDWord(0x37, 0xFFFF);
silentWriteDWord(0xAE, endAddress);
}
/*VIC-20 KEYBOARD MATRIX
In my implementation, n = 0xF7EF
(80 40 20 10 08 04 02 01)
7f bf df ef f7 fb fd fe
__
01 fe 2 q CBM Space RunStop Control Lft_arr 1
02 fd 4 e s z Shift_L a w 3
04 fb 6 t f c x d r 5
08 f7 8 u h b v g y 7
10 ef 0 o k m n j i 9
20 df - @ : . , l p +
40 bf Home Up_arr = Shift_R / ; * GBP
80 7f F7 F5 F3 F1 Down Right Return Del
--
*/
const uint32_t ascii2scan[] = {
//0 1 2 3 4 5 6 7 8 9 A B C D E F
0,0,0,0,0,0,0,0,0,0,0xfd7f,0,0,0,0,0, // return
// 31:RUNSTOP
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xf7fe,
//sp ! " # $ % & ' ( ) * + , - . /
0xeffe ,0x1fefe,0x17ffe,0x1fe02,0x17ffd,0x1fefb,0x17ffb,0x1fef7,0x17ff7,0x1feef,0xfdbf ,0xfedf ,0xf7df ,0x7fDf ,0xefdf ,0xf7bf,
//0 1 2 3 4 5 6 7 8 9 : ; < = > ?
0x7fef ,0xfefe ,0x7ffe ,0xfefd ,0x7ffd ,0xfefb ,0x7ffb ,0xfef7 ,0x7ff7 ,0xfeef ,0xdfdf ,0xfbbf ,0x1f7df,0xdfbf ,0x1efdf,0x1f7bf,
//@ A B C D E F G H I J K L M N O
0xbfdf ,0xfbfd ,0xeff7 ,0xeffb ,0xfbfb ,0xbffd ,0xdffb ,0xfbf7 ,0xdff7 ,0xfdef ,0xfbef ,0xdfef ,0xfbdf ,0xefef ,0xf7ef ,0xbfef,
//P Q R S T U V W X Y Z [ \ ] ^ _
0xfddf ,0xbffe ,0xfdfb ,0xdffd ,0xbffb ,0xbff7 ,0xf7f7 ,0xfdfd ,0xf7fb ,0xfdf7 ,0xeffd ,0x1dfdf,0xffff ,0x1fbbf,0 ,0,
//' a c c d e f g h i j k l m n o
0 ,0xfbfd ,0xeff7 ,0xeffb ,0xfbfb ,0xbffd ,0xdffb ,0xfbf7 ,0xdff7 ,0xfdef ,0xfbef ,0xdfef ,0xfbdf ,0xefef ,0xf7ef ,0xbfef,
//p q r s t u v w x y z { | } ~ DEL
0xfddf ,0xbffe ,0xfdfb ,0xdffd ,0xbffb ,0xbff7 ,0xf7f7 ,0xfdfd ,0xf7fb ,0xfdf7 ,0xeffd ,0, 0 , 0, 0xfe7f ,0,
// 129:f1 f2 f3 f4 f5 f6 f7 f8
0,0xef7f,0x1ef7f,0xdf7f,0x1df7f,0xbf7f,0x1bf7f,0x7f7f,0x17f7f,0,0,0,0,0,0,0, // 128-143
// 150:right left down up 157:left
0,0,0,0,0,0, 0xfb7f,0x1fb7f,0xf77f,0x1f77f,0,0,0,0,0,0 // 144-159
};
static int ik; // joypad key
static int pik=0;
static int ihk; // I2C keyboard key
static int iusbhk;// USB keyboard key
void v20_Input(int bClick) {
ik = emu_GetPad();
ihk = emu_ReadI2CKeyboard();
}
void emu_KeyboardOnDown(int keymodifer, int key) {
int keyCode = -1; //INV_KEY;
if ((key >=0xc0) && (key <=0xdf)) {
keyCode = ((key-0xc0) & 0x1f) + 0x7f;
}
else {
keyCode = key & 0x7f;
}
//Serial.println(keyCode);
if (keyCode != -1) {
iusbhk = keyCode;
}
}
void emu_KeyboardOnUp(int keymodifer, int key) {
iusbhk = 0;
}
/*
uint8_t readWord( uint16_t location) {
switch (location) {
case 0x9111:
case 0x911F:
mos6522.joy1Input();
break;
case 0x9120:
mos6522.joy2Input();
break;
case 0x9121:
//case 0x912F:
mos6522.keyboardInput();
break;
}
return vicmemory[location];
}
void writeWord( uint16_t location, uint8_t value){
vicmemory[location] = value;
}
*/
void v20_Init(void)
{
// Initialize emulation objects
mos.Reset();
mos6561.initialize();
mos6522.setCpu(&mos);
mos6522.initialize();
// clear memory
for(int i=0; i<sizeof(vicmemory); i++) {
vicmemory[i] = 0;
}
// load charrom
for(int i=0; i<4096; i++) {
vicmemory[0x8000+i] = charrom[i];
}
// load basic rom
for(int i=0; i<8192; i++) {
vicmemory[0xC000+i] = basicrom[i];
}
// load kernal rom
for(int i=0; i<8192; i++) {
vicmemory[0xE000+i] = kernalrom[i];
}
#ifdef HAS_SND
psid.speed1 = (1000000 << 8) / 22000;
psid.v[3].rv = NSEED;
for (int i = 0; i < NOISETABLESIZE; i++)
{
noiseLSB[i] = (((i>>(7-2))&0x04)|((i>>(4-1))&0x02)|((i>>(2-0))&0x01));
noiseMID[i] = (((i>>(13-8-4))&0x10)|((i<<(3-(11-8)))&0x08));
noiseMSB[i] = (((i<<(7-(22-16)))&0x80)|((i<<(6-(20-16)))&0x40)
|((i<<(5-(16-16)))&0x20));
}
emu_sndInit();
#endif
}
void v20_Start(char * filename)
{
emu_printf("emu starting");
loadROM(filename,0);
// Reset cpu
mos.Reset();
// Execute boot sequence before doing much else
mos.Run(20000);
emu_printf("emu started");
}
void v20_Step(void)
{
do {
// bind emulation to clock speed
// Cpu clock is four times less than 6561 clock
//int cpuCycles = mos.executeInstruction();
uint64_t cpuCycles = mos.Run(1);
mos6561.tick(1);
mos6522.tick();
mos6522.tick();
/*
uint64_t cpuCycles = mos.Run(mos6561.cyclesPerScanline);
mos6561.tick(mos6561.cyclesPerScanline);
mos6522.tick();
mos6522.tick();
mos6522.tick();
mos6522.tick();
mos6522.tick();
mos6522.tick();
*/
/*
// printf("cycles %d\n", cpuCycles);
while (cpuCycles) {
cpuCycles--;
mos6522.tick();
mos6522.tick();
}
*/
} while ((!mos6561.isFrameReady()));
// Swap buffers if frame ready
if (mos6561.isFrameReady()) {
mos6561.renderFrame();
}
// Top basic
// Unexpanded
//vicmemory[55] = 0;
//vicmemory[56] = 0x1E;
// +3k
//vicmemory[55] = 0;
//vicmemory[56] = 0x1E;
// +8k
//vicmemory[55] = 0;
//vicmemory[56] = 0x40;
// +16k
//vicmemory[55] = 0;
//vicmemory[56] = 0x60;
// +24k
//vicmemory[55] = 0;
//vicmemory[56] = 0x80;
// Bottom basic ???
//vicmemory[51] = 0;
//vicmemory[52] = 0x1E;
emu_DrawVsync();
int hk=ihk;
if (iusbhk) hk = iusbhk;
if (hk) {
int scan = ascii2scan[hk];
if (scan & 0x10000) mos6522.setShiftPressed(true);
else mos6522.setShiftPressed(false);
mos6522.setKeyPressed(scan & 0xffff);
}
else {
mos6522.setShiftPressed(false);
mos6522.setKeyPressed(0);
}
int k=ik;
#ifdef TEECOMPUTER
// Ignore joypad if shift/fn is pressed!!!
if ( !(k & MASK_KEY_USER1) && !(k & MASK_KEY_USER2) )
#endif
{
if ( !(pik & MASK_JOY2_BTN) && (k & MASK_JOY2_BTN) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Fire, true);
}
else if ( (pik & MASK_JOY2_BTN) && !(k & MASK_JOY2_BTN) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Fire, false);
}
if ( !(pik & MASK_JOY2_UP) && (k & MASK_JOY2_UP) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Up, true);
}
else if ( (pik & MASK_JOY2_UP) && !(k & MASK_JOY2_UP) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Up, false);
}
if ( !(pik & MASK_JOY2_DOWN) && (k & MASK_JOY2_DOWN) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Down, true);
}
else if ( (pik & MASK_JOY2_DOWN) && !(k & MASK_JOY2_DOWN) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Down, false);
}
if ( !(pik & MASK_JOY2_RIGHT) && (k & MASK_JOY2_RIGHT) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Left, true);
}
else if ( (pik & MASK_JOY2_RIGHT) && !(k & MASK_JOY2_RIGHT) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Left, false);
}
if ( !(pik & MASK_JOY2_LEFT) && (k & MASK_JOY2_LEFT) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Right, true);
}
else if ( (pik & MASK_JOY2_LEFT) && !(k & MASK_JOY2_LEFT) ) {
mos6522.setJoyStickPressed(MOS6522::Vic20JoyStickButton::Right, false);
}
}
#ifndef TEECOMPUTER
if ( !(pik & MASK_KEY_USER1) && (k & MASK_KEY_USER1) ) {
mos6522.setKeyPressed(0xEF7F);
mos6522.setShiftPressed(true);
}
else if ( (pik & MASK_KEY_USER1) && !(k & MASK_KEY_USER1) ) {
mos6522.setShiftPressed(false);
mos6522.setKeyPressed(0);
}
if ( !(pik & MASK_KEY_USER2) && (k & MASK_KEY_USER2) ) {
mos6522.setShiftPressed(false);
mos6522.setKeyPressed(ascii2scan['1']);
}
else if ( (pik & MASK_KEY_USER2) && !(k & MASK_KEY_USER2) ) {
mos6522.setShiftPressed(false);
mos6522.setKeyPressed(0);
}
#endif
pik = k;
#ifdef HAS_SND
VIC_VOICE_HANDLE(0, vicmemory[mos6561.Audio1Register], 0);
VIC_VOICE_HANDLE(1, vicmemory[mos6561.Audio2Register], 1);
VIC_VOICE_HANDLE(2, vicmemory[mos6561.Audio3Register], 2);
VIC_VOICE_HANDLE(3, vicmemory[mos6561.Audio4Register], 0);
int vol = (vicmemory[mos6561.AudioVolRegister] & 0x0f);
psid.vol = vol;
#endif
}

Wyświetl plik

@ -0,0 +1,5 @@
extern void v20_Init(void);
extern void v20_Step(void);
extern void v20_Start(char * filename);
extern void v20_Input(int key);

Wyświetl plik

@ -0,0 +1,53 @@
/*
Wrapping class to extend VGA_T4 to TFT_T_DMA
*/
#ifndef _VGA_T_DMAH_
#define _VGA_T_DMAH_
#ifdef __cplusplus
#include <VGA_t4.h>
#endif
#define RGBVAL16(r,g,b) ( (((r>>5)&0x07)<<5) | (((g>>5)&0x07)<<2) | (((b>>6)&0x3)<<0) )
#define RGBVAL8(r,g,b) ( (((r>>5)&0x07)<<5) | (((g>>5)&0x07)<<2) | (((b>>6)&0x3)<<0) )
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#ifdef __cplusplus
class TFT_T_DMA: public VGA_T4
{
public:
// Fake touch screen functions
bool isTouching(void) { return false; }
void readRaw(uint16_t * oX, uint16_t * oY, uint16_t * oZ) { }
void readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) { };
void callibrateTouch(uint16_t xMin,uint16_t yMin,uint16_t xMax,uint16_t yMax) { }
// fake DMA functions
void startDMA(void) { };
void stopDMA(void) { };
// fake no DMA functions
void writeScreenNoDma(const vga_pixel *pcolors) { writeScreen(pcolors); }
void fillScreenNoDma(vga_pixel color) { clear(color); }
void drawTextNoDma(int16_t x, int16_t y, const char * text, vga_pixel fgcolor, vga_pixel bgcolor, bool doublesize) { drawText(x,y,text,fgcolor,bgcolor,doublesize); }
void drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, vga_pixel color) { drawRect(x, y, w, h, color); }
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) { drawSprite(x, y, bitmap); }
void drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, uint16_t croparx, uint16_t cropary, uint16_t croparw, uint16_t croparh) { drawSprite(x, y, bitmap, croparx, cropary, croparw, croparh); }
};
#endif
#endif

Wyświetl plik

@ -45,11 +45,36 @@ static void oneRasterLine(void) {
}
/*
const uint32_t ascii2scanvic20[] = {
//0 1 2 3 4 5 6 7 8 9 A B C D E F
0,0,0,0,0,0,0,0,0,0,0xfd7f,0,0,0xfd7f,0,0, // return
// 31:RUNSTOP
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xf7fe,
//sp ! " # $ % & ' ( ) * + , - . /
0xeffe ,0x1fefe,0x17ffe,0x1fe02,0x17ffd,0x1fefb,0x17ffb,0x1fef7,0x17ff7,0x1feef,0xfdbf ,0xfedf ,0xf7df ,0x7fDf ,0xefdf ,0xf7bf,
//0 1 2 3 4 5 6 7 8 9 : ; < = > ?
0x7fef ,0xfefe ,0x7ffe ,0xfefd ,0x7ffd ,0xfefb ,0x7ffb ,0xfef7 ,0x7ff7 ,0xfeef ,0xdfdf ,0xfbbf ,0x1f7df,0xdfbf ,0x1efdf,0x1f7bf,
//@ A B C D E F G H I J K L M N O
0xbfdf ,0xfbfd ,0xeff7 ,0xeffb ,0xfbfb ,0xbffd ,0xdffb ,0xfbf7 ,0xdff7 ,0xfdef ,0xfbef ,0xdfef ,0xfbdf ,0xefef ,0xf7ef ,0xbfef,
//P Q R S T U V W X Y Z [ \ ] ^ _
0xfddf ,0xbffe ,0xfdfb ,0xdffd ,0xbffb ,0xbff7 ,0xf7f7 ,0xfdfd ,0xf7fb ,0xfdf7 ,0xeffd ,0x1dfdf,0xffff ,0x1fbbf,0 ,0,
//' a c c d e f g h i j k l m n o
0 ,0xfbfd ,0xeff7 ,0xeffb ,0xfbfb ,0xbffd ,0xdffb ,0xfbf7 ,0xdff7 ,0xfdef ,0xfbef ,0xdfef ,0xfbdf ,0xefef ,0xf7ef ,0xbfef,
//p q r s t u v w x y z { | } ~ DEL
0xfddf ,0xbffe ,0xfdfb ,0xdffd ,0xbffb ,0xbff7 ,0xf7f7 ,0xfdfd ,0xf7fb ,0xfdf7 ,0xeffd ,0, 0 , 0, 0xfe7f ,0x1fb7f,
// 129:f1 f2 f3 f4 f5 f6 f7 f8
0,0xef7f,0x1ef7f,0xdf7f,0x1df7f,0xbf7f,0x1bf7f,0x7f7f,0x17f7f,0,0,0,0,0,0,0, // 128-143
// 150:right left down up
0,0,0,0,0,0, 0xfb7f,0x1fb7f,0xf77f,0x1f77f,0,0,0,0,0,0 // 144-159
};
*/
const uint32_t ascii2scan[] = {
//0 1 2 3 4 5 6 7 8 9 A B C D E F
0,0,0,0,0,0,0,0,0,0,0,0,0,0x28,0,0, // return
// 17:down 29:right
0x00,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4f,0x00,0x00,
0,0,0,0,0,0,0,0,0,0,0x28,0,0,0x28,0,0, // 0x0A: return
0x00,0x0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //31:RUNSTOP
//sp ! " # $ % & ' ( ) * + , - . /
0x2c,0x201e,0x201f,0x2020,0x2021,0x2022,0x2023,0x2024,0x2025,0x2026,0x55,0x57,0x36,0x56,0x37,0x54,
//0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ -58,14 +83,18 @@ const uint32_t ascii2scan[] = {
47,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,
//P Q R S T U V W X Y Z [ \ ] ^ _
0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x2026,0x31,0x2027,0x00,0x00,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ' a b c d e f g h i j k l m n o
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x49,0, // p q r s t u v w x y z { | } ~ DEL
//up left arr 133:f1 f2 f3 f4 f5 f6 f7 f8
75,78,0x00,0x00,0x00,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x00,0x00,0x00, // 128-143
// 145:up 157:left
0x00,0x2051,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x204f,0x00,0x00 // 144-159
//' a b c d e f g h i j k l m n o
0,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,
//p w r s t u v w x y z { | } ~ DEL
0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0, 0, 0,0x49,0x204f,
// 129:f1 f2 f3 f4 f5 f6 f7 f8
0, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,0,0,0,0,0,0,0, // 128-143
// 150:right left down up
0,0,0,0,0,0, 0x4f, 0x204f, 0x51, 0x2051,0,0,0,0,0,0 // 144-159
};
// we also use USB matrix for the moment
static const uint8_t keymatrixmap[2][256] = {
//Rows:
@ -123,13 +152,23 @@ struct {
} kbdData = {0, 0, 0};
static void setKey(uint32_t k, boolean pressed) {
static void setKey(uint8_t c, boolean pressed) {
uint32_t k = ascii2scan[c];
/*
uint32_t kvic20 = ascii2scanvic20[c];
bool shiftPressed;
if (k & 0x10000) shiftPressed = true;
else shiftPressed = false;
if (pressed) {
kbdData.kv = k & 0xffff;
}
*/
if (pressed) {
kbdData.kv = (k << 16);
kbdData.ke = kbdData.k2;
kbdData.k2 = 0;
//Serial.println(~kvic20, HEX);
//Serial.println((keymatrixmap[1][kbdData.k]<<8)+keymatrixmap[0][kbdData.k], HEX);
}
else
{
@ -137,12 +176,13 @@ static void setKey(uint32_t k, boolean pressed) {
}
}
static void pushStringToTextEntry(char * text) {
char c;
while ((c = *text++)) {
setKey(ascii2scan[c], true);
setKey(c, true);
delay(20);
setKey(ascii2scan[c], false);
setKey(c, false);
delay(20);
}
}
@ -168,15 +208,23 @@ uint8_t cia1PORTA(void) {
if (keys & MASK_JOY1_LEFT) v &= 0xF7;
}
if (!kbdData.kv) return v; //Keine Taste gedrückt
uint8_t filter = ~cpu.cia1.R[0x01] & cpu.cia1.R[0x03];
/*
uint8_t column = ~((kbdData.kv >> 8) & 0xFF); // output
uint8_t row = ~(kbdData.kv & 0xFF); //input
if (kbdData.kv) {
if (column & filter) v &= ~row ;
}
*/
if (kbdData.k) {
if ( keymatrixmap[1][kbdData.k] & filter) v &= ~keymatrixmap[0][kbdData.k];
}
if (kbdData.ke) {
if (kbdData.ke & 0x02) { //Shift-links
if ( keymatrixmap[1][0xff] & filter) v &= ~keymatrixmap[0][0xff];
@ -222,6 +270,14 @@ uint8_t cia1PORTB(void) {
uint8_t filter = ~cpu.cia1.R[0x00] & cpu.cia1.R[0x02];
/*
uint8_t column = ~((kbdData.kv >> 8) & 0xFF); // output
uint8_t row = ~(kbdData.kv & 0xFF); //input
if (kbdData.kv) {
if (row & filter) v &= ~column ;
}
*/
if (kbdData.k) {
if ( keymatrixmap[0][kbdData.k] & filter) v &= ~keymatrixmap[1][kbdData.k];
}
@ -280,6 +336,8 @@ static char textkey[1];
static bool res=false;
static bool firsttime=true;
static int iusbhk;// USB keyboard key
void c64_Input(int bClick) {
if (nbkeys == 0) {
@ -312,19 +370,21 @@ void c64_Input(int bClick) {
else
{
int hk = emu_ReadI2CKeyboard();
if (iusbhk) hk = iusbhk;
if ( (hk != 0) && (res == false) ) {
setKey(ascii2scan[hk],true);
setKey(hk,true);
res = true;
}
else if (hk == 0){
setKey(ascii2scan[hk],false);
setKey(hk,false);
res = false;
}
}
}
else {
char k = textseq[kcnt];
if (k != '\t') setKey(ascii2scan[k],toggle);
if (k != '\t') setKey(k, toggle);
if (!toggle) {
kcnt++;
nbkeys--;
@ -337,9 +397,23 @@ void c64_Input(int bClick) {
}
void emu_KeyboardOnDown(int keymodifer, int key) {
int keyCode = -1;
if ((key >=0xc0) && (key <=0xdf)) {
keyCode = ((key-0xc0) & 0x1f) + 0x7f;
}
else {
keyCode = key & 0x7f;
}
//Serial.println(keyCode);
if (keyCode != -1) {
iusbhk = keyCode;
}
}
void emu_KeyboardOnUp(int keymodifer, int key) {
iusbhk = 0;
}
#ifdef HAS_SND

Wyświetl plik

@ -42,10 +42,10 @@
#define keylables_map0_2 (char *)" ZXCVBNM,.;/"
#define keylables_map0_3 (char *)" +\x10-"
const unsigned short key_map0[] = {
'Q','W','E','R','T','Y','U','I','O','P',157, //default C64 uppercase always
0,'A','S','D','F','G','H','J','K','L',0x0D,
'Q','W','E','R','T','Y','U','I','O','P',127, //default C64 uppercase always
0,'A','S','D','F','G','H','J','K','L',10,
0,'Z','X','C','V','B','N','M',',','.',';','/',
145,157,29,17,
0,0,0,0,
0,'+',' ','-'
};
@ -70,7 +70,7 @@ const unsigned short key_map2[] = {
'!','"','#','$','%','^','&','*','(',')','@', // shiftothers
0, 0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,'<','>',':','?',
0,0,0,0,
153,151,150,152, //U L R D
0,'=',' ','_'
};
@ -80,7 +80,7 @@ const unsigned short key_map2[] = {
#define keylables_map3_3 (char *)" "
const unsigned short key_map3[] = {
133,134,135,136,137,138,139,140,0,0,0, // function keys
129,130,131,132,133,134,135,136,0,0,0, // function keys
0, 0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,
@ -93,9 +93,9 @@ const unsigned short key_map3[] = {
#define keylables_map4_3 (char *)" =\x10_"
const unsigned short key_map4[] = {
'Q','W','E','R','T','Y','U','I','O','P','@', //shift uppercase
0,'A','S','D','F','G','H','J','K','L',0x0D,
0,'A','S','D','F','G','H','J','K','L',10,
0,'Z','X','C','V','B','N','M','<','>',':','?',
145,157,29,17,
0,0,0,0,
0,'=',' ','_'
};
@ -108,7 +108,7 @@ const unsigned short key_map5[] = {
0,0,0,0,0,0,0,0,0,0,0, // extra keys
0, 0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,
153,151,150,152, //U L R D
0,0,' ',0
};

Wyświetl plik

@ -5,9 +5,9 @@
#ifdef TEECOMPUTER
//#define ILI9341 1
#define ST7789 1
#define TFTSPI1 1
//#define HAS_T4_VGA 1
//#define ST7789 1
//#define TFTSPI1 1
#define HAS_T4_VGA 1
#define HAS_SND 1
#define HAS_USBKEY 1
#define INVX 1

Wyświetl plik

@ -145,9 +145,7 @@ void loop(void)
toggleMenu(false);
vgaMode = false;
emu_start();
emu_Init(filename);
//digitalWrite(TFT_CS, 1);
//digitalWrite(SD_CS, 1);
emu_Init(filename);
tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) );
tft.startDMA();
myTimer.begin(vblCount, 20000); //to run every 20ms