git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

commit 8f81ff73c61144f0536602fb3f55b1bbe5a3d33e
parent faf23a9f1fe7348ae31f0f1860e655559d4e4d57
Author: bbbbbr <bbbbbr@users.noreply.github.com>
Date:   Mon, 18 Jul 2022 00:55:45 -0700

Merge pull request #394 from bbbbbr/examples_sound

Examples: Updates to sound example
Diffstat:
Dgbdk-lib/examples/gb/samptest/Makefile23-----------------------
Dgbdk-lib/examples/gb/samptest/sample.h20--------------------
Dgbdk-lib/examples/gb/samptest/sample.s97-------------------------------------------------------------------------------
Dgbdk-lib/examples/gb/samptest/samptest.c1641-------------------------------------------------------------------------------
Agbdk-lib/examples/gb/sgb_sfx/Makefile11+++++++++++
Agbdk-lib/examples/gb/sgb_sfx/main.c158+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agbdk-lib/examples/gb/sgb_sfx/sgb_snd_sfx.h25+++++++++++++++++++++++++
Agbdk-lib/examples/gb/wav_sample/Makefile61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agbdk-lib/examples/gb/wav_sample/Readme.md9+++++++++
Agbdk-lib/examples/gb/wav_sample/sndrec/cowbell_8bit_pcm_unsigned.wav0
Agbdk-lib/examples/gb/wav_sample/sndrec/risset_drum_8bit_pcm_unsigned.wav0
Agbdk-lib/examples/gb/wav_sample/src/main.c38++++++++++++++++++++++++++++++++++++++
Agbdk-lib/examples/gb/wav_sample/src/sample_data_1.h254+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agbdk-lib/examples/gb/wav_sample/src/sample_data_2.h114+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agbdk-lib/examples/gb/wav_sample/src/sample_player.c67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agbdk-lib/examples/gb/wav_sample/src/sample_player.h14++++++++++++++
Agbdk-lib/examples/gb/wav_sample/src/samples_bank2.c10++++++++++
Agbdk-lib/examples/gb/wav_sample/src/samples_bank2.h7+++++++
Agbdk-lib/examples/gb/wav_sample/src/samples_bank3.c10++++++++++
Agbdk-lib/examples/gb/wav_sample/src/samples_bank3.h7+++++++
Agbdk-lib/examples/gb/wav_sample/src/samptest.c38++++++++++++++++++++++++++++++++++++++
Agbdk-lib/examples/gb/wav_sample/utils/cvtsample.py55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
22 files changed, 878 insertions(+), 1781 deletions(-)

diff --git a/gbdk-lib/examples/gb/samptest/Makefile b/gbdk-lib/examples/gb/samptest/Makefile @@ -1,23 +0,0 @@ -CC = ../../../bin/lcc -Wa-l -Wl-m -Wl-j - -BINS = samptest.gb - -all: $(BINS) - -compile.bat: Makefile - @echo "REM Automatically generated from Makefile" > compile.bat - @make -sn | sed y/\\//\\\\/ | grep -v make >> compile.bat - -# Compile and link single file in one pass -%.o: %.s - $(CC) -c -o $@ $< - -%.o: %.c - $(CC) -c -o $@ $< - -%.gb: %.o sample.o - $(CC) -o $@ $< sample.o - -clean: - rm -f *.o *.lst *.map *.gb *~ *.rel *.cdb *.ihx *.lnk *.sym *.asm *.noi - diff --git a/gbdk-lib/examples/gb/samptest/sample.h b/gbdk-lib/examples/gb/samptest/sample.h @@ -1,20 +0,0 @@ -/** @file gb/sample.h - Playback raw sound sample with length len from start at 8192Hz rate. - len defines the length of the sample in samples/32 or bytes/16. - The format of the data is unsigned 4-bit samples, - 2 samples per byte, upper 4-bits played before lower 4 bits. - - Adaption for GBDK by Lars Malmborg. - Original code by Jeff Frohwein. -*/ -#ifndef _SAMPLE_H -#define _SAMPLE_H - -#include <types.h> -#include <stdint.h> - -/** Play the given, appropriatly formatted sample. - */ -void play_sample(uint8_t *start, uint16_t len) OLDCALL; - -#endif /* _SAMPLE_H */ diff --git a/gbdk-lib/examples/gb/samptest/sample.s b/gbdk-lib/examples/gb/samptest/sample.s @@ -1,97 +0,0 @@ - .include "global.s" - - ;; BANKED: checked - .title "Sound sample player" - .module Sample - - .area _BASE - .AUD3WAVERAM = 0xff30 - -_play_sample:: - push bc - lda hl,4(sp) - ld a,(hl+) - ld d,(hl) - ld e,a - - lda hl,6(sp) - ld a,(hl+) - ld b,(hl) - ld c,a - - ld h,d - ld l,e - - call .play_sample - pop bc - ret - -; Playback raw sound sample with length BC from HL at 8192Hz rate. -; BC defines the length of the sample in samples/32 or bytes/16. -; The format of the data is unsigned 4-bit samples, -; 2 samples per byte, upper 4-bits played before lower 4 bits. -; -; Adaption for GBDK by Lars Malmborg. -; Original code by Jeff Frohwein. - -.play_sample:: - ld a,#0x84 - ldh (.NR52),a ;enable sound 3 - - ld a,#0 - ldh (.NR30),a - ldh (.NR51),a - - ld a,#0x77 - ldh (.NR50),a ;select speakers - ld a,#0xff - ldh (.NR51),a ;enable sound 3 - - ld a,#0x80 - ldh (.NR31),a ;sound length - ld a,#0x20 - ldh (.NR32),a ;sound level high - - ld a,#0x00 - ldh (.NR33),a ;sound freq low - -.samp2: - ld de,#.AUD3WAVERAM ;12 - push bc ;16 - ld b,#16 ;16 - - xor a - ldh (.NR30),a -.samp3: - ld a,(hl+) ;8 - ld (de),a ;8 - inc de ;8 - dec b ;4 - jr nz,.samp3 ;12 - - ld a,#0x80 - ldh (.NR30),a - - ld a,#0x87 ; (256hz) - ldh (.NR34),a - - ld bc,#558 ;delay routine -.samp4: - dec bc ;8 - ld a,b ;4 - or c ;4 - jr nz,.samp4 ;12 - - ld a,#0 ;more delay - ld a,#0 - ld a,#0 - - pop bc ;12 - dec bc ;8 - ld a,b ;4 - or c ;4 - jr nz,.samp2 ;12 - - ld a,#0xbb - ldh (.NR51),a ;disable sound 3 - ret diff --git a/gbdk-lib/examples/gb/samptest/samptest.c b/gbdk-lib/examples/gb/samptest/samptest.c @@ -1,1641 +0,0 @@ -/* - * Demonstration of sound sample player - * by Lars Malmborg <glue@df.lth.se> - */ - -#include <stdint.h> -#include <stdio.h> - -#include <gb/gb.h> - -#include "sample.h" - -#define SAMPLES 25768 -extern const uint8_t sample[]; - -void main() -{ - puts("\n Ren & Stimpy\n"); - while(1) - { - waitpad(J_START); - puts("."); - play_sample(sample, SAMPLES / 32); - waitpadup(); - } -} - -const uint8_t sample[] = -{ -0x86,0x98,0x65,0x97,0x7b,0x79,0x66,0x77, -0x87,0x76,0x88,0x89,0x88,0x68,0x88,0x99, -0x66,0x78,0x88,0x69,0x79,0x87,0x78,0x86, -0x67,0x77,0x87,0x98,0x86,0x8a,0x7a,0x89, -0x76,0x75,0x96,0x64,0x76,0x67,0x6a,0x79, -0x8a,0xaa,0x88,0x68,0x69,0x55,0x6a,0xa7, -0x6b,0x98,0x92,0x78,0x66,0x88,0x68,0x97, -0xa4,0x58,0x96,0x9b,0xcb,0x79,0xba,0x11, -0x3a,0x00,0x8e,0xda,0xaf,0xb4,0x05,0x92, -0x07,0xe5,0x6b,0xfa,0x45,0xb7,0x08,0xb8, -0x77,0xd8,0x05,0xd2,0x27,0xee,0xa9,0xfc, -0x60,0x45,0x40,0x5d,0xca,0xad,0xb5,0x37, -0x97,0x46,0xa8,0x57,0xb6,0x26,0xc6,0x68, -0xed,0x67,0xd7,0x02,0x48,0x36,0xcf,0x9a, -0xb9,0x30,0x49,0x85,0xbb,0xc7,0x68,0x60, -0x38,0x98,0x7e,0xe9,0x88,0x40,0x54,0x7a, -0x7d,0xe8,0x85,0x43,0x66,0xa8,0xdc,0xa7, -0x52,0x66,0x67,0xbb,0xb8,0x79,0x84,0x56, -0x68,0x87,0x9a,0x97,0x77,0x35,0x86,0x9a, -0x8a,0x96,0x53,0x37,0x57,0xdb,0xa9,0xc9, -0x52,0x26,0x87,0x6d,0xc8,0x57,0x87,0x56, -0x58,0x97,0x9c,0xa8,0x65,0x32,0x6a,0xc9, -0x9a,0xa4,0x36,0xba,0x78,0xb6,0x05,0xbb, -0x99,0x99,0x62,0x39,0xc9,0x9a,0xa9,0x74, -0x03,0xaf,0x95,0x8a,0x60,0x3a,0xe9,0x88, -0xb8,0x10,0x7f,0xd6,0x59,0x95,0x15,0xcf, -0x85,0x8b,0x71,0x38,0xfc,0x65,0x98,0x44, -0x7d,0xc8,0x69,0x97,0x43,0x8d,0xb6,0x59, -0x88,0x44,0xbe,0x84,0x79,0x97,0x33,0x9d, -0x95,0x78,0x75,0x46,0xcd,0x84,0x7a,0x95, -0x34,0xbe,0x84,0x78,0x86,0x37,0xeb,0x64, -0x8a,0x94,0x18,0xeb,0x64,0x78,0x85,0x5c, -0xd8,0x46,0x9a,0x73,0x4b,0xe7,0x46,0x88, -0x65,0xae,0x95,0x58,0x97,0x33,0xae,0x95, -0x55,0x99,0x69,0xc9,0x56,0x78,0x85,0x36, -0xca,0x64,0x59,0xb6,0x59,0xa9,0x65,0x7a, -0x82,0x4b,0xb8,0x55,0x6a,0x74,0x9d,0x97, -0x58,0xa8,0x25,0x7e,0xb6,0x35,0xaa,0x77, -0x9a,0x86,0x78,0x85,0x36,0xcc,0x75,0x66, -0x98,0x7a,0xa8,0x67,0x89,0x72,0x4c,0xe7, -0x43,0x6a,0x96,0x89,0x77,0x77,0x77,0x44, -0xbd,0x86,0x66,0x89,0x69,0xb8,0x56,0x89, -0x95,0x35,0xdd,0x75,0x47,0xb9,0x79,0x87, -0x77,0x78,0x52,0x6d,0xc7,0x56,0x68,0x78, -0xda,0x75,0x68,0xa7,0x13,0xcf,0xa5,0x45, -0x9a,0x89,0x98,0x77,0x87,0x63,0x3b,0xea, -0x64,0x58,0x97,0x8b,0xa7,0x66,0x8a,0x63, -0x4c,0xda,0x63,0x5a,0xb9,0x98,0x78,0x77, -0x74,0x27,0xdc,0x85,0x34,0x99,0x9b,0x87, -0x76,0x79,0x71,0x2a,0xec,0x74,0x87,0xbb, -0xa7,0x68,0x89,0x74,0x22,0xbf,0xb7,0x34, -0x7a,0x9a,0x96,0x78,0x78,0x74,0x16,0xdb, -0x76,0x67,0x99,0x88,0x97,0x78,0x86,0x43, -0x8c,0x99,0x75,0x79,0x99,0x88,0x97,0x88, -0x75,0x37,0xbc,0xa6,0x57,0x9a,0x88,0x88, -0x97,0x75,0x45,0x99,0x98,0x77,0x78,0x79, -0x87,0xa9,0x77,0x41,0x4a,0xbb,0xb7,0x67, -0x66,0x99,0x79,0x89,0x75,0x33,0x7a,0xb8, -0x87,0x77,0x77,0x9a,0x98,0x78,0x51,0x49, -0xbb,0xa8,0x76,0x67,0x89,0xa9,0x77,0x84, -0x23,0x7a,0xca,0x98,0x66,0x58,0x9a,0x98, -0x76,0x52,0x27,0x9b,0xec,0x85,0x45,0x89, -0x89,0x98,0x87,0x53,0x47,0x9b,0xca,0x87, -0x66,0x78,0x8a,0xa9,0x94,0x23,0x79,0x9c, -0xcb,0x96,0x56,0x87,0x99,0x89,0x75,0x45, -0x78,0x9a,0xa9,0xa7,0x87,0x67,0x9a,0x75, -0x22,0x79,0xbb,0x89,0xa9,0x75,0x55,0x89, -0x9a,0x87,0x53,0x46,0x77,0xba,0xbb,0x77, -0x66,0x68,0x87,0x97,0x22,0x99,0x7a,0x7a, -0xd9,0x76,0x55,0x88,0x79,0x78,0x85,0x66, -0x65,0x79,0xab,0x98,0x98,0x69,0x88,0x71, -0x05,0x8a,0xd8,0x9a,0xbb,0x75,0x46,0x78, -0x98,0x97,0x46,0x75,0x77,0x89,0xa9,0x98, -0x77,0x88,0x8a,0x60,0x26,0x7d,0xa7,0x9b, -0xbb,0x84,0x47,0x89,0x98,0x85,0x46,0x77, -0x78,0x9b,0xa9,0x86,0x67,0x97,0x87,0x83, -0x16,0x69,0xa6,0x9b,0xcc,0x86,0x57,0x87, -0x65,0x65,0x57,0x89,0x76,0x8a,0x9b,0x87, -0x89,0x88,0x87,0x52,0x24,0x4a,0x78,0xbb, -0xcb,0x88,0x67,0x66,0x66,0x77,0x56,0x77, -0x86,0x79,0x8a,0xa8,0x98,0x89,0x86,0x87, -0x24,0x46,0x96,0x88,0xac,0xd8,0xa8,0x78, -0x85,0x55,0x68,0x89,0x87,0x87,0x87,0x87, -0x78,0x89,0x98,0x88,0x88,0x78,0x88,0x78, -0x87,0x88,0x87,0x78,0x87,0x87,0x78,0x88, -0x88,0x87,0x77,0x77,0x77,0x78,0x87,0x77, -0x76,0x77,0x77,0x78,0x78,0x87,0x88,0x89, -0x87,0x77,0x77,0x78,0x87,0x78,0x77,0x77, -0x77,0x78,0x88,0x77,0x88,0x77,0x88,0x78, -0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x87, -0x78,0x88,0x87,0x88,0x88,0x78,0x88,0x77, -0x77,0x78,0x77,0x88,0x77,0x88,0x88,0x88, -0x89,0x77,0x77,0x78,0x87,0x68,0x77,0x87, -0x77,0x78,0x88,0x77,0x77,0x77,0x87,0x67, -0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x87, -0x77,0x77,0x77,0x77,0x87,0x78,0x88,0x78, -0x77,0x87,0x77,0x77,0x78,0x88,0x87,0x78, -0x88,0x77,0x77,0x88,0x76,0x77,0x77,0x88, -0x77,0x77,0x88,0x87,0x78,0x88,0x87,0x78, -0x77,0x88,0x88,0x88,0x89,0x88,0x78,0x87, -0x87,0x68,0x88,0x87,0x87,0x88,0x77,0x77, -0x87,0x88,0x77,0x78,0x88,0x88,0x88,0x88, -0x88,0x77,0x77,0x78,0x76,0x67,0x77,0x77, -0x67,0x87,0x78,0x77,0x77,0x88,0x87,0x78, -0x77,0x77,0x87,0x88,0x88,0x78,0x87,0x88, -0x88,0x78,0x77,0x87,0x77,0x78,0x87,0x77, -0x77,0x88,0x78,0x88,0x88,0x88,0x78,0x89, -0x97,0x78,0x78,0x87,0x78,0x88,0x88,0x77, -0x87,0x78,0x88,0x77,0x77,0x88,0x78,0x89, -0x88,0x87,0x78,0x78,0x88,0x77,0x88,0x88, -0x77,0x88,0x87,0x87,0x77,0x88,0x87,0x87, -0x78,0x88,0x87,0x88,0x88,0x78,0x77,0x88, -0x87,0x77,0x77,0x87,0x77,0x77,0x88,0x87, -0x77,0x78,0x87,0x78,0x87,0x78,0x88,0x88, -0x88,0x88,0x88,0x88,0x98,0x78,0x78,0x77, -0x77,0x77,0x78,0x88,0x87,0x78,0x87,0x77, -0x77,0x88,0x77,0x87,0x78,0x88,0x88,0x78, -0x88,0x77,0x87,0x78,0x76,0x77,0x88,0x88, -0x87,0x88,0x87,0x78,0x78,0x88,0x87,0x77, -0x88,0x78,0x88,0x88,0x87,0x88,0x88,0x88, -0x88,0x76,0x78,0x87,0x77,0x78,0x87,0x78, -0x77,0x78,0x87,0x77,0x78,0x88,0x77,0x88, -0x88,0x78,0x77,0x77,0x78,0x77,0x77,0x77, -0x87,0x78,0x88,0x76,0x78,0x88,0x88,0x87, -0x87,0x78,0x77,0x88,0x88,0x87,0x78,0x98, -0x87,0x78,0x88,0x77,0x87,0x78,0x87,0x88, -0x77,0x88,0x87,0x77,0x88,0x77,0x77,0x77, -0x87,0x78,0x87,0x78,0x87,0x78,0x88,0x87, -0x78,0x87,0x78,0x77,0x78,0x77,0x88,0x87, -0x88,0x88,0x76,0x88,0x77,0x77,0x78,0x87, -0x88,0x88,0x88,0x88,0x76,0x78,0x77,0x78, -0x88,0x88,0x78,0x87,0x88,0x88,0x87,0x78, -0x87,0x78,0x77,0x88,0x87,0x78,0x77,0x77, -0x87,0x77,0x77,0x76,0x78,0x88,0x88,0x77, -0x87,0x88,0x77,0x77,0x77,0x76,0x78,0x88, -0x88,0x87,0x88,0x88,0x77,0x78,0x87,0x77, -0x78,0x87,0x88,0x88,0x88,0x88,0x88,0x78, -0x87,0x77,0x77,0x88,0x78,0x98,0x88,0x88, -0x78,0x77,0x88,0x76,0x78,0x88,0x88,0x88, -0x87,0x77,0x77,0x77,0x78,0x77,0x77,0x77, -0x78,0x78,0x88,0x78,0x87,0x77,0x77,0x87, -0x67,0x88,0x78,0x77,0x88,0x88,0x77,0x78, -0x87,0x67,0x77,0x78,0x88,0x78,0x88,0x88, -0x87,0x87,0x88,0x77,0x78,0x87,0x88,0x79, -0x87,0xa7,0x97,0x78,0x78,0x87,0x77,0x89, -0x79,0x67,0x89,0x88,0x79,0x78,0x77,0x88, -0x89,0x77,0x97,0x96,0x67,0x79,0x96,0x96, -0x78,0x88,0x68,0x89,0x68,0x66,0x77,0x97, -0xa6,0x67,0xa3,0xa4,0x68,0x39,0xa3,0x8b, -0x93,0xaa,0x87,0xb3,0xc9,0x56,0xa5,0x6a, -0x58,0x86,0x97,0x7b,0x76,0xc5,0x96,0x68, -0x98,0x74,0xcb,0x1a,0x68,0x97,0x66,0xa6, -0x87,0xa7,0x88,0x7d,0x79,0x7a,0x66,0x63, -0x46,0x78,0x98,0xa9,0xc7,0xa8,0xb7,0x49, -0x6a,0x86,0x77,0x86,0x44,0x88,0x57,0x88, -0x69,0x9b,0xfa,0xad,0xab,0x73,0x00,0x05, -0x45,0xbf,0xeb,0xb9,0x87,0x66,0x43,0x67, -0x69,0x99,0xb8,0x69,0x43,0x31,0x59,0xca, -0xdf,0xda,0x78,0x84,0x43,0x24,0x67,0x6d, -0xc9,0x9a,0x67,0x69,0xb7,0x58,0xb8,0x79, -0xb5,0x20,0x08,0xb3,0x8f,0xfa,0x48,0x96, -0x34,0x89,0x98,0x8a,0x50,0x59,0x93,0x7f, -0xf9,0x68,0xa7,0x37,0xb9,0x77,0x74,0x06, -0xa5,0x8c,0xec,0x66,0x98,0x45,0x88,0x88, -0x89,0x96,0x56,0x66,0x76,0x7b,0xa7,0x88, -0x99,0x76,0x79,0x77,0x95,0x61,0x4a,0xd8, -0x7b,0xc9,0x44,0x5a,0x78,0x8a,0x88,0x53, -0x6c,0x86,0x68,0x98,0x43,0x4a,0xea,0x78, -0xaa,0x65,0x77,0x88,0x79,0x87,0x31,0x7c, -0xba,0xaa,0x74,0x37,0xb9,0x88,0x99,0x74, -0x78,0x85,0x45,0xbb,0x74,0x9b,0x74,0x7c, -0xc7,0x47,0xa9,0x67,0x8b,0x70,0x18,0xdd, -0x67,0xba,0x53,0x59,0x97,0x78,0x98,0x43, -0xad,0xa9,0x66,0x86,0x44,0x6a,0xc9,0x78, -0x88,0x88,0x78,0x79,0x87,0x88,0x76,0x76, -0x44,0xb7,0xac,0xb5,0x55,0x78,0x89,0x97, -0x77,0x78,0x85,0x00,0x7e,0xe8,0x76,0x97, -0x45,0xab,0x86,0x58,0x9a,0x64,0x6a,0xaa, -0x87,0x47,0x79,0x8a,0x79,0x77,0x99,0x66, -0x77,0x88,0xa9,0x84,0x56,0x9b,0x35,0xdd, -0x75,0x59,0x96,0x6a,0x98,0x66,0x68,0x62, -0x6b,0xb8,0x68,0xab,0x55,0x9a,0x86,0x79, -0x88,0x98,0x55,0x26,0xd8,0x66,0xce,0x93, -0x35,0x8a,0xc8,0x76,0x79,0xa7,0x55,0x65, -0x66,0x6d,0xea,0x64,0x6a,0x97,0x56,0x88, -0x76,0x6a,0xb9,0x57,0xa7,0x54,0x4a,0xa8, -0x8a,0x99,0x65,0x98,0x68,0x88,0x86,0x57, -0x9b,0x94,0x66,0x67,0x28,0xfd,0x75,0x59, -0x77,0x9a,0x89,0x67,0x70,0x3c,0xe8,0x3b, -0xa9,0x16,0xca,0x57,0x8a,0x96,0x38,0xca, -0x75,0x68,0x56,0x5a,0xec,0x86,0x58,0x97, -0x79,0x77,0x77,0x98,0x12,0xde,0x46,0xac, -0x93,0x6b,0x85,0x57,0x99,0x64,0x6c,0xa8, -0x58,0x88,0x67,0x86,0x77,0x86,0x99,0xa8, -0x78,0x87,0x87,0x77,0x77,0x99,0x76,0x86, -0x76,0x46,0xda,0x98,0x87,0x66,0x8c,0xa8, -0x76,0x65,0x06,0xa6,0xbd,0xca,0x65,0x76, -0x47,0x99,0x76,0x6b,0x96,0x69,0x76,0x68, -0xa7,0x65,0x69,0x85,0xa9,0xa8,0x8a,0x76, -0x77,0x77,0x88,0x98,0x77,0x77,0x52,0x8d, -0xb8,0x8a,0x85,0x47,0x88,0x87,0x88,0x76, -0x56,0x95,0x5e,0xb9,0x97,0xa7,0x57,0x77, -0x88,0x77,0x79,0xa7,0x98,0x86,0x45,0x57, -0x6b,0x7b,0xb9,0xb7,0x77,0x66,0x76,0x66, -0x77,0x59,0x68,0x98,0x99,0x8a,0x78,0x88, -0x66,0x68,0x88,0x87,0x76,0x48,0x84,0xa9, -0x88,0x87,0x97,0x69,0x77,0x88,0x77,0x78, -0x89,0x79,0x88,0x76,0x87,0x77,0x78,0x87, -0x78,0x78,0x79,0x87,0x86,0x7a,0x68,0x77, -0x77,0x86,0x87,0x78,0x88,0x77,0x77,0x87, -0x88,0x79,0x88,0x97,0x87,0x77,0x77,0x67, -0x76,0x77,0x87,0x78,0x78,0x87,0x78,0x88, -0x89,0x98,0x88,0x89,0x87,0x77,0x77,0x77, -0x78,0x76,0x77,0x77,0x77,0x88,0x87,0x87, -0x88,0x78,0x88,0x88,0x88,0x88,0x88,0x87, -0x77,0x76,0x77,0x77,0x77,0x77,0x78,0x88, -0x88,0x88,0x88,0x87,0x87,0x77,0x77,0x88, -0x88,0x98,0x87,0x88,0x87,0x77,0x77,0x87, -0x77,0x87,0x88,0x88,0x77,0x77,0x87,0x77, -0x78,0x77,0x89,0x88,0x98,0x88,0x77,0x77, -0x77,0x76,0x67,0x67,0x87,0x78,0x88,0x87, -0x78,0x87,0x88,0x87,0x77,0x88,0x88,0x98, -0x98,0x87,0x87,0x77,0x77,0x76,0x78,0x77, -0x88,0x87,0x88,0x88,0x77,0x87,0x77,0x87, -0x87,0x78,0x88,0x88,0x88,0x87,0x88,0x77, -0x77,0x77,0x77,0x88,0x77,0x77,0x77,0x77, -0x78,0x88,0x88,0x87,0x78,0x87,0x88,0x78, -0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x78, -0x87,0x77,0x88,0x87,0x78,0x88,0x77,0x87, -0x77,0x77,0x87,0x77,0x88,0x87,0x78,0x88, -0x78,0x87,0x77,0x78,0x77,0x67,0x87,0x78, -0x88,0x88,0x88,0x87,0x78,0x77,0x78,0x87, -0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x77, -0x77,0x67,0x77,0x88,0x78,0x88,0x88,0x97, -0x78,0x78,0x87,0x77,0x89,0x88,0x78,0x87, -0x78,0x87,0x77,0x77,0x86,0x77,0x88,0x88, -0x88,0x87,0x88,0x87,0x88,0x77,0x88,0x88, -0x88,0x98,0x88,0x88,0x87,0x78,0x78,0x67, -0x77,0x77,0x77,0x98,0x78,0x88,0x78,0x87, -0x77,0x68,0x87,0x77,0x98,0x87,0x76,0x96, -0x87,0x87,0x87,0x79,0x68,0x77,0x87,0x87, -0x87,0x89,0x69,0x87,0x86,0x87,0x89,0x89, -0x79,0x98,0x76,0x88,0x69,0x86,0x77,0x87, -0x87,0x79,0x78,0x96,0x97,0x69,0x78,0x86, -0x78,0x59,0x98,0x78,0x88,0x86,0x88,0x68, -0x97,0x56,0x68,0x85,0x65,0xa6,0x46,0x7a, -0x75,0x79,0x76,0x67,0x98,0x97,0x99,0x6a, -0x6b,0x86,0xc5,0xa5,0xa7,0x57,0x78,0x4a, -0x48,0x56,0x8a,0x87,0x8a,0x78,0x88,0x78, -0xa8,0x4a,0x96,0x79,0x6a,0x87,0x67,0x86, -0x86,0x69,0x67,0xa8,0x88,0x89,0x7a,0x86, -0x85,0x88,0x74,0x45,0x87,0x38,0x67,0x86, -0xa7,0x9b,0xa8,0xba,0x78,0x89,0x55,0x96, -0x74,0x75,0x67,0x67,0x69,0x97,0x8d,0xa8, -0xa8,0xaa,0x59,0x69,0x44,0x77,0x84,0x66, -0x65,0x49,0x77,0x98,0xcb,0x7a,0xcb,0x58, -0x98,0x33,0x46,0x60,0x49,0xc5,0x9b,0xfc, -0x6d,0xd8,0x76,0x58,0x04,0x72,0x7a,0x16, -0xb8,0x58,0xba,0x87,0xde,0x9a,0xca,0x66, -0x68,0x41,0x11,0x95,0x06,0xea,0x7e,0xfc, -0x8a,0xa7,0x43,0x43,0x12,0x87,0x8a,0xca, -0x9c,0x67,0x65,0x43,0x67,0x8b,0xcc,0xb9, -0x99,0x46,0x85,0x65,0x5b,0x99,0x82,0x98, -0x36,0xa7,0xab,0xcb,0xb9,0xa7,0x44,0x67, -0x35,0x67,0x8b,0x58,0x89,0xa8,0x6b,0xb9, -0x78,0x78,0x64,0x55,0x77,0x67,0x79,0x76, -0x58,0xdb,0x8b,0xb9,0x47,0x66,0x47,0x99, -0x67,0xb9,0x76,0x13,0x67,0x6c,0xec,0xca, -0x89,0x63,0x43,0x44,0xcb,0x87,0xca,0x98, -0x75,0x05,0x34,0x6b,0xef,0xbb,0xc9,0x35, -0x12,0x49,0x6a,0xbb,0x98,0x89,0x20,0x06, -0x87,0xef,0xd9,0xa9,0x85,0x23,0x77,0x47, -0xec,0x89,0xa8,0x85,0x03,0x86,0x48,0xfd, -0x97,0xb9,0x52,0x36,0x67,0x7b,0xfa,0x88, -0x98,0x64,0x34,0x79,0x76,0x9d,0xc8,0x87, -0x97,0x34,0x9a,0x87,0x89,0x86,0x89,0x62, -0x68,0x44,0x9b,0xea,0x89,0xa5,0x34,0x76, -0x8b,0x98,0x78,0x74,0x79,0xb8,0x68,0x88, -0x45,0x53,0x5d,0xba,0x9b,0x97,0x45,0x87, -0x85,0x8b,0x98,0x77,0x65,0x56,0x85,0x19, -0xfc,0x68,0xca,0x63,0x6a,0x65,0x67,0xa8, -0x98,0x9a,0x56,0x36,0x51,0x7d,0xf9,0x8b, -0x97,0x34,0x78,0x78,0x89,0xa8,0x79,0x86, -0x56,0x48,0x85,0x7c,0xc8,0x8a,0x98,0x46, -0x76,0x68,0x88,0x99,0xa7,0x87,0x66,0x36, -0x86,0x37,0xda,0x79,0xa9,0x53,0x6b,0x77, -0x8a,0xa8,0x78,0x96,0x47,0x76,0x8a,0x63, -0x8a,0x93,0x7e,0xb4,0x7b,0x96,0x58,0x77, -0x58,0xb7,0x57,0x77,0x57,0x95,0x47,0xaa, -0x98,0x9a,0x66,0x88,0x87,0x88,0x76,0x6a, -0x66,0x5a,0x87,0x98,0x93,0x54,0x39,0x9a, -0xad,0xb9,0x77,0x74,0x37,0x96,0x7c,0xa9, -0x76,0x86,0x56,0x64,0x59,0x86,0x5c,0xb9, -0x89,0xb9,0x56,0x65,0x68,0x66,0x88,0x98, -0x88,0x87,0x57,0x65,0x66,0x97,0x6b,0xba, -0x9a,0x89,0x62,0x34,0x86,0xac,0xcc,0x88, -0x86,0x55,0x44,0x78,0x88,0xba,0x97,0x36, -0x44,0x58,0xad,0xeb,0xb9,0x99,0x45,0x33, -0x49,0x79,0xa9,0xc7,0x78,0x86,0x24,0x4b, -0x86,0xeb,0xc9,0x89,0x75,0x46,0x56,0x39, -0x98,0xaa,0xc8,0x57,0x65,0x67,0x9a,0xa6, -0xa9,0x65,0x09,0xc4,0x9b,0xaa,0x88,0xb7, -0x56,0x67,0x56,0x97,0x79,0x8a,0x96,0x87, -0x76,0x53,0x49,0x67,0xb9,0xca,0x8c,0x96, -0x76,0x57,0x68,0x95,0x99,0x89,0x88,0x76, -0x87,0x86,0x68,0x74,0x68,0x76,0x89,0xba, -0xaa,0x88,0x76,0x75,0x57,0x66,0x87,0x87, -0x78,0x77,0x98,0x77,0x78,0x97,0x88,0x78, -0x88,0x87,0x88,0x88,0x89,0x88,0x79,0x97, -0x77,0x67,0x87,0x77,0x77,0x88,0x87,0x87, -0x67,0x77,0x67,0x77,0x88,0x89,0x88,0x88, -0x88,0x88,0x88,0x88,0x98,0x77,0x77,0x76, -0x77,0x78,0x77,0x77,0x77,0x79,0x88,0x77, -0x98,0x88,0x78,0x88,0x87,0x77,0x77,0x77, -0x88,0x77,0x78,0x77,0x76,0x78,0x88,0x77, -0x88,0x88,0x78,0x78,0x77,0x88,0x77,0x78, -0x88,0x76,0x78,0x77,0x87,0x88,0x87,0x88, -0x88,0x78,0x89,0x87,0x88,0x88,0x88,0x78, -0x88,0x87,0x88,0x87,0x78,0x77,0x77,0x88, -0x87,0x88,0x88,0x87,0x87,0x87,0x77,0x66, -0x77,0x78,0x87,0x78,0x78,0x87,0x78,0x88, -0x87,0x77,0x77,0x77,0x87,0x77,0x88,0x77, -0x87,0x88,0x88,0x78,0x87,0x78,0x88,0x87, -0x78,0x87,0x78,0x88,0x98,0x77,0x77,0x77, -0x77,0x88,0x78,0x88,0x78,0x88,0x88,0x77, -0x77,0x77,0x78,0x88,0x87,0x88,0x78,0x88, -0x87,0x77,0x77,0x77,0x77,0x78,0x88,0x77, -0x88,0x78,0x88,0x77,0x77,0x88,0x78,0x88, -0x98,0x98,0x88,0x88,0x87,0x87,0x77,0x77, -0x77,0x77,0x78,0x88,0x87,0x88,0x87,0x78, -0x87,0x87,0x77,0x78,0x77,0x88,0x88,0x78, -0x87,0x77,0x87,0x78,0x77,0x77,0x87,0x88, -0x88,0x78,0x87,0x77,0x77,0x87,0x77,0x78, -0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x88, -0x77,0x77,0x78,0x77,0x77,0x88,0x88,0x88, -0x77,0x87,0x87,0x77,0x88,0x77,0x87,0x78, -0x87,0x78,0x77,0x78,0x77,0x87,0x88,0x87, -0x77,0x88,0x88,0x88,0x87,0x88,0x87,0x78, -0x87,0x87,0x77,0x88,0x88,0x87,0x78,0x87, -0x78,0x77,0x87,0x77,0x77,0x78,0x87,0x88, -0x88,0x98,0x77,0x77,0x78,0x87,0x88,0x78, -0x77,0x77,0x77,0x88,0x87,0x67,0x78,0x78, -0x77,0x77,0x77,0x78,0x88,0x88,0x98,0x77, -0x78,0x88,0x88,0x88,0x77,0x88,0x78,0x87, -0x87,0x77,0x78,0x78,0x77,0x88,0x77,0x78, -0x88,0x98,0x88,0x77,0x77,0x77,0x77,0x78, -0x87,0x77,0x78,0x88,0x87,0x88,0x77,0x77, -0x77,0x77,0x78,0x77,0x88,0x88,0x97,0x78, -0x87,0x88,0x87,0x88,0x78,0x87,0x78,0x88, -0x88,0x77,0x87,0x77,0x77,0x88,0x78,0x78, -0x88,0x88,0x98,0x78,0x77,0x77,0x67,0x77, -0x78,0x77,0x88,0x77,0x87,0x78,0x87,0x77, -0x77,0x77,0x78,0x77,0x88,0x88,0x88,0x88, -0x77,0x87,0x77,0x88,0x88,0x88,0x88,0x78, -0x87,0x78,0x77,0x77,0x77,0x77,0x88,0x78, -0x89,0x88,0x87,0x88,0x77,0x77,0x77,0x77, -0x87,0x78,0x88,0x78,0x77,0x87,0x77,0x77, -0x77,0x77,0x88,0x78,0x88,0x78,0x88,0x78, -0x88,0x87,0x78,0x78,0x88,0x88,0x88,0x78, -0x78,0x77,0x77,0x77,0x77,0x78,0x87,0x78, -0x87,0x88,0x88,0x88,0x77,0x87,0x77,0x78, -0x78,0x77,0x87,0x77,0x78,0x78,0x87,0x88, -0x77,0x78,0x78,0x87,0x88,0x87,0x88,0x78, -0x88,0x87,0x87,0x89,0x88,0x88,0x87,0x87, -0x88,0x77,0x88,0x77,0x77,0x88,0x78,0x87, -0x77,0x87,0x87,0x87,0x77,0x77,0x76,0x88, -0x77,0x87,0x78,0x77,0x87,0x77,0x77,0x78, -0x77,0x88,0x87,0x87,0x78,0x88,0x88,0x87, -0x87,0x78,0x78,0x88,0x87,0x88,0x88,0x88, -0x78,0x76,0x77,0x77,0x78,0x88,0x77,0x87, -0x88,0x88,0x88,0x87,0x77,0x77,0x77,0x88, -0x77,0x77,0x88,0x88,0x88,0x77,0x77,0x77, -0x78,0x88,0x78,0x88,0x88,0x88,0x89,0x77, -0x87,0x87,0x78,0x88,0x78,0x88,0x88,0x88, -0x88,0x77,0x77,0x77,0x78,0x87,0x78,0x78, -0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77, -0x77,0x78,0x88,0x88,0x88,0x87,0x77,0x77, -0x78,0x77,0x77,0x78,0x88,0x88,0x88,0x77, -0x78,0x77,0x78,0x87,0x77,0x78,0x98,0x88, -0x88,0x87,0x78,0x87,0x88,0x77,0x77,0x78, -0x98,0x88,0x88,0x87,0x78,0x87,0x87,0x77, -0x77,0x78,0x87,0x88,0x87,0x77,0x78,0x77, -0x88,0x87,0x77,0x78,0x87,0x88,0x87,0x87, -0x88,0x77,0x88,0x87,0x77,0x88,0x88,0x88, -0x87,0x87,0x78,0x77,0x88,0x87,0x77,0x88, -0x88,0x87,0x77,0x87,0x78,0x87,0x87,0x87, -0x77,0x78,0x88,0x77,0x77,0x77,0x77,0x77, -0x78,0x87,0x78,0x88,0x87,0x77,0x77,0x78, -0x78,0x87,0x88,0x88,0x88,0x88,0x88,0x78, -0x77,0x87,0x78,0x87,0x78,0x88,0x88,0x88, -0x87,0x78,0x77,0x88,0x78,0x87,0x78,0x88, -0x78,0x88,0x77,0x67,0x77,0x87,0x78,0x87, -0x88,0x88,0x87,0x88,0x77,0x77,0x67,0x87, -0x78,0x77,0x89,0x87,0x88,0x88,0x77,0x78, -0x77,0x87,0x87,0x77,0x88,0x87,0x87,0x87, -0x77,0x77,0x78,0x87,0x87,0x77,0x88,0x77, -0x76,0x87,0x77,0x77,0x78,0x76,0x88,0x87, -0x88,0x77,0x77,0x88,0x87,0x78,0x87,0x78, -0x87,0x88,0x88,0x87,0x77,0x87,0x88,0x78, -0x88,0x78,0x87,0x87,0x78,0x77,0x77,0x87, -0x87,0x78,0x88,0x78,0x88,0x87,0x78,0x88, -0x67,0x77,0x87,0x78,0x88,0x78,0x87,0x87, -0x68,0x88,0x78,0x77,0x87,0x78,0x88,0x78, -0x87,0x77,0x68,0x88,0x88,0x77,0x88,0x78, -0x97,0x88,0x77,0x77,0x77,0x88,0x78,0x77, -0x88,0x77,0x98,0x78,0x77,0x77,0x77,0x88, -0x77,0x77,0x87,0x78,0x77,0x86,0x77,0x87, -0x78,0x78,0x86,0x78,0x88,0x78,0x77,0x87, -0x88,0x88,0x78,0x87,0x87,0x78,0x98,0x78, -0x77,0x77,0x78,0x88,0x88,0x78,0x77,0x88, -0x88,0x88,0x78,0x87,0x88,0x78,0x88,0x88, -0x86,0x78,0x77,0x78,0x77,0x77,0x78,0x78, -0x88,0x78,0x87,0x77,0x77,0x88,0x88,0x77, -0x87,0x78,0x88,0x88,0x77,0x77,0x78,0x88, -0x88,0x77,0x88,0x78,0x88,0x88,0x66,0x77, -0x77,0x88,0x88,0x78,0x88,0x87,0x87,0x88, -0x66,0x77,0x77,0x88,0x88,0x77,0x88,0x87, -0x87,0x87,0x76,0x78,0x87,0x77,0x88,0x88, -0x88,0x88,0x77,0x87,0x87,0x77,0x88,0x77, -0x88,0x88,0x78,0x88,0x76,0x77,0x77,0x77, -0x88,0x87,0x78,0x98,0x87,0x78,0x77,0x67, -0x77,0x87,0x68,0x88,0x67,0x88,0x88,0x67, -0x87,0x77,0x88,0x78,0x77,0x88,0x76,0x88, -0x88,0x77,0x88,0x77,0x78,0x89,0x87,0x88, -0x77,0x78,0x88,0x87,0x78,0x87,0x77,0x98, -0x87,0x77,0x77,0x77,0x88,0x78,0x78,0x88, -0x77,0x89,0x77,0x76,0x77,0x77,0x89,0x88, -0x87,0x88,0x77,0x79,0x87,0x76,0x78,0x87, -0x89,0x88,0x88,0x78,0x87,0x78,0x77,0x77, -0x68,0x87,0x88,0x88,0x88,0x78,0x87,0x77, -0x78,0x77,0x77,0x98,0x78,0x89,0x88,0x87, -0x87,0x77,0x77,0x87,0x77,0x88,0x77,0x87, -0x98,0x78,0x77,0x77,0x77,0x78,0x78,0x77, -0x88,0x77,0x89,0x88,0x78,0x77,0x77,0x78, -0x87,0x78,0x77,0x87,0x88,0x97,0x77,0x87, -0x78,0x78,0x88,0x77,0x87,0x78,0x77,0x88, -0x76,0x78,0x88,0x77,0x88,0x86,0x88,0x77, -0x87,0x87,0x87,0x78,0x88,0x87,0x88,0x88, -0x78,0x87,0x78,0x77,0x78,0x77,0x88,0x87, -0x77,0x88,0x87,0x78,0x77,0x87,0x78,0x88, -0x78,0x87,0x87,0x78,0x87,0x78,0x87,0x77, -0x77,0x78,0x77,0x77,0x77,0x68,0x88,0x77, -0x88,0x77,0x77,0x78,0x88,0x88,0x78,0x88, -0x88,0x88,0x88,0x87,0x77,0x78,0x87,0x88, -0x77,0x78,0x88,0x88,0x88,0x77,0x77,0x88, -0x88,0x87,0x87,0x88,0x88,0x88,0x87,0x87, -0x77,0x78,0x87,0x88,0x78,0x78,0x88,0x87, -0x88,0x78,0x77,0x87,0x77,0x78,0x88,0x88, -0x88,0x88,0x88,0x77,0x87,0x77,0x78,0x78, -0x78,0x88,0x88,0x88,0x78,0x87,0x77,0x78, -0x78,0x77,0x88,0x78,0x88,0x88,0x87,0x77, -0x67,0x77,0x77,0x77,0x77,0x87,0x98,0x88, -0x87,0x77,0x76,0x87,0x78,0x77,0x77,0x78, -0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x78, -0x78,0x77,0x88,0x88,0x88,0x87,0x77,0x87, -0x77,0x88,0x77,0x77,0x88,0x88,0x88,0x88, -0x77,0x77,0x77,0x78,0x78,0x88,0x88,0x78, -0x89,0x77,0x88,0x88,0x77,0x78,0x66,0x88, -0x79,0x77,0x88,0x77,0x88,0x99,0x66,0x88, -0x77,0x86,0x89,0x67,0x98,0x67,0x87,0x89, -0x67,0x88,0x77,0x87,0x79,0x77,0x88,0x77, -0x88,0x89,0x77,0x87,0x66,0x77,0x79,0x76, -0x87,0x77,0x88,0x89,0x67,0x88,0x67,0x87, -0x78,0x77,0x97,0x78,0x77,0x99,0x78,0x98, -0x67,0x78,0x88,0x68,0x87,0x68,0x88,0x8a, -0x77,0x88,0x77,0x78,0x88,0x77,0x87,0x68, -0x97,0x89,0x87,0x97,0x78,0x76,0x88,0x67, -0x87,0x67,0x88,0x78,0x77,0x87,0x57,0x87, -0x79,0x77,0x98,0x67,0x87,0x79,0x76,0x98, -0x68,0x97,0x79,0x87,0x98,0x57,0x97,0x79, -0x76,0x88,0x58,0x97,0x79,0x87,0x98,0x67, -0xa8,0x79,0x87,0x88,0x67,0x86,0x7a,0x76, -0x98,0x57,0x97,0x79,0x77,0x88,0x59,0x96, -0x79,0x76,0x87,0x68,0x97,0x89,0x77,0x96, -0x58,0x96,0x79,0x77,0x97,0x68,0x86,0x78, -0x77,0x97,0x69,0x96,0x79,0x89,0xa8,0x6a, -0x97,0x99,0x77,0x87,0x59,0x86,0x79,0x88, -0x87,0x58,0x87,0x88,0x78,0x88,0x69,0x65, -0x78,0x68,0xa6,0x79,0x76,0x88,0x79,0x99, -0x89,0x86,0x88,0x67,0x87,0x68,0x87,0x78, -0x88,0x87,0x78,0x76,0x89,0x88,0x98,0x88, -0x66,0x77,0x78,0x87,0x89,0x76,0x77,0x88, -0x88,0x89,0x87,0x87,0x77,0x78,0x79,0x97, -0x78,0x88,0x87,0x78,0x87,0x88,0x88,0x88, -0x77,0x66,0x66,0x78,0x87,0x78,0x87,0x66, -0x88,0x89,0x89,0x98,0x88,0x76,0x57,0x67, -0x89,0x87,0x89,0x88,0x77,0x99,0x77,0x88, -0x88,0x87,0x77,0x66,0x77,0x99,0x67,0x88, -0x66,0x78,0x88,0x88,0x88,0x88,0x86,0x78, -0x66,0x7a,0x86,0x88,0x97,0x77,0x99,0x88, -0xa8,0x79,0x97,0x66,0x76,0x67,0x88,0x76, -0x79,0x76,0x78,0x88,0x89,0x78,0x87,0x66, -0x56,0x76,0x78,0x98,0x77,0x88,0x88,0x78, -0x88,0x99,0x78,0x98,0x77,0x78,0x77,0x78, -0x97,0x68,0x87,0x77,0x87,0x98,0x78,0x88, -0x88,0x66,0x88,0x67,0x87,0x67,0x77,0x87, -0x67,0x99,0x89,0x76,0x98,0x76,0x77,0x77, -0x76,0x98,0x67,0x88,0x88,0x77,0x99,0x98, -0x78,0x77,0x55,0x78,0x78,0x89,0x88,0x77, -0x97,0x78,0x98,0x9a,0x87,0x88,0x87,0x77, -0x88,0x76,0x88,0x77,0x88,0x88,0x77,0x87, -0x89,0x78,0x88,0x76,0x76,0x78,0x77,0x97, -0x68,0x86,0x78,0x88,0x99,0x87,0x77,0x78, -0x76,0x98,0x67,0x77,0x77,0x79,0x76,0x77, -0x77,0x9a,0x77,0x87,0x77,0x76,0x77,0x78, -0x86,0x68,0x87,0x78,0x78,0x98,0x88,0x77, -0x88,0x88,0x88,0x88,0x77,0x78,0x88,0xa7, -0x89,0x98,0x89,0x87,0x87,0x88,0x66,0x77, -0x67,0x87,0x67,0x88,0x77,0x89,0x99,0x88, -0x87,0x78,0x77,0x88,0x77,0x87,0x77,0x88, -0x88,0x77,0x99,0x88,0x66,0x67,0x75,0x77, -0x78,0x76,0x77,0x87,0x78,0x87,0x88,0x78, -0x87,0x77,0x88,0x98,0x78,0x97,0x77,0x78, -0x99,0x77,0x88,0x87,0x88,0x88,0x67,0x87, -0x76,0x77,0x77,0x66,0x77,0x97,0x78,0x9a, -0x87,0x88,0x87,0x78,0x99,0x98,0x87,0x88, -0x77,0x9a,0x98,0x87,0x87,0x67,0x87,0x78, -0x66,0x87,0x65,0x67,0x77,0x76,0x87,0x76, -0x78,0x88,0x86,0x79,0x87,0x89,0x99,0x86, -0x68,0x77,0x88,0x98,0x98,0x78,0x87,0x67, -0x88,0x86,0x57,0x76,0x67,0x88,0x89,0x87, -0x88,0x77,0x9a,0x97,0x78,0x88,0x88,0x99, -0x88,0x77,0x78,0x89,0x88,0x86,0x67,0x77, -0x77,0x77,0x88,0x76,0x66,0x66,0x67,0x88, -0x87,0x76,0x67,0x88,0x88,0x88,0x77,0x88, -0x87,0x88,0x86,0x78,0x89,0x99,0x99,0x88, -0x87,0x67,0x66,0x78,0x98,0x88,0x87,0x77, -0x87,0x87,0x87,0x67,0x89,0x88,0x98,0x98, -0x89,0x78,0x87,0x88,0x88,0x98,0x77,0x74, -0x66,0x77,0x97,0x98,0x98,0x97,0x88,0x76, -0x77,0x66,0x65,0x46,0x52,0x47,0x76,0x8a, -0xba,0xcc,0xa9,0x78,0x76,0x57,0x85,0x46, -0x64,0x56,0x78,0xbc,0x9b,0xcb,0x88,0x78, -0x56,0x77,0x67,0x75,0x25,0x86,0x47,0xcd, -0x7b,0xde,0x9a,0xb9,0x57,0x86,0x58,0x99, -0x32,0x77,0x44,0x9c,0xb8,0xde,0xb7,0xbb, -0x62,0x68,0x73,0x67,0x33,0x44,0x33,0x8a, -0xa6,0xbe,0xc8,0x9a,0xa5,0x68,0x83,0x55, -0x44,0x85,0x55,0xa9,0xca,0xca,0xca,0xa8, -0x95,0x55,0x64,0x74,0x15,0x54,0x38,0x9a, -0xac,0xde,0xab,0x99,0x67,0x77,0x67,0x85, -0x14,0x45,0x39,0xac,0xbf,0xfc,0x9a,0xb7, -0x58,0x85,0x22,0x21,0x63,0x25,0x9b,0x99, -0xdd,0xb9,0x99,0x77,0x66,0x55,0x74,0x06, -0x37,0x29,0x8c,0xbe,0xcd,0xad,0xb8,0x57, -0x66,0x55,0x52,0x52,0x43,0x89,0xa9,0xed, -0xdb,0xb9,0x97,0x65,0x56,0x53,0x33,0x67, -0x59,0xaa,0x9a,0xdc,0xac,0xb8,0x98,0x87, -0x55,0x33,0x28,0x34,0x47,0x9b,0xae,0xc8, -0xcc,0x76,0x55,0x64,0x36,0x42,0x37,0x55, -0x77,0xaa,0x9d,0xda,0xba,0xa7,0x65,0x76, -0x55,0x41,0x86,0x84,0x99,0x88,0xab,0xba, -0xb9,0x98,0x76,0x64,0x68,0x64,0x88,0x56, -0x89,0x99,0x9c,0xb9,0x99,0x88,0x78,0x76, -0x89,0x87,0x48,0x88,0x98,0x99,0x56,0x77, -0x77,0x78,0x88,0x66,0x66,0x66,0x87,0x78, -0x67,0x76,0x77,0x66,0x89,0xa8,0x78,0x88, -0x78,0x9a,0x88,0x98,0x78,0x88,0x77,0x76, -0x55,0x67,0x89,0x78,0x88,0x78,0x88,0x78, -0x88,0x98,0x88,0x88,0x78,0x87,0x78,0x88, -0x77,0x77,0x89,0x77,0x88,0x88,0x98,0x89, -0x87,0x87,0x77,0x77,0x77,0x76,0x65,0x77, -0x66,0x56,0x66,0x78,0x89,0x77,0x98,0x89, -0x99,0x78,0x76,0x78,0x88,0x88,0x87,0x79, -0x87,0x78,0x77,0x88,0x87,0x67,0x77,0x78, -0x88,0x78,0x87,0x77,0x99,0x99,0x87,0x77, -0x78,0x88,0x88,0x86,0x78,0x87,0x79,0x88, -0x99,0x98,0x88,0x77,0x77,0x76,0x77,0x66, -0x67,0x87,0x65,0x86,0x56,0x77,0x68,0x96, -0x78,0x98,0x87,0x77,0x66,0x78,0x98,0x89, -0x77,0x98,0x88,0x89,0x87,0x78,0x86,0x78, -0x68,0x88,0x98,0x88,0x88,0x78,0x87,0x87, -0x87,0x77,0x79,0x99,0x98,0x87,0x68,0x97, -0x88,0x88,0x99,0x98,0x88,0x77,0x66,0x66, -0x67,0x78,0x77,0x87,0x76,0x77,0x66,0x76, -0x88,0x77,0x77,0x89,0x86,0x57,0x86,0x68, -0x79,0x88,0x66,0x68,0x89,0x99,0xa9,0x87, -0x78,0x77,0x89,0x89,0xa8,0x67,0x88,0x78, -0x89,0x96,0x59,0x66,0x89,0xaa,0x89,0x76, -0x77,0x87,0x88,0x88,0x68,0x98,0x87,0x98, -0x86,0x67,0x66,0x88,0x87,0x98,0x76,0x65, -0x67,0x78,0x87,0x88,0x66,0x77,0x77,0x78, -0x78,0x76,0x76,0x67,0x88,0x79,0xa9,0x88, -0x88,0x88,0x88,0x97,0x66,0x77,0x89,0x88, -0x79,0x97,0x78,0x75,0x78,0x78,0x98,0x89, -0x96,0x78,0x98,0x97,0x66,0x78,0x88,0xa9, -0x88,0x76,0x77,0x78,0x88,0x78,0x76,0x77, -0x76,0x68,0x77,0x77,0x56,0x77,0x68,0x88, -0x79,0x75,0x68,0x88,0x75,0x67,0x87,0x78, -0x8a,0xa8,0x79,0xa8,0x88,0x98,0x78,0x77, -0x99,0x87,0x79,0x99,0x87,0x77,0x67,0x89, -0x89,0xa9,0x78,0x77,0x88,0x77,0x78,0x89, -0x98,0x78,0x87,0x77,0x76,0x89,0x77,0x75, -0x67,0x76,0x68,0x67,0x77,0x77,0x58,0x57, -0x86,0x66,0x88,0x76,0x67,0x96,0x55,0x66, -0x89,0x87,0x89,0x88,0x88,0x99,0x99,0x99, -0x75,0x78,0x88,0x98,0x8a,0xa7,0x76,0x77, -0x77,0x88,0xa9,0x78,0x87,0x78,0x97,0x87, -0x68,0x98,0x88,0x89,0x99,0x76,0x68,0x89, -0x98,0x66,0x76,0x76,0x67,0x98,0x97,0x75, -0x67,0x76,0x67,0x78,0x87,0x68,0x77,0x66, -0x75,0x57,0x88,0x97,0x66,0x99,0x88,0x88, -0x99,0x97,0x67,0x76,0x98,0x89,0x89,0x98, -0x76,0x78,0x78,0x79,0x89,0x97,0x89,0x89, -0x99,0x77,0x87,0x58,0x97,0x66,0x77,0x76, -0x78,0x9a,0x97,0x76,0x67,0x75,0x88,0x88, -0x98,0x76,0x76,0x67,0x68,0x88,0x87,0x78, -0x56,0x78,0x66,0x66,0x78,0x77,0x76,0x99, -0x88,0x98,0x88,0x89,0x87,0x78,0x98,0x88, -0x98,0xa8,0x76,0x88,0x77,0x88,0x97,0xa9, -0x99,0x77,0x98,0x88,0x86,0x7a,0x87,0x75, -0x68,0x88,0x78,0x97,0x77,0x67,0x86,0x77, -0x87,0x77,0x87,0x87,0x56,0x77,0x66,0x76, -0x89,0x76,0x56,0x68,0x65,0x68,0x77,0x89, -0x76,0x68,0x69,0x98,0x99,0x98,0x67,0x77, -0xa7,0x79,0x89,0x87,0x87,0x8a,0x88,0xb8, -0x77,0x7a,0x8a,0x78,0x99,0x86,0x67,0x78, -0xa8,0x87,0x69,0x69,0x78,0xa9,0x99,0x77, -0x57,0x87,0x88,0x89,0x87,0x65,0x54,0x67, -0x85,0x67,0x69,0x87,0x67,0x78,0x77,0xa5, -0x54,0x67,0x85,0x57,0xbb,0x76,0xac,0xb8, -0x88,0xaa,0x62,0x55,0x76,0x34,0x9d,0x97, -0x9b,0xe9,0x88,0xbc,0xa5,0x02,0x98,0x58, -0x68,0xba,0x57,0xa8,0x53,0x58,0xdc,0x57, -0xec,0x83,0x7a,0xb7,0x30,0x15,0x62,0x4d, -0xee,0xbb,0xeb,0x54,0x55,0x10,0x05,0x89, -0x59,0xfb,0x9b,0x84,0x33,0x05,0xa6,0x8e, -0xed,0xc8,0x77,0x62,0x39,0x85,0x59,0xdc, -0xc8,0x3b,0x64,0x87,0x6c,0xea,0xbb,0x79, -0xa4,0x23,0x52,0x44,0xde,0xbc,0xd9,0x96, -0x10,0x58,0x55,0xad,0xdc,0x8a,0xb9,0x40, -0x02,0x31,0x38,0xde,0xfb,0xac,0xa4,0x35, -0x53,0x54,0x56,0x98,0x9a,0x96,0x78,0x63, -0x58,0x99,0x9c,0xea,0x78,0xa9,0x43,0x57, -0x70,0x1a,0xf7,0x56,0xcf,0xb5,0x8c,0x94, -0x36,0x76,0x78,0xa9,0x57,0xa9,0x54,0x79, -0x65,0x9c,0xca,0x8a,0xb8,0x55,0x79,0x78, -0x96,0x52,0x6a,0x65,0x6b,0xf9,0x57,0xa9, -0x44,0x66,0x76,0x69,0x85,0x79,0x8a,0x96, -0x77,0x65,0x64,0x57,0x8a,0xdb,0xaa,0xa8, -0x86,0x54,0x44,0x79,0xa9,0xac,0x98,0x79, -0x87,0x23,0x35,0x9b,0xcd,0xc9,0x88,0x87, -0x66,0x55,0x68,0x77,0x74,0x9b,0x85,0x6d, -0xc9,0x79,0xa8,0x56,0x78,0x54,0x88,0x87, -0x78,0x87,0x64,0x47,0x95,0x6e,0xd6,0x7a, -0xa8,0x75,0x76,0x34,0x87,0x57,0x85,0x2a, -0xa6,0xaa,0xdc,0x75,0x8a,0x66,0x77,0x86, -0x79,0xa8,0x89,0x89,0x95,0x68,0x88,0x64, -0x59,0x86,0x79,0xa9,0x87,0x9b,0x75,0x89, -0x77,0x65,0x88,0x99,0x77,0x67,0x76,0x63, -0x75,0x59,0x9c,0xa9,0xaa,0x96,0x45,0x76, -0x56,0x77,0x99,0x96,0x67,0x85,0x45,0x57, -0x99,0x9c,0xb7,0xa9,0x56,0x56,0x77,0x8b, -0xa8,0x98,0x57,0x75,0x35,0x9b,0xae,0xdb, -0xa8,0x87,0x55,0x56,0x89,0x78,0x88,0x87, -0x66,0x86,0x96,0x58,0x89,0x42,0x6c,0x79, -0xbc,0xc7,0x66,0x65,0x64,0x48,0x7c,0x87, -0x5b,0x77,0x77,0x46,0x48,0x65,0x4b,0xb7, -0x9b,0xb9,0x88,0xb6,0x54,0x83,0x37,0x98, -0xaa,0xaa,0x99,0x04,0x41,0x7b,0xab,0xfe, -0xb7,0x9a,0x85,0x57,0x65,0x67,0x98,0xca, -0x86,0x7a,0x64,0x47,0x94,0x6b,0xd9,0x99, -0xa7,0x57,0x76,0x67,0x66,0x45,0x86,0x67, -0xb9,0x86,0x98,0x65,0x4c,0x87,0x8a,0xb7, -0x98,0x85,0x59,0x76,0x69,0x95,0x67,0x99, -0x65,0x3a,0xa8,0x87,0xba,0x76,0x99,0x77, -0x6a,0x6a,0xa6,0x87,0x78,0x56,0x50,0x7c, -0x88,0xcc,0xa9,0x86,0xa5,0x56,0x86,0x79, -0x7b,0xa7,0x49,0x83,0x66,0x75,0x3a,0xb8, -0x89,0xca,0x48,0x95,0x78,0x85,0x77,0x86, -0x42,0x58,0x97,0x6e,0xd8,0x9a,0x77,0x86, -0x55,0x86,0x86,0xa7,0x77,0x89,0x67,0x98, -0x76,0x96,0x55,0xaf,0x88,0xcf,0xa5,0x77, -0x44,0x66,0x66,0x78,0x78,0x57,0x87,0xa8, -0xbb,0xba,0xaa,0x74,0x48,0x66,0x68,0x75, -0x78,0x62,0x27,0xa4,0x1d,0xf5,0xbf,0x97, -0x86,0x76,0x36,0x54,0x35,0x9a,0x9b,0xaa, -0x87,0x94,0x36,0x45,0x89,0xbb,0xcb,0xa9, -0x76,0x76,0x26,0x76,0xa8,0xa7,0x9b,0x55, -0x88,0xa5,0x8a,0x96,0x76,0x67,0x89,0xa9, -0x89,0x97,0x32,0x48,0xb1,0x5f,0xb6,0xcd, -0x66,0x84,0x47,0x53,0x57,0x9a,0x98,0xac, -0x97,0x86,0x43,0x41,0x29,0xd5,0xae,0xb9, -0xaa,0x97,0x65,0x75,0x47,0x88,0x98,0x9b, -0x98,0x65,0x43,0x25,0x78,0xcc,0xbb,0xaa, -0x99,0x86,0x55,0x22,0x33,0x8a,0x69,0xdc, -0x99,0xb8,0x78,0x87,0x67,0x88,0x78,0x97, -0x98,0x66,0x48,0x85,0x89,0x99,0x88,0x88, -0x79,0x86,0x97,0x67,0x12,0x98,0x38,0xf9, -0x5b,0xb7,0x88,0x77,0x66,0x76,0x77,0x98, -0x54,0x9b,0x79,0xba,0x79,0x95,0x76,0x89, -0x87,0x88,0x68,0x76,0x87,0x54,0x9a,0x8a, -0xbb,0x77,0x87,0x65,0x87,0x76,0x78,0x54, -0x9a,0x58,0xd9,0x9a,0xa7,0x75,0x25,0x64, -0x67,0x99,0x87,0xab,0x93,0x25,0x52,0x7d, -0xb9,0xec,0x76,0x88,0x62,0x14,0x76,0x8b, -0xcc,0xaa,0x77,0x82,0x55,0x68,0xea,0xbc, -0x88,0x98,0x75,0x45,0x55,0x57,0xa9,0x89, -0xbb,0x78,0x98,0x46,0x87,0x67,0xa9,0x65, -0x29,0xd3,0x3c,0xf8,0x9c,0xa7,0x78,0x75, -0x33,0x43,0x6a,0xc9,0xbc,0x88,0x65,0x77, -0x13,0x6b,0x77,0xbe,0x97,0x89,0x54,0x57, -0x64,0x47,0x76,0x7c,0xe8,0x9d,0x76,0x66, -0x67,0x55,0x87,0x79,0x67,0xab,0x76,0x87, -0x74,0x59,0x76,0x9c,0xa8,0x99,0x97,0x57, -0x76,0x58,0x60,0x7f,0x96,0xcc,0x9a,0x98, -0x97,0x56,0x75,0x56,0x75,0x58,0x88,0x65, -0xed,0x98,0xb7,0x46,0x76,0x66,0x58,0x84, -0x68,0x46,0xb7,0x4a,0xca,0xab,0x89,0x97, -0x69,0x84,0x68,0x74,0x21,0x8b,0x54,0xef, -0x98,0xba,0x84,0x66,0x63,0x56,0x66,0x9a, -0x98,0xb7,0x87,0x68,0x75,0x3b,0xc9,0x7c, -0xc7,0x68,0x77,0x55,0x54,0x56,0x8a,0xaa, -0x8a,0x76,0x77,0x67,0x78,0x88,0x77,0x88, -0x77,0x75,0x34,0x66,0x79,0xba,0xcb,0xa8, -0x87,0x86,0x66,0x86,0x76,0x79,0xa8,0x89, -0x86,0x97,0x77,0x56,0x9d,0x87,0x9a,0x77, -0x79,0x76,0x66,0x87,0x78,0x97,0x88,0xa9, -0x88,0x88,0x76,0x88,0x76,0x87,0x67,0x76, -0x88,0x88,0x9a,0x87,0x77,0x56,0x64,0x87, -0x98,0x78,0x86,0x77,0x86,0x57,0x86,0x68, -0x8c,0x97,0xa9,0x56,0x87,0x77,0x76,0x76, -0x9b,0x67,0x99,0x88,0x88,0x68,0x78,0x97, -0x79,0x89,0x89,0x37,0x57,0x78,0x89,0x77, -0x88,0xa9,0x88,0x99,0x66,0x8a,0x68,0x77, -0x67,0x78,0x77,0x98,0x98,0x98,0x95,0x87, -0x78,0x57,0x78,0x87,0x67,0x84,0x77,0x98, -0x66,0x98,0xa9,0x78,0x8b,0x66,0x88,0x85, -0x67,0x88,0x87,0x88,0x85,0x88,0x98,0x78, -0x88,0x97,0x67,0x78,0x88,0x67,0x57,0x69, -0xa9,0x77,0x88,0x99,0x88,0x79,0x79,0x77, -0x86,0x65,0x66,0x77,0x88,0x88,0x68,0x97, -0x77,0x76,0x87,0x57,0x79,0x77,0x78,0x66, -0x68,0x87,0x76,0x88,0x89,0x96,0x78,0x88, -0x89,0x87,0x87,0x88,0x78,0x89,0x97,0x77, -0x69,0x97,0x77,0x98,0x79,0x78,0x77,0x87, -0x67,0x79,0x98,0x86,0x78,0x99,0x97,0x69, -0x88,0x77,0x77,0x67,0x56,0x66,0x99,0x97, -0x77,0x77,0x77,0x76,0x87,0x68,0x98,0x87, -0x88,0x65,0x56,0x97,0x78,0x78,0x79,0x97, -0x69,0x88,0x88,0x77,0x87,0x87,0x77,0x89, -0x86,0x76,0x78,0x97,0x88,0x99,0x89,0x87, -0x78,0x78,0x77,0x78,0x78,0x77,0x77,0x88, -0x96,0x78,0x99,0x88,0x86,0x76,0x67,0x77, -0x88,0xa9,0x88,0x77,0x78,0x66,0x77,0x89, -0x88,0x77,0x96,0x66,0x57,0x78,0x87,0x87, -0x78,0x86,0x69,0x97,0x88,0x78,0x87,0x77, -0x77,0x87,0x98,0x77,0x67,0x88,0x87,0x88, -0x98,0x98,0x77,0x87,0x87,0x87,0x68,0x88, -0x87,0x88,0x86,0x69,0xa8,0x88,0x86,0x66, -0x77,0x87,0x88,0x98,0x88,0x66,0x88,0x65, -0x78,0x88,0x99,0x87,0x87,0x76,0x67,0x77, -0x78,0x97,0x88,0x87,0x88,0x88,0x99,0x98, -0x78,0x78,0x77,0x88,0x87,0x78,0x68,0x79, -0x77,0x88,0x78,0x87,0x88,0x79,0x89,0x66, -0x77,0x88,0x97,0x79,0x67,0x68,0x87,0x88, -0x87,0x67,0x67,0x67,0x88,0x88,0x87,0x66, -0x77,0x46,0x78,0x88,0x88,0x88,0x77,0x77, -0x77,0x77,0x68,0x78,0x78,0x89,0x87,0x88, -0x89,0x98,0x79,0x77,0x66,0x88,0x78,0x78, -0x76,0x79,0x87,0x68,0x87,0x88,0x67,0x89, -0x89,0x66,0x78,0x87,0x88,0x78,0x8a,0x97, -0x88,0x87,0x77,0x79,0x87,0x77,0x89,0x89, -0x77,0x76,0x65,0x76,0x78,0x88,0x98,0x76, -0x77,0x88,0x86,0x86,0x97,0x77,0x77,0xa9, -0x87,0x79,0x7a,0x78,0x79,0x77,0x77,0x86, -0x78,0x67,0x57,0x87,0x84,0x58,0x97,0x86, -0x78,0xa7,0x77,0x78,0x68,0x96,0x96,0x78, -0x8b,0x87,0x86,0x98,0x87,0x87,0x76,0xa6, -0xa8,0x8a,0x78,0x68,0x58,0x96,0x79,0xa5, -0x95,0x87,0x77,0x97,0x79,0x58,0x77,0x87, -0x77,0x98,0x87,0xa8,0xb9,0x88,0x67,0x77, -0x86,0x8a,0x78,0x67,0x78,0x68,0x85,0x68, -0x78,0x59,0x47,0x86,0x88,0x6a,0x68,0x95, -0x95,0x79,0x7a,0x58,0x68,0x97,0x8a,0x87, -0x68,0x89,0x99,0x86,0x67,0x63,0x98,0x55, -0x77,0xa8,0x76,0x79,0x7b,0x97,0xb7,0xc5, -0x77,0x46,0x47,0x86,0x85,0xc8,0xac,0x5a, -0x99,0x97,0x8a,0xb8,0x58,0x64,0x93,0x77, -0x66,0x57,0x89,0xa6,0xab,0x8a,0x59,0xa9, -0x76,0x74,0x28,0x56,0x78,0x67,0x79,0x9a, -0xb9,0x99,0xba,0x99,0xa7,0xb2,0x03,0x66, -0x74,0x45,0xba,0xa6,0x8c,0xa9,0x97,0xca, -0xa6,0x45,0x60,0x43,0x73,0x35,0xaa,0xac, -0xae,0xed,0xb6,0x9b,0x6b,0x62,0x41,0x35, -0x27,0x23,0xa8,0x9b,0xaf,0xdc,0x88,0xc9, -0x86,0x72,0x00,0x66,0x31,0x29,0xdd,0xaa, -0xdf,0xdc,0x88,0x98,0x73,0x34,0x33,0x14, -0x88,0x58,0xcf,0xfb,0x8a,0xca,0x75,0x57, -0x97,0x30,0x07,0xa7,0x43,0xbf,0xe8,0x8c, -0xda,0x86,0x87,0x64,0x44,0x21,0x69,0x96, -0x5a,0xfe,0x98,0xac,0xa6,0x45,0x76,0x66, -0x62,0x16,0xca,0x51,0x9f,0xe9,0x79,0xba, -0x74,0x37,0x88,0x64,0x25,0xba,0x52,0x5e, -0xfa,0x56,0xcc,0x95,0x56,0x86,0x44,0x78, -0x77,0x77,0xa9,0x76,0x7a,0xa7,0x67,0x9a, -0x87,0x89,0x98,0x86,0x33,0x7a,0x95,0x29, -0xed,0x97,0x8a,0xb8,0x54,0x77,0x75,0x46, -0x99,0x76,0x89,0x98,0x78,0x98,0x88,0x78, -0x87,0x87,0x88,0x74,0x04,0xcb,0x61,0x8f, -0xda,0x57,0xc9,0x75,0x47,0x67,0x65,0xaa, -0x87,0x78,0x78,0x96,0x66,0x78,0x88,0x89, -0xa9,0x77,0x79,0x98,0x41,0x5c,0xa5,0x19, -0xfd,0x64,0x8b,0x88,0x44,0x88,0x75,0x69, -0x86,0x57,0xb8,0x48,0xba,0x75,0x89,0x97, -0x77,0x89,0x88,0x73,0x49,0x96,0x34,0xdc, -0x97,0x9c,0x97,0x65,0x87,0x55,0x58,0xa9, -0x64,0x9c,0x85,0x48,0xb9,0x76,0x9a,0x76, -0x78,0x98,0x86,0x68,0x5c,0x94,0x37,0xfa, -0x78,0xbd,0x86,0x67,0x74,0x46,0x68,0x86, -0x57,0xb9,0x76,0x7b,0xa6,0x5a,0xb7,0x56, -0x88,0x76,0x79,0x61,0x6c,0x63,0x39,0xd7, -0x89,0xdb,0x78,0x88,0x74,0x54,0x67,0x56, -0x69,0xb8,0x87,0xbb,0x67,0x8a,0x88,0x97, -0x76,0x58,0x98,0x51,0x6f,0x81,0x4d,0xf5, -0x5c,0xe9,0x5a,0xb8,0x64,0x67,0x55,0x67, -0x77,0x78,0xa7,0x69,0xb9,0x58,0xa8,0x88, -0x88,0x66,0x77,0x73,0x3a,0xb3,0x29,0xe8, -0x38,0xda,0x57,0xca,0x66,0x77,0x44,0x57, -0x65,0x78,0xa8,0x89,0xaa,0x86,0x9a,0x86, -0x8b,0x85,0x68,0x76,0x41,0x7d,0x41,0x7c, -0xe6,0x4e,0xf7,0x3b,0xc7,0x59,0x95,0x35, -0x67,0x66,0x79,0xa9,0x76,0x9a,0x66,0xaa, -0x77,0xa9,0x77,0x77,0x57,0x63,0x6b,0x63, -0x7d,0xb4,0x8e,0xc6,0x6b,0xa5,0x59,0x85, -0x56,0x66,0x56,0x79,0x98,0x8a,0xa9,0x78, -0xa8,0x78,0x99,0x77,0x77,0x55,0x23,0xc7, -0x07,0xfa,0x39,0xfa,0x68,0xb9,0x56,0x98, -0x54,0x67,0x76,0x66,0x79,0xa8,0x67,0xaa, -0x77,0xba,0x76,0x99,0x65,0x78,0x55,0x63, -0x5a,0x54,0xbc,0x76,0xcc,0x87,0x89,0x75, -0x68,0x85,0x56,0x76,0x54,0x6b,0xb6,0x7a, -0xb9,0x68,0xca,0x68,0xb9,0x55,0x97,0x45, -0x52,0x9b,0x38,0xdd,0x78,0xfd,0x77,0x89, -0x76,0x67,0x85,0x47,0x98,0x55,0x8c,0xa5, -0x7a,0x86,0x78,0x99,0x97,0x78,0x86,0x78, -0x65,0x50,0x4d,0x61,0x9d,0x96,0xae,0xa7, -0x78,0x85,0x45,0x76,0x44,0x6a,0x74,0x4b, -0xd8,0x58,0xba,0x65,0x79,0xa8,0x68,0x99, -0x56,0x98,0x50,0x0b,0xd3,0x28,0xed,0x68, -0xdd,0x95,0x8a,0x75,0x46,0x65,0x78,0x89, -0x77,0xab,0x75,0x98,0x78,0x88,0x9a,0x95, -0x7a,0x95,0x58,0x76,0x11,0xbd,0x53,0x8d, -0xc9,0x89,0xaa,0x65,0x67,0x73,0x36,0x87, -0x79,0xb9,0x87,0x69,0x85,0x37,0xbb,0x98, -0xab,0xa7,0x56,0x76,0x54,0x47,0x63,0x6b, -0xb8,0x89,0xdc,0x98,0x88,0x85,0x43,0x67, -0x66,0x88,0x8c,0xd9,0x54,0x8a,0x64,0x37, -0xbb,0xa8,0x8c,0xb6,0x44,0x77,0x77,0x54, -0x22,0xcf,0x52,0xaf,0xe8,0x59,0x98,0x74, -0x45,0x78,0x65,0x7b,0xcb,0x87,0x57,0x87, -0x65,0x5b,0xea,0x67,0xa9,0x65,0x55,0x79, -0x97,0x62,0x4c,0xd6,0x46,0xce,0xc8,0x56, -0x99,0x75,0x45,0x88,0x78,0x9b,0xba,0x73, -0x48,0x86,0x55,0x9b,0xca,0x97,0x78,0x86, -0x56,0x89,0x86,0x42,0x3a,0xd9,0x65,0x9d, -0xb8,0x65,0x57,0x76,0x44,0x58,0xa9,0x89, -0xb9,0x65,0x56,0x77,0x67,0x8a,0xba,0x88, -0x87,0x78,0x79,0x99,0x87,0x41,0x5c,0xda, -0x65,0x8c,0xdb,0x84,0x58,0x76,0x54,0x79, -0x9a,0xa9,0x99,0x65,0x46,0x78,0x68,0x8a, -0x99,0x89,0x98,0x87,0x77,0x77,0x87,0x52, -0x49,0xba,0x85,0x69,0xbb,0x96,0x45,0x67, -0x78,0x76,0x68,0xaa,0xa8,0x42,0x47,0x99, -0x75,0x6a,0xba,0x98,0x99,0x98,0x77,0x77, -0x65,0x33,0x5a,0xca,0x77,0x9c,0xd9,0x65, -0x66,0x66,0x77,0x67,0x89,0xaa,0x97,0x54, -0x47,0x98,0x77,0x7a,0xbb,0xa9,0x87,0x87, -0x77,0x77,0x76,0x42,0x58,0x9a,0x86,0x78, -0x9a,0xa9,0x86,0x77,0x78,0x87,0x77,0x88, -0x86,0x22,0x48,0xaa,0x86,0x8a,0xcc,0xb9, -0x87,0x87,0x98,0x76,0x64,0x22,0x7b,0xda, -0x75,0x7a,0xbb,0xa8,0x76,0x67,0x87,0x55, -0x77,0x9a,0x84,0x24,0x8a,0xa9,0x78,0xab, -0xa9,0x98,0x66,0x77,0x77,0x56,0x98,0x42, -0x48,0xcb,0x74,0x69,0xdc,0x96,0x67,0x77, -0x67,0x75,0x57,0x99,0x72,0x14,0xad,0xa8, -0x8a,0xdc,0x99,0x98,0x65,0x79,0x98,0x73, -0x02,0x5b,0xea,0x76,0x79,0xdd,0xb8,0x66, -0x56,0x77,0x77,0x78,0x75,0x44,0x69,0xba, -0x99,0x9b,0xb9,0x87,0x76,0x66,0x67,0x87, -0x75,0x43,0x49,0xcb,0x84,0x48,0xdf,0xa5, -0x55,0x78,0x75,0x56,0x56,0x78,0x64,0x34, -0x98,0xc9,0x9a,0xbb,0xa8,0x77,0x76,0x89, -0x96,0x00,0x28,0xee,0x97,0x8a,0xba,0x88, -0x86,0x65,0x57,0x76,0x79,0x86,0x22,0x7c, -0xd9,0x79,0xbb,0xa7,0x79,0x86,0x57,0x97, -0x66,0x53,0x38,0xcc,0x95,0x6c,0xeb,0x64, -0x46,0x76,0x67,0x78,0x89,0xa6,0x00,0x7d, -0xb7,0x46,0xde,0xb6,0x68,0x98,0x77,0x87, -0x66,0x64,0x23,0x8e,0xfa,0x99,0xba,0x65, -0x67,0x78,0xab,0xa6,0x00,0x39,0xdb,0x88, -0xbc,0xa7,0x56,0x54,0x46,0x89,0x89,0xa8, -0x42,0x5b,0xb8,0x7a,0xcb,0x74,0x57,0x66, -0x78,0x77,0x8a,0x73,0x15,0xbb,0x88,0x99, -0xba,0x85,0x25,0x87,0x76,0x79,0x87,0x9b, -0x62,0x49,0xac,0xcd,0xb7,0x56,0x76,0x68, -0xbc,0xa9,0x30,0x17,0xdb,0x77,0xee,0x84, -0x44,0x57,0x88,0x66,0xab,0x98,0x52,0x03, -0x9d,0xcb,0xbb,0x86,0x77,0x66,0x78,0x89, -0x99,0x20,0x4e,0xc6,0x36,0xde,0x96,0x44, -0x79,0x65,0x79,0x98,0x78,0x84,0x22,0x7c, -0xaa,0xcc,0x97,0x66,0x55,0x89,0x9a,0xa5, -0x03,0xac,0x86,0x8c,0xd9,0x44,0x68,0x86, -0x67,0xab,0x78,0x83,0x04,0xaa,0x69,0xfc, -0x65,0x67,0x79,0xa8,0x79,0x84,0x26,0xc9, -0x66,0xae,0xb5,0x56,0x79,0x75,0x68,0x99, -0x89,0x72,0x27,0x96,0x7b,0xb9,0x76,0x78, -0x77,0x88,0x98,0x62,0x17,0xea,0x34,0xcf, -0xa4,0x67,0x99,0x66,0x79,0x98,0x86,0x23, -0xba,0x56,0xce,0x95,0x67,0x88,0x77,0x89, -0x96,0x01,0xad,0x62,0x6e,0xf7,0x48,0x98, -0x75,0x58,0xa8,0x68,0x98,0x55,0x79,0x67, -0x89,0xa9,0x89,0x87,0x67,0x88,0x75,0x14, -0xcc,0x43,0xae,0xc5,0x59,0x97,0x66,0x8a, -0x95,0x6a,0x95,0x48,0xa8,0x78,0xaa,0x87, -0x88,0x76,0x89,0x87,0x52,0x5c,0x94,0x7c, -0xc8,0x68,0x87,0x64,0x68,0x97,0x68,0xba, -0x55,0x7a,0x84,0x4b,0xc7,0x5a,0xa8,0x68, -0x88,0x77,0x50,0x4e,0xc1,0x5d,0xc5,0x4b, -0xa5,0x58,0x87,0x77,0x87,0xa8,0x47,0x88, -0x55,0x9b,0x87,0x8a,0x97,0x88,0x88,0x76, -0x34,0xda,0x17,0xec,0x46,0xc9,0x46,0x77, -0x67,0x88,0x99,0x87,0x77,0x75,0x57,0xa8, -0x6a,0xb9,0x98,0x98,0x78,0x63,0x28,0xb4, -0x3b,0xf9,0x4b,0xc6,0x58,0x85,0x67,0x78, -0x66,0x89,0x86,0x79,0x87,0x66,0x99,0x88, -0x88,0x56,0x88,0x62,0x5c,0x63,0x6e,0xb4, -0x9d,0x85,0x7a,0x74,0x67,0x88,0x77,0x87, -0x89,0x66,0x8a,0x75,0x9b,0x87,0x98,0x66, -0x98,0x74,0x28,0xa5,0x4b,0xe8,0x5d,0xc6, -0x69,0x84,0x48,0x76,0x77,0x57,0xb6,0x5b, -0xa6,0x78,0x86,0x8a,0x87,0x9a,0x88,0x48, -0x94,0x49,0xa8,0x6b,0xb6,0x8b,0x86,0x67, -0x65,0x87,0x99,0x77,0x89,0x75,0x99,0x47, -0xb9,0x69,0xb8,0x68,0x88,0x53,0x6c,0x52, -0x8d,0x54,0xec,0x57,0xb8,0x67,0x87,0x46, -0x88,0x65,0x99,0x75,0x8b,0x64,0xba,0x58, -0xa8,0x79,0x97,0x66,0x62,0x69,0x35,0xd9, -0x7b,0xb9,0x88,0x97,0x67,0x75,0x58,0x87, -0x78,0x88,0x97,0x89,0x98,0x78,0x98,0x9a, -0x77,0x97,0x67,0x76,0x58,0x75,0x79,0x79, -0xa9,0xa9,0x68,0x76,0x86,0x66,0x78,0x78, -0x89,0x87,0x77,0x79,0x87,0x88,0x79,0x77, -0x86,0x88,0x77,0x98,0x77,0x66,0x87,0x66, -0x89,0x78,0x89,0x89,0x97,0x78,0x76,0x87, -0x66,0x87,0x78,0x86,0x77,0x99,0x98,0x88, -0x87,0x79,0x87,0x89,0x77,0x77,0x86,0x77, -0x76,0x78,0x99,0x87,0x78,0x77,0x98,0x77, -0x87,0x67,0x88,0x99,0x67,0x86,0x77,0x87, -0x89,0x76,0x78,0x87,0x88,0x88,0x88,0x78, -0x76,0x77,0x78,0x87,0x7a,0x98,0x76,0x67, -0x77,0x77,0x87,0x69,0x89,0x98,0x78,0x99, -0x87,0x89,0x88,0x78,0x88,0x75,0x67,0x89, -0x88,0x77,0x76,0x78,0x98,0x77,0x88,0x87, -0x77,0x78,0x87,0x77,0x78,0x77,0x77,0x77, -0x88,0x87,0x78,0x87,0x78,0x77,0x89,0x87, -0x78,0x88,0x87,0x56,0x88,0x78,0x89,0x99, -0x77,0x77,0x77,0x87,0x77,0x88,0x89,0x76, -0x78,0x9a,0x87,0x89,0x97,0x77,0x98,0x86, -0x77,0x88,0x87,0x89,0x76,0x78,0x98,0x66, -0x78,0x87,0x77,0x78,0x77,0x68,0x99,0x78, -0x98,0x67,0x79,0x98,0x77,0x87,0x76,0x77, -0x88,0x86,0x78,0x87,0x77,0x66,0x77,0x88, -0x88,0x88,0x77,0x87,0x67,0x77,0x67,0x88, -0x9a,0x87,0x87,0x89,0x87,0x78,0x98,0x87, -0x77,0x77,0x77,0x88,0x88,0x88,0x76,0x67, -0x98,0x66,0x77,0x77,0x77,0x89,0x77,0x88, -0x88,0x88,0x88,0x76,0x79,0x98,0x77,0x78, -0x98,0x89,0x88,0x66,0x78,0x98,0x87,0x76, -0x67,0x89,0x89,0x99,0x87,0x66,0x68,0x77, -0x76,0x78,0x98,0x77,0x87,0x99,0x99,0x87, -0x78,0x87,0x79,0x77,0x77,0x78,0x89,0x89, -0x87,0x78,0x88,0x66,0x77,0x98,0x67,0x87, -0x67,0x76,0x89,0x79,0x98,0x76,0x78,0x89, -0x86,0x68,0x87,0x68,0x78,0x87,0x68,0x87, -0x78,0x87,0x77,0x89,0x88,0x87,0x87,0x76, -0x78,0x87,0x66,0x78,0x89,0x98,0x88,0x88, -0x8a,0x88,0x78,0x88,0x77,0x78,0x77,0x68, -0x89,0x88,0x87,0x87,0x78,0x76,0x77,0x88, -0x77,0x88,0x77,0x76,0x78,0x89,0x88,0x77, -0x98,0x98,0x77,0x68,0x98,0x78,0x87,0x75, -0x67,0x88,0x88,0x78,0x67,0x89,0x98,0x77, -0x87,0x56,0x87,0x76,0x86,0x78,0x87,0x98, -0x89,0x89,0x99,0x87,0x78,0x98,0x78,0x86, -0x87,0x77,0x8b,0x79,0x99,0x66,0x66,0x86, -0x78,0x97,0x76,0x87,0x98,0x78,0x5a,0x97, -0x99,0x87,0x99,0x78,0xa7,0x46,0xa6,0x68, -0x78,0x76,0x76,0x79,0x99,0x99,0x77,0x9a, -0x77,0x96,0x76,0x87,0x56,0x78,0x65,0x77, -0x99,0xb8,0x88,0x9a,0xa9,0xa9,0x76,0x65, -0x75,0x78,0x87,0x57,0x79,0x6b,0x9c,0x79, -0x88,0x89,0x85,0x78,0x95,0x35,0x86,0x84, -0x54,0xa9,0xb9,0x9a,0xbb,0x88,0x9c,0x95, -0x35,0x78,0x74,0x44,0x78,0x84,0x79,0xec, -0x99,0xbb,0xaa,0x67,0x88,0x64,0x12,0x06, -0x86,0x41,0x7e,0xfc,0xaa,0xfd,0xa3,0x47, -0x99,0x21,0x48,0x71,0x56,0xb7,0x87,0xbf, -0xfa,0x98,0x99,0x54,0x37,0x76,0x42,0x04, -0x7d,0x76,0x8c,0xfa,0x87,0x9d,0x77,0x18, -0x76,0x65,0x60,0x68,0xa8,0x78,0xbe,0xa8, -0x87,0x87,0x85,0x56,0x77,0x89,0x77,0x66, -0x68,0x86,0x77,0x8a,0x99,0x88,0x9a,0x87, -0x78,0x98,0x61,0x03,0xac,0xb8,0x9d,0xeb, -0x74,0x58,0x95,0x44,0x38,0xb9,0x67,0xbc, -0xba,0x74,0x34,0x77,0x76,0x9e,0xdb,0x67, -0x98,0x77,0x53,0x57,0x76,0x69,0xab,0xbc, -0xa7,0x77,0x54,0x58,0x79,0xa8,0x79,0xa8, -0x40,0x27,0x99,0x89,0xbc,0xb8,0x56,0x89, -0x64,0x35,0x7a,0x99,0xaa,0xb9,0x76,0x42, -0x25,0x88,0x9b,0xdd,0xc9,0x65,0x66,0x53, -0x26,0x9a,0x76,0x7a,0xb9,0x75,0x79,0x97, -0x67,0x99,0x98,0x88,0x88,0x86,0x31,0x48, -0x98,0x79,0xee,0xd9,0x66,0x77,0x76,0x52, -0x25,0x8b,0xb9,0xab,0xa9,0x76,0x43,0x35, -0x77,0x57,0xce,0xda,0x99,0x87,0x77,0x54, -0x69,0x97,0x55,0xaa,0x85,0x46,0x9b,0xba, -0x86,0x68,0x99,0x75,0x69,0x78,0x88,0x41, -0x15,0xbb,0x76,0x9c,0xca,0x98,0x77,0x88, -0x86,0x54,0x57,0x87,0x89,0x98,0x87,0x88, -0x88,0x88,0x86,0x55,0x8a,0x87,0x89,0x98, -0x88,0x76,0x67,0x77,0x88,0x88,0x66,0x77, -0x77,0x77,0x88,0x89,0x98,0x89,0x98,0x87, -0x77,0x77,0x77,0x77,0x88,0x87,0x67,0x88, -0x98,0x87,0x77,0x77,0x66,0x89,0x99,0x88, -0x88,0x88,0x77,0x87,0x67,0x77,0x77,0x77, -0x77,0x77,0x99,0x89,0x88,0x88,0x88,0x87, -0x76,0x67,0x77,0x66,0x77,0x66,0x78,0x89, -0x87,0x88,0x88,0x88,0x89,0x87,0x88,0x87, -0x78,0x67,0x77,0x88,0x89,0x87,0x77,0x77, -0x77,0x88,0x88,0x98,0x88,0x98,0x78,0x87, -0x88,0x87,0x77,0x78,0x87,0x78,0x76,0x78, -0x77,0x88,0x78,0x88,0x99,0x89,0x98,0x77, -0x77,0x76,0x67,0x77,0x77,0x67,0x77,0x67, -0x77,0x88,0x88,0x88,0x88,0x98,0x99,0x98, -0x89,0x87,0x77,0x77,0x66,0x77,0x78,0x77, -0x78,0x77,0x88,0x78,0x88,0x89,0x77,0x87, -0x78,0x87,0x78,0x87,0x76,0x78,0x87,0x78, -0x87,0x77,0x77,0x87,0x77,0x88,0x88,0x99, -0x97,0x88,0x78,0x86,0x67,0x76,0x77,0x67, -0x86,0x78,0x77,0x89,0x88,0x87,0x88,0x88, -0x99,0x98,0x98,0x88,0x76,0x77,0x76,0x77, -0x88,0x87,0x77,0x77,0x98,0x77,0x88,0x88, -0x87,0x87,0x88,0x77,0x79,0x98,0x87,0x78, -0x77,0x67,0x77,0x77,0x78,0x76,0x77,0x87, -0x77,0x88,0x98,0x88,0x87,0x89,0x76,0x87, -0x67,0x77,0x77,0x67,0x77,0x67,0x87,0x78, -0x78,0x99,0x88,0x88,0x99,0x88,0x77,0x78, -0x87,0x77,0x89,0x98,0x87,0x87,0x88,0x76, -0x77,0x77,0x77,0x78,0x78,0x87,0x77,0x99, -0x99,0x88,0x98,0x78,0x88,0x88,0x77,0x87, -0x67,0x77,0x77,0x77,0x88,0x77,0x87,0x88, -0x76,0x78,0x87,0x87,0x78,0x88,0x87,0x77, -0x98,0x88,0x77,0x88,0x77,0x77,0x88,0x77, -0x76,0x67,0x77,0x78,0x78,0x99,0x88,0x87, -0x89,0x88,0x88,0x77,0x88,0x78,0x77,0x77, -0x77,0x87,0x78,0x77,0x88,0x66,0x89,0x98, -0x87,0x88,0x78,0x87,0x77,0x78,0x98,0x87, -0x88,0x98,0x66,0x67,0x77,0x76,0x67,0x77, -0x77,0x66,0x78,0x89,0x88,0x89,0x88,0x98, -0x98,0x88,0x87,0x77,0x77,0x88,0x88,0x78, -0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x78, -0x88,0x77,0x7a,0xaa,0xa9,0x88,0x87,0x65, -0x77,0x88,0x88,0x66,0x89,0x9a,0x84,0x98, -0x87,0x66,0x45,0x65,0x76,0x87,0x89,0x99, -0xac,0xb9,0x85,0x57,0x47,0x65,0x54,0x78, -0x77,0xaa,0x9b,0xbc,0xbb,0x96,0x43,0x42, -0x43,0x45,0x67,0x89,0xac,0xab,0x8b,0xa9, -0x97,0x78,0x89,0x8a,0xa8,0x85,0x65,0x56, -0x56,0x55,0x55,0x89,0x89,0x86,0x99,0xbb, -0xa8,0xa9,0x79,0xaa,0x97,0x78,0x66,0x45, -0x68,0x87,0x55,0x44,0x54,0x66,0x68,0x7a, -0xbb,0xaa,0x99,0x9a,0xbd,0xa8,0x55,0x47, -0x66,0x55,0x44,0x45,0x68,0x8a,0x7a,0x97, -0x75,0x89,0x88,0x99,0xaa,0x9a,0x78,0x88, -0x89,0x77,0x54,0x46,0x77,0x99,0xa9,0x78, -0x67,0x78,0x85,0x55,0x66,0x98,0xa9,0x98, -0x88,0x89,0xaa,0x99,0x99,0x88,0x77,0x87, -0x64,0x54,0x58,0x89,0x66,0x45,0x69,0xcd, -0xb8,0x67,0x88,0x97,0x65,0x46,0x78,0x9a, -0xb9,0xb9,0x87,0x79,0xa9,0xaa,0x76,0x65, -0x86,0x65,0x24,0x22,0x54,0x69,0x9a,0xba, -0xc9,0xdc,0x98,0x66,0x97,0x73,0x02,0x28, -0xbb,0xc6,0xb7,0x88,0x7a,0x98,0x87,0x76, -0x78,0x58,0x88,0x85,0x63,0x13,0x59,0xcc, -0xb9,0x89,0xab,0xab,0xa9,0xa6,0x10,0x01, -0x6a,0xff,0xdc,0x98,0x78,0x76,0x55,0x67, -0x77,0x79,0x98,0x87,0x55,0x67,0x9a,0xab, -0x99,0x88,0x87,0x89,0x98,0x50,0x12,0x29, -0xdd,0xdb,0xa5,0x68,0x66,0x68,0x57,0x87, -0x88,0x89,0x76,0x43,0x57,0x9a,0xb9,0x98, -0x98,0x76,0x65,0x88,0x9a,0x60,0x03,0x7e, -0xfe,0xa7,0x75,0x56,0x78,0x99,0x88,0x67, -0x66,0x99,0x85,0x54,0x59,0xbc,0xb9,0x88, -0x88,0x88,0x77,0x89,0x88,0x40,0x36,0xad, -0xee,0x87,0x41,0x46,0x99,0xa9,0x9a,0x77, -0x45,0x79,0x98,0x74,0x57,0x99,0xa9,0x56, -0x88,0x99,0x87,0x77,0x77,0x98,0x11,0x68, -0xef,0xb7,0x46,0x46,0x88,0x89,0x87,0x99, -0x77,0x66,0x77,0x56,0x7a,0xba,0xa6,0x55, -0x68,0xaa,0xa8,0x77,0x88,0x96,0x03,0x79, -0xee,0xb8,0x44,0x25,0x9a,0xaa,0x97,0x76, -0x78,0x88,0x75,0x39,0xbb,0xc8,0x42,0x56, -0x9b,0xa7,0x77,0x67,0x88,0x89,0x60,0x3a, -0xad,0xe7,0x37,0x76,0x89,0x67,0x97,0x69, -0x87,0x78,0x88,0x55,0x67,0xbb,0xa7,0x64, -0x58,0x8a,0xa9,0x77,0x77,0x88,0x41,0x78, -0xdf,0xb8,0x46,0x56,0xa8,0x88,0x98,0x76, -0x65,0x78,0x9a,0x76,0x77,0x78,0x87,0x79, -0x87,0x76,0x67,0x98,0x88,0x66,0x87,0x23, -0xab,0xad,0x84,0x88,0x66,0x86,0x8a,0x86, -0x77,0x67,0x88,0x75,0x57,0x9b,0xa8,0x76, -0x77,0x98,0x98,0x98,0x77,0x77,0x77,0x22, -0xae,0xcb,0x71,0x3a,0xa8,0x97,0x69,0x96, -0x68,0x77,0x99,0x75,0x67,0x89,0x98,0x67, -0x89,0x97,0x57,0x9a,0x87,0x65,0x8a,0x71, -0x17,0xdd,0xb6,0x35,0xaa,0x76,0x79,0xb9, -0x54,0x68,0x97,0x65,0x35,0xde,0x97,0x66, -0x7a,0x74,0x68,0xbb,0x85,0x68,0x76,0x78, -0x88,0x42,0x8d,0x97,0x97,0x59,0xc8,0x58, -0x87,0x77,0x78,0xa8,0x67,0x63,0x5b,0xdb, -0x96,0x57,0x76,0x58,0xaa,0xb9,0x56,0x67, -0x77,0x86,0x65,0xbb,0x94,0x47,0x9b,0xa8, -0x79,0x86,0x56,0x89,0x98,0x77,0x53,0x4c, -0xb6,0x9b,0x88,0x95,0x48,0x86,0x99,0x7a, -0x95,0x58,0x87,0x87,0x43,0x9e,0x95,0x78, -0x8a,0x95,0x69,0x87,0x67,0x78,0x87,0x63, -0x17,0xeb,0x87,0x78,0x86,0x46,0xaa,0x88, -0x68,0x97,0x57,0x89,0x96,0x45,0x99,0x77, -0x8a,0xb9,0x65,0x68,0x98,0x77,0x98,0x65, -0x21,0x7f,0xc8,0xa9,0x77,0x63,0x5a,0xa9, -0x98,0x77,0x76,0x78,0x64,0x6d,0xd8,0x68, -0x88,0x75,0x68,0xa9,0x97,0x87,0x65,0x78, -0x98,0x64,0x8c,0xa6,0x58,0xba,0x86,0x79, -0x85,0x68,0x97,0x78,0x88,0x43,0x69,0x9b, -0xa7,0x78,0x66,0x55,0x7b,0xb9,0x99,0x77, -0x65,0x10,0x5e,0xca,0xaa,0xa8,0x54,0x67, -0x78,0x89,0xa9,0x77,0x76,0x54,0x49,0xb9, -0x9a,0xa9,0x66,0x57,0x76,0x78,0xaa,0x88, -0x78,0x76,0x66,0x46,0xbb,0x68,0xa8,0x98, -0x67,0x88,0x79,0x99,0x98,0x85,0x28,0x95, -0x7a,0x9a,0xa6,0x79,0x67,0x75,0x78,0x76, -0x89,0x78,0x76,0x56,0x77,0x68,0x98,0x79, -0x99,0x96,0x68,0x77,0x76,0x79,0x85,0x7a, -0x87,0x77,0x89,0x97,0x78,0x98,0x67,0x88, -0x77,0x78,0x88,0x88,0x88,0x88,0x77,0x66, -0x76,0x68,0x98,0xa9,0x79,0x97,0x77,0x86, -0x57,0x87,0x77,0x88,0x87,0x79,0x88,0x87, -0x78,0x87,0x88,0x77,0x76,0x67,0x87,0x78, -0x88,0x77,0x78,0x98,0x88,0x88,0x77,0x87, -0x77,0x78,0x99,0x77,0x89,0x87,0x77,0x88, -0x77,0x88,0x88,0x88,0x87,0x66,0x78,0x88, -0x88,0x88,0x77,0x77,0x77,0x88,0x88,0x78, -0x77,0x77,0x76,0x87,0x78,0x87,0x77,0x87, -0x88,0x67,0x87,0x78,0x78,0x87,0x77,0x66, -0x77,0x89,0x77,0x77,0x78,0x78,0x89,0x88, -0x88,0x88,0x87,0x88,0x88,0x88,0xa9,0x87, -0x88,0x78,0x77,0x78,0x98,0x88,0x98,0x78, -0x86,0x78,0x78,0x88,0x77,0x77,0x78,0x77, -0x88,0x98,0x88,0x88,0x77,0x67,0x77,0x88, -0x77,0x88,0x77,0x77,0x77,0x78,0x88,0x67, -0x86,0x67,0x78,0x88,0x87,0x77,0x87,0x78, -0x88,0x76,0x78,0x87,0x79,0x87,0x78,0x77, -0x89,0x88,0x88,0x88,0x77,0x78,0x78,0x98, -0x77,0x77,0x77,0x67,0x98,0x88,0x76,0x68, -0x87,0x77,0x77,0x66,0x87,0x78,0x87,0x78, -0x88,0x88,0x89,0x87,0x87,0x77,0x77,0x88, -0x88,0x98,0x77,0x76,0x68,0x86,0x78,0x87, -0x77,0x78,0x88,0x88,0x77,0x88,0x78,0x88, -0x88,0x77,0x89,0x88,0x87,0x78,0x87,0x77, -0x88,0x88,0x88,0x77,0x77,0x68,0x78,0x99, -0x77,0x66,0x89,0x76,0x77,0x77,0x78,0x88, -0x87,0x77,0x87,0x78,0x89,0x86,0x68,0x87, -0x67,0x68,0x87,0x78,0x88,0x88,0x77,0x78, -0x77,0x89,0x76,0x68,0x87,0x87,0x77,0x78, -0x88,0x88,0x87,0x88,0x88,0x88,0x88,0x77, -0x98,0x77,0x78,0x88,0x88,0x88,0x88,0x77, -0x88,0x78,0x88,0x76,0x78,0x87,0x77,0x77, -0x77,0x76,0x78,0x77,0x88,0x78,0x87,0x88, -0x67,0x88,0x77,0x87,0x77,0x87,0x79,0x88, -0x87,0x78,0x88,0x99,0x87,0x77,0x79,0x87, -0x77,0x78,0x77,0x78,0x77,0x78,0x88,0x87, -0x77,0x78,0x88,0x88,0x77,0x78,0x88,0x78, -0x87,0x77,0x78,0x89,0x99,0x98,0x87,0x78, -0x77,0x87,0x77,0x76,0x67,0x77,0x77,0x89, -0x98,0x77,0x88,0x88,0x88,0x87,0x75,0x67, -0x67,0x96,0x77,0x57,0x88,0x9a,0x9a,0xa9, -0xa9,0x79,0x75,0x55,0x66,0x67,0x67,0x78, -0x99,0x98,0x98,0x88,0x88,0xa8,0x88,0x67, -0x86,0x66,0x88,0x77,0x88,0x77,0x79,0xa7, -0x78,0x98,0x89,0x86,0x88,0x66,0x56,0x78, -0x66,0x88,0x76,0x78,0x87,0x88,0x99,0x89, -0xa9,0x88,0x75,0x57,0x75,0x55,0x67,0x67, -0x88,0x87,0x99,0x99,0xa9,0xa9,0x78,0x74, -0x57,0x65,0x76,0x57,0x87,0x88,0x89,0x89, -0x97,0x89,0x89,0x98,0x89,0x85,0x67,0x66, -0x78,0x88,0x76,0x99,0x78,0x98,0x99,0x99, -0x98,0x98,0x67,0x66,0x77,0x75,0x67,0x66, -0x78,0x88,0x88,0x88,0x89,0xa9,0xa8,0x87, -0x45,0x75,0x67,0x76,0x77,0x67,0x87,0x89, -0x87,0x9b,0xa9,0x99,0x88,0x75,0x67,0x65, -0x56,0x77,0x87,0x88,0x98,0x77,0x89,0xb9, -0xa9,0x88,0x77,0x65,0x66,0x66,0x67,0x75, -0x68,0x88,0x89,0x99,0xaa,0x9a,0x99,0xa9, -0x75,0x56,0x66,0x67,0x67,0x56,0x77,0x89, -0x98,0x89,0x99,0x89,0x99,0x87,0x66,0x67, -0x67,0x76,0x65,0x57,0x89,0x98,0x9a,0xaa, -0xaa,0x9a,0x98,0x77,0x56,0x65,0x46,0x76, -0x57,0x99,0x78,0x78,0x88,0x99,0x99,0x88, -0x77,0x75,0x56,0x77,0x66,0x77,0x77,0x77, -0x89,0xa9,0x89,0xa9,0x99,0x98,0x76,0x56, -0x75,0x66,0x67,0x67,0x76,0x79,0x98,0x9a, -0xa9,0x99,0xaa,0x87,0x65,0x67,0x76,0x66, -0x65,0x57,0x88,0x99,0xaa,0x9a,0x9a,0xaa, -0x97,0x65,0x56,0x56,0x76,0x76,0x67,0x77, -0x78,0x99,0x98,0x99,0x8a,0x99,0x77,0x76, -0x68,0x77,0x67,0x66,0x87,0x78,0x89,0x99, -0x98,0x99,0x88,0x87,0x67,0x75,0x66,0x56, -0x65,0x68,0x66,0x78,0x99,0x99,0x89,0x99, -0x9a,0x87,0x66,0x67,0x66,0x66,0x66,0x76, -0x77,0xab,0xa9,0x99,0x99,0xa8,0x88,0x65, -0x55,0x56,0x66,0x77,0x77,0x68,0x89,0xa9, -0x99,0x99,0x99,0x99,0x66,0x46,0x77,0x67, -0x76,0x67,0x76,0x99,0x99,0x89,0xaa,0x99, -0xa9,0x96,0x66,0x55,0x76,0x57,0x66,0x77, -0x88,0x98,0x9a,0xb9,0x9a,0xaa,0x97,0x55, -0x66,0x57,0x56,0x66,0x76,0x77,0x98,0xaa, -0xb9,0xa9,0xb9,0x95,0x55,0x55,0x45,0x56, -0x67,0x79,0x87,0x88,0x99,0x9b,0x9a,0xaa, -0x97,0x64,0x45,0x56,0x67,0x76,0x67,0x77, -0x88,0xaa,0xba,0xba,0xa9,0xa6,0x67,0x47, -0x24,0x27,0x47,0x87,0xa6,0xa7,0xa9,0xcb, -0xba,0xca,0xa8,0x65,0x46,0x36,0x46,0x58, -0x65,0xa7,0xa8,0xab,0xbb,0xaa,0xaa,0x97, -0x75,0x35,0x33,0x36,0x65,0x98,0xa9,0x98, -0x89,0xaa,0xbb,0xaa,0x86,0x74,0x42,0x45, -0x37,0x58,0x77,0x89,0xa7,0xa9,0xaa,0xba, -0xaa,0x66,0x55,0x43,0x45,0x24,0x47,0x78, -0xb9,0xd8,0x99,0xb9,0xcd,0xc9,0x75,0xa2, -0x53,0x36,0x46,0x4a,0x69,0x8b,0x9a,0xaa, -0xab,0xdb,0xa9,0x64,0xa3,0x32,0x62,0x44, -0x57,0x79,0xac,0xaa,0x99,0xb9,0xcc,0xb6, -0x77,0x64,0x32,0x42,0x44,0x78,0x69,0x9b, -0x98,0xac,0xb8,0xcc,0xa6,0x75,0x83,0x30, -0x44,0x25,0x39,0x58,0x9d,0xba,0xdd,0xda, -0xca,0xc9,0x55,0xa1,0x20,0x61,0x35,0x4a, -0x78,0xbb,0xda,0xdd,0xfa,0xa8,0xc7,0x05, -0x53,0x01,0x43,0x51,0x6b,0xa8,0xbf,0xed, -0xdc,0xea,0x76,0x86,0x05,0x23,0x02,0x36, -0x73,0xac,0xca,0xde,0xdd,0xba,0xb9,0x65, -0x40,0x33,0x30,0x26,0x58,0x6a,0xac,0xce, -0xec,0xcb,0xa9,0x86,0x52,0x03,0x54,0x24, -0x88,0x88,0xdd,0xed,0xdb,0xab,0x87,0x75, -0x54,0x02,0x25,0x22,0x6a,0xab,0xbd,0xdd, -0xba,0x89,0x76,0x54,0x56,0x02,0x37,0x53, -0x6a,0xdc,0xdc,0xdd,0xb9,0x77,0x75,0x43, -0x55,0x16,0x57,0x76,0x87,0xbc,0xcb,0xbb, -0xca,0x65,0x56,0x44,0x45,0x55,0x57,0x78, -0x88,0x9c,0xbb,0xba,0xb9,0x96,0x55,0x78, -0x76,0x42,0x58,0x86,0x67,0x8c,0xcb,0x98, -0x98,0x98,0x65,0x77,0x66,0x65,0x35,0x79, -0x87,0x8a,0xbc,0xa8,0x88,0x78,0x86,0x67, -0x78,0x75,0x36,0x77,0x78,0x76,0x8b,0xcc, -0xa8,0x68,0x87,0x66,0x77,0x68,0x75,0x67, -0x64,0x68,0x78,0x88,0x98,0x88,0x78,0x97, -0x88,0x78,0x98,0x77,0x88,0x89,0x77,0x87, -0x77,0x78,0x99,0x87,0x88,0x77,0x78,0x88, -0x98,0x77,0x77,0x66,0x77,0x87,0x68,0x87, -0x77,0x78,0x88,0x88,0x88,0x88,0x88,0x89, -0x97,0x67,0x76,0x78,0x89,0x97,0x66,0x66, -0x67,0x78,0x99,0x87,0x77,0x78,0x76,0x78, -0x87,0x77,0x67,0x76,0x78,0x77,0x88,0x98, -0x88,0x88,0x99,0x87,0x89,0x88,0x78,0x99, -0x77,0x66,0x66,0x67,0x88,0x88,0x87,0x77, -0x87,0x77,0x78,0x88,0x77,0x88,0x77,0x98, -0x78,0x88,0x88,0x77,0x76,0x77,0x66,0x77, -0x88,0x99,0x98,0x87,0x78,0x77,0x89,0x98, -0x88,0x76,0x67,0x66,0x67,0x88,0x66,0x67, -0x77,0x88,0x88,0x89,0x99,0x98,0x88,0x99, -0x88,0x88,0x87,0x88,0x88,0x97,0x66,0x76, -0x67,0x88,0x78,0x87,0x77,0x88,0x76,0x68, -0x88,0x78,0x88,0x88,0x78,0x77,0x78,0x77, -0x88,0x89,0x88,0x77,0x78,0x78,0x98,0x88, -0x76,0x67,0x76,0x77,0x88,0x87,0x78,0x78, -0x86,0x67,0x99,0x76,0x88,0x88,0x88,0x87, -0x78,0x99,0x88,0x88,0x88,0x87,0x78,0x87, -0x88,0x88,0x97,0x78,0x78,0x78,0x98,0x88, -0x88,0x77,0x67,0x66,0x77,0x76,0x77,0x78, -0x87,0x78,0x87,0x88,0x98,0x88,0x88,0x77, -0x77,0x78,0x77,0x87,0x88,0x76,0x67,0x76, -0x78,0x87,0x78,0x78,0x76,0x76,0x58,0x87, -0x67,0x88,0x78,0x88,0x88,0x78,0x89,0x88, -0x88,0x98,0x88,0x88,0x78,0x88,0x88,0x88, -0x77,0x77,0x76,0x77,0x88,0x78,0x88,0x77, -0x76,0x77,0x77,0x78,0x77,0x88,0x88,0x87, -0x78,0x98,0x88,0x98,0x77,0x78,0x87,0x79, -0x88,0x88,0x87,0x77,0x67,0x67,0x88,0x77, -0x99,0x77,0x77,0x67,0x88,0x77,0x77,0x79, -0x88,0x77,0x88,0x98,0x88,0x88,0x98,0x88, -0x98,0x77,0x88,0x87,0x88,0x87,0x76,0x76, -0x67,0x87,0x78,0x98,0x77,0x77,0x66,0x78, -0x78,0x66,0x88,0x88,0x78,0x78,0x88,0x88, -0x99,0x87,0x88,0x87,0x89,0x98,0x88,0x88, -0x77,0x66,0x77,0x78,0x88,0x89,0x88,0x77, -0x76,0x78,0x86,0x76,0x79,0x98,0x88,0x88, -0x78,0x89,0x88,0x99,0x87,0x77,0x77,0x88, -0x78,0x98,0x98,0x77,0x77,0x76,0x88,0x78, -0x88,0x78,0x67,0x77,0x67,0x77,0x77,0x77, -0x88,0x76,0x78,0x79,0x98,0x89,0x87,0x78, -0x77,0x78,0x97,0x89,0x88,0x87,0x76,0x67, -0x68,0x87,0x88,0x88,0x76,0x77,0x67,0x88, -0x67,0x77,0x89,0x97,0x79,0x98,0x98,0x79, -0x99,0x88,0x77,0x87,0x78,0x88,0x89,0x98, -0x87,0x66,0x76,0x67,0x78,0x88,0x86,0x78, -0x77,0x77,0x77,0x66,0x79,0x88,0x77,0x78, -0x78,0x89,0x98,0x88,0x77,0x78,0x78,0x99, -0x88,0x99,0x97,0x76,0x67,0x77,0x88,0x78, -0x77,0x77,0x76,0x67,0x77,0x66,0x68,0x89, -0x88,0x78,0x88,0x88,0x98,0x88,0x89,0x86, -0x78,0x77,0x87,0x78,0x99,0x78,0x77,0x66, -0x77,0x88,0x88,0x89,0x66,0x77,0x68,0x76, -0x77,0x88,0x88,0x87,0x77,0x88,0x88,0x89, -0x88,0x87,0x57,0x87,0x79,0x88,0x9a,0x88, -0x77,0x66,0x67,0x78,0x88,0x88,0x76,0x77, -0x77,0x87,0x76,0x67,0x88,0x89,0x87,0x78, -0x87,0x89,0x88,0x89,0x77,0x89,0x77,0x88, -0x79,0x88,0x99,0x76,0x66,0x77,0x77,0x88, -0x77,0x78,0x77,0x76,0x67,0x65,0x68,0x87, -0x86,0x68,0x97,0x78,0x99,0x98,0x76,0x77, -0x88,0x88,0x89,0x89,0x98,0x77,0x76,0x68, -0x87,0x89,0x88,0x87,0x77,0x77,0x78,0x66, -0x77,0x98,0x89,0x87,0x88,0x77,0x89,0x98, -0x78,0x87,0x77,0x88,0x89,0x88,0x89,0x98, -0x76,0x66,0x77,0x78,0x88,0x88,0x88,0x76, -0x68,0x76,0x66,0x78,0x88,0x88,0x77,0x78, -0x88,0x98,0x88,0x86,0x66,0x79,0x87,0x89, -0x88,0x88,0x77,0x76,0x78,0x88,0x88,0x88, -0x87,0x77,0x77,0x77,0x66,0x67,0x79,0x89, -0x87,0x88,0x88,0x89,0xa8,0x77,0x76,0x87, -0x99,0xa6,0x87,0x8a,0x78,0x77,0x85,0x69, -0x67,0x87,0x7a,0x99,0x57,0x87,0x77,0x66, -0x96,0x67,0x89,0x78,0x78,0x7a,0x97,0x78, -0x87,0x67,0x78,0x86,0x88,0x87,0x78,0x86, -0x58,0x68,0xaa,0x98,0xaa,0x87,0x75,0x67, -0x68,0x95,0x66,0x66,0x58,0xa7,0x9a,0xab, -0xa8,0x65,0x53,0x57,0x79,0xaa,0xa7,0x55, -0x59,0xad,0xdc,0xb9,0x94,0x41,0x03,0x67, -0xdc,0x79,0x85,0x43,0x59,0xdc,0xbd,0x9a, -0x72,0x10,0x13,0x8c,0xde,0xb6,0x44,0x57, -0xdf,0xdd,0xaa,0xb6,0x00,0x00,0x29,0xcd, -0xe9,0x78,0x88,0xbd,0xa9,0x88,0x76,0x21, -0x00,0x37,0xcd,0xdc,0x99,0x8a,0x9b,0xa9, -0x87,0x74,0x01,0x11,0x69,0xbe,0xed,0x9a, -0x87,0x86,0x78,0x78,0x73,0x20,0x03,0x7b, -0xcf,0xdb,0xb8,0x76,0x66,0x67,0x77,0x63, -0x13,0x47,0xac,0xbd,0xca,0x98,0x75,0x57, -0x8b,0xb8,0x10,0x01,0x59,0xde,0xdc,0x9a, -0x98,0x97,0x55,0x44,0x57,0x66,0x75,0x68, -0x9a,0xdd,0xaa,0x85,0x69,0x8b,0xcb,0x82, -0x00,0x14,0x9c,0xde,0xbb,0xa9,0x76,0x64, -0x45,0x68,0x99,0x77,0x64,0x77,0x9a,0xa8, -0x67,0x67,0xaa,0xab,0x97,0x50,0x01,0x37, -0x9b,0xfd,0xcc,0x97,0x54,0x44,0x66,0x8a, -0xaa,0x75,0x54,0x66,0x9a,0x9a,0x99,0x89, -0xa8,0x88,0x77,0x30,0x22,0x4b,0xcf,0xec, -0xa8,0x65,0x56,0x56,0x78,0x9b,0xb8,0x66, -0x44,0x56,0x9b,0xba,0xa8,0x88,0x99,0xa8, -0x76,0x01,0x23,0x9c,0xce,0xca,0x86,0x55, -0x56,0x57,0x89,0xbb,0xa8,0x43,0x12,0x57, -0xce,0xcc,0xb8,0x65,0x77,0x89,0x77,0x21, -0x43,0xae,0xae,0xc8,0x76,0x65,0x57,0x48, -0xa8,0xba,0x84,0x23,0x15,0xaa,0xcd,0xbb, -0x76,0x56,0x99,0xba,0x72,0x12,0x29,0xdb, -0xec,0x88,0x76,0x56,0x65,0x89,0x9c,0xba, -0x63,0x20,0x37,0x8d,0xeb,0xa8,0x65,0x69, -0x89,0xa7,0x40,0x14,0x5c,0xdd,0xda,0x87, -0x56,0x57,0x76,0x99,0x9b,0xa7,0x44,0x34, -0x79,0xbc,0xca,0x86,0x56,0x89,0x89,0x87, -0x12,0x42,0xcd,0xad,0xb8,0x86,0x55,0x68, -0x7b,0x99,0xc9,0x54,0x32,0x37,0x9a,0xed, -0xaa,0x66,0x67,0x99,0xa8,0x40,0x21,0x5d, -0xbd,0xd9,0x77,0x55,0x67,0x67,0x97,0xaa, -0x98,0x53,0x23,0x68,0xbf,0xcc,0xa6,0x54, -0x68,0x9b,0x98,0x20,0x43,0xae,0xae,0xa7, -0x84,0x55,0x78,0x6a,0x89,0xb8,0x86,0x35, -0x26,0x9a,0xeb,0xa9,0x57,0x79,0xa9,0xb9, -0x51,0x12,0x2a,0xea,0xfb,0x88,0x56,0x66, -0x76,0x98,0x8c,0x97,0x54,0x22,0x56,0xae, -0xbc,0xa6,0x65,0x78,0xa9,0x75,0x02,0x46, -0xed,0xde,0x77,0x64,0x65,0x88,0x69,0x7a, -0xb9,0xa6,0x23,0x03,0x79,0xed,0xcb,0x77, -0x54,0x78,0xa9,0x73,0x14,0x48,0xdb,0xeb, -0x67,0x45,0x79,0x97,0x98,0x69,0x97,0x75, -0x43,0x47,0x8b,0xcb,0xc9,0x65,0x56,0x9a, -0xb9,0x50,0x23,0x4b,0xcd,0xe8,0x87,0x45, -0x68,0x78,0x95,0x78,0x79,0x97,0x55,0x66, -0x9b,0xab,0x97,0x77,0x79,0x99,0x95,0x13, -0x14,0xba,0xff,0x98,0x64,0x54,0x77,0x89, -0x59,0xa8,0xa8,0x65,0x44,0x36,0xaa,0xdc, -0x99,0x66,0x78,0x89,0x71,0x24,0x39,0xcd, -0xfb,0x97,0x34,0x47,0x88,0xb9,0x88,0x78, -0x86,0x64,0x45,0x6a,0xcc,0xc9,0x76,0x56, -0x79,0x97,0x55,0x53,0x8a,0xbf,0xb9,0x74, -0x55,0x78,0x99,0x87,0x97,0x78,0x76,0x76, -0x66,0x89,0xbb,0x98,0x86,0x78,0x88,0x64, -0x33,0x38,0x9b,0xf9,0xa9,0x55,0x36,0x78, -0xa8,0x88,0x78,0x86,0x67,0x66,0x88,0x8a, -0xa9,0x99,0x88,0x76,0x75,0x34,0x34,0x9a, -0xee,0xaa,0x64,0x33,0x66,0xab,0x9a,0x96, -0x64,0x57,0x88,0x99,0x88,0xa8,0x79,0x88, -0x88,0x76,0x33,0x34,0xaa,0xcd,0xaa,0x85, -0x55,0x67,0x8a,0x88,0x95,0x46,0x55,0x88, -0x9b,0xaa,0xa7,0x67,0x88,0x9a,0x97,0x53, -0x32,0x5a,0xad,0xdb,0xa7,0x55,0x58,0x89, -0x87,0x86,0x25,0x65,0xaa,0xbb,0x98,0x74, -0x46,0x88,0xaa,0x99,0x63,0x42,0x39,0x8c, -0xea,0xb9,0x77,0x46,0x68,0x88,0x97,0x44, -0x54,0x9b,0xbc,0xb8,0x87,0x54,0x76,0x79, -0xa8,0x98,0x32,0x34,0x68,0xac,0xcb,0xb9, -0x66,0x76,0x78,0x97,0x64,0x35,0x47,0xaa, -0xcc,0xa9,0x66,0x67,0x9a,0xa9,0x85,0x32, -0x34,0x8b,0xcf,0xea,0xa6,0x43,0x45,0x69, -0x98,0xba,0x77,0x63,0x58,0x8a,0xb9,0x9a, -0x87,0xa9,0x88,0x67,0x51,0x23,0x47,0xdd, -0xce,0xb9,0x85,0x35,0x55,0x78,0x78,0x96, -0x69,0x86,0x97,0x68,0x77,0x99,0x9b,0xba, -0xb9,0x63,0x00,0x01,0x59,0xbf,0xed,0xc9, -0x66,0x56,0x56,0x65,0x77,0x68,0x98,0xaa, -0x89,0x76,0x45,0x67,0xb9,0xac,0xa8,0x75, -0x32,0x14,0x79,0xdd,0xcd,0xb8,0x74,0x55, -0x66,0x67,0x77,0x78,0x8a,0xba,0x88,0x86, -0x66,0x79,0xaa,0xba,0x97,0x32,0x22,0x37, -0xab,0xfd,0xbc,0x85,0x76,0x67,0x87,0x66, -0x43,0x45,0x8a,0xbd,0xc9,0x87,0x67,0x78, -0x89,0x87,0x74,0x23,0x44,0xab,0xce,0xca, -0x96,0x56,0x55,0x87,0x78,0x86,0x43,0x46, -0xbb,0xcd,0xa8,0x76,0x58,0xa9,0xaa,0x85, -0x31,0x03,0x68,0xbe,0xcc,0xd9,0x77,0x55, -0x56,0x56,0x96,0x67,0x66,0x78,0x8a,0xbb, -0x98,0x66,0x78,0x9a,0x98,0x86,0x31,0x23, -0x4a,0xbd,0xeb,0xcb,0x87,0x66,0x44,0x65, -0x67,0x67,0x87,0x9a,0x99,0xa7,0x57,0x75, -0x9a,0x9c,0xca,0x84,0x00,0x03,0x78,0xae, -0xec,0xd9,0x9a,0x76,0x66,0x54,0x55,0x44, -0x66,0xaa,0xad,0xa9,0x97,0x66,0x66,0x7a, -0x99,0x84,0x22,0x14,0x6a,0xdd,0xec,0xa9, -0x77,0x66,0x65,0x56,0x45,0x66,0x77,0xaa, -0xac,0xa9,0x96,0x67,0x67,0x9a,0xa9,0x84, -0x32,0x04,0x67,0xcc,0xef,0xcb,0xa8,0x76, -0x76,0x44,0x45,0x66,0x87,0xaa,0xac,0xaa, -0xa7,0x67,0x66,0x9a,0x98,0x95,0x22,0x02, -0x77,0xbe,0xee,0xdb,0x86,0x65,0x44,0x44, -0x66,0x77,0x89,0x89,0x87,0xa9,0x98,0x8a, -0x87,0x76,0x89,0x88,0x75,0x31,0x33,0x69, -0xcf,0xed,0xea,0x86,0x45,0x43,0x25,0x66, -0x88,0x78,0x87,0x88,0x98,0x9b,0x89,0x87, -0x89,0x88,0x98,0x53,0x11,0x25,0x78,0xff, -0xef,0xd8,0x76,0x43,0x44,0x47,0x76,0x99, -0x87,0x97,0x7a,0x88,0xa9,0x79,0x98,0x88, -0x78,0x87,0x55,0x43,0x46,0x8a,0xbd,0xed, -0xda,0x66,0x44,0x45,0x65,0x78,0x77,0x89, -0x89,0x97,0x98,0x57,0x87,0x89,0x88,0x88, -0x76,0x74,0x24,0x33,0x67,0xae,0xff,0xed, -0x96,0x42,0x24,0x44,0x67,0x77,0x99,0x79, -0x99,0xb9,0x88,0x87,0x68,0x77,0x98,0x88, -0x74,0x32,0x23,0x79,0xbe,0xde,0xdb,0x76, -0x54,0x45,0x55,0x56,0x69,0xbb,0xba,0x87, -0x54,0x66,0x8a,0xab,0xba,0x88,0x86,0x77, -0x75,0x22,0x11,0x47,0x9f,0xff,0xee,0x96, -0x54,0x34,0x45,0x78,0x8a,0xa8,0x77,0x66, -0x77,0x68,0x87,0x9a,0xa8,0x88,0x68,0x76, -0x64,0x34,0x35,0x8a,0xcf,0xdd,0xb7,0x55, -0x43,0x45,0x45,0x78,0x9a,0xba,0xa9,0x76, -0x53,0x45,0x8a,0xbc,0xb9,0x96,0x67,0x67, -0x77,0x54,0x32,0x48,0xac,0xff,0xec,0x85, -0x32,0x33,0x66,0x69,0x98,0xaa,0xaa,0x86, -0x55,0x55,0x79,0xab,0xbb,0xaa,0x86,0x55, -0x57,0x77,0x44,0x54,0x58,0xcd,0xfe,0xba, -0x74,0x32,0x46,0x76,0x68,0x89,0xbb,0xa9, -0x85,0x44,0x33,0x7a,0xbd,0xdb,0xa8,0x66, -0x67,0x56,0x66,0x54,0x44,0x58,0xcd,0xef, -0xca,0x85,0x34,0x54,0x68,0x66,0x76,0x8a, -0xbb,0xa8,0x54,0x43,0x58,0x9c,0xdc,0xcb, -0x86,0x65,0x56,0x75,0x43,0x24,0x49,0xbb, -0xff,0xdd,0x85,0x44,0x44,0x67,0x88,0x67, -0xaa,0xab,0xca,0x86,0x41,0x22,0x48,0xbe, -0xfd,0xca,0x96,0x44,0x34,0x66,0x66,0x88, -0xab,0xab,0x96,0x56,0x67,0x89,0x9b,0xa8, -0x78,0x77,0x78,0x66,0x53,0x24,0x38,0xcc, -0xff,0xca,0x74,0x34,0x56,0x78,0x66,0x55, -0x79,0xbc,0xba,0x86,0x52,0x23,0x59,0xbc, -0xdc,0x97,0x54,0x45,0x56,0x8b,0xab,0xba, -0x88,0x76,0x55,0x45,0x77,0x67,0x88,0xad, -0xca,0xa8,0x54,0x55,0x68,0x89,0xa9,0x76, -0x54,0x56,0x57,0x99,0xbd,0xbc,0xca,0x65, -0x43,0x36,0x78,0x99,0x88,0x98,0x9a,0x86, -0x64,0x25,0x8a,0xdd,0xba,0x85,0x34,0x55, -0x78,0x89,0x85,0x45,0x56,0x9b,0xce,0xc8, -0x76,0x45,0x56,0x89,0x76,0x76,0x79,0xa9, -0x99,0x77,0x65,0x66,0x55,0x67,0x8b,0xbb, -0xdc,0x97,0x44,0x45,0x66,0x76,0x68,0x9b, -0xcc,0xb8,0x53,0x21,0x25,0x9c,0xee,0xdd, -0xa7,0x55,0x45,0x56,0x89,0x88,0x75,0x67, -0x78,0xa9,0xbb,0x87,0x86,0x56,0x77,0x98, -0x67,0x78,0x87,0x89,0x99,0x67,0x77,0x56, -0x54,0x45,0x8b,0xef,0xfc,0x95,0x34,0x44, -0x67,0x66,0x78,0xbd,0xca,0x87,0x32,0x21, -0x35,0x48,0xbc,0xff,0xdc,0xa7,0x55,0x43, -0x56,0x67,0x78,0x99,0x99,0x87,0x55,0x23, -0x56,0xae,0xed,0xca,0x88,0x64,0x55,0x34, -0x67,0x89,0xab,0xba,0x97,0x43,0x33,0x56, -0x7b,0xcc,0xcb,0xb9,0x65,0x55,0x43,0x46, -0x8a,0xbc,0xa9,0x87,0x76,0x66,0x43,0x45, -0x5b,0xcd,0xfd,0xb9,0x64,0x45,0x45,0x54, -0x58,0x9b,0xcb,0xb9,0x64,0x35,0x55,0x54, -0x44,0x7a,0xdf,0xfd,0xa6,0x43,0x56,0x88, -0x87,0x67,0x79,0xcb,0x97,0x44,0x33,0x57, -0x76,0x76,0x69,0xac,0xfe,0xb8,0x64,0x45, -0x67,0x87,0x65,0x65,0x8b,0xcc,0xa8,0x54, -0x34,0x77,0x78,0x65,0x79,0xcf,0xfd,0xb7, -0x32,0x33,0x58,0x9a,0xa8,0x77,0x66,0x88, -0x9a,0xa8,0x75,0x66,0x66,0x67,0x66,0x89, -0xcc,0xbb,0x87,0x55,0x78,0x98,0x97,0x76, -0x68,0x88,0x88,0x65,0x44,0x56,0x7a,0xba, -0x99,0x99,0x99,0x98,0x75,0x55,0x57,0x98, -0x87,0x87,0x78,0x99,0x76,0x54,0x45,0x66, -0x9a,0xac,0xa8,0x99,0x77,0x77,0x66,0x57, -0x98,0x89,0x77,0x77,0x77,0x88,0x75,0x55, -0x67,0x8a,0xaa,0x85,0x54,0x57,0x8b,0xbb, -0xa8,0x77,0x78,0x88,0x98,0x77,0x67,0x67, -0x77,0x88,0x87,0x65,0x44,0x68,0xbd,0xcc, -0xa8,0x77,0x66,0x99,0x87,0x76,0x68,0x88, -0x98,0x76,0x66,0x68,0x87,0x97,0x77,0x77, -0x99,0x88,0x87,0x66,0x77,0x78,0x87,0x89, -0x99,0x99,0xa9,0x77,0x65,0x56,0x76,0x66, -0x55,0x68,0x89,0x99,0x88,0x76,0x66,0x56, -0x77,0x9b,0xcd,0xd9,0x97,0x64,0x67,0x88, -0x98,0x76,0x65,0x79,0x89,0x98,0x67,0x65, -0x78,0x88,0x89,0x88,0x89,0x99,0x88,0x77, -0x87,0x87,0x65,0x56,0x78,0xbc,0xa9,0x98, -0x67,0x77,0x88,0x77,0x76,0x67,0x87,0x79, -0x86,0x77,0x67,0x88,0x77,0x77,0x77,0x77, -0x88,0x98,0x99,0x99,0x99,0x98,0x78,0x67, -0x87,0x66,0x67,0x78,0x88,0x88,0x77,0x77, -0x68,0x88,0x78,0x66,0x86,0x68,0x97,0x78, -0x77,0x88,0x78,0x88,0x77,0x78,0x99,0xa9, -0x87,0x67,0x67,0x87,0x67,0x77,0x87,0x77, -0x87,0x77,0x77,0x87,0x68,0x98,0x78,0x77, -0x99,0x77,0x87,0x88,0x89,0x99,0x87,0x78, -0x88,0x99,0x99,0x86,0x77,0x67,0x65,0x67, -0x67,0x89,0x88,0x87,0x87,0x78,0x77,0x88, -0x77,0x87,0x78,0x88,0x87,0x77,0x88,0x98, -0x88,0x76,0x77,0x88,0x98,0x87,0x67,0x88, -0x88,0x76,0x66,0x78,0x88,0x88,0x77,0x77, -0x77,0x79,0x98,0x78,0x77,0x77,0x77,0x77, -0x78,0x89,0x97,0x88,0x78,0x89,0x99,0x98, -0x77,0x78,0x88,0x87,0x76,0x67,0x88,0x88, -0x98,0x77,0x67,0x88,0x87,0x78,0x77,0x67, -0x88,0x77,0x78,0x88,0x88,0x88,0x77,0x88, -0x98,0x98,0x87,0x77,0x78,0x97,0x77,0x77, -0x88,0x88,0x98,0x77,0x77,0x78,0x78,0x87, -0x67,0x66,0x77,0x77,0x77,0x77,0x77,0x78, -0x87,0x77,0x88,0x99,0x88,0x77,0x77,0x88, -0x77,0x77,0x78,0x88,0x99,0x89,0x88,0x78, -0x87,0x88,0x77,0x77,0x67,0x77,0x77,0x77, -0x78,0x89,0x88,0x77,0x87,0x78,0x88,0x87, -0x77,0x88,0x88,0x77,0x77,0x88,0x89,0x98, -0x88,0x88,0x87,0x78,0x88,0x77,0x87,0x77, -0x77,0x77,0x77,0x78,0x88,0x77,0x78,0x77, -0x78,0x88,0x77,0x78,0x88,0x76,0x66,0x77, -0x78,0x99,0x88,0x87,0x77,0x78,0x98,0x87, -0x78,0x77,0x77,0x78,0x78,0x77,0x88,0x88, -0x88,0x77,0x77,0x88,0x87,0x77,0x88,0x77, -0x77,0x77,0x77,0x88,0x88,0x77,0x77,0x77, -0x88,0x88,0x77,0x77,0x77,0x87,0x77,0x77, -0x77,0x88,0x88,0x88,0x87,0x88,0x88,0x88, -0x88,0x88,0x88,0x77,0x78,0x88,0x88,0x88, -0x87,0x77,0x78,0x87,0x77,0x77,0x77,0x78, -0x77,0x77,0x77,0x78,0x88,0x97,0x77,0x77, -0x78,0x88,0x88,0x88,0x88,0x77,0x78,0x88, -0x88,0x88,0x88,0x78,0x88,0x88,0x88,0x87, -0x78,0x77,0x87,0x77,0x77,0x77,0x78,0x88, -0x87,0x77,0x77,0x88,0x88,0x87,0x88,0x77, -0x77,0x78,0x78,0x88,0x88,0x88,0x78,0x78, -0x88,0x88,0x77,0x88,0x87,0x77,0x78,0x77, -0x88,0x88,0x88,0x77,0x77,0x78,0x88,0x77, -0x88,0x87,0x77,0x78,0x88,0x88,0x88,0x88, -0x77,0x87,0x78,0x88,0x77,0x78,0x87,0x78, -0x77,0x77,0x77,0x78,0x78,0x88,0x77,0x78, -0x88,0x88,0x88,0x87,0x88,0x77,0x88,0x78, -0x88,0x88,0x88,0x77,0x78,0x88,0x77,0x77, -0x78,0x77,0x87,0x77,0x78,0x87,0x88,0x88, -0x77,0x77,0x77,0x88,0x88,0x87,0x77,0x88, -0x77,0x88,0x88,0x88,0x88,0x88,0x87,0x88, -0x88,0x88,0x88,0x88,0x87,0x77,0x77,0x77, -0x88,0x78,0x88,0x77,0x78,0x88,0x88,0x88, -0x77,0x77,0x77,0x77,0x88,0x88,0x88,0x88, -0x87,0x77,0x88,0x77,0x88,0x77,0x77,0x78, -0x77,0x78,0x87,0x78,0x88,0x87,0x77,0x77, -0x88,0x88,0x87,0x77,0x88,0x77,0x88,0x88, -0x88,0x88,0x87,0x87,0x88,0x88,0x88,0x87, -0x77,0x88,0x87,0x78,0x77,0x77,0x77,0x88, -0x87,0x78,0x78,0x88,0x88,0x77,0x88,0x77, -0x87,0x88,0x88,0x87,0x88,0x88,0x78,0x88, -0x78,0x87,0x78,0x88,0x88,0x77,0x78,0x88, -0x77,0x88,0x87,0x77,0x77,0x77,0x88,0x87, -0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88, -0x88,0x88,0x87,0x88,0x88,0x88,0x88,0x77, -0x77,0x77,0x88,0x77,0x88,0x88,0x88,0x88, -0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, -0x88,0x88,0x88,0x88 -}; diff --git a/gbdk-lib/examples/gb/sgb_sfx/Makefile b/gbdk-lib/examples/gb/sgb_sfx/Makefile @@ -0,0 +1,11 @@ +CC = ../../../bin/lcc + +all: + $(CC) -Wm-ys -o sgb_sfx.gb main.c + +compile.bat: Makefile + @echo "REM Automatically generated from Makefile" > compile.bat + @make -sn | sed y/\\//\\\\/ | grep -v make >> compile.bat + +clean: + rm -f *.o *.lst *.map *.gb *.ihx *.sym *.cdb *.adb *.asm diff --git a/gbdk-lib/examples/gb/sgb_sfx/main.c b/gbdk-lib/examples/gb/sgb_sfx/main.c @@ -0,0 +1,158 @@ +#include <gb/gb.h> +#include <gb/sgb.h> + +#include <stdint.h> +#include <stdbool.h> +#include <stdio.h> +#include <gbdk/console.h> + +#include "sgb_snd_sfx.h" + + +// Stores button presses +uint8_t keys = 0x00, keys_last = 0x00; + + +// Default SFX attributes +uint8_t sgb_sfx_a_pitch = SGB_SND_PITCH_HI; // Bits 0..1 +uint8_t sgb_sfx_a_vol = SGB_SND_VOL_HI; // Bits 2..3 +uint8_t sgb_sfx_b_pitch = SGB_SND_PITCH_HI; // Bits 4..5 +uint8_t sgb_sfx_b_vol = SGB_SND_VOL_HI; // Bits 6..7 + + +// Default values for SFX types +uint8_t sfx_num_a = SGB_SND_EFFECT_A_MIN; +uint8_t sfx_num_b = SGB_SND_EFFECT_B_MIN; + +static uint8_t sgb_buf[20]; // Should be sized to fit max payload bytes + 1 for command byte + + +// Play a SGB sound effect +// +// Setting either effect parameter to SGB_SND_EFFECT_EMPTY will skip it. +// The pitch and volume settings are not changed in this example, but could be. +void sgb_sound_effect(uint8_t sfx_a, uint8_t sfx_b) { + sgb_buf[0] = (SGB_SOUND << 3) | 1; // 1 is number of packets to transfer + sgb_buf[1] = sfx_a; // Effect A + sgb_buf[2] = sfx_b; // Effect B + sgb_buf[3] = sgb_sfx_a_pitch | (sgb_sfx_a_vol << 2) | (sgb_sfx_b_pitch << 4) | (sgb_sfx_b_vol << 6); + sgb_buf[4] = SGB_MUSIC_SCORE_CODE_NONE; // Must be zero if not used + sgb_transfer(sgb_buf); +} + + +#define DISP_SFX_A_START 4 +#define DISP_SFX_B_START 10 + +// Display basic operation info on the screen +void init_display() { + gotoxy(0,1); + printf("SGB BUILT-IN SFX"); + + gotoxy(0,DISP_SFX_A_START); + printf("SFX A:\n"); + printf(" PLAY: A\n"); + printf(" STOP: SELECT + A\n"); + printf(" TYPE: UP / DOWN\n"); + + gotoxy(0,DISP_SFX_B_START); + printf("SFX B:\n"); + printf(" PLAY: B\n"); + printf(" STOP: SELECT + B\n"); + printf(" TYPE: LEFT / RIGHT\n"); +} + + +// Update the display if either of the sfx types have changed +void update_display(void) { + + gotoxy(7, DISP_SFX_A_START); + printf("0x%hx", (uint8_t)sfx_num_a); + + gotoxy(7, DISP_SFX_B_START); + printf("0x%hx", (uint8_t)sfx_num_b); +} + + +// Process button presses +void handle_input(void) { + + bool display_update_queued = false; + + // Filter so only buttons newly pressed have their bits set + switch ((keys ^ keys_last) & keys) { + + // Effect "A" playback controls + case J_A: if (keys & J_SELECT) { + // Stop the effect + sgb_sound_effect(SGB_SND_EFFECT_STOP, SGB_SND_EFFECT_EMPTY); + } else { + // Start the effect + sgb_sound_effect(sfx_num_a, SGB_SND_EFFECT_EMPTY); + } + break; + + // Effect "B" playback controls + case J_B: if (keys & J_SELECT) { + // Stop the effect + sgb_sound_effect(SGB_SND_EFFECT_EMPTY, SGB_SND_EFFECT_STOP); + } else { + // Start the effect + sgb_sound_effect(SGB_SND_EFFECT_EMPTY, sfx_num_b); + } + break; + + + // Effect type selectors + case (J_UP): sfx_num_a++; + if (sfx_num_a > SGB_SND_EFFECT_A_MAX) sfx_num_a = SGB_SND_EFFECT_A_MIN; + display_update_queued = true; + break; + + case (J_DOWN): sfx_num_a--; + if (sfx_num_a < SGB_SND_EFFECT_A_MIN) sfx_num_a = SGB_SND_EFFECT_A_MAX; + display_update_queued = true; + break; + + case (J_RIGHT): sfx_num_b++; + if (sfx_num_b > SGB_SND_EFFECT_B_MAX) sfx_num_b = SGB_SND_EFFECT_B_MIN; + display_update_queued = true; + break; + + case (J_LEFT): sfx_num_b--; + if (sfx_num_b < SGB_SND_EFFECT_B_MIN) sfx_num_b = SGB_SND_EFFECT_B_MAX; + display_update_queued = true; + break; + } + + if (display_update_queued) + update_display(); +} + + +void main(void) { + + // Wait 4 frames + // For SGB on PAL SNES this delay is required on startup, otherwise borders don't show up + for (uint8_t i = 4; i != 0; i--) wait_vbl_done(); + + DISPLAY_ON; + + if (sgb_check()) { + + init_display(); + update_display(); + + while(1) { + wait_vbl_done(); + + keys_last = keys; + keys = joypad(); + + handle_input(); + } + } else { + printf("NO SGB DETECTED"); + } + +} diff --git a/gbdk-lib/examples/gb/sgb_sfx/sgb_snd_sfx.h b/gbdk-lib/examples/gb/sgb_sfx/sgb_snd_sfx.h @@ -0,0 +1,25 @@ + + +// See Pandocs: SGB Command 08h - SOUND + +#define SGB_SND_PITCH_LOW 0u +#define SGB_SND_PITCH_MED 1u +#define SGB_SND_PITCH_MED2 2u +#define SGB_SND_PITCH_HI 3u + +#define SGB_SND_VOL_LOW 0u +#define SGB_SND_VOL_MED 1u +#define SGB_SND_VOL_HI 2u +#define SGB_SND_VOL_MUTE 3u + + +#define SGB_SND_EFFECT_EMPTY 0x00u +#define SGB_SND_EFFECT_STOP 0x80u + +#define SGB_SND_EFFECT_A_MIN 0x01u +#define SGB_SND_EFFECT_A_MAX 0x30u + +#define SGB_SND_EFFECT_B_MAX 0x19u +#define SGB_SND_EFFECT_B_MIN 0x01u + +#define SGB_MUSIC_SCORE_CODE_NONE 0u diff --git a/gbdk-lib/examples/gb/wav_sample/Makefile b/gbdk-lib/examples/gb/wav_sample/Makefile @@ -0,0 +1,61 @@ +# +# A Makefile that compiles all .c and .s files in "src" and "res" +# subdirectories and places the output in a "obj" subdirectory +# + +# If you move this project you can change the directory +# to match your GBDK root directory (ex: GBDK_HOME = "C:/GBDK/" +GBDK_HOME = ../../../ + +LCC = $(GBDK_HOME)bin/lcc + +# You can set flags for LCC here +# For example, you can uncomment the line below to turn on debug output +# LCCFLAGS += -debug +LCCFLAGS += -Wl-yt1 -Wl-yo4 + +# You can set the name of the .gb ROM file here +PROJECTNAME = wav_sample + +SRCDIR = src +OBJDIR = obj +RESDIR = res +BINS = $(OBJDIR)/$(PROJECTNAME).gb +CSOURCES = $(foreach dir,$(SRCDIR),$(notdir $(wildcard $(dir)/*.c))) $(foreach dir,$(RESDIR),$(notdir $(wildcard $(dir)/*.c))) +ASMSOURCES = $(foreach dir,$(SRCDIR),$(notdir $(wildcard $(dir)/*.s))) +OBJS = $(CSOURCES:%.c=$(OBJDIR)/%.o) $(ASMSOURCES:%.s=$(OBJDIR)/%.o) + +all: prepare $(BINS) + +compile.bat: Makefile + @echo "REM Automatically generated from Makefile" > compile.bat + @make -sn | sed y/\\//\\\\/ | grep -v make >> compile.bat + +# Compile .c files in "src/" to .o object files +$(OBJDIR)/%.o: $(SRCDIR)/%.c + $(LCC) $(LCCFLAGS) -c -o $@ $< + +# Compile .c files in "res/" to .o object files +$(OBJDIR)/%.o: $(RESDIR)/%.c + $(LCC) $(LCCFLAGS) -c -o $@ $< + +# Compile .s assembly files in "src/" to .o object files +$(OBJDIR)/%.o: $(SRCDIR)/%.s + $(LCC) $(LCCFLAGS) -c -o $@ $< + +# If needed, compile .c files in "src/" to .s assembly files +# (not required if .c is compiled directly to .o) +$(OBJDIR)/%.s: $(SRCDIR)/%.c + $(LCC) $(LCCFLAGS) -S -o $@ $< + +# Link the compiled object files into a .gb ROM file +$(BINS): $(OBJS) + $(LCC) $(LCCFLAGS) -o $(BINS) $(OBJS) + +prepare: + mkdir -p $(OBJDIR) $(RESDIR) + +clean: +# rm -f *.gb *.ihx *.cdb *.adb *.noi *.map + rm -f $(OBJDIR)/*.* + diff --git a/gbdk-lib/examples/gb/wav_sample/Readme.md b/gbdk-lib/examples/gb/wav_sample/Readme.md @@ -0,0 +1,9 @@ + +Demonstration of how to convert and play wav sample files + +Included wav audio files are in the public domain + +Conversion of samples: + - `utils/cvtsample.py sndrec/cowbell_8bit_pcm_unsigned.wav sample1 C > src/sample_data_1.h` + - `utils/cvtsample.py sndrec/risset_drum_8bit_pcm_unsigned.wav sample2 C > src/sample_data_2.h` + diff --git a/gbdk-lib/examples/gb/wav_sample/sndrec/cowbell_8bit_pcm_unsigned.wav b/gbdk-lib/examples/gb/wav_sample/sndrec/cowbell_8bit_pcm_unsigned.wav Binary files differ. diff --git a/gbdk-lib/examples/gb/wav_sample/sndrec/risset_drum_8bit_pcm_unsigned.wav b/gbdk-lib/examples/gb/wav_sample/sndrec/risset_drum_8bit_pcm_unsigned.wav Binary files differ. diff --git a/gbdk-lib/examples/gb/wav_sample/src/main.c b/gbdk-lib/examples/gb/wav_sample/src/main.c @@ -0,0 +1,38 @@ +#include <gb/gb.h> +#include <stdio.h> + +#include "sample_player.h" + +#include "samples_bank2.h" +#include "samples_bank3.h" + + +void main() +{ + + NR52_REG = 0x80u; + NR51_REG = 0xffu; + NR50_REG = 0x77u; + + __critical { + TMA_REG = 0xC0u, TAC_REG = 0x07u; + add_TIM(play_isr); + set_interrupts(VBL_IFLAG | TIM_IFLAG); + } + + puts("PRESS A/B TO PLAY\n"); + + while(1) + { + UINT8 j = joypad(); + if (j & J_A) { + play_sample1(); + while (joypad() & J_A) wait_vbl_done(); + } else + if (j & J_B) { + play_sample2(); + while (joypad() & J_B) wait_vbl_done(); + } + wait_vbl_done(); + } +} diff --git a/gbdk-lib/examples/gb/wav_sample/src/sample_data_1.h b/gbdk-lib/examples/gb/wav_sample/src/sample_data_1.h @@ -0,0 +1,254 @@ +const UINT8 sample1[] = { +0xf7,0xa4,0x7,0x4b,0xfb,0xa5,0x8,0x2d,0xd7,0xe0,0x74,0x5e,0x99,0xa0,0x76,0x4f, +0x3c,0x62,0x93,0xba,0x78,0x43,0xa4,0xda,0x6c,0x8,0x48,0xe9,0xb8,0x14,0x36,0xf8, +0xf6,0x26,0xa,0x9d,0xe7,0x55,0x9,0x9a,0xf4,0xa1,0x48,0x6e,0xa8,0x81,0x59,0x4f, +0x78,0x90,0xa5,0x9b,0x78,0x73,0xa7,0x9b,0x2a,0x18,0x97,0xf7,0x74,0x6,0xa8,0xf7, +0x86,0x9,0x4d,0xda,0xa3,0x35,0x5c,0xe8,0xd1,0x65,0x4d,0x8d,0x94,0x64,0x4c,0x7c, +0x94,0xa1,0x97,0x8b,0x68,0x75,0x99,0x5b,0x39,0x65,0xc6,0xc4,0x56,0x48,0xb8,0xd7, +0x28,0xb,0x8b,0xe5,0x73,0x38,0xaa,0xe6,0x82,0x39,0x6f,0x9a,0x71,0x56,0x7f,0xa8, +0xa0,0x84,0x8b,0x7b,0x57,0x76,0x89,0x6a,0x47,0xa5,0xd4,0x97,0x48,0x79,0xc8,0x67, +0x29,0x5b,0xb7,0xa2,0x66,0x7a,0xb9,0xa4,0x56,0x4d,0x8d,0x95,0x62,0x79,0xac,0xb5, +0x82,0x78,0x7e,0x6a,0x64,0x77,0x8a,0x78,0x85,0xa4,0xb7,0x79,0x39,0x88,0xa7,0x58, +0x39,0x98,0xc3,0x84,0x68,0x8b,0x97,0x64,0x49,0x7e,0x88,0x81,0x75,0x9c,0xb9,0x83, +0x65,0x7c,0x7d,0x57,0x65,0x98,0x99,0x86,0x84,0xa6,0x99,0x5a,0x58,0x87,0x87,0x68, +0x78,0xa5,0xa4,0x77,0x6a,0x89,0x76,0x57,0x6b,0x8a,0x94,0x82,0x89,0xac,0x87,0x64, +0x69,0x8e,0x79,0x64,0x85,0xa9,0xb8,0x65,0x76,0xa9,0x7b,0x39,0x67,0xa7,0x97,0x78, +0x86,0xa5,0x86,0x69,0x6b,0x77,0x65,0x78,0x8a,0x96,0x82,0x86,0x9b,0x89,0x55,0x57, +0x8b,0x8a,0x65,0x74,0xa8,0xb9,0x77,0x66,0x88,0x9b,0x69,0x47,0x86,0xa7,0x97,0x77, +0x86,0x97,0x79,0x5a,0x69,0x77,0x86,0x88,0x88,0x84,0x84,0x89,0x8c,0x68,0x45,0x79, +0x9a,0x87,0x63,0x86,0xb9,0x88,0x57,0x57,0x9a,0x89,0x57,0x66,0xa7,0xb7,0x77,0x67, +0x88,0x89,0x79,0x69,0x67,0x86,0x97,0x88,0x86,0x85,0x87,0x8a,0x69,0x47,0x77,0x99, +0x98,0x74,0x75,0xa8,0x99,0x67,0x47,0x89,0x99,0x77,0x56,0x87,0xc7,0x97,0x57,0x68, +0x99,0x89,0x68,0x68,0x87,0xa6,0x97,0x78,0x77,0x87,0x89,0x7a,0x58,0x66,0x97,0xa8, +0x85,0x76,0x88,0x99,0x78,0x37,0x68,0x99,0x97,0x65,0x76,0xa8,0xa8,0x67,0x58,0x79, +0x89,0x77,0x67,0x87,0xa7,0xa7,0x77,0x78,0x78,0x89,0x79,0x69,0x77,0x96,0xa7,0x87, +0x76,0x77,0x89,0x89,0x58,0x58,0x88,0xa7,0x85,0x66,0x88,0xa8,0x77,0x48,0x69,0x99, +0x87,0x76,0x77,0x97,0xa6,0x87,0x69,0x79,0x89,0x78,0x78,0x77,0x87,0xa7,0x97,0x77, +0x78,0x89,0x88,0x68,0x57,0x87,0xa7,0x96,0x76,0x78,0x98,0x88,0x57,0x58,0x89,0x97, +0x86,0x76,0x88,0xa7,0x87,0x68,0x69,0x89,0x87,0x77,0x78,0x87,0xa6,0x87,0x78,0x78, +0x79,0x88,0x78,0x67,0x77,0x97,0x96,0x76,0x68,0x89,0x98,0x67,0x58,0x78,0x98,0x86, +0x76,0x78,0x98,0x87,0x67,0x69,0x79,0x87,0x76,0x77,0x88,0x97,0x87,0x77,0x68,0x79, +0x78,0x77,0x77,0x77,0x97,0x97,0x87,0x78,0x79,0x88,0x77,0x67,0x78,0x98,0x96,0x85, +0x77,0x89,0x88,0x77,0x58,0x79,0x88,0x86,0x76,0x88,0x98,0x87,0x77,0x68,0x79,0x78, +0x77,0x87,0x87,0x87,0x97,0x87,0x78,0x79,0x79,0x88,0x77,0x77,0x88,0x97,0x86,0x77, +0x79,0x89,0x77,0x67,0x78,0x88,0x86,0x85,0x87,0x88,0x88,0x77,0x68,0x79,0x78,0x87, +0x86,0x87,0x88,0x87,0x87,0x78,0x79,0x79,0x78,0x87,0x77,0x88,0x97,0x86,0x77,0x79, +0x79,0x78,0x67,0x78,0x88,0x97,0x85,0x77,0x89,0x88,0x77,0x67,0x78,0x88,0x87,0x86, +0x87,0x88,0x88,0x77,0x78,0x78,0x79,0x78,0x87,0x87,0x87,0x98,0x87,0x77,0x78,0x79, +0x78,0x77,0x77,0x88,0x98,0x86,0x76,0x88,0x89,0x78,0x67,0x78,0x88,0x87,0x86,0x87, +0x88,0x88,0x77,0x67,0x78,0x78,0x78,0x77,0x87,0x87,0x88,0x87,0x77,0x78,0x79,0x78, +0x77,0x77,0x87,0x98,0x87,0x77,0x78,0x89,0x78,0x67,0x77,0x88,0x88,0x86,0x76,0x88, +0x88,0x78,0x67,0x78,0x88,0x88,0x76,0x86,0x87,0x88,0x78,0x77,0x78,0x79,0x78,0x77, +0x77,0x87,0x98,0x87,0x77,0x77,0x79,0x78,0x77,0x77,0x88,0x98,0x87,0x77,0x78,0x88, +0x78,0x67,0x68,0x88,0x88,0x87,0x76,0x87,0x88,0x78,0x78,0x78,0x78,0x88,0x77,0x76, +0x87,0x98,0x88,0x77,0x78,0x79,0x88,0x77,0x77,0x87,0x98,0x87,0x77,0x77,0x89,0x88, +0x78,0x77,0x88,0x88,0x87,0x76,0x87,0x88,0x88,0x78,0x68,0x78,0x88,0x87,0x76,0x87, +0x87,0x88,0x78,0x78,0x78,0x88,0x78,0x77,0x87,0x97,0x87,0x77,0x77,0x78,0x88,0x78, +0x77,0x77,0x98,0x87,0x77,0x77,0x88,0x88,0x78,0x68,0x78,0x88,0x87,0x76,0x87,0x88, +0x88,0x78,0x68,0x78,0x88,0x87,0x77,0x87,0x87,0x88,0x77,0x78,0x78,0x88,0x78,0x77, +0x77,0x87,0x97,0x87,0x77,0x78,0x88,0x78,0x67,0x78,0x88,0x87,0x86,0x77,0x88,0x88, +0x78,0x68,0x78,0x88,0x87,0x87,0x87,0x87,0x88,0x78,0x78,0x78,0x78,0x88,0x77,0x77, +0x87,0x97,0x87,0x77,0x78,0x89,0x78,0x77,0x77,0x88,0x97,0x87,0x77,0x78,0x88,0x78, +0x77,0x78,0x88,0x87,0x87,0x87,0x88,0x88,0x78,0x78,0x78,0x78,0x88,0x77,0x77,0x87, +0x88,0x87,0x77,0x78,0x78,0x78,0x77,0x77,0x87,0x97,0x87,0x77,0x78,0x88,0x78,0x77, +0x77,0x88,0x87,0x87,0x77,0x88,0x88,0x78,0x77,0x78,0x78,0x88,0x87,0x77,0x87,0x88, +0x88,0x77,0x78,0x78,0x88,0x77,0x77,0x87,0x88,0x87,0x77,0x78,0x79,0x78,0x77,0x77, +0x88,0x87,0x87,0x77,0x78,0x88,0x78,0x77,0x78,0x78,0x88,0x87,0x87,0x87,0x88,0x88, +0x77,0x78,0x78,0x88,0x87,0x77,0x87,0x88,0x87,0x77,0x78,0x78,0x88,0x77,0x77,0x87, +0x87,0x87,0x77,0x78,0x78,0x78,0x78,0x77,0x78,0x88,0x87,0x87,0x77,0x88,0x88,0x78, +0x78,0x78,0x88,0x87,0x87,0x87,0x88,0x88,0x77,0x78,0x78,0x88,0x77,0x77,0x87,0x88, +0x87,0x77,0x78,0x78,0x78,0x78,0x77,0x77,0x88,0x87,0x87,0x77,0x88,0x88,0x78,0x77, +0x78,0x88,0x87,0x87,0x87,0x88,0x88,0x78,0x78,0x78,0x88,0x87,0x77,0x87,0x88,0x88, +0x77,0x78,0x78,0x88,0x78,0x77,0x77,0x88,0x87,0x87,0x77,0x78,0x88,0x78,0x77,0x78, +0x88,0x87,0x87,0x77,0x88,0x88,0x78,0x78,0x78,0x88,0x87,0x87,0x87,0x88,0x88,0x77, +0x78,0x78,0x88,0x88,0x77,0x77,0x87,0x87,0x87,0x77,0x78,0x78,0x78,0x77,0x77,0x88, +0x87,0x87,0x77,0x78,0x88,0x78,0x77,0x78,0x88,0x87,0x87,0x77,0x88,0x88,0x78,0x78, +0x78,0x78,0x88,0x87,0x77,0x87,0x88,0x87,0x77,0x78,0x78,0x78,0x77,0x77,0x87,0x87, +0x87,0x77,0x78,0x88,0x78,0x77,0x77,0x88,0x87,0x87,0x77,0x88,0x88,0x78,0x77,0x78, +0x78,0x88,0x87,0x77,0x87,0x88,0x88,0x77,0x78,0x78,0x88,0x77,0x77,0x87,0x88,0x87, +0x77,0x78,0x78,0x78,0x77,0x77,0x87,0x87,0x87,0x77,0x78,0x88,0x78,0x77,0x77,0x78, +0x88,0x87,0x87,0x87,0x88,0x88,0x77,0x78,0x78,0x88,0x87,0x77,0x87,0x88,0x87,0x77, +0x78,0x78,0x88,0x77,0x77,0x87,0x87,0xf6,0xb7,0x47,0x7,0x85,0xba,0xcd,0x2d,0x26, +0x31,0xb3,0xbc,0xbd,0x78,0x90,0x70,0x98,0x6f,0x8b,0x88,0x70,0x4a,0x3b,0x7e,0xc5, +0xd4,0x71,0x18,0x56,0xe8,0xf6,0xaa,0x7,0xa,0x57,0xfb,0x9b,0x6a,0x3,0xa2,0xb4, +0xfb,0x7b,0x87,0x50,0x84,0x4c,0x7f,0x3c,0x93,0x61,0x76,0x5d,0xc9,0xb6,0xd0,0x56, +0x38,0x4c,0xc7,0xba,0x77,0xb,0x26,0x88,0xf6,0xba,0x63,0x36,0x81,0xc8,0xba,0x7d, +0x36,0x55,0x65,0x9e,0x6e,0x89,0x80,0xb2,0x75,0xad,0x89,0xc7,0x72,0x68,0xb,0x7c, +0x88,0xc6,0x56,0x37,0x47,0xe6,0xf7,0xc7,0x38,0x46,0x67,0xc8,0x7d,0x7a,0x18,0x72, +0x87,0xb9,0x8c,0x94,0x82,0x91,0x8a,0x7d,0x7c,0x85,0x78,0x57,0x4c,0x79,0xc8,0xb2, +0x86,0x34,0x89,0xb6,0xe9,0x67,0x2a,0x17,0x89,0x98,0xab,0x57,0x66,0x73,0xd6,0x9a, +0xaa,0x57,0x82,0x56,0x8b,0x4f,0x89,0x65,0x83,0x68,0x89,0x89,0xd4,0x95,0x85,0x39, +0x78,0x9b,0xb7,0x5b,0x27,0x39,0x96,0xd8,0xa5,0x77,0x53,0x96,0xa6,0x9c,0x69,0x5a, +0x53,0x89,0x69,0x8d,0x76,0xa4,0x72,0x98,0x7a,0xa9,0x96,0x96,0x48,0x5a,0x3a,0xa8, +0x87,0x87,0x37,0x86,0x97,0xf6,0x88,0x76,0x47,0x87,0x8a,0x9a,0x4b,0x56,0x66,0x96, +0x9a,0x97,0x87,0x91,0x86,0x78,0x7d,0x79,0x8a,0x65,0x6a,0x59,0x89,0xa5,0xa6,0x74, +0x68,0x76,0xb8,0xa7,0x89,0x28,0x58,0x57,0xb9,0x79,0x88,0x55,0xa5,0x97,0xc9,0x79, +0x86,0x65,0x87,0x5b,0x7b,0x59,0x85,0x76,0x86,0x79,0xa6,0xa7,0xa4,0x68,0x67,0x6a, +0x98,0x8a,0x67,0x39,0x66,0x98,0xb6,0x98,0x75,0x77,0x85,0x99,0x89,0x7b,0x57,0x77, +0x67,0x8b,0x79,0x98,0x74,0xa6,0x77,0xa9,0x77,0xa7,0x77,0x78,0x39,0x79,0x78,0x97, +0x67,0x66,0x67,0xc6,0xa7,0xa6,0x58,0x77,0x69,0x98,0x6b,0x78,0x58,0x85,0x87,0x97, +0x89,0x84,0x85,0x85,0x7a,0x79,0x7a,0x76,0x79,0x67,0x7a,0x77,0xa7,0x85,0x97,0x66, +0x98,0x97,0xa8,0x68,0x69,0x47,0x88,0x88,0x99,0x67,0x86,0x86,0xc7,0x88,0x98,0x67, +0x86,0x68,0x79,0x5b,0x88,0x77,0x85,0x78,0x97,0x88,0xa5,0x87,0x77,0x69,0x78,0x8a, +0x87,0x6a,0x57,0x78,0x86,0xa8,0x86,0x88,0x75,0x97,0x87,0x8a,0x68,0x78,0x56,0x89, +0x69,0x89,0x76,0x96,0x86,0xa7,0x78,0x98,0x77,0x87,0x58,0x69,0x59,0x98,0x77,0x86, +0x67,0x96,0x97,0xa6,0x78,0x77,0x68,0x87,0x7a,0x88,0x69,0x76,0x77,0x86,0x89,0x86, +0x87,0x84,0x87,0x78,0x7a,0x78,0x89,0x67,0x79,0x68,0x88,0x86,0xa7,0x76,0x87,0x77, +0x98,0x88,0x78,0x48,0x78,0x68,0x98,0x78,0x87,0x77,0xa6,0x87,0x98,0x78,0x87,0x67, +0x77,0x6a,0x89,0x69,0x86,0x77,0x86,0x78,0x96,0x97,0x86,0x78,0x77,0x79,0x87,0x8a, +0x67,0x68,0x77,0x88,0x96,0x98,0x76,0x87,0x86,0x98,0x78,0x79,0x57,0x78,0x67,0x89, +0x78,0x97,0x86,0xa7,0x77,0x98,0x78,0x87,0x68,0x78,0x59,0x88,0x78,0x87,0x78,0x86, +0x77,0x96,0x88,0x87,0x78,0x77,0x79,0x88,0x7a,0x77,0x78,0x76,0x88,0x86,0x88,0x86, +0x87,0x87,0x89,0x78,0x79,0x77,0x78,0x67,0x88,0x77,0xa7,0x86,0x97,0x77,0x98,0x87, +0x88,0x68,0x78,0x58,0x88,0x78,0x88,0x77,0x96,0x77,0x97,0x88,0x87,0x78,0x87,0x69, +0x78,0x69,0x77,0x78,0x86,0x78,0x86,0x88,0x96,0x88,0x77,0x79,0x78,0x8a,0x78,0x79, +0x67,0x88,0x86,0x97,0x86,0x87,0x76,0x88,0x77,0x89,0x68,0x78,0x67,0x88,0x78,0x88, +0x77,0x96,0x77,0x97,0x78,0x87,0x78,0x87,0x68,0x78,0x68,0x87,0x78,0x87,0x77,0x86, +0x87,0x97,0x88,0x77,0x78,0x78,0x7a,0x78,0x78,0x77,0x87,0x86,0x88,0x86,0x87,0x86, +0x88,0x78,0x79,0x78,0x88,0x67,0x78,0x77,0x88,0x87,0x97,0x77,0x87,0x77,0x88,0x78, +0x88,0x58,0x78,0x68,0x88,0x78,0x87,0x77,0x96,0x88,0x97,0x78,0x87,0x78,0x78,0x79, +0x78,0x78,0x87,0x87,0x86,0x88,0x86,0x88,0x87,0x78,0x78,0x79,0x77,0x79,0x77,0x78, +0x77,0x87,0x87,0x98,0x77,0x87,0x77,0x88,0x78,0x88,0x68,0x78,0x78,0x88,0x78,0x87, +0x87,0x97,0x77,0x87,0x78,0x87,0x78,0x78,0x69,0x88,0x78,0x87,0x77,0x86,0x87,0x86, +0x88,0x87,0x78,0x77,0x79,0x77,0x79,0x77,0x88,0x77,0x88,0x87,0x88,0x86,0x87,0x77, +0x88,0x78,0x88,0x77,0x78,0x78,0x88,0x77,0x97,0x87,0x97,0x77,0x87,0x78,0x88,0x68, +0x78,0x68,0x88,0x78,0x87,0x77,0x87,0x87,0x87,0x78,0x87,0x78,0x77,0x79,0x78,0x78, +0x87,0x78,0x87,0x88,0x86,0x88,0x87,0x88,0x77,0x78,0x77,0x88,0x78,0x78,0x77,0x88, +0x87,0x97,0x87,0x87,0x77,0x88,0x78,0x88,0x68,0x78,0x78,0x88,0x78,0x87,0x87,0x97, +0x87,0x87,0x78,0x88,0x78,0x77,0x78,0x78,0x78,0x87,0x78,0x87,0x78,0x86,0x88,0x87, +0x88,0x77,0x78,0x77,0x79,0x78,0x78,0x77,0x88,0x87,0x88,0x87,0x87,0x77,0x88,0x78, +0x78,0x78,0x88,0x78,0x88,0x77,0x87,0x87,0x97,0x77,0x87,0x78,0x88,0x78,0x78,0x68, +0x88,0x78,0x87,0x78,0x87,0x87,0x87,0x88,0x87,0x78,0x87,0x78,0x77,0x78,0x77,0x78, +0x77,0x88,0x87,0x87,0x87,0x88,0x87,0x88,0x77,0x78,0x78,0x78,0x77,0x88,0x77,0x87, +0x87,0x87,0x77,0x88,0x78,0x88,0x78,0x88,0x78,0x88,0x78,0x87,0x77,0x87,0x77,0x87, +0x78,0x87,0x78,0x87,0x78,0x78,0x78,0x77,0x78,0x87,0x88,0x86,0x87,0x87,0x88,0x87, +0x78,0x77,0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x77,0x88,0x77,0x88,0x78, +0x88,0x78,0x88,0x77,0x87,0x77,0x87,0x77,0x87,0x78,0x87,0x78,0x88,0x78,0x88,0x78, +0x87,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x79,0x77,0x78,0x77,0x88, +0x87,0x87,0x87,0x88,0x87,0x88,0x77,0x78,0x78,0x78,0x77,0x88,0x77,0x87,0x77,0x87, +0x77,0x87,0x77,0x88,0x78,0x88,0x78,0x88,0x78,0x87,0x78,0x87,0x77,0x87,0x87,0x87, +0x78,0x87,0x78,0x78,0x78,0x77,0x78,0x87,0x88,0x87,0x87,0x87,0x88,0x87,0x78,0x77, +0x78,0x78,0x78,0x77,0x88,0x77,0x87,0x77,0x87,0x87,0x88,0x77,0x88,0x78,0x88,0x78, +0x88,0x78,0x88,0x77,0x87,0x77,0x87,0x87,0x87,0x78,0x88,0x78,0x78,0x78,0x77,0x78, +0x87,0x87,0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x78,0x77,0x78,0x77,0x88,0x87,0x87, +0x87,0x88,0x87,0x88,0x77,0x88,0x78,0x88,0x78,0x88,0x78,0x88,0x77,0x87,0x77,0x87, +0x77,0x87,0x78,0x88,0x78,0x78,0x78,0x88,0x78,0x87,0x77,0x87,0x87,0x87,0x78,0x87, +0x78,0x78,0x78,0x77,0x78,0x77,0x88,0x87,0x88,0x87,0x88,0x87,0x88,0x77,0x88,0x77, +0x78,0x78,0x88,0x77,0x88,0x77,0x87,0x87,0x87,0x77,0x88,0x78,0x88,0x78,0x78,0x78, +0x88,0x77,0x87,0x77,0x87,0x87,0x87,0x78,0x87,0x78,0x78,0x78,0x77,0x78,0x87,0x78, +0x87,0x88,0x87,0x88,0x87,0x88,0x77,0x78,0x77,0x78,0x77,0x88,0x77,0x88,0x87,0x87, +0x87,0x87,0x77,0x88,0x78,0x88,0x78,0x78,0x78,0x88,0x77,0x87,0x87,0x87,0xf6,0xb8, +0x47,0x6,0x85,0xba,0xcd,0x2d,0x16,0x31,0xb4,0xbc,0xbd,0x77,0x90,0x80,0x98,0x6f, +0x8c,0x88,0x70,0x3a,0x2c,0x7d,0xd5,0xd3,0x71,0x18,0x56,0xd8,0xf6,0x9a,0x8,0xa, +0x57,0xfb,0x9b,0x6a,0x3,0x91,0xb4,0xfb,0x8b,0x77,0x50,0x84,0x5c,0x7f,0x3c,0x93, +0x61,0x76,0x5c,0xc9,0xc5,0xd0,0x66,0x28,0x4c,0xb8,0xba,0x77,0xb,0x17,0x98,0xf6, +0xb9,0x63,0x35,0x82,0xc8,0xbb,0x7d,0x37,0x55,0x65,0x9d,0x6e,0x89,0x80,0xa1,0x75, +0xad,0x89,0xc6,0x72,0x68,0xb,0x6c,0x88,0xc7,0x56,0x37,0x47,0xe6,0xf7,0xd7,0x38, +0x46,0x68,0xc9,0x7d,0x6a,0x18,0x72,0x87,0xb8,0x8c,0x94,0x81,0x91,0x7a,0x7e,0x7c, +0x85,0x67,0x57,0x4c,0x79,0xc7,0xb2,0x86,0x35,0x89,0xb6,0xe9,0x78,0x2a,0x17,0x89, +0xa8,0xab,0x57,0x65,0x73,0xd6,0xa9,0xaa,0x67,0x83,0x56,0x8b,0x3f,0x79,0x65,0x83, +0x68,0x89,0x89,0xd4,0x94,0x85,0x3a,0x79,0x9b,0xb7,0x5b,0x27,0x39,0x96,0xd8,0xa5, +0x77,0x53,0x86,0xa6,0x9c,0x69,0x5a,0x53,0x79,0x6a,0x8d,0x76,0xa3,0x82,0xa8,0x7a, +0xa9,0x96,0x96,0x48,0x5a,0x3a,0xa8,0x87,0x87,0x37,0x86,0xa7,0xf6,0x88,0x67,0x48, +0x87,0x8a,0x8a,0x4b,0x56,0x65,0x95,0x9a,0x97,0x87,0x91,0x86,0x88,0x7d,0x79,0x8a, +0x65,0x6a,0x59,0x89,0xa5,0xa6,0x74,0x68,0x76,0xb8,0xa7,0x89,0x28,0x59,0x58,0xb9, +0x79,0x88,0x55,0xa5,0x96,0xb9,0x79,0x87,0x65,0x87,0x5b,0x7b,0x59,0x85,0x76,0x86, +0x79,0xa6,0xa7,0xa4,0x68,0x68,0x6a,0x98,0x8a,0x68,0x39,0x66,0x98,0xb6,0x98,0x74, +0x76,0x85,0xa9,0x89,0x7b,0x57,0x77,0x67,0x8a,0x79,0x97,0x84,0xa5,0x77,0x99,0x88, +0xa7,0x67,0x68,0x39,0x79,0x78,0x97,0x67,0x66,0x77,0xc6,0xa7,0xa7,0x58,0x67,0x69, +0x98,0x6b,0x78,0x58,0x85,0x87,0x97,0x89,0x84,0x85,0x85,0x79,0x7a,0x7a,0x77,0x79, +0x67,0x7a,0x77,0xa7,0x95,0x97,0x66,0x98,0x97,0xa8,0x68,0x59,0x48,0x88,0x88,0x89, +0x67,0x86,0x86,0xb7,0x88,0x98,0x67,0x85,0x68,0x79,0x5b,0x88,0x77,0x86,0x78,0x97, +0x88,0xa5,0x87,0x77,0x69,0x78,0x8a,0x88,0x6a,0x57,0x78,0x86,0xa8,0x86,0x87,0x75, +0x97,0x87,0x8a,0x68,0x69,0x66,0x89,0x69,0x89,0x76,0x95,0x86,0xa7,0x78,0x98,0x77, +0x87,0x58,0x69,0x59,0x98,0x77,0x87,0x67,0x96,0x97,0xb6,0x88,0x77,0x68,0x87,0x7a, +0x79,0x69,0x76,0x77,0x86,0x88,0x86,0x87,0x84,0x87,0x78,0x7a,0x78,0x79,0x67,0x79, +0x68,0x88,0x96,0xa7,0x76,0x87,0x77,0x98,0x88,0x79,0x48,0x78,0x68,0x98,0x78,0x87, +0x76,0xa6,0x87,0x98,0x78,0x87,0x67,0x78,0x6a,0x79,0x69,0x86,0x77,0x86,0x88,0x96, +0x97,0x86,0x78,0x78,0x79,0x88,0x7a,0x67,0x68,0x77,0x98,0x96,0x98,0x76,0x87,0x86, +0x88,0x78,0x79,0x67,0x78,0x68,0x89,0x78,0x97,0x86,0xa6,0x77,0x98,0x78,0x87,0x68, +0x78,0x59,0x88,0x78,0x87,0x77,0x86,0x87,0x96,0x88,0x87,0x78,0x77,0x79,0x88,0x7a, +0x78,0x78,0x86,0x88,0x86,0x88,0x86,0x87,0x77,0x79,0x78,0x79,0x77,0x78,0x67,0x78, +0x87,0x97,0x86,0x97,0x77,0x88,0x87,0x88,0x68,0x78,0x58,0x88,0x78,0x88,0x77,0x96, +0x87,0x97,0x88,0x87,0x78,0x77,0x69,0x78,0x69,0x77,0x77,0x86,0x78,0x86,0x87,0x96, +0x88,0x77,0x79,0x78,0x89,0x78,0x79,0x67,0x88,0x86,0x97,0x86,0x87,0x76,0x88,0x78, +0x89,0x68,0x78,0x67,0x88,0x78,0x88,0x87,0x96,0x87,0x97,0x78,0x87,0x78,0x78,0x68, +0x78,0x68,0x87,0x78,0x87,0x77,0x86,0x87,0x97,0x78,0x77,0x78,0x78,0x79,0x78,0x78, +0x77,0x87,0x86,0x88,0x86,0x87,0x86,0x88,0x78,0x79,0x78,0x78,0x67,0x78,0x77,0x87, +0x87,0x97,0x77,0x87,0x77,0x88,0x78,0x78,0x58,0x78,0x78,0x88,0x78,0x87,0x77,0x96, +0x87,0x87,0x78,0x87,0x78,0x78,0x79,0x78,0x78,0x87,0x87,0x86,0x88,0x86,0x87,0x87, +0x78,0x78,0x79,0x78,0x79,0x77,0x78,0x77,0x87,0x87,0x97,0x77,0x87,0x77,0x88,0x78, +0x78,0x68,0x78,0x78,0x88,0x77,0x87,0x87,0x97,0x77,0x87,0x78,0x87,0x78,0x78,0x68, +0x88,0x78,0x87,0x77,0x86,0x87,0x86,0x88,0x87,0x78,0x77,0x79,0x78,0x79,0x77,0x78, +0x87,0x87,0x87,0x88,0x86,0x87,0x77,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x97, +0x87,0x97,0x77,0x87,0x78,0x88,0x68,0x78,0x68,0x88,0x78,0x87,0x77,0x86,0x87,0x87, +0x88,0x87,0x78,0x77,0x79,0x78,0x78,0x77,0x78,0x87,0x87,0x86,0x87,0x87,0x88,0x77, +0x78,0x78,0x88,0x78,0x78,0x77,0x87,0x87,0x97,0x87,0x87,0x77,0x88,0x78,0x78,0x68, +0x78,0x78,0x88,0x78,0x87,0x87,0x97,0x87,0x87,0x78,0x87,0x78,0x78,0x78,0x78,0x78, +0x87,0x78,0x87,0x87,0x86,0x87,0x87,0x88,0x77,0x78,0x78,0x79,0x78,0x78,0x77,0x87, +0x87,0x88,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78,0x88,0x77,0x87,0x87,0x97, +0x77,0x87,0x78,0x88,0x78,0x78,0x68,0x78,0x78,0x87,0x77,0x87,0x87,0x87,0x88,0x87, +0x78,0x77,0x78,0x78,0x78,0x77,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x88,0x78, +0x78,0x78,0x78,0x77,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x88,0x78,0x78,0x68, +0x88,0x78,0x87,0x77,0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x78,0x78,0x78,0x77,0x78, +0x87,0x87,0x86,0x87,0x87,0x88,0x77,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87, +0x87,0x87,0x87,0x88,0x77,0x88,0x78,0x78,0x78,0x88,0x77,0x87,0x77,0x87,0x87,0x87, +0x77,0x87,0x78,0x78,0x78,0x78,0x78,0x87,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x87, +0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x78,0x78, +0x78,0x78,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78, +0x87,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x87,0x78,0x78,0x78,0x77,0x78,0x87,0x88, +0x87,0x87,0x87,0x88,0x87,0x88,0x78,0x78,0x78,0x78,0x77,0x88,0x77,0x87,0x87,0x87, +0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78,0x87,0x77,0x87,0x87,0x87,0x87,0x87, +0x78,0x88,0x78,0x78,0x78,0x77,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x87,0x78,0x78, +0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x88,0x78,0x78,0x78, +0x78,0x77,0x87,0x77,0x87,0x87,0x87,0x77,0x87,0x78,0x88,0x78,0x78,0x78,0x87,0x78, +0x87,0x87,0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87, +0x87,0x87,0x87,0x88,0x77,0x78,0x78,0x78,0x78,0x78,0x77,0x87,0x87,0x87,0x87,0x87, +0x77,0x88,0x78,0x78,0x78,0x78,0x78,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x87, +0x78,0x78,0x78,0x78,0x78,0x87,0x78,0x87,0x87,0x87,0x88,0x87,0x88,0x77,0x78,0x78, +0x78,0x77,0x78,0x77,0x87,0x87,0x87,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78, +0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x88,0x78,0x78,0x78,0x78,0x78,0x87,0x77, +0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x78,0x78,0x78,0x77,0x78,0x87,0x87,0x87,0x87, +0x87,0x88,0x77,0x88,0x78,0x78,0x78,0x78,0x77,0x88,0x77,0x87,0x87,0x87,0x87,0x87, +0x78,0x88,0x78,0x78,0x78,0x88,0x78,0x87,0x77,0x87,0x87,0x87,0x88,0x87,0x78,0x78, +0x78,0x78,0x78,0x77,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x78,0x78,0x78,0x78, +0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x78,0x88,0x78,0x78,0x78,0x88,0x77, +0x87,0x87,0x87,0x87,0x87,0x78,0x87,0x78,0x78,0x78,0x78,0x78,0x87,0x78,0x87,0x87, +0x87,0x87,0x87,0x88,0x77,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87, +0x87,0x88,0x78,0x78,0x78,0x78,0x78,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x77,0x88, +0x78,0x78,0x78,0x78,0x78,0x87,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x87,0x78,0x78, +0x78,0x77,0x78,0x87,0x88,0x87,0x87,0x87,0x88,0x87,0x88,0x78,0x78,0x78,0x78,0x77, +0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78,0x87,0x77, +0x87,0x87,0x87,0x87,0x87,0x78,0x88,0x78,0x78,0x78,0x77,0x78,0x87,0x87,0x87,0x87, +0x87,0x88,0x87,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x87,0x88, +0x77,0x88,0x78,0x78,0x78,0x88,0x77,0x87,0x77,0x87,0x87,0x87,0x77,0x87,0x78,0x78, +0x78,0x78,0x78,0x87,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x78,0x78, +0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x78,0x78,0x78,0x78,0x88,0x77, +0x87,0x87,0x87,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78,0x87,0x77,0x87,0x87, +0x87,0x87,0x87,0x78,0x87,0x78,0x78,0x78,0x78,0x78,0x87,0x88,0x87,0x87,0x87,0x88, +0x87,0x88,0x77,0x78,0x78,0x78,0x77,0x78,0x77,0x87,0x87,0x87,0x87,0x87,0x77,0x88, +0x78,0x78,0x78,0x78,0x78,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x88,0x78,0x78, +0x78,0x78,0x78,0x87,0x77,0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x78,0x78,0x78,0x77, +0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x88,0x78,0x78,0x78,0x78,0x77,0x88,0x77, +0x87,0x87,0x87,0x77,0x87,0x78,0x88,0x78,0x78,0x78,0x88,0x78,0x87,0x87,0x87,0x87, +0x87,0x88,0x87,0x78,0x78,0x78,0x78,0x78,0x77,0x78,0x87,0x87,0x87,0x87,0x87,0x88, +0x77,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x77,0x88,0x78,0x78, +0x78,0x78,0x78,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x87,0x78,0x78,0x78,0x78, +0x78,0x87,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x78,0x78,0x78,0x78,0x78,0x77, +0x88,0x87,0x87,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78,0x88,0x77,0x87,0x87, +0x87,0x87,0x87,0x78,0x88,0x78,0x78,0x78,0x78,0x78,0x87,0x77,0x87,0x87,0x87,0x87, +0x87,0x78,0x77,0x78,0x78,0x78,0x77,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x88, +0x78,0x78,0x78,0x78,0x77,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x88,0x78,0x78, +0x78,0x78,0x78,0x87,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x78,0x78,0x78,0x78,0x77, +0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x87,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87, +0x87,0x87,0x87,0x87,0x88,0x77,0x88,0x78,0x78,0x78,0x88,0x77,0x87,0x77,0x87,0x87, +0x87,0x77,0x87,0x78,0x78,0x78,0x78,0x78,0x87,0x78,0x87,0x87,0x87,0x87,0x87,0x88, +0x87,0x78,0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x78, +0x78,0x78,0x78,0x88,0x77,0x87,0x87,0x87,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78, +0x78,0x87,0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x87,0x78,0x78,0x78,0x78,0x78,0x87, +0x88,0x87,0x87,0x87,0x88,0x87,0x88,0x77,0x78,0x78,0x78,0x77,0x88,0x77,0x87,0x87, +0x87,0x87,0x87,0x77,0x88,0x78,0x78,0x78,0x78,0x78,0x87,0x77,0x87,0x87,0x87,0x87, +0x87,0x78,0x88,0x78,0x78,0x78,0x78,0x78,0x87,0x87,0x87,0x87,0x87,0x88,0x87,0x78, +0x78,0x78,0x78,0x78,0x77,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x77,0x88,0x78,0x78, +0x78,0x78,0x77,0x87,0x77,0x87,0x87,0x87,0x77,0x87,0x78,0x88,0x78,0x78,0x78,0x88, +}; diff --git a/gbdk-lib/examples/gb/wav_sample/src/sample_data_2.h b/gbdk-lib/examples/gb/wav_sample/src/sample_data_2.h @@ -0,0 +1,114 @@ +const UINT8 sample2[] = { +0x8b,0xef,0xff,0xff,0xec,0xb9,0x88,0x88,0x88,0x86,0x43,0x10,0x0,0x1,0x35,0x79, +0xab,0xbb,0xaa,0xab,0xbc,0xee,0xff,0xed,0xa8,0x52,0x0,0x0,0x0,0x24,0x67,0x89, +0x99,0x9a,0xbb,0xcd,0xee,0xee,0xdb,0xa8,0x65,0x33,0x22,0x33,0x33,0x33,0x33,0x34, +0x56,0x89,0xbd,0xff,0xff,0xfe,0xca,0x97,0x64,0x43,0x32,0x22,0x22,0x22,0x34,0x56, +0x89,0xab,0xcc,0xcc,0xcc,0xcb,0xbb,0xa9,0x88,0x65,0x43,0x21,0x11,0x11,0x23,0x46, +0x79,0xbc,0xde,0xee,0xed,0xcb,0xa9,0x87,0x76,0x55,0x54,0x43,0x32,0x23,0x34,0x56, +0x78,0x9a,0xbc,0xcc,0xcc,0xcc,0xbb,0xba,0x97,0x65,0x32,0x11,0x1,0x12,0x45,0x78, +0x9a,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xa9,0x87,0x64,0x43,0x22,0x33,0x44,0x55,0x66, +0x77,0x78,0x9a,0xbd,0xee,0xed,0xcb,0x98,0x65,0x43,0x33,0x34,0x44,0x55,0x55,0x56, +0x67,0x89,0xab,0xcd,0xdc,0xcb,0xa9,0x88,0x77,0x66,0x65,0x54,0x33,0x22,0x33,0x46, +0x89,0xac,0xcd,0xdc,0xbb,0xa9,0x99,0x88,0x87,0x76,0x54,0x43,0x33,0x33,0x45,0x77, +0x89,0x99,0xaa,0xaa,0xab,0xbb,0xbb,0xba,0x97,0x64,0x33,0x22,0x23,0x45,0x66,0x78, +0x88,0x99,0x9a,0xab,0xbb,0xbb,0xaa,0x98,0x76,0x65,0x55,0x55,0x54,0x44,0x45,0x56, +0x67,0x89,0xab,0xbc,0xcc,0xcb,0xa9,0x87,0x76,0x65,0x54,0x44,0x44,0x45,0x56,0x67, +0x88,0x99,0xaa,0xbb,0xba,0xaa,0xa9,0x98,0x87,0x76,0x55,0x44,0x44,0x44,0x45,0x67, +0x88,0x9a,0xab,0xbb,0xbb,0xaa,0x99,0x88,0x77,0x66,0x55,0x55,0x44,0x55,0x55,0x67, +0x78,0x99,0xaa,0xaa,0xaa,0xaa,0xa9,0x99,0x87,0x76,0x55,0x44,0x44,0x44,0x56,0x78, +0x89,0x99,0x99,0xaa,0xaa,0xaa,0xa9,0x98,0x87,0x66,0x55,0x54,0x55,0x55,0x66,0x77, +0x77,0x88,0x99,0xaa,0xbb,0xba,0xa9,0x88,0x76,0x65,0x55,0x55,0x55,0x56,0x66,0x67, +0x77,0x89,0x9a,0xaa,0xaa,0xa9,0x99,0x88,0x77,0x76,0x66,0x55,0x55,0x55,0x55,0x67, +0x78,0x99,0xaa,0xaa,0xaa,0x99,0x98,0x88,0x87,0x76,0x65,0x55,0x55,0x55,0x66,0x77, +0x88,0x99,0x99,0x99,0x99,0xaa,0x99,0x98,0x87,0x76,0x55,0x55,0x55,0x56,0x67,0x77, +0x88,0x89,0x99,0x9a,0xaa,0xa9,0x99,0x88,0x77,0x66,0x66,0x66,0x66,0x66,0x66,0x67, +0x78,0x89,0x99,0xaa,0xaa,0xa9,0x99,0x88,0x77,0x66,0x66,0x55,0x55,0x66,0x66,0x77, +0x78,0x89,0x99,0x99,0x99,0x99,0x99,0x88,0x87,0x76,0x66,0x65,0x55,0x56,0x66,0x77, +0x78,0x89,0x99,0x99,0x99,0x99,0x98,0x88,0x77,0x76,0x66,0x66,0x66,0x66,0x66,0x77, +0x78,0x88,0x99,0x99,0x99,0x99,0x99,0x88,0x87,0x77,0x66,0x65,0x55,0x66,0x67,0x77, +0x88,0x88,0x99,0x99,0x99,0x99,0x99,0x88,0x87,0x76,0x66,0x66,0x66,0x66,0x67,0x77, +0x78,0x88,0x89,0x99,0x99,0x99,0x98,0x88,0x77,0x76,0x66,0x66,0x66,0x66,0x67,0x77, +0x78,0x88,0x99,0x99,0x99,0x99,0x88,0x88,0x77,0x77,0x76,0x66,0x66,0x66,0x66,0x77, +0x78,0x89,0x99,0x99,0x99,0x98,0x88,0x88,0x87,0x77,0x76,0x66,0x66,0x66,0x67,0x77, +0x88,0x88,0x89,0x99,0x99,0x99,0x98,0x88,0x87,0x77,0x66,0x66,0x66,0x66,0x77,0x77, +0x78,0x88,0x88,0x99,0x99,0x99,0x88,0x88,0x77,0x77,0x66,0x66,0x66,0x66,0x77,0x77, +0x78,0x88,0x89,0x99,0x99,0x99,0x88,0x88,0x77,0x77,0x76,0x66,0x66,0x66,0x77,0x77, +0x88,0x88,0x88,0x99,0x99,0x98,0x88,0x88,0x87,0x77,0x77,0x66,0x66,0x66,0x77,0x77, +0x78,0x88,0x88,0x99,0x99,0x88,0x88,0x88,0x77,0x77,0x77,0x66,0x66,0x67,0x77,0x77, +0x78,0x88,0x88,0x89,0x99,0x88,0x88,0x88,0x87,0x77,0x77,0x66,0x66,0x67,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x66,0x66,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x99,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x88,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x88,0x88,0x88,0x88,0x88,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x88,0x88,0x88,0x88,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x88,0x88,0x88,0x88,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x88,0x88,0x88,0x87,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x88,0x88,0x88,0x88,0x88,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x87,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x88,0x88,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x87,0x87,0x88,0x88,0x78,0x88,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x87,0x78,0x88,0x88,0x87,0x88,0x88,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x88,0x88,0x88,0x88,0x87,0x77,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x87,0x88,0x88,0x88,0x88,0x88,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x78,0x78,0x88,0x88,0x88,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x77,0x88,0x88,0x78,0x78,0x77,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x77,0x88,0x88,0x88,0x88,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x77,0x78,0x87,0x88,0x87,0x87,0x77,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x78,0x88,0x78,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x87,0x88,0x88,0x88,0x88,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x78,0x78,0x87,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x77,0x88,0x78,0x78,0x78,0x78,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x77,0x87,0x78,0x88,0x77,0x77,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x77,0x77,0x87,0x87,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x87,0x87,0x87,0x77,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x78,0x78,0x77,0x77,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x77,0x78,0x77,0x87,0x87,0x77,0x88,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x77,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x87,0x87,0x87,0x87,0x77,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x87,0x87,0x77,0x77,0x87,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x87,0x87,0x77,0x77,0x87,0x87,0x88,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x78,0x77,0x77,0x77,0x77,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x77,0x87,0x88,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x87,0x77,0x87,0x87,0x87,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x78,0x78,0x78,0x77,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x78,0x77,0x77,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x87,0x87,0x78,0x78,0x87,0x87,0x88,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x87,0x88,0x77,0x77,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x87,0x87,0x87,0x87,0x87,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x77,0x87,0x77,0x78,0x77,0x77,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x78,0x87,0x87,0x87,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x77,0x78,0x77,0x77,0x77,0x77,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x78,0x78,0x78,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x87,0x77,0x87,0x87,0x87,0x77,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x87,0x87,0x87,0x87,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x77,0x77,0x87,0x88,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x77,0x77,0x77,0x77,0x88,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x77,0x87,0x87,0x88,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x88,0x87,0x88,0x77,0x87,0x87,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x77,0x77,0x88,0x78,0x78,0x77,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x78,0x78,0x78,0x78,0x77,0x78,0x78,0x77,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +0x77,0x78,0x78,0x78,0x78,0x77,0x87,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, +}; diff --git a/gbdk-lib/examples/gb/wav_sample/src/sample_player.c b/gbdk-lib/examples/gb/wav_sample/src/sample_player.c @@ -0,0 +1,67 @@ +#include "sample_player.h" + +UINT8 play_bank = 1; +const UINT8 * play_sample = 0; +UINT16 play_length = 0; + +void play_isr() __nonbanked __naked { + __asm + ld hl, #_play_length ; something left to play? + ld a, (hl+) + or (hl) + ret z + + ld hl, #_play_sample + ld a, (hl+) + ld h, (hl) + ld l, a ; HL = current position inside the sample + + ; load new waveform + ld a, (#__current_bank) ; save bank and switch + ld e, a + ld a, (#_play_bank) + ld (#0x2000), a + + xor a + ldh (_NR30_REG),a + +_wave_addr = 0xFF30 + .rept 16 + ld a, (hl+) + ldh (_wave_addr), a +_wave_addr = _wave_addr + 1 + .endm + + ld a, #0x80 + ldh (_NR30_REG),a + ld a, #0xFE ; length of wave + ldh (_NR31_REG),a + ld a, #0x20 ; volume + ldh (_NR32_REG),a + xor a ; low freq bits are zero + ldh (_NR33_REG),a + ld a, #0xC7 ; start; no loop; high freq bits are 111 + ldh (_NR34_REG),a + + ld a, e ; restore bank + ld (#0x2000), a + + ld a, l ; save current position + ld (#_play_sample), a + ld a, h + ld (#_play_sample+1), a + + ld hl, #_play_length ; decrement length variable + ld a, (hl) + sub #1 + ld (hl+), a + ld a, (hl) + sbc #0 + ld (hl), a + ret + __endasm; +} + +void set_sample(UINT8 bank, const UINT8 * sample, UINT16 length) __critical { + play_bank = bank, play_sample = sample, play_length = length >> 4; +} diff --git a/gbdk-lib/examples/gb/wav_sample/src/sample_player.h b/gbdk-lib/examples/gb/wav_sample/src/sample_player.h @@ -0,0 +1,13 @@ +#ifndef SAMPLE_PLAYER_H_INCLUDE +#define SAMPLE_PLAYER_H_INCLUDE + +#include <gb/gb.h> + +extern UINT8 play_bank; +extern const UINT8 * play_sample; +extern UINT16 play_length; + +void set_sample(UINT8 bank, const UINT8 * sample, UINT16 length) __nonbanked; +void play_isr() __nonbanked; + +#endif + diff --git a/gbdk-lib/examples/gb/wav_sample/src/samples_bank2.c b/gbdk-lib/examples/gb/wav_sample/src/samples_bank2.c @@ -0,0 +1,10 @@ +#pragma bank 2 + +#include <gb/gb.h> + +#include "sample_player.h" +#include "sample_data_1.h" + +void play_sample1() __banked { + set_sample(_current_bank, sample1, sizeof(sample1)); +} diff --git a/gbdk-lib/examples/gb/wav_sample/src/samples_bank2.h b/gbdk-lib/examples/gb/wav_sample/src/samples_bank2.h @@ -0,0 +1,6 @@ +#ifndef SAMPLES_BANK2_H_INCLUDE +#define SAMPLES_BANK2_H_INCLUDE + +void play_sample1() __banked; + +#endif + diff --git a/gbdk-lib/examples/gb/wav_sample/src/samples_bank3.c b/gbdk-lib/examples/gb/wav_sample/src/samples_bank3.c @@ -0,0 +1,10 @@ +#pragma bank 3 + +#include <gb/gb.h> + +#include "sample_player.h" +#include "sample_data_2.h" + +void play_sample2() __banked { + set_sample(_current_bank, sample2, sizeof(sample2)); +} diff --git a/gbdk-lib/examples/gb/wav_sample/src/samples_bank3.h b/gbdk-lib/examples/gb/wav_sample/src/samples_bank3.h @@ -0,0 +1,6 @@ +#ifndef SAMPLES_BANK3_H_INCLUDE +#define SAMPLES_BANK3_H_INCLUDE + +void play_sample2() __banked; + +#endif + diff --git a/gbdk-lib/examples/gb/wav_sample/src/samptest.c b/gbdk-lib/examples/gb/wav_sample/src/samptest.c @@ -0,0 +1,38 @@ +#include <gb/gb.h> +#include <stdio.h> + +#include "sample_player.h" + +#include "samples_bank2.h" +#include "samples_bank3.h" + + +void main() +{ + + NR52_REG = 0x80u; + NR51_REG = 0xffu; + NR50_REG = 0x77u; + + __critical { + TMA_REG = 0xC0u, TAC_REG = 0x07u; + add_TIM(play_isr); + set_interrupts(VBL_IFLAG | TIM_IFLAG); + } + + puts("PRESS A/B TO PLAY\n"); + + while(1) + { + UINT8 j = joypad(); + if (j & J_A) { + play_sample1(); + while (joypad() & J_A) wait_vbl_done(); + } else + if (j & J_B) { + play_sample2(); + while (joypad() & J_B) wait_vbl_done(); + } + wait_vbl_done(); + } +} diff --git a/gbdk-lib/examples/gb/wav_sample/utils/cvtsample.py b/gbdk-lib/examples/gb/wav_sample/utils/cvtsample.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import sys +import wave + +def main(argv=None): + argv = argv or sys.argv + if len(argv) < 2: + print("cvtsample.py: no filename; try cvtsample.py --help") + sys.exit(1) + infilename = argv[1] + ident = argv[2] if len(argv) > 2 else "sample" + fmt = argv[3].upper() if len(argv) > 3 else "C" + if infilename in ('--help', '-h'): + print("usage: cvtsample.py SOURCE [IDENTIFIER] [FMT]") + return + + if (fmt == "C"): + sHDR = "const UINT8 {:s}[] = {{\n" + sFOOT = "};\n" + sEMIT = "0x{:x}" + sNEW = ",\n" + sNONEW = "," + elif (fmt == "ASM"): + sHDR = "{:s}::" + sFOOT = "" + sEMIT = "${:x}" + sNEW = "\n" + sNONEW = "," + + with wave.open(infilename, mode="rb") as f: + p = f.getparams() + if (p.nchannels == 1) and (p.sampwidth == 1) and (p.framerate >= 8000) and (p.framerate <= 8192) and (p.comptype == 'NONE'): + data = f.readframes(p.nframes) + c = 0 + cnt = 0; + flag = False + sys.stdout.write(sHDR.format(ident)) + for i in range(len(data) - len(data) % 32): + c = ((c << 4) | (data[i] >> 4)) & 0xFF + if flag: + sys.stdout.write(sEMIT.format(c)) + cnt += 1 + sys.stdout.write(sNEW if (cnt % 16 == 0) else sNONEW) + + flag = not flag + sys.stdout.write(sFOOT) + sys.stdout.flush() + else: + sys.stderr.write("ERROR: Invalid wav file format\n") + sys.stderr.write("Requires - nChannels: 1, sampWidth: 1, rate: 8000 - 8192, compType: NONE\n") + sys.stderr.write("Found - nChannels: %d, sampWidth: %d, rate: %d, compType: %s\n" % (p.nchannels, p.sampwidth, p.framerate, p.comptype)) + sys.stderr.flush() + +if __name__=='__main__': + main()

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.