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

This commit is contained in:
jean-marcharvengt 2022-02-02 23:29:01 +01:00
parent 7da55b5657
commit babf855c4e
35 changed files with 43492 additions and 20470 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -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

View file

@ -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;
}

View file

@ -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

View file

@ -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

View file

@ -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);
}
}
}
}

View file

@ -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

View file

@ -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;
}

View file

@ -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

View file

@ -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,
};

View file

@ -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,
};

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -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
};

View file

@ -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

View file

@ -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,
};

View file

@ -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,
};

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -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

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -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

View file

@ -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
}

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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
};

View file

@ -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

View file

@ -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