Subversion Repositories svn.mios32

Compare Revisions

Ignore whitespace Rev 2593 → Rev 2594

/trunk/apps/sequencers/LoopA/seq.c
File deleted
/trunk/apps/sequencers/LoopA/seq.h
File deleted
/trunk/apps/sequencers/LoopA/hardware.h
2,30 → 2,66
 
#include "loopa_datatypes.h"
 
extern const u8 led_startstop;
extern const u8 led_armrecord;
// PHYSICAL HARDWARE LEDs (three colors per LED)
extern const u8 HW_LED_RED_GP1;
extern const u8 HW_LED_RED_GP2;
extern const u8 HW_LED_RED_GP3;
extern const u8 HW_LED_RED_GP4;
extern const u8 HW_LED_RED_GP5;
extern const u8 HW_LED_RED_GP6;
 
extern const u8 LED_GP1;
extern const u8 led_gp2;
extern const u8 led_gp3;
extern const u8 led_gp4;
extern const u8 led_gp5;
extern const u8 led_gp6;
extern const u8 HW_LED_GREEN_GP1;
extern const u8 HW_LED_GREEN_GP2;
extern const u8 HW_LED_GREEN_GP3;
extern const u8 HW_LED_GREEN_GP4;
extern const u8 HW_LED_GREEN_GP5;
extern const u8 HW_LED_GREEN_GP6;
 
extern const u8 led_unmute1;
extern const u8 led_unmute2;
extern const u8 led_unmute3;
extern const u8 led_unmute4;
extern const u8 led_unmute5;
extern const u8 led_unmute6;
extern const u8 HW_LED_BLUE_GP1;
extern const u8 HW_LED_BLUE_GP2;
extern const u8 HW_LED_BLUE_GP3;
extern const u8 HW_LED_BLUE_GP4;
extern const u8 HW_LED_BLUE_GP5;
extern const u8 HW_LED_BLUE_GP6;
 
extern const u8 led_active1;
extern const u8 led_active2;
extern const u8 led_active3;
extern const u8 led_active4;
extern const u8 led_active5;
extern const u8 led_active6;
extern const u8 HW_LED_RED_RUNSTOP;
extern const u8 HW_LED_RED_ARM;
extern const u8 HW_LED_RED_SHIFT;
extern const u8 HW_LED_RED_MENU;
extern const u8 HW_LED_RED_COPY;
extern const u8 HW_LED_RED_PASTE;
extern const u8 HW_LED_RED_DELETE;
 
extern const u8 HW_LED_GREEN_RUNSTOP;
extern const u8 HW_LED_GREEN_ARM;
extern const u8 HW_LED_GREEN_SHIFT;
extern const u8 HW_LED_GREEN_MENU;
extern const u8 HW_LED_GREEN_COPY;
extern const u8 HW_LED_GREEN_PASTE;
extern const u8 HW_LED_GREEN_DELETE;
 
extern const u8 HW_LED_BLUE_RUNSTOP;
extern const u8 HW_LED_BLUE_ARM;
extern const u8 HW_LED_BLUE_SHIFT;
extern const u8 HW_LED_BLUE_MENU;
extern const u8 HW_LED_BLUE_COPY;
extern const u8 HW_LED_BLUE_PASTE;
extern const u8 HW_LED_BLUE_DELETE;
 
// LOGICAL LED STATES
extern const u8 LED_OFF;
extern const u8 LED_RED;
extern const u8 LED_GREEN;
extern const u8 LED_BLUE;
 
// LOGICAL LEDs (can be set to multiple colors)
enum MatiasLEDs
{
LED_GP1, LED_GP2, LED_GP3, LED_GP4, LED_GP5, LED_GP6,
LED_RUNSTOP, LED_ARM, LED_SHIFT, LED_MENU,
LED_COPY, LED_PASTE, LED_DELETE
};
 
extern const u8 led_scene1;
extern const u8 led_scene2;
extern const u8 led_scene3;
56,7 → 92,7
 
// --- Switches ---
 
extern const u8 sw_startstop;
extern const u8 sw_runstop;
extern const u8 sw_armrecord;
extern const u8 sw_encoder2;
 
/trunk/apps/sequencers/LoopA/gfx/menu.pnm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/apps/sequencers/LoopA/gfx/LoopAIconFont.pnm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/apps/sequencers/LoopA/gfx/LoopAIconFont.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/apps/sequencers/LoopA/loopa.c
198,141 → 198,262
}
// -------------------------------------------------------------------------------------------------
 
 
/**
* Update a single GP Led, only change state if
* Update a single LED (called from MUTEX_DIGITALOUT protected environment)
*
*/
void updateGPLed(u8 number, u8 newState)
void updateLED(u8 number, u8 newState)
{
static s8 s1 = -1, s2 = -1, s3 = -1, s4 = -1, s5 = -1, s6 = -1;
static u8 ledstate[13];
 
switch (number)
{
case 1:
if (s1 != newState)
case LED_GP1:
if (newState != ledstate[LED_GP1])
{
MIOS32_DOUT_PinSet(LED_GP1, newState);
s1 = newState;
MIOS32_DOUT_PinSet(HW_LED_RED_GP1, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_GP1, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP1, newState & LED_BLUE);
ledstate[LED_GP1] = newState;
}
break;
 
case 2:
if (s2 != newState)
case LED_GP2:
if (newState != ledstate[LED_GP2])
{
MIOS32_DOUT_PinSet(led_gp2, newState);
s2 = newState;
MIOS32_DOUT_PinSet(HW_LED_RED_GP2, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_GP2, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP2, newState & LED_BLUE);
ledstate[LED_GP2] = newState;
}
break;
 
case 3:
if (s3 != newState)
case LED_GP3:
if (newState != ledstate[LED_GP3])
{
MIOS32_DOUT_PinSet(led_gp3, newState);
s3 = newState;
MIOS32_DOUT_PinSet(HW_LED_RED_GP3, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_GP3, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP3, newState & LED_BLUE);
ledstate[LED_GP3] = newState;
}
break;
 
case 4:
if (s4 != newState)
case LED_GP4:
if (newState != ledstate[LED_GP4])
{
MIOS32_DOUT_PinSet(led_gp4, newState);
s4 = newState;
MIOS32_DOUT_PinSet(HW_LED_RED_GP4, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_GP4, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP4, newState & LED_BLUE);
ledstate[LED_GP4] = newState;
}
break;
 
case 5:
if (s5 != newState)
case LED_GP5:
if (newState != ledstate[LED_GP5])
{
MIOS32_DOUT_PinSet(led_gp5, newState);
s5 = newState;
MIOS32_DOUT_PinSet(HW_LED_RED_GP5, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_GP5, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP5, newState & LED_BLUE);
ledstate[LED_GP5] = newState;
}
break;
 
case 6:
if (s6 != newState)
case LED_GP6:
if (newState != ledstate[LED_GP6])
{
MIOS32_DOUT_PinSet(led_gp6, newState);
s6 = newState;
MIOS32_DOUT_PinSet(HW_LED_RED_GP6, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_GP6, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP6, newState & LED_BLUE);
ledstate[LED_GP6] = newState;
}
break;
case LED_RUNSTOP:
if (newState != ledstate[LED_RUNSTOP])
{
MIOS32_DOUT_PinSet(HW_LED_RED_RUNSTOP, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_RUNSTOP, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_RUNSTOP, newState & LED_BLUE);
ledstate[LED_RUNSTOP] = newState;
}
break;
case LED_ARM:
if (newState != ledstate[LED_ARM])
{
MIOS32_DOUT_PinSet(HW_LED_RED_ARM, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_ARM, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_ARM, newState & LED_BLUE);
ledstate[LED_ARM] = newState;
}
break;
case LED_SHIFT:
if (newState != ledstate[LED_SHIFT])
{
MIOS32_DOUT_PinSet(HW_LED_RED_SHIFT, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_SHIFT, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_SHIFT, newState & LED_BLUE);
ledstate[LED_SHIFT] = newState;
}
break;
case LED_MENU:
if (newState != ledstate[LED_MENU])
{
MIOS32_DOUT_PinSet(HW_LED_RED_MENU, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_MENU, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_MENU, newState & LED_BLUE);
ledstate[LED_MENU] = newState;
}
break;
case LED_COPY:
if (newState != ledstate[LED_COPY])
{
MIOS32_DOUT_PinSet(HW_LED_RED_COPY, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_COPY, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_COPY, newState & LED_BLUE);
ledstate[LED_COPY] = newState;
}
break;
case LED_PASTE:
if (newState != ledstate[LED_PASTE])
{
MIOS32_DOUT_PinSet(HW_LED_RED_PASTE, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_PASTE, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_PASTE, newState & LED_BLUE);
ledstate[LED_PASTE] = newState;
}
break;
case LED_DELETE:
if (newState != ledstate[LED_DELETE])
{
MIOS32_DOUT_PinSet(HW_LED_RED_DELETE, newState & LED_RED);
MIOS32_DOUT_PinSet(HW_LED_GREEN_DELETE, newState & LED_GREEN);
MIOS32_DOUT_PinSet(HW_LED_BLUE_DELETE, newState & LED_BLUE);
ledstate[LED_DELETE] = newState;
}
break;
}
 
}
// -------------------------------------------------------------------------------------------------
 
 
 
/**
* Update the six general purpose LED states (called periodically from app.c)
* Update the LED states of the Matias switches (called every 20ms from app.c timer)
*
*/
void updateGPLeds()
void updateLEDs()
{
MUTEX_DIGITALOUT_TAKE;
u8 led_gp1 = LED_OFF, led_gp2 = LED_OFF, led_gp3 = LED_OFF, led_gp4 = LED_OFF, led_gp5 = LED_OFF, led_gp6 = LED_OFF;
u8 led_runstop = LED_OFF, led_arm = LED_OFF, led_shift = LED_OFF, led_menu = LED_OFF;
u8 led_copy = LED_OFF, led_paste = LED_OFF, led_delete = LED_OFF;
 
if (screenIsInMenu())
{
led_menu = LED_RED;
 
switch (page_)
{
case PAGE_MIDIMONITOR:
led_gp2 = LED_RED;
break;
case PAGE_TEMPO:
led_gp3 = LED_RED;
break;
case PAGE_MUTE:
led_gp4 = LED_RED;
break;
case PAGE_NOTES:
led_gp5 = LED_RED;
break;
case PAGE_ROUTER:
led_arm = LED_RED;
break;
case PAGE_DISK:
led_shift = LED_RED;
break;
case PAGE_CLIP:
led_copy = LED_RED;
break;
case PAGE_FX:
led_paste = LED_RED;
break;
case PAGE_TRACK:
led_delete = LED_RED;
break;
}
}
 
else
{
switch (page_) {
// Normal pages, outside menu/shift
 
// Always indicate active track with a blue upper LED
led_gp1 = activeTrack_ == 0 ? LED_BLUE : LED_OFF;
led_gp2 = activeTrack_ == 1 ? LED_BLUE : LED_OFF;
led_gp3 = activeTrack_ == 2 ? LED_BLUE : LED_OFF;
led_gp4 = activeTrack_ == 3 ? LED_BLUE : LED_OFF;
led_gp5 = activeTrack_ == 4 ? LED_BLUE : LED_OFF;
led_gp6 = activeTrack_ == 5 ? LED_BLUE : LED_OFF;
 
// Page-specific additonal lighting
switch (page_)
{
case PAGE_MUTE:
updateGPLed(1, !trackMute_[0]);
updateGPLed(2, !trackMute_[1]);
updateGPLed(3, !trackMute_[2]);
updateGPLed(4, !trackMute_[3]);
updateGPLed(5, !trackMute_[4]);
updateGPLed(6, !trackMute_[5]);
led_gp1 |= trackMute_[0] ? LED_OFF : LED_GREEN;
led_gp2 |= trackMute_[1] ? LED_OFF : LED_GREEN;
led_gp3 |= trackMute_[2] ? LED_OFF : LED_GREEN;
led_gp4 |= trackMute_[3] ? LED_OFF : LED_GREEN;
led_gp5 |= trackMute_[4] ? LED_OFF : LED_GREEN;
led_gp6 |= trackMute_[5] ? LED_OFF : LED_GREEN;
break;
 
case PAGE_CLIP:
updateGPLed(1, command_ == COMMAND_CLIPLEN);
updateGPLed(2, command_ == COMMAND_QUANTIZE);
updateGPLed(3, command_ == COMMAND_TRANSPOSE);
updateGPLed(4, command_ == COMMAND_SCROLL);
updateGPLed(5, command_ == COMMAND_STRETCH);
updateGPLed(6, command_ == COMMAND_CLEAR);
led_gp1 |= command_ == COMMAND_CLIPLEN ? LED_RED : LED_OFF;
led_gp2 |= command_ == COMMAND_QUANTIZE ? LED_RED : LED_OFF;
led_gp3 |= command_ == COMMAND_TRANSPOSE ? LED_RED : LED_OFF;
led_gp4 |= command_ == COMMAND_SCROLL ? LED_RED : LED_OFF;
led_gp5 |= command_ == COMMAND_STRETCH ? LED_RED : LED_OFF;
led_gp6 |= command_ == COMMAND_FREEZE ? LED_RED : LED_OFF;
break;
 
case PAGE_FX:
break;
 
case PAGE_NOTES:
updateGPLed(1, command_ == COMMAND_POSITION);
updateGPLed(2, command_ == COMMAND_NOTE);
updateGPLed(3, command_ == COMMAND_VELOCITY);
updateGPLed(4, command_ == COMMAND_LENGTH);
updateGPLed(5, 0);
updateGPLed(6, command_ == COMMAND_DELETENOTE);
led_gp1 |= command_ == COMMAND_POSITION ? LED_RED : LED_OFF;
led_gp2 |= command_ == COMMAND_NOTE ? LED_RED : LED_OFF;
led_gp3 |= command_ == COMMAND_VELOCITY ? LED_RED : LED_OFF;
led_gp4 |= command_ == COMMAND_LENGTH ? LED_RED : LED_OFF;
led_gp6 |= command_ == COMMAND_DELETENOTE ? LED_RED : LED_OFF;
break;
 
case PAGE_TRACK:
updateGPLed(1, command_ == COMMAND_PORT);
updateGPLed(2, command_ == COMMAND_CHANNEL);
updateGPLed(3, 0);
updateGPLed(4, 0);
updateGPLed(5, 0);
updateGPLed(6, 0);
led_gp1 |= command_ == COMMAND_PORT ? LED_RED : LED_OFF;
led_gp2 |= command_ == COMMAND_CHANNEL ? LED_RED : LED_OFF;
break;
 
case PAGE_DISK:
updateGPLed(1, command_ == COMMAND_SAVE);
updateGPLed(2, command_ == COMMAND_LOAD);
updateGPLed(3, command_ == COMMAND_NEW);
updateGPLed(4, 0);
updateGPLed(5, 0);
updateGPLed(6, 0);
led_gp1 |= command_ == COMMAND_SAVE ? LED_RED : LED_OFF;
led_gp2 |= command_ == COMMAND_LOAD ? LED_RED : LED_OFF;
led_gp3 |= command_ == COMMAND_NEW ? LED_RED : LED_OFF;
break;
 
case PAGE_TEMPO:
updateGPLed(1, command_ == COMMAND_BPM);
updateGPLed(2, command_ == COMMAND_BPMFLASH);
updateGPLed(3, 0);
updateGPLed(4, 0);
updateGPLed(5, 0);
updateGPLed(6, 0);
led_gp1 |= command_ == COMMAND_BPM ? LED_RED : LED_OFF;
led_gp2 |= command_ == COMMAND_BPMFLASH ? LED_RED : LED_OFF;
break;
}
}
 
MUTEX_DIGITALOUT_TAKE;
 
updateLED(LED_GP1, led_gp1);
updateLED(LED_GP2, led_gp2);
updateLED(LED_GP3, led_gp3);
updateLED(LED_GP4, led_gp4);
updateLED(LED_GP5, led_gp5);
updateLED(LED_GP6, led_gp6);
updateLED(LED_RUNSTOP, led_runstop);
updateLED(LED_ARM, led_arm);
updateLED(LED_SHIFT, led_shift);
updateLED(LED_MENU, led_menu);
updateLED(LED_COPY, led_copy);
updateLED(LED_PASTE, led_paste);
updateLED(LED_DELETE, led_delete);
 
MUTEX_DIGITALOUT_GIVE;
}
// -------------------------------------------------------------------------------------------------
346,14 → 467,15
activeTrack_ = trackNumber;
screenSetClipSelected(activeTrack_);
 
MUTEX_DIGITALOUT_TAKE;
MIOS32_DOUT_PinSet(led_active1, activeTrack_ == 0);
MIOS32_DOUT_PinSet(led_active2, activeTrack_ == 1);
MIOS32_DOUT_PinSet(led_active3, activeTrack_ == 2);
MIOS32_DOUT_PinSet(led_active4, activeTrack_ == 3);
MIOS32_DOUT_PinSet(led_active5, activeTrack_ == 4);
MIOS32_DOUT_PinSet(led_active6, activeTrack_ == 5);
/* MUTEX_DIGITALOUT_TAKE;
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP1, activeTrack_ == 0);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP2, activeTrack_ == 1);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP3, activeTrack_ == 2);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP4, activeTrack_ == 3);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP5, activeTrack_ == 4);
MIOS32_DOUT_PinSet(HW_LED_BLUE_GP6, activeTrack_ == 5);
MUTEX_DIGITALOUT_GIVE;
*/
}
// -------------------------------------------------------------------------------------------------
 
836,7 → 958,6
static u8 lastLEDstate = 255;
 
u16 ticksPerStep = SEQ_BPM_PPQN_Get() / 4;
 
u8 beatled = (bpm_tick / ticksPerStep) % 4;
 
if (beatled != lastLEDstate)
843,36 → 964,39
{
lastLEDstate = beatled;
 
MUTEX_DIGITALOUT_TAKE;
switch (beatled)
if (!screenIsInMenu() && !screenIsInShift())
{
case 0:
oledBeatFlashState_ = (bpm_tick / (ticksPerStep * 4) % 4 == 0) ? 2 : 1; // flash background (strong/normal)
MIOS32_DOUT_PinSet(led_beat0, 1);
MIOS32_DOUT_PinSet(led_beat1, 0);
MIOS32_DOUT_PinSet(led_beat2, 0);
MIOS32_DOUT_PinSet(led_beat3, 0);
break;
case 1:
MIOS32_DOUT_PinSet(led_beat0, 0);
MIOS32_DOUT_PinSet(led_beat1, 1);
MIOS32_DOUT_PinSet(led_beat2, 0);
MIOS32_DOUT_PinSet(led_beat3, 0);
break;
case 2:
MIOS32_DOUT_PinSet(led_beat0, 0);
MIOS32_DOUT_PinSet(led_beat1, 0);
MIOS32_DOUT_PinSet(led_beat2, 1);
MIOS32_DOUT_PinSet(led_beat3, 0);
break;
case 3:
MIOS32_DOUT_PinSet(led_beat0, 0);
MIOS32_DOUT_PinSet(led_beat1, 0);
MIOS32_DOUT_PinSet(led_beat2, 0);
MIOS32_DOUT_PinSet(led_beat3, 1);
break;
MUTEX_DIGITALOUT_TAKE;
switch (beatled) {
case 0:
oledBeatFlashState_ = (bpm_tick / (ticksPerStep * 4) % 4 == 0) ? 2
: 1; // flash background (strong/normal)
MIOS32_DOUT_PinSet(led_beat0, 1);
MIOS32_DOUT_PinSet(led_beat1, 0);
MIOS32_DOUT_PinSet(led_beat2, 0);
MIOS32_DOUT_PinSet(led_beat3, 0);
break;
case 1:
MIOS32_DOUT_PinSet(led_beat0, 0);
MIOS32_DOUT_PinSet(led_beat1, 1);
MIOS32_DOUT_PinSet(led_beat2, 0);
MIOS32_DOUT_PinSet(led_beat3, 0);
break;
case 2:
MIOS32_DOUT_PinSet(led_beat0, 0);
MIOS32_DOUT_PinSet(led_beat1, 0);
MIOS32_DOUT_PinSet(led_beat2, 1);
MIOS32_DOUT_PinSet(led_beat3, 0);
break;
case 3:
MIOS32_DOUT_PinSet(led_beat0, 0);
MIOS32_DOUT_PinSet(led_beat1, 0);
MIOS32_DOUT_PinSet(led_beat2, 0);
MIOS32_DOUT_PinSet(led_beat3, 1);
break;
}
MUTEX_DIGITALOUT_GIVE;
}
MUTEX_DIGITALOUT_GIVE;
 
// New step, Update clip positions
u8 i;
1039,8 → 1163,8
screenFormattedFlashMessage("Stopped");
 
MUTEX_DIGITALOUT_TAKE;
MIOS32_DOUT_PinSet(led_startstop, 0);
MIOS32_DOUT_PinSet(led_armrecord, 0);
MIOS32_DOUT_PinSet(HW_LED_GREEN_RUNSTOP, 0);
MIOS32_DOUT_PinSet(HW_LED_RED_ARM, 0);
MUTEX_DIGITALOUT_GIVE;
 
SEQ_BPM_Stop(); // stop sequencer
1076,7 → 1200,7
SEQ_BPM_Start();
 
MUTEX_DIGITALOUT_TAKE;
MIOS32_DOUT_PinSet(led_startstop, 1);
MIOS32_DOUT_PinSet(HW_LED_GREEN_RUNSTOP, 1);
MUTEX_DIGITALOUT_GIVE;
 
screenFormattedFlashMessage("Play");
1099,7 → 1223,7
isRecording_ = 1;
 
MUTEX_DIGITALOUT_TAKE;
MIOS32_DOUT_PinSet(led_armrecord, 1);
MIOS32_DOUT_PinSet(HW_LED_RED_ARM, 1);
MUTEX_DIGITALOUT_GIVE;
}
else
1108,7 → 1232,7
isRecording_ = 0;
 
MUTEX_DIGITALOUT_TAKE;
MIOS32_DOUT_PinSet(led_armrecord, 0);
MIOS32_DOUT_PinSet(HW_LED_RED_ARM, 0);
MUTEX_DIGITALOUT_GIVE;
}
 
1300,7 → 1424,7
*/
void editClear()
{
command_ = command_ == COMMAND_CLEAR ? COMMAND_NONE : COMMAND_CLEAR;
command_ = command_ == COMMAND_FREEZE ? COMMAND_NONE : COMMAND_FREEZE;
 
clipNotesSize_[activeTrack_][activeScene_] = 0;
 
1496,19 → 1620,33
{
DEBUG_MSG("Button: %d pressed\n", pin);
 
if (pin == sw_startstop)
if (pin == sw_runstop)
{
seqPlayStopButton();
if (screenIsInMenu())
{
page_ = PAGE_SETUP;
}
else
{
seqPlayStopButton();
}
}
else if (pin == sw_armrecord)
{
seqArmButton();
if (screenIsInMenu())
{
page_ = PAGE_ROUTER;
}
else
{
seqArmButton();
}
}
else if (pin == sw_shift)
{
if (screenIsInMenu())
{
page_ = PAGE_MUTE;
page_ = PAGE_DISK;
}
else
{
1534,7 → 1672,7
{
if (screenIsInMenu())
{
page_ = PAGE_TRACK;
page_ = PAGE_CLIP;
}
else
{
1551,81 → 1689,107
}
else if (pin == sw_paste)
{
voxelFrame();
// paste only, if we have a clip in memory
if (copiedClipSteps_ > 0)
if (screenIsInMenu())
{
clipSteps_[activeTrack_][activeScene_] = copiedClipSteps_;
clipQuantize_[activeTrack_][activeScene_] = copiedClipQuantize_;
clipTranspose_[activeTrack_][activeScene_] = copiedClipTranspose_;
clipScroll_[activeTrack_][activeScene_] = copiedClipScroll_;
clipStretch_[activeTrack_][activeScene_] = copiedClipStretch_;
memcpy(clipNotes_[activeTrack_][activeScene_], copiedClipNotes_, sizeof(copiedClipNotes_));
clipNotesSize_[activeTrack_][activeScene_] = copiedClipNotesSize_;
screenFormattedFlashMessage("pasted clip from buffer");
page_ = PAGE_FX;
}
else
screenFormattedFlashMessage("no clip in buffer");
 
{
// paste only, if we have a clip in memory
if (copiedClipSteps_ > 0)
{
clipSteps_[activeTrack_][activeScene_] = copiedClipSteps_;
clipQuantize_[activeTrack_][activeScene_] = copiedClipQuantize_;
clipTranspose_[activeTrack_][activeScene_] = copiedClipTranspose_;
clipScroll_[activeTrack_][activeScene_] = copiedClipScroll_;
clipStretch_[activeTrack_][activeScene_] = copiedClipStretch_;
memcpy(clipNotes_[activeTrack_][activeScene_], copiedClipNotes_, sizeof(copiedClipNotes_));
clipNotesSize_[activeTrack_][activeScene_] = copiedClipNotesSize_;
screenFormattedFlashMessage("pasted clip from buffer");
}
else
screenFormattedFlashMessage("no clip in buffer");
}
}
else if (pin == sw_delete)
{
editClear(); // shortcut: clear track
command_ = COMMAND_NONE;
if (screenIsInMenu())
{
page_ = PAGE_TRACK;
}
else
{
editClear(); // shortcut: clear track
command_ = COMMAND_NONE;
}
}
else if (pin == sw_gp1)
{
switch (page_)
if (screenIsInMenu())
{
case PAGE_MUTE:
toggleMute(0);
break;
case PAGE_CLIP:
editLen();
break;
case PAGE_NOTES:
notesPosition();
break;
case PAGE_TRACK:
midiTrackPort();
break;
case PAGE_DISK:
diskSave();
break;
case PAGE_TEMPO:
bpmBpm();
break;
// page_ = PAGE_SYSEX; TODO
}
else
{
switch (page_)
{
case PAGE_MUTE:
toggleMute(0);
break;
case PAGE_CLIP:
editLen();
break;
case PAGE_NOTES:
notesPosition();
break;
case PAGE_TRACK:
midiTrackPort();
break;
case PAGE_DISK:
diskSave();
break;
case PAGE_TEMPO:
bpmBpm();
break;
}
}
}
else if (pin == sw_gp2)
{
switch (page_)
if (screenIsInMenu())
{
case PAGE_MUTE:
toggleMute(1);
break;
case PAGE_CLIP:
editQuantize();
break;
case PAGE_NOTES:
notesNote();
break;
case PAGE_TRACK:
midiTrackChannel();
break;
case PAGE_DISK:
diskLoad();
break;
case PAGE_TEMPO:
bpmBpmflash();
break;
page_ = PAGE_MIDIMONITOR;
}
else
{
switch (page_)
{
case PAGE_MUTE:
toggleMute(1);
break;
case PAGE_CLIP:
editQuantize();
break;
case PAGE_NOTES:
notesNote();
break;
case PAGE_TRACK:
midiTrackChannel();
break;
case PAGE_DISK:
diskLoad();
break;
case PAGE_TEMPO:
bpmBpmflash();
break;
}
}
}
else if (pin == sw_gp3)
{
if (screenIsInMenu())
{
page_ = PAGE_CLIP;
page_ = PAGE_TEMPO;
}
else
{
1650,45 → 1814,66
}
else if (pin == sw_gp4)
{
switch (page_)
if (screenIsInMenu())
{
case PAGE_MUTE:
toggleMute(3);
break;
case PAGE_CLIP:
editScroll();
break;
case PAGE_NOTES:
notesLength();
break;
page_ = PAGE_MUTE;
}
else
{
switch (page_)
{
case PAGE_MUTE:
toggleMute(3);
break;
case PAGE_CLIP:
editScroll();
break;
case PAGE_NOTES:
notesLength();
break;
}
}
}
else if (pin == sw_gp5)
{
switch (page_)
if (screenIsInMenu())
{
case PAGE_MUTE:
toggleMute(4);
break;
case PAGE_CLIP:
editStretch();
break;
page_ = PAGE_NOTES;
}
else
{
switch (page_)
{
case PAGE_MUTE:
toggleMute(4);
break;
case PAGE_CLIP:
editStretch();
break;
}
}
}
else if (pin == sw_gp6)
{
switch (page_)
if (screenIsInMenu())
{
case PAGE_MUTE:
toggleMute(5);
break;
case PAGE_CLIP:
editClear();
break;
case PAGE_NOTES:
notesDeleteNote();
break;
// page_ = PAGE_SONG; TODO
}
else
{
switch (page_)
{
case PAGE_MUTE:
toggleMute(5);
break;
case PAGE_CLIP:
editClear();
break;
case PAGE_NOTES:
notesDeleteNote();
break;
}
}
}
else if (pin == sw_encoder2)
{
/trunk/apps/sequencers/LoopA/screen.c
677,7 → 677,7
case 128: printFormattedString(168, 54, "Zoom 8"); break;
}
 
command_ == COMMAND_CLEAR ? setFontInverted() : setFontNonInverted();
command_ == COMMAND_FREEZE ? setFontInverted() : setFontNonInverted();
printFormattedString(210, 54, "Clear");
 
setFontNonInverted();
763,7 → 763,7
command_ == COMMAND_LENGTH ? setFontInverted() : setFontNonInverted();
printFormattedString(126, 54, "Len %d", length);
 
command_ == COMMAND_CLEAR ? setFontInverted() : setFontNonInverted();
command_ == COMMAND_FREEZE ? setFontInverted() : setFontNonInverted();
printFormattedString(210, 54, "Delete");
 
setFontNonInverted();
922,38 → 922,37
 
int iconId;
 
iconId = (page_ == PAGE_TEMPO) ? 32 + KEYICON_TEMPO : 32 + KEYICON_TEMPO;
iconId = (page_ == PAGE_MIDIMONITOR) ? 32 + KEYICON_MIDIMONITOR_INVERTED : 32 + KEYICON_MIDIMONITOR;
printFormattedString(1 * 36 + 18, 0, "%c", iconId);
 
iconId = (page_ == PAGE_CLIP) ? 32 + KEYICON_CLIP_INVERTED : 32 + KEYICON_CLIP;
iconId = (page_ == PAGE_TEMPO) ? 32 + KEYICON_TEMPO_INVERTED : 32 + KEYICON_TEMPO;
printFormattedString(2 * 36 + 18, 0, "%c", iconId);
 
iconId = (page_ == PAGE_FX) ? 32 + KEYICON_FX_INVERTED : 32 + KEYICON_FX;
iconId = (page_ == PAGE_MUTE) ? 32 + KEYICON_MUTE_INVERTED : 32 + KEYICON_MUTE;
printFormattedString(3 * 36 + 18, 0, "%c", iconId);
 
iconId = (page_ == PAGE_NOTES) ? 32 + KEYICON_NOTES_INVERTED : 32 + KEYICON_NOTES;
printFormattedString(4 * 36 + 18, 0, "%c", iconId);
 
 
iconId = (page_ == PAGE_DISK) ? 32 + KEYICON_DISK_INVERTED : 32 + KEYICON_DISK;
iconId = (page_ == PAGE_SETUP) ? 32 + KEYICON_SETUP_INVERTED : 32 + KEYICON_SETUP;
printFormattedString(0 * 36, 32, "%c", iconId);
 
iconId = (page_ == PAGE_METRONOME) ? 32 + KEYICON_METRONOME_INVERTED : 32 + KEYICON_METRONOME;
iconId = (page_ == PAGE_ROUTER) ? 32 + KEYICON_ROUTER_INVERTED : 32 + KEYICON_ROUTER;
printFormattedString(1 * 36, 32, "%c", iconId);
 
iconId = (page_ == PAGE_MUTE) ? 32 + KEYICON_MUTE_INVERTED : 32 + KEYICON_MUTE;
iconId = (page_ == PAGE_DISK) ? 32 + KEYICON_DISK_INVERTED : 32 + KEYICON_DISK;
printFormattedString(2 * 36, 32, "%c", iconId);
 
iconId = 32 + KEYICON_MENU_INVERTED;
printFormattedString(3 * 36, 32, "%c", iconId);
 
iconId = (page_ == PAGE_TRACK) ? 32 + KEYICON_TRACK_INVERTED : 32 + KEYICON_TRACK;
iconId = (page_ == PAGE_CLIP) ? 32 + KEYICON_CLIP_INVERTED : 32 + KEYICON_CLIP;
printFormattedString(4 * 36, 32, "%c", iconId);
 
iconId = (page_ == PAGE_ROUTER) ? 32 + KEYICON_ROUTER_INVERTED : 32 + KEYICON_ROUTER;
iconId = (page_ == PAGE_FX) ? 32 + KEYICON_FX_INVERTED : 32 + KEYICON_FX;
printFormattedString(5 * 36, 32, "%c", iconId);
 
iconId = (page_ == PAGE_SETUP) ? 32 + KEYICON_SETUP_INVERTED : 32 + KEYICON_SETUP;
iconId = (page_ == PAGE_TRACK) ? 32 + KEYICON_TRACK_INVERTED : 32 + KEYICON_TRACK;
printFormattedString(6 * 36, 32, "%c", iconId);
 
setFontBold();
/trunk/apps/sequencers/LoopA/loopa.h
23,6 → 23,7
PAGE_FX,
PAGE_METRONOME,
PAGE_ROUTER,
PAGE_MIDIMONITOR,
PAGE_SETUP
};
 
29,7 → 30,7
enum Command
{
COMMAND_NONE,
COMMAND_CLIPLEN, COMMAND_QUANTIZE, COMMAND_TRANSPOSE, COMMAND_SCROLL, COMMAND_STRETCH, COMMAND_CLEAR, // PAGE_CLIP
COMMAND_CLIPLEN, COMMAND_QUANTIZE, COMMAND_TRANSPOSE, COMMAND_SCROLL, COMMAND_STRETCH, COMMAND_FREEZE, // PAGE_CLIP
COMMAND_POSITION, COMMAND_NOTE, COMMAND_VELOCITY, COMMAND_LENGTH, COMMAND_DELETENOTE, // PAGE_NOTES
COMMAND_PORT, COMMAND_CHANNEL, // PAGE_MIDI
COMMAND_SAVE, COMMAND_LOAD, COMMAND_NEW, // PAGE_DISK
140,6 → 141,9
// Update the six general purpose LED states
void updateGPLeds();
 
// Update the LED states (called every 20ms from app.c timer)
void updateLEDs();
 
// First callback from app - render Loopa Startup logo on screen
void loopaStartup();
 
/trunk/apps/sequencers/LoopA/app.c
281,7 → 281,6
loopaButtonReleased(pin);
}
 
 
/////////////////////////////////////////////////////////////////////////////
// This hook is called when an encoder has been moved
// incrementer is positive when encoder has been turned clockwise, else
322,7 → 321,8
if (taskCtr % 20 == 0)
{
display();
updateGPLeds();
//updateGPLeds();
updateLEDs();
}
}
}
/trunk/apps/sequencers/LoopA/gfx_resources.h
18,11 → 18,10
const u16 digitstiny_height=7;
const u8 digitstiny_pixdata[]={0,0,0,6,255,96,2,189,0,9,255,96,9,255,144,0,13,240,4,255,244,0,109,242,15,255,249,2,223,210,2,223,210,0,0,255,255,0,0,0,15,64,4,240,0,0,0,0,0,0,0,15,68,240,15,189,0,13,6,240,0,2,242,0,189,240,4,176,0,4,246,0,0,0,210,11,144,153,11,144,185,0,15,68,68,240,0,0,15,64,4,240,0,0,0,0,0,0,0,77,0,212,0,77,0,0,4,208,0,2,240,6,212,240,6,176,0,13,96,0,0,6,144,9,208,214,13,96,107,0,15,64,4,240,0,0,15,64,4,240,0,0,79,0,0,0,0,109,153,214,0,77,0,0,45,32,0,191,176,15,100,240,6,255,144,15,255,210,0,15,32,2,255,210,4,255,251,0,15,64,4,240,0,0,15,64,4,240,0,0,0,0,0,0,0,77,0,212,0,77,0,2,210,0,0,2,214,79,255,253,0,2,214,15,32,214,0,107,0,9,96,155,0,0,185,0,15,64,4,240,0,0,15,64,4,240,0,0,0,0,0,0,0,15,68,240,0,77,0,11,64,0,0,0,214,0,4,240,0,0,214,13,96,214,0,182,0,13,144,155,0,11,242,0,15,68,68,240,0,0,15,64,4,240,0,0,79,0,0,0,0,6,255,96,11,255,244,15,255,244,13,255,176,0,4,240,13,255,176,4,255,208,0,212,0,4,255,244,6,253,64,0,0,255,255,0,0,0,15,64,4,240,0,0,0,0,142,176,0,0,190,176,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 
const u16 keyicons_width=1200;
const u16 keyicons_height=32;
const u8 keyicons_pixdata[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,243,0,63,48,3,243,0,63,255,255,255,242,0,9,128,0,0,0,8,255,144,143,249,8,255,144,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,251,175,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,2,32,0,0,0,0,0,0,8,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,255,255,255,255,255,0,0,0,0,255,255,255,255,255,249,0,13,48,0,0,0,0,0,255,255,255,255,0,0,0,0,0,3,208,0,159,255,255,255,255,255,255,255,255,255,255,255,255,255,255,249,0,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,0,159,255,255,255,80,0,0,0,0,0,0,5,255,255,255,249,0,13,48,0,0,0,109,255,255,255,255,255,255,214,0,0,0,3,208,0,159,255,255,255,255,255,255,48,3,255,255,255,255,255,255,249,0,13,48,0,0,0,0,0,0,143,249,0,0,0,0,0,0,3,208,0,159,255,255,255,240,0,15,0,0,240,0,15,255,255,255,249,0,13,48,0,0,0,15,255,240,255,255,15,255,240,0,0,0,3,208,0,159,255,255,255,48,0,0,3,241,3,243,3,255,255,255,249,0,13,48,0,0,0,143,255,255,249,12,249,8,249,0,0,0,3,208,0,159,255,255,255,255,255,16,0,3,127,255,255,255,255,255,249,0,13,48,0,0,0,0,0,207,255,200,64,0,0,0,0,0,3,208,0,159,255,255,255,255,240,0,0,0,0,255,255,255,255,255,249,0,13,48,0,0,0,0,12,255,255,255,252,0,0,0,0,0,3,208,0,159,255,255,255,255,255,252,1,32,191,255,255,255,255,255,249,0,13,48,0,0,0,0,0,1,202,157,32,0,0,0,0,0,3,208,0,159,255,255,255,48,0,0,175,160,0,0,3,255,255,255,249,0,13,48,0,0,0,143,255,252,32,44,255,255,249,0,0,0,3,208,0,159,255,255,255,255,255,255,80,0,95,255,255,255,255,255,249,0,13,48,0,0,0,0,0,0,109,253,96,0,0,0,0,0,3,208,0,159,255,255,255,255,255,255,160,175,255,255,255,255,255,255,249,0,13,48,0,0,0,0,0,0,44,32,0,0,0,0,0,0,3,208,0,159,255,255,255,255,255,255,64,4,255,255,255,255,255,255,249,0,13,48,0,0,0,0,0,0,127,247,0,0,0,0,0,0,3,208,0,159,255,255,255,255,255,246,121,0,79,255,255,255,255,255,249,0,13,48,0,0,0,0,0,6,67,253,112,0,0,0,0,0,3,208,0,159,255,255,255,255,255,250,0,0,175,255,255,255,255,255,249,0,13,48,0,0,0,0,0,2,207,252,32,0,0,0,0,0,3,208,0,159,255,255,255,255,255,255,193,39,255,255,255,255,255,255,249,0,13,48,0,0,0,0,0,0,43,148,0,0,0,0,0,0,3,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,240,0,223,255,255,255,243,255,255,255,255,255,255,63,255,255,255,253,0,15,16,0,0,0,8,0,0,0,0,0,0,128,0,0,0,1,240,0,223,255,255,245,7,238,238,238,238,238,238,112,95,255,255,253,0,15,16,0,0,6,228,17,17,17,17,17,17,78,96,0,0,1,240,0,223,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,240,0,223,255,255,255,240,236,15,14,192,240,236,15,255,255,255,253,0,15,16,0,0,0,15,17,240,241,31,15,17,240,0,0,0,1,240,0,223,255,255,255,255,255,255,255,240,255,255,255,255,255,255,253,0,15,16,0,0,0,0,0,0,0,15,0,0,0,0,0,0,1,240,0,223,255,255,255,255,255,15,243,55,7,255,255,255,255,255,253,0,15,16,0,0,0,0,0,240,9,148,244,0,0,0,0,0,1,240,0,223,255,255,255,255,244,15,255,255,4,255,255,255,255,255,253,0,15,16,0,0,0,0,7,192,0,0,199,0,0,0,0,0,1,240,0,223,255,255,255,255,255,69,2,48,97,255,255,255,255,255,253,0,15,16,0,0,0,0,0,118,217,141,106,0,0,0,0,0,1,240,0,223,255,255,255,255,255,244,14,4,255,255,255,255,255,255,253,0,15,16,0,0,0,0,0,7,192,199,0,0,0,0,0,0,1,240,0,223,255,255,255,255,255,245,8,232,5,255,255,255,255,255,253,0,15,16,0,0,0,0,0,6,228,20,230,0,0,0,0,0,1,240,0,223,255,255,255,255,255,255,1,15,255,255,255,255,255,255,253,0,15,16,0,0,0,0,0,0,203,192,0,0,0,0,0,0,1,240,0,223,255,255,255,255,255,255,175,160,255,255,255,255,255,255,253,0,15,16,0,0,0,0,0,0,48,61,0,0,0,0,0,0,1,240,0,223,255,255,255,255,255,176,7,7,5,255,255,255,255,255,253,0,15,16,0,0,0,0,0,44,228,244,231,0,0,0,0,0,1,240,0,223,255,255,255,255,255,240,79,244,15,255,255,255,255,255,253,0,15,16,0,0,0,0,0,12,112,7,192,0,0,0,0,0,1,240,0,223,255,255,255,255,250,17,146,69,33,127,255,255,255,255,253,0,15,16,0,0,0,0,2,187,57,118,155,80,0,0,0,0,1,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,240,255,255,255,255,255,255,15,255,255,255,255,0,15,16,0,0,0,15,0,0,0,0,0,0,240,0,0,0,0,240,0,239,255,255,240,127,255,255,255,255,255,255,247,15,255,255,255,0,15,16,0,0,13,64,0,0,0,0,0,0,4,208,0,0,0,240,0,239,255,255,255,255,243,0,63,243,0,63,255,255,255,255,255,0,15,16,0,0,0,0,8,255,144,8,255,144,0,0,0,0,0,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,16,0,0,0,15,1,240,240,31,15,1,240,0,0,0,0,240,0,239,255,255,255,48,0,0,3,240,243,0,3,255,255,255,255,0,15,16,0,0,0,143,255,255,249,15,8,255,249,0,0,0,0,240,0,239,255,255,255,255,255,15,255,255,113,255,255,255,255,255,255,0,15,16,0,0,0,0,0,240,0,0,76,0,0,0,0,0,0,240,0,239,255,255,255,255,255,4,255,244,15,255,255,255,255,255,255,0,15,16,0,0,0,0,0,199,0,7,192,0,0,0,0,0,0,240,0,239,255,255,255,255,253,0,255,255,16,175,255,255,255,255,255,0,15,16,0,0,0,0,1,253,0,0,191,32,0,0,0,0,0,240,0,239,255,255,255,255,255,255,1,15,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,203,192,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,240,143,255,128,255,255,255,255,255,255,0,15,16,0,0,0,0,0,13,64,0,77,0,0,0,0,0,0,240,0,239,255,255,255,255,255,244,14,4,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,7,192,199,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,115,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,98,24,15,33,255,255,255,255,255,255,0,15,16,0,0,0,0,0,89,164,240,155,0,0,0,0,0,0,240,0,239,255,255,255,255,255,64,255,255,4,255,255,255,255,255,255,0,15,16,0,0,0,0,0,124,0,0,199,0,0,0,0,0,0,240,0,239,255,255,255,255,244,132,151,94,29,31,255,255,255,255,255,0,15,16,0,0,0,0,7,71,52,96,161,160,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,0,0,0,0,255,255,255,255,255,255,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,240,0,239,255,255,255,240,255,255,255,255,255,255,15,255,255,255,255,0,15,16,0,0,0,15,0,0,0,0,0,0,240,0,0,0,0,240,0,239,255,255,240,239,255,255,255,255,255,255,254,15,255,255,255,0,15,16,0,0,15,16,0,0,0,0,0,0,1,240,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,16,0,0,0,15,1,240,240,31,15,1,240,0,0,0,0,240,0,239,255,255,255,255,255,255,255,240,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,15,243,63,240,255,255,255,255,255,255,0,15,16,0,0,0,0,0,240,8,144,15,0,0,0,0,0,0,240,0,239,255,255,255,255,255,160,175,160,175,255,255,255,255,255,255,0,15,16,0,0,0,0,0,47,32,47,32,0,0,0,0,0,0,240,0,239,255,255,255,255,247,106,127,255,230,63,255,255,255,255,255,0,15,16,0,0,0,0,5,82,80,0,22,128,0,0,0,0,0,240,0,239,255,255,255,255,255,255,112,127,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,95,80,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,240,239,255,224,255,255,255,255,255,255,0,15,16,0,0,0,0,0,15,16,0,31,0,0,0,0,0,0,240,0,239,255,255,255,255,255,160,175,160,175,255,255,255,255,255,255,0,15,16,0,0,0,0,0,47,32,47,32,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,248,31,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,4,160,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,113,7,15,18,255,255,255,255,255,255,0,15,16,0,0,0,0,0,74,213,240,186,0,0,0,0,0,0,240,0,239,255,255,255,255,250,10,255,255,160,175,255,255,255,255,255,0,15,16,0,0,0,0,2,242,0,0,47,32,0,0,0,0,0,240,0,239,255,255,255,255,252,18,255,255,65,159,255,255,255,255,255,0,15,16,0,0,0,0,1,169,0,0,123,48,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,243,255,255,255,255,255,255,63,255,255,255,255,0,15,16,0,0,0,9,0,0,0,0,0,0,144,0,0,0,0,240,0,239,255,255,240,127,255,255,255,255,255,255,247,15,255,255,255,0,15,16,0,0,13,64,0,0,0,0,0,0,4,208,0,0,0,240,0,239,255,255,255,48,3,255,255,255,255,48,3,255,255,255,255,0,15,16,0,0,0,143,249,0,0,0,0,143,249,0,0,0,0,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,16,0,0,0,15,1,240,240,31,15,1,240,0,0,0,0,240,0,239,255,255,255,48,0,63,16,0,243,0,3,255,255,255,255,0,15,16,0,0,0,143,255,144,207,255,8,255,249,0,0,0,0,240,0,239,255,255,255,255,255,15,243,63,240,255,255,255,255,255,255,0,15,16,0,0,0,0,0,240,8,144,15,0,0,0,0,0,0,240,0,239,255,255,255,255,255,244,14,4,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,7,192,199,0,0,0,0,0,0,0,240,0,239,255,255,255,255,240,15,32,127,241,15,255,255,255,255,255,0,15,16,0,0,0,0,12,240,172,64,12,240,0,0,0,0,0,240,0,239,255,255,255,255,255,255,1,15,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,203,192,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,240,143,255,128,255,255,255,255,255,255,0,15,16,0,0,0,0,0,13,64,0,77,0,0,0,0,0,0,240,0,239,255,255,255,255,255,4,255,244,15,255,255,255,255,255,255,0,15,16,0,0,0,0,0,199,0,7,192,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,241,175,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,11,48,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,240,16,0,11,255,255,255,255,255,255,0,15,16,0,0,0,0,0,12,191,252,226,0,0,0,0,0,0,240,0,239,255,255,255,255,240,79,255,255,244,15,255,255,255,255,255,0,15,16,0,0,0,0,12,112,0,0,7,192,0,0,0,0,0,240,0,239,255,255,255,255,129,127,255,255,249,21,255,255,255,255,255,0,15,16,0,0,0,0,75,80,0,0,3,166,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,245,7,239,255,255,255,255,254,112,95,255,255,255,0,15,16,0,0,6,228,0,0,0,0,0,0,78,96,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,16,0,0,0,15,1,240,240,31,15,1,240,0,0,0,0,240,0,239,255,255,255,255,255,255,15,240,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,240,15,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,15,255,255,240,255,255,255,255,255,255,0,15,16,0,0,0,0,0,240,0,0,15,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,1,15,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,203,192,0,0,0,0,0,0,0,240,0,239,255,255,255,255,250,191,192,10,252,159,255,255,255,255,255,0,15,16,0,0,0,0,2,32,47,243,2,48,0,0,0,0,0,240,0,239,255,255,255,255,255,244,14,4,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,7,192,199,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,245,8,232,5,255,255,255,255,255,255,0,15,16,0,0,0,0,0,6,228,20,230,0,0,0,0,0,0,240,0,239,255,255,255,255,244,15,255,255,4,255,255,255,255,255,255,0,15,16,0,0,0,0,7,192,0,0,199,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,254,48,7,239,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,141,245,0,0,0,0,0,0,0,240,0,239,255,255,255,255,64,255,255,255,255,4,255,255,255,255,255,0,15,16,0,0,0,0,124,0,0,0,0,199,0,0,0,0,0,240,0,239,255,255,255,255,30,31,255,255,241,225,255,255,255,255,255,0,15,16,0,0,0,0,176,176,0,0,10,11,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,0,0,0,0,255,255,255,255,255,255,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,240,0,239,255,255,255,243,0,63,48,3,243,0,63,255,255,255,255,0,15,16,0,0,0,8,255,144,143,249,8,255,144,0,0,0,0,240,0,239,255,255,255,80,0,0,0,0,0,0,5,255,255,255,255,0,15,16,0,0,0,109,255,255,255,255,255,255,214,0,0,0,0,240,0,239,255,243,0,63,255,255,255,255,255,255,243,0,63,255,255,0,15,16,0,8,255,144,0,0,0,0,0,0,8,255,144,0,0,240,0,239,255,255,255,240,0,15,0,0,240,0,15,255,255,255,255,0,15,16,0,0,0,15,255,240,255,255,15,255,240,0,0,0,0,240,0,239,255,255,255,48,0,63,0,0,243,0,3,255,255,255,255,0,15,16,0,0,0,143,255,144,207,252,8,255,249,0,0,0,0,240,0,239,255,255,255,255,255,0,0,0,0,255,255,255,255,255,255,0,15,16,0,0,0,0,0,207,255,255,252,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,160,175,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,44,32,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,242,14,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,9,192,0,0,0,0,0,0,0,240,0,239,255,255,255,48,0,0,175,160,0,0,3,255,255,255,255,0,15,16,0,0,0,143,255,252,32,44,255,255,249,0,0,0,0,240,0,239,255,255,255,255,255,255,80,0,95,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,109,253,96,0,0,0,0,0,0,240,0,239,255,255,255,255,240,0,0,0,0,255,255,255,255,255,255,0,15,16,0,0,0,0,12,255,255,255,252,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,240,95,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,13,96,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,248,15,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,4,240,0,0,0,0,0,0,0,240,0,239,255,255,255,255,0,0,0,0,0,0,255,255,255,255,255,0,15,16,0,0,0,0,207,255,255,255,255,252,0,0,0,0,0,240,0,239,255,255,255,255,65,63,255,255,245,18,255,255,255,255,255,0,15,16,0,0,0,0,123,144,0,0,6,186,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,254,175,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,35,255,240,95,0,1,240,143,241,242,143,242,143,255,0,15,16,0,152,0,12,96,255,251,15,64,11,9,64,9,64,0,240,0,239,255,192,207,247,15,40,255,40,0,0,8,0,4,255,255,0,15,16,0,46,32,5,208,148,0,148,255,255,212,255,247,0,0,240,0,239,255,255,255,160,0,84,143,252,31,16,0,223,255,255,255,0,15,16,0,0,0,60,255,103,64,2,176,191,252,16,0,0,0,240,0,239,255,255,255,255,248,0,4,10,240,63,255,255,255,255,255,0,15,16,0,0,0,0,4,255,247,227,12,128,0,0,0,0,0,240,0,239,16,0,12,0,2,255,242,95,255,48,0,241,253,24,255,0,15,16,191,255,242,255,249,0,9,96,0,143,253,11,1,164,0,240,0,239,128,207,194,253,16,1,209,0,0,192,0,28,0,8,255,0,15,16,77,32,41,1,191,251,27,255,255,47,255,178,207,244,0,240,0,239,255,255,240,0,29,242,143,16,4,241,253,24,255,255,255,0,15,16,0,0,15,255,161,9,64,191,247,11,1,164,0,0,0,240,0,236,12,255,112,244,0,8,0,0,33,0,13,250,0,3,255,0,15,18,226,0,93,7,255,244,255,255,155,255,193,3,207,248,0,240,0,224,0,0,128,0,76,12,255,112,244,0,10,245,0,5,255,0,15,31,255,253,79,255,114,226,0,93,7,255,211,6,239,230,0,240,0,239,64,0,175,160,0,63,193,255,193,16,0,12,0,1,255,0,15,16,127,253,48,60,255,128,43,0,43,191,255,242,255,251,0,240,0,239,248,0,13,64,0,128,0,2,15,255,15,64,0,175,255,0,15,16,4,239,225,127,255,79,255,249,208,0,208,127,253,48,0,240,0,239,255,241,0,79,31,255,31,15,64,0,64,0,5,255,255,0,15,16,0,11,255,112,176,0,176,208,127,255,127,255,246,0,0,240,0,239,255,255,31,255,31,64,0,132,143,255,0,2,255,255,255,0,15,16,0,0,176,0,176,127,255,71,64,0,255,249,0,0,0,240,0,239,245,47,248,0,4,255,48,0,175,40,255,40,0,0,47,0,15,16,6,144,4,255,247,0,143,252,48,148,0,148,255,255,144,240,0,239,255,0,1,223,15,64,1,241,0,13,72,255,255,255,255,0,15,16,0,255,250,16,208,127,251,11,255,193,116,0,0,0,0,240,0,239,80,255,243,47,15,64,0,95,84,240,127,252,12,255,255,0,15,16,108,0,8,144,208,127,253,96,103,13,80,2,226,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,16,175,80,79,31,255,240,12,241,242,143,242,143,255,0,15,16,0,173,48,109,112,176,0,14,226,11,9,64,9,64,0,240,0,239,255,160,31,240,15,40,255,40,255,15,248,79,255,255,255,0,15,16,0,61,160,12,208,148,0,148,0,208,4,112,0,0,0,240,0,239,255,255,253,5,252,164,143,252,31,31,244,63,255,255,255,0,15,16,0,0,1,230,2,55,64,2,176,176,7,128,0,0,0,240,0,239,255,255,255,255,248,79,255,64,64,255,255,255,255,255,255,0,15,16,0,0,0,0,4,112,0,125,124,0,0,0,0,0,0,240,0,239,255,28,255,31,241,175,192,15,244,13,247,241,129,223,255,0,15,16,0,178,0,176,11,48,44,192,7,193,5,11,74,16,0,240,0,239,128,15,194,241,79,243,47,241,207,241,255,245,79,204,255,0,15,16,78,192,41,11,112,8,144,11,32,11,0,6,112,34,0,240,0,239,255,255,241,255,33,242,140,31,248,241,129,223,255,255,255,0,15,16,0,0,11,0,155,9,66,176,4,11,74,16,0,0,0,240,0,234,1,255,0,244,143,255,248,47,241,255,68,208,143,209,95,0,15,19,218,0,205,7,64,0,4,144,11,0,119,29,64,27,96,240,0,239,240,255,132,255,250,1,255,0,244,143,128,128,207,160,207,0,15,16,13,0,71,0,3,218,0,205,7,64,76,76,32,60,32,240,0,239,72,248,29,8,253,21,193,255,193,255,28,255,31,255,255,0,15,16,116,4,161,212,1,182,43,0,43,0,178,0,176,0,0,240,0,239,242,143,143,72,255,255,130,255,15,255,15,72,248,15,255,0,15,16,9,64,64,116,0,0,73,0,208,0,208,116,4,192,0,240,0,239,255,193,255,143,31,255,31,15,72,255,255,69,255,255,255,0,15,16,0,43,0,64,176,0,176,208,116,0,0,118,0,0,0,240,0,239,255,255,31,255,31,72,255,244,143,255,31,241,127,255,255,0,15,16,0,0,176,0,176,116,0,7,64,0,176,11,80,0,0,240,0,239,240,12,248,79,240,244,31,245,15,40,255,40,248,47,255,0,15,16,12,194,4,112,14,7,176,6,192,148,0,148,4,144,0,240,0,239,255,31,242,31,15,13,248,241,255,67,72,255,255,255,255,0,15,16,0,176,9,176,208,193,4,11,0,120,116,0,0,0,0,240,0,239,64,79,192,31,15,72,248,8,84,240,13,242,10,255,255,0,15,16,125,112,45,160,208,116,4,196,103,13,193,9,211,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,24,29,5,79,0,4,240,64,209,242,143,242,143,255,0,15,16,0,180,177,214,112,255,247,13,125,27,9,64,9,64,0,240,0,239,255,132,24,68,15,40,255,40,255,15,248,0,8,255,255,0,15,16,0,71,180,119,192,148,0,148,0,208,4,255,244,0,0,240,0,239,255,255,248,63,255,244,143,252,31,31,244,63,255,255,255,0,15,16,0,0,4,128,0,7,64,2,176,176,7,128,0,0,0,240,0,239,255,255,255,255,248,79,255,241,12,255,255,255,255,255,255,0,15,16,0,0,0,0,4,112,0,10,242,0,0,0,0,0,0,240,0,239,255,28,255,31,241,175,39,37,241,223,255,240,31,255,255,0,15,16,0,178,0,176,11,48,149,150,11,16,0,14,160,0,0,240,0,239,130,17,194,240,255,255,15,241,207,240,0,77,2,223,255,0,15,16,73,170,41,12,0,0,192,11,32,15,255,113,201,16,0,240,0,239,255,255,241,255,240,210,143,33,175,240,31,255,255,255,255,0,15,16,0,0,11,0,12,25,64,154,48,14,160,0,0,0,0,240,0,232,65,132,64,244,0,15,248,47,241,255,68,131,255,252,31,0,15,20,123,71,124,7,255,240,4,144,11,0,119,72,0,2,160,240,0,239,240,255,128,0,136,65,132,64,244,143,128,71,255,245,79,0,15,16,13,0,79,255,68,123,71,124,7,64,76,117,0,6,112,240,0,239,72,248,24,63,255,193,193,255,193,255,28,255,0,4,255,0,15,16,116,4,164,128,0,42,43,0,43,0,178,0,255,247,0,240,0,239,250,4,255,64,0,255,130,255,15,255,15,72,248,15,255,0,15,16,3,199,0,127,255,0,73,0,208,0,208,116,4,192,0,240,0,239,255,242,26,255,0,0,31,15,72,255,255,69,255,255,255,0,15,16,0,9,163,0,255,255,176,208,116,0,0,118,0,0,0,240,0,239,255,255,16,0,15,64,0,244,143,255,31,241,127,255,255,0,15,16,0,0,191,255,240,127,255,7,64,0,176,11,80,0,0,240,0,239,83,82,248,0,3,241,223,255,42,40,255,40,248,47,255,0,15,16,104,105,4,255,248,11,16,0,147,148,0,148,4,144,0,240,0,239,255,31,255,13,15,80,95,241,255,67,72,255,255,255,255,0,15,16,0,176,0,193,208,108,96,11,0,120,116,0,0,0,0,240,0,239,71,13,23,31,15,72,255,115,84,241,68,129,56,255,255,0,15,16,117,209,181,176,208,116,0,88,103,11,119,75,132,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,15,17,72,47,31,255,240,243,17,242,143,242,175,255,0,15,16,0,208,187,116,144,176,0,13,8,171,9,64,9,48,0,240,0,239,255,84,128,13,28,40,255,42,255,15,248,79,255,255,255,0,15,16,0,103,76,209,178,148,0,147,0,208,4,112,0,0,0,240,0,239,255,255,248,63,255,244,143,252,31,16,0,223,255,255,255,0,15,16,0,0,4,128,0,7,64,2,176,191,252,16,0,0,0,240,0,239,255,255,255,255,248,0,12,208,7,255,255,255,255,255,255,0,15,16,0,0,0,0,4,255,242,29,245,0,0,0,0,0,0,240,0,239,255,28,255,0,2,253,15,192,241,223,255,241,84,255,255,0,15,16,0,178,0,255,249,1,192,44,11,16,0,11,103,0,0,240,0,239,130,240,50,240,255,255,15,241,207,241,255,255,248,23,255,0,15,16,73,12,137,12,0,0,192,11,32,11,0,0,4,181,0,240,0,239,255,255,241,255,240,210,143,252,35,241,84,255,255,255,255,0,15,16,0,0,11,0,12,25,64,2,152,11,103,0,0,0,0,240,0,229,72,0,209,196,143,255,248,47,241,0,13,131,255,252,31,0,15,22,116,205,27,39,64,0,4,144,11,255,193,72,0,2,160,240,0,239,240,255,132,255,245,72,0,209,196,0,10,71,255,245,79,0,15,16,13,0,71,0,6,116,205,27,39,255,211,117,0,6,112,240,0,239,64,0,168,63,255,193,193,255,193,255,28,255,31,255,255,0,15,16,127,253,52,128,0,42,43,0,42,0,178,0,176,0,0,240,0,239,255,244,12,72,255,255,130,255,15,255,15,64,0,175,255,0,15,16,0,7,194,116,0,0,73,0,208,0,192,127,253,48,0,240,0,239,255,255,194,63,31,255,31,15,64,0,255,69,255,255,255,0,15,16,0,0,41,128,176,0,176,208,127,253,0,118,0,0,0,240,0,239,255,255,31,255,31,72,255,244,143,255,0,2,255,255,255,0,15,16,0,0,176,0,176,116,0,7,64,0,255,249,0,0,0,240,0,239,28,240,216,79,240,161,223,255,42,40,255,42,248,47,255,0,15,16,178,13,20,112,12,59,16,0,147,148,0,147,4,144,0,240,0,239,255,31,255,13,15,255,49,241,0,13,72,255,255,255,255,0,15,16,0,176,0,193,208,0,139,11,255,193,116,0,0,0,0,240,0,239,40,65,31,15,15,72,255,115,84,193,208,8,69,255,255,0,15,16,148,123,176,208,208,116,0,88,103,43,29,196,118,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,255,31,128,220,47,31,255,240,255,0,244,31,192,223,253,0,15,16,0,176,78,18,144,176,0,13,0,205,7,160,46,16,1,240,0,223,255,85,241,79,44,65,252,13,255,15,248,79,255,255,253,0,15,16,0,102,11,112,146,122,2,225,0,208,4,112,0,0,1,240,0,223,255,255,253,5,255,132,143,252,31,31,255,255,255,255,253,0,15,16,0,0,1,214,0,71,64,2,176,176,0,0,0,0,1,240,0,223,255,255,255,255,248,79,255,49,112,207,255,255,255,255,253,0,15,16,0,0,0,0,4,112,0,138,94,32,0,0,0,0,1,240,0,223,255,28,255,31,115,244,0,0,132,29,248,241,245,79,253,0,15,16,0,178,0,176,88,7,255,255,71,177,4,11,6,112,1,240,0,223,130,252,2,241,63,243,47,241,207,241,255,250,207,130,253,0,15,16,73,2,233,11,128,8,144,11,32,11,0,3,32,73,1,240,0,223,255,255,241,255,33,242,141,143,208,241,245,79,255,255,253,0,15,16,0,0,11,0,155,9,65,64,28,11,6,112,0,0,1,240,0,213,95,20,242,196,143,255,248,47,241,252,31,208,95,209,93,0,15,22,96,183,9,39,64,0,4,144,11,2,176,29,96,27,97,240,0,223,240,255,132,255,245,95,20,242,196,143,255,128,175,160,205,0,15,16,13,0,71,0,6,96,183,9,39,64,0,76,48,60,33,240,0,223,72,241,205,5,253,21,240,175,51,255,28,255,31,255,253,0,15,16,116,11,33,214,1,182,14,48,136,0,178,0,176,0,1,240,0,223,247,255,69,72,255,255,130,255,20,247,15,72,255,255,253,0,15,16,5,0,118,116,0,0,73,0,167,5,192,116,0,0,1,240,0,223,255,216,253,15,31,255,31,15,72,255,255,69,255,255,253,0,15,16,0,20,1,192,176,0,176,208,116,0,0,118,0,0,1,240,0,223,255,255,31,255,31,72,255,244,143,255,31,255,255,255,253,0,15,16,0,0,176,0,176,116,0,7,64,0,176,0,0,0,1,240,0,218,0,0,72,79,208,164,29,245,15,65,252,13,248,47,253,0,15,19,255,255,116,112,28,55,177,6,192,122,2,225,4,144,1,240,0,223,255,31,242,31,15,127,241,193,255,255,72,255,255,255,253,0,15,16,0,176,9,176,208,80,11,43,0,0,116,0,0,0,1,240,0,223,44,208,143,31,15,72,248,8,84,194,244,31,85,255,253,0,15,16,146,30,64,176,208,116,4,196,103,41,7,176,102,0,1,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,255,15,255,252,31,0,0,240,255,160,253,0,4,255,249,0,13,48,0,208,0,2,176,255,255,13,0,61,1,207,247,0,3,208,0,159,255,69,255,255,40,208,0,79,255,15,248,0,1,255,249,0,13,48,0,118,0,0,148,28,255,112,0,208,4,255,251,0,3,208,0,159,255,255,255,128,0,68,0,5,31,31,255,255,255,255,249,0,13,48,0,0,0,77,255,119,255,246,176,176,0,0,0,0,3,208,0,159,255,255,255,255,248,79,247,12,241,31,255,255,255,255,249,0,13,48,0,0,0,0,4,112,5,226,10,160,0,0,0,0,3,208,0,159,255,28,255,31,244,112,223,247,47,16,0,241,255,58,249,0,13,48,0,178,0,176,7,92,16,5,144,175,254,11,0,131,3,208,0,159,130,255,66,253,16,1,223,241,207,240,0,5,0,8,249,0,13,48,73,0,121,1,191,251,16,11,32,15,255,246,255,228,3,208,0,159,255,255,240,0,29,242,140,0,4,241,255,58,255,255,249,0,13,48,0,0,15,255,161,9,66,255,247,11,0,131,0,0,3,208,0,148,95,255,242,132,0,4,248,47,241,255,163,250,0,3,249,0,13,55,96,0,9,71,255,247,4,144,11,0,56,3,207,248,3,208,0,159,240,255,128,0,20,95,255,242,132,143,255,245,0,5,249,0,13,48,13,0,79,255,183,96,0,9,71,64,0,6,239,230,3,208,0,159,72,253,31,160,0,63,245,0,12,255,28,255,0,0,249,0,13,48,116,1,176,60,255,128,6,255,194,0,178,0,255,255,3,208,0,159,242,0,12,64,0,79,130,255,160,0,143,72,255,255,249,0,13,48,9,255,194,127,255,112,73,0,61,254,64,116,0,0,3,208,0,159,255,192,0,79,31,255,31,15,72,255,255,69,255,255,249,0,13,48,0,47,255,112,176,0,176,208,116,0,0,118,0,0,3,208,0,159,255,255,31,255,31,64,0,68,0,8,31,255,255,255,249,0,13,48,0,0,176,0,176,127,255,119,255,244,176,0,0,0,3,208,0,146,143,253,8,0,3,255,48,0,175,208,0,79,248,47,249,0,13,57,64,1,212,255,248,0,143,252,48,28,255,112,4,144,3,208,0,159,255,0,1,223,15,0,1,241,255,255,64,0,128,207,249,0,13,48,0,255,250,16,208,223,251,11,0,0,127,255,79,32,3,208,0,159,28,255,255,15,15,64,0,95,84,130,255,255,84,66,249,0,13,48,178,0,0,208,208,127,253,96,103,73,0,0,103,121,3,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 
 
const u16 menutest_width=256;
const u16 menutest_height=64;
const u8 menutest_pixdata[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,13,48,0,0,0,8,255,144,143,249,8,255,144,0,0,0,3,208,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,1,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,240,15,16,0,0,0,109,255,255,255,255,255,255,214,0,0,0,1,240,15,16,0,0,0,0,0,0,143,249,0,0,0,0,0,0,1,240,15,16,0,0,0,0,0,0,255,255,0,0,0,0,0,0,1,240,15,16,0,0,0,0,0,0,143,249,0,0,0,0,0,0,1,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,8,0,0,0,0,0,0,128,0,0,0,0,240,15,16,0,0,6,228,17,17,17,17,17,17,78,96,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,241,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,15,0,0,0,0,0,0,240,0,0,0,0,240,15,16,0,0,13,64,0,0,0,0,0,0,4,208,0,0,0,240,15,16,0,0,0,0,8,255,144,8,255,144,0,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,8,255,144,8,255,144,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,240,15,16,0,0,0,15,0,0,0,0,0,0,240,0,0,0,0,240,15,16,0,0,15,16,0,0,0,0,0,0,1,240,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,9,0,0,0,0,0,0,144,0,0,0,0,240,15,16,0,0,13,64,0,0,0,0,0,0,4,208,0,0,0,240,15,16,0,0,0,143,249,0,0,0,0,143,249,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,143,249,0,0,0,0,143,249,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,6,228,0,0,0,0,0,0,78,96,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,240,15,16,0,0,0,8,255,144,143,249,8,255,144,0,0,0,0,240,15,16,0,0,0,109,255,255,255,255,255,255,214,0,0,0,0,240,15,16,0,8,255,144,0,0,0,0,0,0,8,255,144,0,0,240,15,16,0,0,0,0,0,0,255,255,0,0,0,0,0,0,0,240,15,16,0,8,255,144,0,0,0,0,0,0,8,255,144,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,152,0,12,96,255,251,15,64,11,9,64,9,64,0,240,15,16,0,46,32,5,208,148,0,148,255,255,212,255,247,0,0,240,15,16,0,0,0,60,255,103,64,2,176,191,252,16,0,0,0,240,15,16,0,0,0,0,4,255,247,227,12,128,0,0,0,0,0,240,15,16,191,255,242,255,249,0,9,96,0,143,253,11,1,164,0,240,15,16,0,0,0,0,4,255,247,227,12,128,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,173,48,109,112,176,0,14,226,11,9,64,9,64,0,240,15,16,0,61,160,12,208,148,0,148,0,208,4,112,0,0,0,240,15,16,0,0,1,230,2,55,64,2,176,176,7,128,0,0,0,240,15,16,0,0,0,0,4,112,0,125,124,0,0,0,0,0,0,240,15,16,0,178,0,176,11,48,44,192,7,193,5,11,74,16,0,240,15,16,0,0,0,0,4,112,0,125,124,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,180,177,214,112,255,247,13,125,27,9,64,9,64,0,240,15,16,0,71,180,119,192,148,0,148,0,208,4,255,244,0,0,240,15,16,0,0,4,128,0,7,64,2,176,176,7,128,0,0,0,240,15,16,0,0,0,0,4,112,0,10,242,0,0,0,0,0,0,240,15,16,0,178,0,176,11,48,149,150,11,16,0,14,160,0,0,240,15,16,0,0,0,0,4,112,0,10,242,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,208,187,116,144,176,0,13,8,171,9,64,9,48,1,240,15,16,0,103,76,209,178,148,0,147,0,208,4,112,0,0,1,240,15,16,0,0,4,128,0,7,64,2,176,191,252,16,0,0,1,240,15,16,0,0,0,0,4,255,242,29,245,0,0,0,0,0,1,240,15,16,0,178,0,255,249,1,192,44,11,16,0,11,103,0,1,240,15,16,0,0,0,0,4,255,242,29,245,0,0,0,0,0,1,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,48,0,176,78,18,144,176,0,13,0,205,7,160,46,16,3,208,13,48,0,102,11,112,146,122,2,225,0,208,4,112,0,0,3,208,13,48,0,0,1,214,0,71,64,2,176,176,0,0,0,0,3,208,13,48,0,0,0,0,4,112,0,138,94,32,0,0,0,0,3,208,13,48,0,178,0,176,88,7,255,255,71,177,4,11,6,112,3,208,13,48,0,0,0,0,4,112,0,138,94,32,0,0,0,0,3,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,128,0,208,0,2,176,255,255,13,0,61,1,207,247,0,8,144,9,128,0,118,0,0,148,28,255,112,0,208,4,255,251,0,8,144,9,128,0,0,0,77,255,119,255,246,176,176,0,0,0,0,8,144,9,128,0,0,0,0,4,112,5,226,10,160,0,0,0,0,8,144,9,128,0,178,0,176,7,92,16,5,144,175,254,11,0,131,8,144,9,128,0,0,0,0,4,112,5,226,10,160,0,0,0,0,8,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,146,0,0,0,0,0,0,0,0,0,0,41,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,81,124,238,238,238,238,238,238,238,238,238,238,199,21,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,175,131,17,17,17,17,17,17,17,17,17,17,56,250,0,0,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,3,78,255,255,255,255,255,255,255,255,255,255,255,255,228,48,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,84,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,30,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,0,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,9,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,144,0,0,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,13,48,0,0,0,8,255,144,143,249,8,255,144,0,0,0,3,208,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,2,207,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,32,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,13,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,208,0,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,1,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,240,15,16,0,0,0,109,255,255,255,255,255,255,214,0,0,0,1,240,0,239,255,255,255,255,255,255,112,6,255,255,255,255,255,255,254,0,15,16,0,0,0,0,0,0,255,255,0,0,0,0,0,0,1,240,15,16,0,0,0,0,0,0,143,249,0,0,0,0,0,0,1,240,15,16,0,0,0,0,0,0,255,255,0,0,0,0,0,0,1,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,8,0,0,0,0,0,0,128,0,0,0,0,240,15,16,0,0,6,228,17,17,17,17,17,17,78,96,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,241,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,241,31,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,15,0,0,0,0,0,0,240,0,0,0,0,240,15,16,0,0,13,64,0,0,0,0,0,0,4,208,0,0,0,240,0,239,255,255,255,255,247,0,111,247,0,111,255,255,255,255,255,0,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,8,255,144,8,255,144,0,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,240,15,16,0,0,0,15,0,0,0,0,0,0,240,0,0,0,0,240,15,16,0,0,15,16,0,0,0,0,0,0,1,240,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,9,0,0,0,0,0,0,144,0,0,0,0,240,15,16,0,0,13,64,0,0,0,0,0,0,4,208,0,0,0,240,0,239,255,255,255,112,6,255,255,255,255,112,6,255,255,255,255,0,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,143,249,0,0,0,0,143,249,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,6,228,0,0,0,0,0,0,78,96,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,240,31,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,240,15,16,0,0,0,8,255,144,143,249,8,255,144,0,0,0,0,240,15,16,0,0,0,109,255,255,255,255,255,255,214,0,0,0,0,240,0,239,255,247,0,111,255,255,255,255,255,255,247,0,111,255,255,0,15,16,0,0,0,0,0,0,255,255,0,0,0,0,0,0,0,240,15,16,0,8,255,144,0,0,0,0,0,0,8,255,144,0,0,240,15,16,0,0,0,0,0,0,255,255,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,15,16,0,152,0,12,96,255,251,15,64,11,9,64,9,64,0,240,15,16,0,46,32,5,208,148,0,148,255,255,212,255,247,0,0,240,15,16,0,0,0,60,255,103,64,2,176,191,252,16,0,0,0,240,0,239,255,255,255,255,251,0,8,28,243,127,255,255,255,255,255,0,15,16,191,255,242,255,249,0,9,96,0,143,253,11,1,164,0,240,15,16,0,0,0,0,4,255,247,227,12,128,0,0,0,0,0,240,15,16,191,255,242,255,249,0,9,96,0,143,253,11,1,164,0,240,0,0,15,16,0,173,48,109,112,176,0,14,226,11,9,64,9,64,0,240,15,16,0,61,160,12,208,148,0,148,0,208,4,112,0,0,0,240,15,16,0,0,1,230,2,55,64,2,176,176,7,128,0,0,0,240,0,239,255,255,255,255,251,143,255,130,131,255,255,255,255,255,255,0,15,16,0,178,0,176,11,48,44,192,7,193,5,11,74,16,0,240,15,16,0,0,0,0,4,112,0,125,124,0,0,0,0,0,0,240,15,16,0,178,0,176,11,48,44,192,7,193,5,11,74,16,0,240,0,0,15,16,0,180,177,214,112,255,247,13,125,27,9,64,9,64,0,240,15,16,0,71,180,119,192,148,0,148,0,208,4,255,244,0,0,240,15,16,0,0,4,128,0,7,64,2,176,176,7,128,0,0,0,240,0,239,255,255,255,255,251,143,255,245,13,255,255,255,255,255,255,0,15,16,0,178,0,176,11,48,149,150,11,16,0,14,160,0,0,240,15,16,0,0,0,0,4,112,0,10,242,0,0,0,0,0,0,240,15,16,0,178,0,176,11,48,149,150,11,16,0,14,160,0,0,240,0,0,15,16,0,208,187,116,144,176,0,13,8,171,9,64,9,48,1,240,15,16,0,103,76,209,178,148,0,147,0,208,4,112,0,0,1,240,15,16,0,0,4,128,0,7,64,2,176,191,252,16,0,0,1,240,0,239,255,255,255,255,251,0,13,226,10,255,255,255,255,255,254,0,15,16,0,178,0,255,249,1,192,44,11,16,0,11,103,0,1,240,15,16,0,0,0,0,4,255,242,29,245,0,0,0,0,0,1,240,15,16,0,178,0,255,249,1,192,44,11,16,0,11,103,0,1,240,0,0,13,48,0,176,78,18,144,176,0,13,0,205,7,160,46,16,3,208,13,48,0,102,11,112,146,122,2,225,0,208,4,112,0,0,3,208,13,48,0,0,1,214,0,71,64,2,176,176,0,0,0,0,3,208,2,207,255,255,255,255,251,143,255,117,161,223,255,255,255,255,252,32,13,48,0,178,0,176,88,7,255,255,71,177,4,11,6,112,3,208,13,48,0,0,0,0,4,112,0,138,94,32,0,0,0,0,3,208,13,48,0,178,0,176,88,7,255,255,71,177,4,11,6,112,3,208,0,0,9,128,0,208,0,2,176,255,255,13,0,61,1,207,247,0,8,144,9,128,0,118,0,0,148,28,255,112,0,208,4,255,251,0,8,144,9,128,0,0,0,77,255,119,255,246,176,176,0,0,0,0,8,144,9,127,255,255,255,255,251,143,250,29,245,95,255,255,255,255,247,144,9,128,0,178,0,176,7,92,16,5,144,175,254,11,0,131,8,144,9,128,0,0,0,0,4,112,5,226,10,160,0,0,0,0,8,144,9,128,0,178,0,176,7,92,16,5,144,175,254,11,0,131,8,144,0,0,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,30,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,3,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,48,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,84,255,255,255,255,255,255,255,255,255,255,255,255,255,255,69,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,0,0,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,3,78,255,255,255,255,255,255,255,255,255,255,255,255,228,48,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,12,177,0,0,0,0,0,0,0,0,0,0,0,0,27,192,0,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,81,124,239,255,255,255,255,255,255,255,255,254,199,21,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,175,131,16,0,0,0,0,0,0,0,0,1,56,250,0,0,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,146,0,0,0,0,0,0,0,0,0,0,41,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0,0,3,157,255,255,255,255,255,255,255,255,255,255,217,48,0,0,0};
 
const u16 keyicons_width=1200;
const u16 keyicons_height=32;
const u8 keyicons_pixdata[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,41,222,238,238,238,238,238,238,238,238,237,146,0,0,0,0,1,223,199,67,51,51,51,51,51,51,51,51,52,124,253,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,243,0,63,48,3,243,0,63,255,255,255,242,0,13,194,34,34,34,44,255,210,207,253,44,255,210,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,251,175,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,37,98,34,34,34,34,34,34,44,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,255,255,255,255,255,0,0,0,0,255,255,255,255,255,249,0,15,114,34,34,34,34,34,255,255,255,255,34,34,34,34,34,39,240,0,159,255,255,255,255,255,255,255,255,255,255,255,255,255,255,249,0,15,114,34,34,34,34,34,34,34,34,34,34,34,34,34,34,39,240,0,159,255,255,255,80,0,0,0,0,0,0,5,255,255,255,249,0,15,114,34,34,34,175,255,255,255,255,255,255,250,34,34,34,39,240,0,159,255,255,255,255,255,255,48,3,255,255,255,255,255,255,249,0,15,114,34,34,34,34,34,34,207,253,34,34,34,34,34,34,39,240,0,159,255,255,255,240,0,15,0,0,240,0,15,255,255,255,249,0,15,114,34,34,34,47,255,242,255,255,47,255,242,34,34,34,39,240,0,159,255,255,255,48,0,0,3,241,3,243,3,255,255,255,249,0,15,114,34,34,34,207,255,255,253,47,253,44,253,34,34,34,39,240,0,159,255,255,255,255,255,16,0,3,127,255,255,255,255,255,249,0,15,114,34,34,34,34,34,255,255,253,146,34,34,34,34,34,39,240,0,159,255,255,255,255,240,0,0,0,0,255,255,255,255,255,249,0,15,114,34,34,34,34,47,255,255,255,255,34,34,34,34,34,39,240,0,159,255,255,255,255,255,252,1,32,191,255,255,255,255,255,249,0,15,114,34,34,34,34,34,37,254,223,98,34,34,34,34,34,39,240,0,159,255,255,255,48,0,0,175,160,0,0,3,255,255,255,249,0,15,114,34,34,34,207,255,255,98,111,255,255,253,34,34,34,39,240,0,159,255,255,255,255,255,255,80,0,95,255,255,255,255,255,249,0,15,114,34,34,34,34,34,34,175,255,162,34,34,34,34,34,39,240,0,159,255,255,255,255,255,255,160,175,255,255,255,255,255,255,249,0,15,114,34,34,34,34,34,34,111,98,34,34,34,34,34,34,39,240,0,159,255,255,255,255,255,255,64,4,255,255,255,255,255,255,249,0,15,114,34,34,34,34,34,34,207,252,34,34,34,34,34,34,39,240,0,159,255,255,255,255,255,246,121,0,79,255,255,255,255,255,249,0,15,114,34,34,34,34,34,42,151,255,178,34,34,34,34,34,39,240,0,159,255,255,255,255,255,250,0,0,175,255,255,255,255,255,249,0,15,114,34,34,34,34,34,38,255,255,98,34,34,34,34,34,39,240,0,159,255,255,255,255,255,255,193,39,255,255,255,255,255,255,249,0,15,114,34,34,34,34,34,34,94,233,34,34,34,34,34,34,39,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,0,15,66,34,34,34,34,34,34,34,34,34,34,34,34,34,34,36,240,0,223,255,255,255,243,255,255,255,255,255,255,63,255,255,255,253,0,15,66,34,34,34,44,34,34,34,34,34,34,194,34,34,34,36,240,0,223,255,255,245,7,238,238,238,238,238,238,112,95,255,255,253,0,15,66,34,34,42,249,51,51,51,51,51,51,159,162,34,34,36,240,0,223,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,0,15,66,34,34,34,34,34,34,34,34,34,34,34,34,34,34,36,240,0,223,255,255,255,240,236,15,14,192,240,236,15,255,255,255,253,0,15,66,34,34,34,47,53,242,243,95,47,53,242,34,34,34,36,240,0,223,255,255,255,255,255,255,255,240,255,255,255,255,255,255,253,0,15,66,34,34,34,34,34,34,34,47,34,34,34,34,34,34,36,240,0,223,255,255,255,255,255,15,243,55,7,255,255,255,255,255,253,0,15,66,34,34,34,34,34,242,45,217,249,34,34,34,34,34,36,240,0,223,255,255,255,255,244,15,255,255,4,255,255,255,255,255,253,0,15,66,34,34,34,34,44,242,34,34,252,34,34,34,34,34,36,240,0,223,255,255,255,255,255,69,2,48,97,255,255,255,255,255,253,0,15,66,34,34,34,34,34,186,253,207,174,34,34,34,34,34,36,240,0,223,255,255,255,255,255,244,14,4,255,255,255,255,255,255,253,0,15,66,34,34,34,34,34,44,243,252,34,34,34,34,34,34,36,240,0,223,255,255,255,255,255,245,8,232,5,255,255,255,255,255,253,0,15,66,34,34,34,34,34,42,249,57,250,34,34,34,34,34,36,240,0,223,255,255,255,255,255,255,1,15,255,255,255,255,255,255,253,0,15,66,34,34,34,34,34,34,254,242,34,34,34,34,34,34,36,240,0,223,255,255,255,255,255,255,175,160,255,255,255,255,255,255,253,0,15,66,34,34,34,34,34,34,114,127,34,34,34,34,34,34,36,240,0,223,255,255,255,255,255,176,7,7,5,255,255,255,255,255,253,0,15,66,34,34,34,34,34,95,249,249,251,34,34,34,34,34,36,240,0,223,255,255,255,255,255,240,79,244,15,255,255,255,255,255,253,0,15,66,34,34,34,34,34,47,194,44,242,34,34,34,34,34,36,240,0,223,255,255,255,255,250,17,146,69,33,127,255,255,255,255,253,0,15,66,34,34,34,34,38,254,126,202,222,146,34,34,34,34,36,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,240,255,255,255,255,255,255,15,255,255,255,255,0,15,50,34,34,34,47,34,34,34,34,34,34,242,34,34,34,34,240,0,239,255,255,240,127,255,255,255,255,255,255,247,15,255,255,255,0,15,50,34,34,47,146,34,34,34,34,34,34,41,242,34,34,34,240,0,239,255,255,255,255,243,0,63,243,0,63,255,255,255,255,255,0,15,50,34,34,34,34,44,255,210,44,255,210,34,34,34,34,34,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,50,34,34,34,47,35,242,242,63,47,35,242,34,34,34,34,240,0,239,255,255,255,48,0,0,3,240,243,0,3,255,255,255,255,0,15,50,34,34,34,207,255,255,253,47,44,255,253,34,34,34,34,240,0,239,255,255,255,255,255,15,255,255,113,255,255,255,255,255,255,0,15,50,34,34,34,34,34,242,34,34,159,34,34,34,34,34,34,240,0,239,255,255,255,255,255,4,255,244,15,255,255,255,255,255,255,0,15,50,34,34,34,34,34,252,34,44,242,34,34,34,34,34,34,240,0,239,255,255,255,255,253,0,255,255,16,175,255,255,255,255,255,0,15,50,34,34,34,34,36,255,34,34,239,98,34,34,34,34,34,240,0,239,255,255,255,255,255,255,1,15,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,254,242,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,240,143,255,128,255,255,255,255,255,255,0,15,50,34,34,34,34,34,47,146,34,159,34,34,34,34,34,34,240,0,239,255,255,255,255,255,244,14,4,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,44,243,252,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,115,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,156,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,98,24,15,33,255,255,255,255,255,255,0,15,50,34,34,34,34,34,174,232,242,222,34,34,34,34,34,34,240,0,239,255,255,255,255,255,64,255,255,4,255,255,255,255,255,255,0,15,50,34,34,34,34,34,207,34,34,252,34,34,34,34,34,34,240,0,239,255,255,255,255,244,132,151,94,29,31,255,255,255,255,255,0,15,50,34,34,34,34,44,140,121,163,227,226,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,0,0,0,0,255,255,255,255,255,255,0,15,50,34,34,34,34,34,255,255,255,255,34,34,34,34,34,34,240,0,239,255,255,255,240,255,255,255,255,255,255,15,255,255,255,255,0,15,50,34,34,34,47,34,34,34,34,34,34,242,34,34,34,34,240,0,239,255,255,240,239,255,255,255,255,255,255,254,15,255,255,255,0,15,50,34,34,47,50,34,34,34,34,34,34,35,242,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,50,34,34,34,47,35,242,242,63,47,35,242,34,34,34,34,240,0,239,255,255,255,255,255,255,255,240,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,47,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,15,243,63,240,255,255,255,255,255,255,0,15,50,34,34,34,34,34,242,44,210,47,34,34,34,34,34,34,240,0,239,255,255,255,255,255,160,175,160,175,255,255,255,255,255,255,0,15,50,34,34,34,34,34,111,98,111,98,34,34,34,34,34,34,240,0,239,255,255,255,255,247,106,127,255,230,63,255,255,255,255,255,0,15,50,34,34,34,34,41,166,146,34,58,210,34,34,34,34,34,240,0,239,255,255,255,255,255,255,112,127,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,159,146,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,240,239,255,224,255,255,255,255,255,255,0,15,50,34,34,34,34,34,47,50,34,63,34,34,34,34,34,34,240,0,239,255,255,255,255,255,160,175,160,175,255,255,255,255,255,255,0,15,50,34,34,34,34,34,111,98,111,98,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,248,31,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,40,226,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,113,7,15,18,255,255,255,255,255,255,0,15,50,34,34,34,34,34,158,249,242,238,34,34,34,34,34,34,240,0,239,255,255,255,255,250,10,255,255,160,175,255,255,255,255,255,0,15,50,34,34,34,34,38,246,34,34,111,98,34,34,34,34,34,240,0,239,255,255,255,255,252,18,255,255,65,159,255,255,255,255,255,0,15,50,34,34,34,34,37,237,34,34,206,114,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,243,255,255,255,255,255,255,63,255,255,255,255,0,15,50,34,34,34,45,34,34,34,34,34,34,210,34,34,34,34,240,0,239,255,255,240,127,255,255,255,255,255,255,247,15,255,255,255,0,15,50,34,34,47,146,34,34,34,34,34,34,41,242,34,34,34,240,0,239,255,255,255,48,3,255,255,255,255,48,3,255,255,255,255,0,15,50,34,34,34,207,253,34,34,34,34,207,253,34,34,34,34,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,50,34,34,34,47,35,242,242,63,47,35,242,34,34,34,34,240,0,239,255,255,255,48,0,63,16,0,243,0,3,255,255,255,255,0,15,50,34,34,34,207,255,210,255,255,44,255,253,34,34,34,34,240,0,239,255,255,255,255,255,15,243,63,240,255,255,255,255,255,255,0,15,50,34,34,34,34,34,242,44,210,47,34,34,34,34,34,34,240,0,239,255,255,255,255,255,244,14,4,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,44,243,252,34,34,34,34,34,34,34,240,0,239,255,255,255,255,240,15,32,127,241,15,255,255,255,255,255,0,15,50,34,34,34,34,47,242,239,146,47,242,34,34,34,34,34,240,0,239,255,255,255,255,255,255,1,15,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,254,242,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,240,143,255,128,255,255,255,255,255,255,0,15,50,34,34,34,34,34,47,146,34,159,34,34,34,34,34,34,240,0,239,255,255,255,255,255,4,255,244,15,255,255,255,255,255,255,0,15,50,34,34,34,34,34,252,34,44,242,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,241,175,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,46,114,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,240,16,0,11,255,255,255,255,255,255,0,15,50,34,34,34,34,34,47,239,255,246,34,34,34,34,34,34,240,0,239,255,255,255,255,240,79,255,255,244,15,255,255,255,255,255,0,15,50,34,34,34,34,47,194,34,34,44,242,34,34,34,34,34,240,0,239,255,255,255,255,129,127,255,255,249,21,255,255,255,255,255,0,15,50,34,34,34,34,142,146,34,34,39,234,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,245,7,239,255,255,255,255,254,112,95,255,255,255,0,15,50,34,34,42,249,50,34,34,34,34,35,159,162,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,240,254,15,15,224,240,254,15,255,255,255,255,0,15,50,34,34,34,47,35,242,242,63,47,35,242,34,34,34,34,240,0,239,255,255,255,255,255,255,15,240,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,242,47,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,15,255,255,240,255,255,255,255,255,255,0,15,50,34,34,34,34,34,242,34,34,47,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,1,15,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,254,242,34,34,34,34,34,34,34,240,0,239,255,255,255,255,250,191,192,10,252,159,255,255,255,255,255,0,15,50,34,34,34,34,38,98,95,246,37,114,34,34,34,34,34,240,0,239,255,255,255,255,255,244,14,4,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,44,243,252,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,245,8,232,5,255,255,255,255,255,255,0,15,50,34,34,34,34,34,42,249,57,250,34,34,34,34,34,34,240,0,239,255,255,255,255,244,15,255,255,4,255,255,255,255,255,255,0,15,50,34,34,34,34,44,242,34,34,252,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,254,48,7,239,255,255,255,255,255,255,0,15,50,34,34,34,34,34,35,207,249,50,34,34,34,34,34,34,240,0,239,255,255,255,255,64,255,255,255,255,4,255,255,255,255,255,0,15,50,34,34,34,34,207,34,34,34,34,252,34,34,34,34,34,240,0,239,255,255,255,255,30,31,255,255,241,225,255,255,255,255,255,0,15,50,34,34,34,34,227,226,34,34,46,62,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,0,0,0,0,255,255,255,255,255,255,0,15,50,34,34,34,34,34,255,255,255,255,34,34,34,34,34,34,240,0,239,255,255,255,243,0,63,48,3,243,0,63,255,255,255,255,0,15,50,34,34,34,44,255,210,207,253,44,255,210,34,34,34,34,240,0,239,255,255,255,80,0,0,0,0,0,0,5,255,255,255,255,0,15,50,34,34,34,175,255,255,255,255,255,255,250,34,34,34,34,240,0,239,255,243,0,63,255,255,255,255,255,255,243,0,63,255,255,0,15,50,34,44,255,210,34,34,34,34,34,34,44,255,210,34,34,240,0,239,255,255,255,240,0,15,0,0,240,0,15,255,255,255,255,0,15,50,34,34,34,47,255,242,255,255,47,255,242,34,34,34,34,240,0,239,255,255,255,48,0,63,0,0,243,0,3,255,255,255,255,0,15,50,34,34,34,207,255,210,255,255,44,255,253,34,34,34,34,240,0,239,255,255,255,255,255,0,0,0,0,255,255,255,255,255,255,0,15,50,34,34,34,34,34,255,255,255,255,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,160,175,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,111,98,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,242,14,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,45,243,34,34,34,34,34,34,34,240,0,239,255,255,255,48,0,0,175,160,0,0,3,255,255,255,255,0,15,50,34,34,34,207,255,255,98,111,255,255,253,34,34,34,34,240,0,239,255,255,255,255,255,255,80,0,95,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,175,255,162,34,34,34,34,34,34,240,0,239,255,255,255,255,240,0,0,0,0,255,255,255,255,255,255,0,15,50,34,34,34,34,47,255,255,255,255,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,240,95,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,47,162,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,248,15,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,40,242,34,34,34,34,34,34,34,240,0,239,255,255,255,255,0,0,0,0,0,0,255,255,255,255,255,0,15,50,34,34,34,34,255,255,255,255,255,255,34,34,34,34,34,240,0,239,255,255,255,255,65,63,255,255,245,18,255,255,255,255,255,0,15,50,34,34,34,34,190,210,34,34,42,238,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,254,175,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,35,98,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,15,50,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,35,255,240,95,0,1,240,143,241,242,143,242,143,255,0,15,50,34,220,34,47,162,255,254,47,130,46,45,130,45,130,34,240,0,239,255,192,207,247,15,40,255,40,0,0,8,0,4,255,255,0,15,50,34,95,82,41,242,216,34,216,255,255,248,255,252,34,34,240,0,239,255,255,255,160,0,84,143,252,31,16,0,223,255,255,255,0,15,50,34,34,34,127,255,172,130,37,226,239,255,50,34,34,34,240,0,239,255,255,255,255,248,0,4,10,240,63,255,255,255,255,255,0,15,50,34,34,34,34,40,255,252,247,47,194,34,34,34,34,34,240,0,239,16,0,12,0,2,255,242,95,255,48,0,241,253,24,255,0,15,50,239,255,245,255,253,34,45,162,34,207,255,46,35,232,34,240,0,239,128,207,194,253,16,1,209,0,0,192,0,28,0,8,255,0,15,50,143,82,93,35,239,254,62,255,255,95,255,229,255,248,34,240,0,239,255,255,240,0,29,242,143,16,4,241,253,24,255,255,255,0,15,50,34,34,47,255,227,45,130,239,252,46,35,232,34,34,34,240,0,236,12,255,112,244,0,8,0,0,33,0,13,250,0,3,255,0,15,53,245,34,159,44,255,248,255,255,222,255,243,39,255,252,34,240,0,224,0,0,128,0,76,12,255,112,244,0,10,245,0,5,255,0,15,63,255,255,143,255,197,245,34,159,44,255,247,42,255,250,34,240,0,239,64,0,175,160,0,63,193,255,193,16,0,12,0,1,255,0,15,50,207,255,114,127,255,194,94,34,94,239,255,245,255,254,34,240,0,239,248,0,13,64,0,128,0,2,15,255,15,64,0,175,255,0,15,50,40,255,243,207,255,143,255,253,242,34,242,207,255,114,34,240,0,239,255,241,0,79,31,255,31,15,64,0,64,0,5,255,255,0,15,50,34,46,255,194,226,34,226,242,207,255,207,255,250,34,34,240,0,239,255,255,31,255,31,64,0,132,143,255,0,2,255,255,255,0,15,50,34,34,226,34,226,207,255,140,130,34,255,253,34,34,34,240,0,239,245,47,248,0,4,255,48,0,175,40,255,40,0,0,47,0,15,50,42,210,40,255,252,34,207,255,114,216,34,216,255,255,210,240,0,239,255,0,1,223,15,64,1,241,0,13,72,255,255,255,255,0,15,50,34,255,254,50,242,207,254,46,255,243,200,34,34,34,34,240,0,239,80,255,243,47,15,64,0,95,84,240,127,252,12,255,255,0,15,50,175,34,44,210,242,207,255,162,172,47,146,37,245,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,16,175,80,79,31,255,240,12,241,242,143,242,143,255,0,15,50,34,239,114,175,194,226,34,47,245,46,45,130,45,130,34,240,0,239,255,160,31,240,15,40,255,40,255,15,248,79,255,255,255,0,15,50,34,127,226,47,242,216,34,216,34,242,40,194,34,34,34,240,0,239,255,255,253,5,252,164,143,252,31,31,244,63,255,255,255,0,15,50,34,34,35,250,37,124,130,37,226,226,44,194,34,34,34,240,0,239,255,255,255,255,248,79,255,64,64,255,255,255,255,255,255,0,15,50,34,34,34,34,40,194,34,207,207,34,34,34,34,34,34,240,0,239,255,28,255,31,241,175,192,15,244,13,247,241,129,223,255,0,15,50,34,229,34,226,46,114,95,242,44,243,41,46,142,50,34,240,0,239,128,15,194,241,79,243,47,241,207,241,255,245,79,204,255,0,15,50,143,242,93,46,194,44,210,46,82,46,34,42,194,85,34,240,0,239,255,255,241,255,33,242,140,31,248,241,129,223,255,255,255,0,15,50,34,34,46,34,222,45,133,226,40,46,142,50,34,34,34,240,0,234,1,255,0,244,143,255,248,47,241,255,68,208,143,209,95,0,15,55,254,34,255,44,130,34,40,210,46,34,204,63,130,62,162,240,0,239,240,255,132,255,250,1,255,0,244,143,128,128,207,160,207,0,15,50,47,34,140,34,39,254,34,255,44,130,143,143,82,127,82,240,0,239,72,248,29,8,253,21,193,255,193,255,28,255,31,255,255,0,15,50,200,40,227,248,35,234,94,34,94,34,229,34,226,34,34,240,0,239,242,143,143,72,255,255,130,255,15,255,15,72,248,15,255,0,15,50,45,130,130,200,34,34,141,34,242,34,242,200,40,242,34,240,0,239,255,193,255,143,31,255,31,15,72,255,255,69,255,255,255,0,15,50,34,94,34,130,226,34,226,242,200,34,34,202,34,34,34,240,0,239,255,255,31,255,31,72,255,244,143,255,31,241,127,255,255,0,15,50,34,34,226,34,226,200,34,44,130,34,226,46,146,34,34,240,0,239,240,12,248,79,240,244,31,245,15,40,255,40,248,47,255,0,15,50,47,245,40,194,47,44,226,42,242,216,34,216,40,210,34,240,0,239,255,31,242,31,15,13,248,241,255,67,72,255,255,255,255,0,15,50,34,226,45,226,242,243,40,46,34,204,200,34,34,34,34,240,0,239,64,79,192,31,15,72,248,8,84,240,13,242,10,255,255,0,15,50,207,194,95,226,242,200,40,248,172,47,243,45,247,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,24,29,5,79,0,4,240,64,209,242,143,242,143,255,0,15,50,34,232,227,250,194,255,252,47,207,62,45,130,45,130,34,240,0,239,255,132,24,68,15,40,255,40,255,15,248,0,8,255,255,0,15,50,34,140,232,204,242,216,34,216,34,242,40,255,248,34,34,240,0,239,255,255,248,63,255,244,143,252,31,31,244,63,255,255,255,0,15,50,34,34,40,194,34,44,130,37,226,226,44,194,34,34,34,240,0,239,255,255,255,255,248,79,255,241,12,255,255,255,255,255,255,0,15,50,34,34,34,34,40,194,34,46,245,34,34,34,34,34,34,240,0,239,255,28,255,31,241,175,39,37,241,223,255,240,31,255,255,0,15,50,34,229,34,226,46,114,217,218,46,50,34,47,226,34,34,240,0,239,130,17,194,240,255,255,15,241,207,240,0,77,2,223,255,0,15,50,141,238,93,47,34,34,242,46,82,47,255,195,253,50,34,240,0,239,255,255,241,255,240,210,143,33,175,240,31,255,255,255,255,0,15,50,34,34,46,34,47,61,130,222,114,47,226,34,34,34,34,240,0,232,65,132,64,244,0,15,248,47,241,255,68,131,255,252,31,0,15,56,206,140,207,44,255,242,40,210,46,34,204,140,34,37,226,240,0,239,240,255,128,0,136,65,132,64,244,143,128,71,255,245,79,0,15,50,47,34,143,255,136,206,140,207,44,130,143,201,34,42,194,240,0,239,72,248,24,63,255,193,193,255,193,255,28,255,0,4,255,0,15,50,200,40,232,194,34,94,94,34,94,34,229,34,255,252,34,240,0,239,250,4,255,64,0,255,130,255,15,255,15,72,248,15,255,0,15,50,39,252,34,207,255,34,141,34,242,34,242,200,40,242,34,240,0,239,255,242,26,255,0,0,31,15,72,255,255,69,255,255,255,0,15,50,34,45,231,34,255,255,226,242,200,34,34,202,34,34,34,240,0,239,255,255,16,0,15,64,0,244,143,255,31,241,127,255,255,0,15,50,34,34,239,255,242,207,255,44,130,34,226,46,146,34,34,240,0,239,83,82,248,0,3,241,223,255,42,40,255,40,248,47,255,0,15,50,172,173,40,255,252,46,50,34,215,216,34,216,40,210,34,240,0,239,255,31,255,13,15,80,95,241,255,67,72,255,255,255,255,0,15,50,34,226,34,243,242,175,162,46,34,204,200,34,34,34,34,240,0,239,71,13,23,31,15,72,255,115,84,241,68,129,56,255,255,0,15,50,201,243,233,226,242,200,34,156,172,46,204,142,200,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,255,15,17,72,47,31,255,240,243,17,242,143,242,175,255,0,15,50,34,242,238,200,210,226,34,47,44,238,45,130,45,114,34,240,0,239,255,84,128,13,28,40,255,42,255,15,248,79,255,255,255,0,15,50,34,172,143,243,229,216,34,215,34,242,40,194,34,34,34,240,0,239,255,255,248,63,255,244,143,252,31,16,0,223,255,255,255,0,15,50,34,34,40,194,34,44,130,37,226,239,255,50,34,34,34,240,0,239,255,255,255,255,248,0,12,208,7,255,255,255,255,255,255,0,15,50,34,34,34,34,40,255,245,63,249,34,34,34,34,34,34,240,0,239,255,28,255,0,2,253,15,192,241,223,255,241,84,255,255,0,15,50,34,229,34,255,253,35,242,95,46,50,34,46,172,34,34,240,0,239,130,240,50,240,255,255,15,241,207,241,255,255,248,23,255,0,15,50,141,47,205,47,34,34,242,46,82,46,34,34,40,233,34,240,0,239,255,255,241,255,240,210,143,252,35,241,84,255,255,255,255,0,15,50,34,34,46,34,47,61,130,37,220,46,172,34,34,34,34,240,0,229,72,0,209,196,143,255,248,47,241,0,13,131,255,252,31,0,15,58,200,255,62,92,130,34,40,210,46,255,243,140,34,37,226,240,0,239,240,255,132,255,245,72,0,209,196,0,10,71,255,245,79,0,15,50,47,34,140,34,42,200,255,62,92,255,247,201,34,42,194,240,0,239,64,0,168,63,255,193,193,255,193,255,28,255,31,255,255,0,15,50,207,255,120,194,34,94,94,34,94,34,229,34,226,34,34,240,0,239,255,244,12,72,255,255,130,255,15,255,15,64,0,175,255,0,15,50,34,44,245,200,34,34,141,34,242,34,242,207,255,114,34,240,0,239,255,255,194,63,31,255,31,15,64,0,255,69,255,255,255,0,15,50,34,34,93,194,226,34,226,242,207,255,34,202,34,34,34,240,0,239,255,255,31,255,31,72,255,244,143,255,0,2,255,255,255,0,15,50,34,34,226,34,226,200,34,44,130,34,255,253,34,34,34,240,0,239,28,240,216,79,240,161,223,255,42,40,255,42,248,47,255,0,15,50,229,47,56,194,47,126,50,34,215,216,34,215,40,210,34,240,0,239,255,31,255,13,15,255,49,241,0,13,72,255,255,255,255,0,15,50,34,226,34,243,242,34,206,46,255,243,200,34,34,34,34,240,0,239,40,65,31,15,15,72,255,115,84,193,208,8,69,255,255,0,15,50,216,206,226,242,242,200,34,156,172,94,63,248,202,34,34,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,255,31,128,220,47,31,255,240,255,0,244,31,192,223,253,0,15,66,34,226,143,53,210,226,34,47,34,255,44,226,95,50,36,240,0,223,255,85,241,79,44,65,252,13,255,15,248,79,255,255,253,0,15,66,34,170,46,194,213,206,37,243,34,242,40,194,34,34,36,240,0,223,255,255,253,5,255,132,143,252,31,31,255,255,255,255,253,0,15,66,34,34,35,250,34,140,130,37,226,226,34,34,34,34,36,240,0,223,255,255,255,255,248,79,255,49,112,207,255,255,255,255,253,0,15,66,34,34,34,34,40,194,34,206,159,82,34,34,34,34,36,240,0,223,255,28,255,31,115,244,0,0,132,29,248,241,245,79,253,0,15,66,34,229,34,226,156,44,255,255,140,227,40,46,42,194,36,240,0,223,130,252,2,241,63,243,47,241,207,241,255,250,207,130,253,0,15,66,141,37,253,46,194,44,210,46,82,46,34,39,82,141,36,240,0,223,255,255,241,255,33,242,141,143,208,241,245,79,255,255,253,0,15,66,34,34,46,34,222,45,131,130,63,46,42,194,34,34,36,240,0,213,95,20,242,196,143,255,248,47,241,252,31,208,95,209,93,0,15,74,162,236,45,92,130,34,40,210,46,37,226,63,162,62,164,240,0,223,240,255,132,255,245,95,20,242,196,143,255,128,175,160,205,0,15,66,47,34,140,34,42,162,236,45,92,130,34,143,114,127,84,240,0,223,72,241,205,5,253,21,240,175,51,255,28,255,31,255,253,0,15,66,200,46,83,250,35,234,47,114,204,34,229,34,226,34,36,240,0,223,247,255,69,72,255,255,130,255,20,247,15,72,255,255,253,0,15,66,41,34,202,200,34,34,141,34,236,41,242,200,34,34,36,240,0,223,255,216,253,15,31,255,31,15,72,255,255,69,255,255,253,0,15,66,34,56,35,242,226,34,226,242,200,34,34,202,34,34,36,240,0,223,255,255,31,255,31,72,255,244,143,255,31,255,255,255,253,0,15,66,34,34,226,34,226,200,34,44,130,34,226,34,34,34,36,240,0,218,0,0,72,79,208,164,29,245,15,65,252,13,248,47,253,0,15,71,255,255,200,194,63,124,227,42,242,206,37,243,40,210,36,240,0,223,255,31,242,31,15,127,241,193,255,255,72,255,255,255,253,0,15,66,34,226,45,226,242,146,46,94,34,34,200,34,34,34,36,240,0,223,44,208,143,31,15,72,248,8,84,194,244,31,85,255,253,0,15,66,213,63,130,226,242,200,40,248,172,93,44,226,170,34,36,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,255,15,255,252,31,0,0,240,255,160,253,0,4,255,249,0,15,114,34,242,34,37,226,255,255,47,34,127,35,255,252,34,39,240,0,159,255,69,255,255,40,208,0,79,255,15,248,0,1,255,249,0,15,114,34,202,34,34,216,63,255,194,34,242,40,255,254,34,39,240,0,159,255,255,255,128,0,68,0,5,31,31,255,255,255,255,249,0,15,114,34,34,34,143,255,204,255,250,226,226,34,34,34,34,39,240,0,159,255,255,255,255,248,79,247,12,241,31,255,255,255,255,249,0,15,114,34,34,34,34,40,194,41,245,46,226,34,34,34,34,39,240,0,159,255,28,255,31,244,112,223,247,47,16,0,241,255,58,249,0,15,114,34,229,34,226,44,159,50,41,210,239,255,46,34,199,39,240,0,159,130,255,66,253,16,1,223,241,207,240,0,5,0,8,249,0,15,114,141,34,205,35,239,254,50,46,82,47,255,250,255,248,39,240,0,159,255,255,240,0,29,242,140,0,4,241,255,58,255,255,249,0,15,114,34,34,47,255,227,45,133,255,252,46,34,199,34,34,39,240,0,148,95,255,242,132,0,4,248,47,241,255,163,250,0,3,249,0,15,124,162,34,45,140,255,252,40,210,46,34,124,39,255,252,39,240,0,159,240,255,128,0,20,95,255,242,132,143,255,245,0,5,249,0,15,114,47,34,143,255,236,162,34,45,140,130,34,42,255,250,39,240,0,159,72,253,31,160,0,63,245,0,12,255,28,255,0,0,249,0,15,114,200,35,226,127,255,194,42,255,245,34,229,34,255,255,39,240,0,159,242,0,12,64,0,79,130,255,160,0,143,72,255,255,249,0,15,114,45,255,245,207,255,194,141,34,127,255,130,200,34,34,39,240,0,159,255,192,0,79,31,255,31,15,72,255,255,69,255,255,249,0,15,114,34,95,255,194,226,34,226,242,200,34,34,202,34,34,39,240,0,159,255,255,31,255,31,64,0,68,0,8,31,255,255,255,249,0,15,114,34,34,226,34,226,207,255,204,255,248,226,34,34,34,39,240,0,146,143,253,8,0,3,255,48,0,175,208,0,79,248,47,249,0,15,125,130,35,248,255,252,34,207,255,114,63,255,194,40,210,39,240,0,159,255,0,1,223,15,0,1,241,255,255,64,0,128,207,249,0,15,114,34,255,254,50,242,255,254,46,34,34,207,255,143,82,39,240,0,159,28,255,255,15,15,64,0,95,84,130,255,255,84,66,249,0,15,114,229,34,34,242,242,207,255,162,172,141,34,34,172,205,39,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,47,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,0,13,194,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,0,5,244,34,34,34,34,34,34,34,34,34,34,34,34,34,34,79,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,222,34,34,34,34,34,34,34,34,34,34,34,34,34,34,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,13,255,255,255,255,255,255,255,255,255,255,255,255,208,0,0,0,31,228,34,34,34,34,34,34,34,34,34,34,34,34,78,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,41,223,255,255,255,255,255,255,255,255,253,146,0,0,0,0,1,223,199,66,34,34,34,34,34,34,34,34,36,124,253,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,223,255,255,255,255,255,255,255,255,255,255,253,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/trunk/apps/sequencers/LoopA/attic/seq.c
New file
0,0 → 1,937
// $Id: seq.c 1942 2014-01-26 21:25:53Z tk $
/*
* Sequencer Routines
*
* ==========================================================================
*
* Copyright (C) 2008 Thorsten Klose (tk@midibox.org)
* Licensed for personal non-commercial use only.
* All other rights reserved.
*
* ==========================================================================
*/
 
/////////////////////////////////////////////////////////////////////////////
// Include files
/////////////////////////////////////////////////////////////////////////////
 
#include <mios32.h>
#include <string.h>
 
#include "tasks.h"
#include <seq_bpm.h>
#include <seq_midi_out.h>
#include <midi_port.h>
#include <file.h>
#include <osc_client.h>
#include <midi_router.h>
 
#include <mid_parser.h>
 
#include "hardware.h"
#include "seq.h"
#include "screen.h"
#include "voxelspace.h"
 
 
/////////////////////////////////////////////////////////////////////////////
// for optional debugging messages via MIDI
/////////////////////////////////////////////////////////////////////////////
#define DEBUG_VERBOSE_LEVEL 1
#define DEBUG_MSG MIOS32_MIDI_SendDebugMessage
 
 
/////////////////////////////////////////////////////////////////////////////
// Local definitions
/////////////////////////////////////////////////////////////////////////////
 
// how much time has to be bridged between prefetch cycles (time in mS)
#define PREFETCH_TIME_MS 50 // mS
 
 
/////////////////////////////////////////////////////////////////////////////
// Local prototypes
/////////////////////////////////////////////////////////////////////////////
 
static s32 SEQ_PlayOffEvents(void);
static s32 SEQ_SongPos(u16 new_song_pos);
static s32 SEQ_Tick(u32 bpm_tick);
static s32 SEQ_CheckSongFinished(u32 bpm_tick);
 
static s32 Hook_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package);
 
s32 SEQ_PlayNextFile(s8 next);
 
static s32 SEQ_PlayEvent(u8 track, mios32_midi_package_t midi_package, u32 tick);
static s32 SEQ_PlayMeta(u8 track, u8 meta, u32 len, u8 *buffer, u32 tick);
 
 
/////////////////////////////////////////////////////////////////////////////
// Global variables
/////////////////////////////////////////////////////////////////////////////
 
u16 seq_play_enabled_ports;
u16 seq_rec_enabled_ports;
 
u8 seq_play_enable_dout;
u8 seq_rec_enable_din;
 
 
/////////////////////////////////////////////////////////////////////////////
// Local variables
/////////////////////////////////////////////////////////////////////////////
 
// for FFWD function
static u8 ffwd_silent_mode;
 
// next tick at which the prefetch should take place
static u32 next_prefetch;
 
// end of file reached
static u32 end_of_file;
 
// already prefetched ticks
static u32 prefetch_offset;
 
// request to play the next file
static s8 next_file_req;
 
// the MIDI play mode
static u8 midi_play_mode;
 
// pause mode
static u8 seq_pause;
 
// lock BPM, so that it can't be changed from MIDI player
static u8 seq_clk_locked;
 
/////////////////////////////////////////////////////////////////////////////
// Initialisation
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_Init(u32 mode)
{
// play mode
midi_play_mode = SEQ_MIDI_PLAY_MODE_ALL;
seq_clk_locked = 0;
 
// play over USB0 and UART0/1
seq_play_enabled_ports = 0x01 | (0x03 << 4);
 
// record over USB0 and UART0/1
seq_rec_enabled_ports = 0x01 | (0x03 << 4);
 
// play/record over DOUT/DIN
seq_play_enable_dout = 0;
seq_rec_enable_din = 0;
 
// init MIDI file handler
MID_FILE_Init(0);
 
// init MIDI parser module
MID_PARSER_Init(0);
 
// install callback functions
MID_PARSER_InstallEventCallbacks(&SEQ_PlayEvent, &SEQ_PlayMeta);
 
// reset sequencer
SEQ_Reset(0);
 
// start with pause after power-on
SEQ_SetPauseMode(1);
 
// init BPM generator
SEQ_BPM_Init(0);
SEQ_BPM_Set(120.0);
 
// scheduler should send packages to private hook
SEQ_MIDI_OUT_Callback_MIDI_SendPackage_Set(Hook_MIDI_SendPackage);
 
return 0; // no error
}
 
/////////////////////////////////////////////////////////////////////////////
// set/get Clock mode
// adds a fourth mode which locks the BPM so that it can't be modified by the MIDI file
/////////////////////////////////////////////////////////////////////////////
u8 SEQ_ClockModeGet(void)
{
if (seq_clk_locked)
return 3;
 
return SEQ_BPM_ModeGet();
}
 
s32 SEQ_ClockModeSet(u8 mode)
{
if (mode > 3)
return -1; // invalid mode
 
if( mode == 3 )
{
SEQ_BPM_ModeSet(SEQ_BPM_MODE_Master);
seq_clk_locked = 1;
}
else
{
SEQ_BPM_ModeSet(mode);
seq_clk_locked = 0;
}
 
return 0; // no error
}
 
/////////////////////////////////////////////////////////////////////////////
// set/get MIDI play mode
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_MidiPlayModeGet(void)
{
return midi_play_mode;
}
 
s32 SEQ_MidiPlayModeSet(u8 mode)
{
if( mode >= SEQ_MIDI_PLAY_MODE_NUM )
return -1;
 
midi_play_mode = mode;
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// this sequencer handler is called periodically to check for new requests
// from BPM generator
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_Handler(void)
{
// a lower priority task requested to play the next file
if( next_file_req != 0 )
{
SEQ_PlayNextFile(next_file_req & (s8)~0x40);
next_file_req = 0;
};
 
 
// handle BPM requests
u8 num_loops = 0;
u8 again = 0;
do
{
++num_loops;
 
// note: don't remove any request check - clocks won't be propagated
// so long any Stop/Cont/Start/SongPos event hasn't been flagged to the sequencer
if (SEQ_BPM_ChkReqStop())
{
SEQ_PlayOffEvents();
MID_FILE_SetRecordMode(0);
 
MIDI_ROUTER_SendMIDIClockEvent(0xfc, 0);
}
 
if (SEQ_BPM_ChkReqCont())
{
// release pause mode
SEQ_SetPauseMode(0);
 
MIDI_ROUTER_SendMIDIClockEvent(0xfb, 0);
}
 
if (SEQ_BPM_ChkReqStart())
{
MIDI_ROUTER_SendMIDIClockEvent(0xfa, 0);
SEQ_Reset(1);
SEQ_SongPos(0);
}
 
u16 new_song_pos;
if (SEQ_BPM_ChkReqSongPos(&new_song_pos))
{
SEQ_SongPos(new_song_pos);
}
 
 
u32 bpm_tick;
if (SEQ_BPM_ChkReqClk(&bpm_tick) > 0)
{
if (!MID_FILE_RecordingEnabled())
{
// check if song is finished
if( SEQ_CheckSongFinished(bpm_tick) >= 1 )
{
bpm_tick = 0;
}
 
// set initial BPM according to MIDI spec
if (bpm_tick == 0 && !seq_clk_locked)
SEQ_BPM_Set(120.0);
 
if (bpm_tick == 0) // send start (again) to synchronize with new MIDI songs
MIDI_ROUTER_SendMIDIClockEvent(0xfa, 0);
 
again = 1; // check all requests again after execution of this part
SEQ_Tick(bpm_tick);
}
}
} while (again && num_loops < 10);
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// This function plays all "off" events
// Should be called on sequencer reset/restart/pause to avoid hanging notes
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_PlayOffEvents(void)
{
// play "off events"
SEQ_MIDI_OUT_FlushQueue();
 
// send Note Off to all channels
// TODO: howto handle different ports?
// TODO: should we also send Note Off events? Or should we trace Note On events and send Off if required?
int chn;
mios32_midi_package_t midi_package;
midi_package.type = CC;
midi_package.event = CC;
midi_package.evnt2 = 0;
for(chn=0; chn<16; ++chn) {
midi_package.chn = chn;
midi_package.evnt1 = 123; // All Notes Off
Hook_MIDI_SendPackage(UART0, midi_package);
midi_package.evnt1 = 121; // Controller Reset
Hook_MIDI_SendPackage(UART0, midi_package);
}
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// Resets song position of sequencer
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_Reset(u8 play_off_events)
{
// since timebase has been changed, ensure that Off-Events are played
// (otherwise they will be played much later...)
if( play_off_events )
SEQ_PlayOffEvents();
 
// release pause and FFWD mode
SEQ_SetPauseMode(0);
ffwd_silent_mode = 0;
next_prefetch = 0;
end_of_file = 0;
prefetch_offset = 0;
 
// set initial BPM (according to MIDI file spec)
SEQ_BPM_PPQN_Set(384); // not specified
//SEQ_BPM_Set(120.0);
// will be done at tick 0 to avoid overwrite in record mode!
 
// reset BPM tick
SEQ_BPM_TickSet(0);
 
// restart song
MID_PARSER_RestartSong();
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// Sets new song position (new_song_pos resolution: 16th notes)
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_SongPos(u16 new_song_pos)
{
if( MID_FILE_RecordingEnabled() )
return 0; // nothing to do
 
u32 new_tick = new_song_pos * (SEQ_BPM_PPQN_Get() / 4);
 
portENTER_CRITICAL();
 
// set new tick value
SEQ_BPM_TickSet(new_tick);
 
DEBUG_MSG("[SEQ] Setting new song position %u (-> %u ticks)\n", new_song_pos, new_tick);
 
// since timebase has been changed, ensure that Off-Events are played
// (otherwise they will be played much later...)
SEQ_PlayOffEvents();
 
// restart song
MID_PARSER_RestartSong();
 
// release pause
u8 pause = SEQ_PauseEnabled();
SEQ_SetPauseMode(0);
 
if( new_song_pos > 1 )
{
// (silently) fast forward to requested position
ffwd_silent_mode = 1;
MID_PARSER_FetchEvents(0, new_tick-1);
ffwd_silent_mode = 0;
}
 
// when do we expect the next prefetch:
end_of_file = 0;
next_prefetch = new_tick;
prefetch_offset = new_tick;
 
// restore pause mode
SEQ_SetPauseMode(pause);
 
portEXIT_CRITICAL();
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// Plays the given .mid file
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_PlayFile(char *midifile)
{
SEQ_BPM_Stop(); // stop BPM generator
 
// play off events before loading new file
SEQ_PlayOffEvents();
 
// reset BPM tick (to ensure that next file will start at 0 if we are currently in pause mode)
SEQ_BPM_TickSet(0);
end_of_file = next_prefetch = prefetch_offset = 0;
 
if (MID_FILE_open(midifile))
{
// try to open next file
DEBUG_MSG("[SEQ] file %s cannot be opened (wrong directory?)\n", midifile);
return -1; // file cannot be opened
}
if (MID_PARSER_Read() < 0)
{
// read file, stop on failure
DEBUG_MSG("[SEQ] file %s is invalid!\n", midifile);
return -2; // file is invalid
}
 
// restart BPM generator if not in pause mode
if (!SEQ_PauseEnabled())
SEQ_BPM_Start();
 
strcpy(screenMode, "Play");
strcpy(screenFile , midifile);
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// Plays the first .mid file if next == 0, the next file if next > 0, the
// 0: plays the current .mid file
// 1: plays the next .mid file
// -1: plays the previous .mid file
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_PlayNextFile(s8 next)
{
char next_file[13];
next_file[0] = 0;
 
// reinstall callback functions
MID_PARSER_InstallEventCallbacks(&SEQ_PlayEvent, &SEQ_PlayMeta);
 
 
if( next == 0 && MID_FILE_UI_NameGet()[0] != 0 )
{
memcpy(next_file, MID_FILE_UI_NameGet(), 13);
DEBUG_MSG("[SEQ] play current file '%s'\n", next_file);
}
else if (next < 0 &&
(MID_FILE_FindPrev(MID_FILE_UI_NameGet(), next_file) == 1 ||
MID_FILE_FindPrev(NULL, next_file) == 1))
{
// if previous file not found, try last file
DEBUG_MSG("[SEQ] previous file found '%s'\n", next_file);
}
else
if (MID_FILE_FindNext(next ? MID_FILE_UI_NameGet() : NULL, next_file) == 1 ||
MID_FILE_FindNext(NULL, next_file) == 1)
{
// if next file not found, try first file
DEBUG_MSG("[SEQ] next file found '%s'\n", next_file);
}
 
if( next_file[0] == 0 )
{
if( next < 0 )
return 0; // ignore silently
 
SEQ_BPM_Stop(); // stop BPM generator
 
DEBUG_MSG("[SEQ] no file found\n");
return -1; // file not found
}
else
{
SEQ_PlayFile(next_file);
}
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// Allows to request to play the next file from a lower priority task
// 0: request first
// 1: request next
// -1: request previous
//
// if force is set, the next/previous song will be played regardless of current MIDI play mode
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_PlayFileReq(s8 next, u8 force)
{
if (force || !next || midi_play_mode == SEQ_MIDI_PLAY_MODE_ALL)
{
// stop generator
SEQ_BPM_Stop();
 
// request next file
next_file_req = next | 0x40; // ensure that next_file is always != 0
}
else
{
// play current MIDI file again
SEQ_Reset(1);
SEQ_SongPos(0);
}
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// enables/disables pause
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_SetPauseMode(u8 enable)
{
seq_pause = enable;
return 0; // no error
}
 
/////////////////////////////////////////////////////////////////////////////
// returns 1 if pause enabled
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_PauseEnabled(void)
{
return seq_pause;
}
 
 
 
 
/**
* performs a single bpm tick
*
* idea: MID_FILE has access to all 8 clip files and current MID positions stored
* if a clip is unmuted, ask MID_PARSER to prefetch from respective clip and
* insert into sequencer
*
*/
static s32 SEQ_Tick(u32 bpm_tick)
{
// send MIDI clock depending on ppqn
if( (bpm_tick % (SEQ_BPM_PPQN_Get()/24)) == 0 )
{
// DEBUG_MSG("Tick %d, SEQ BPM PPQN/24 %d", bpm_tick, SEQ_BPM_PPQN_Get()/24);
MIDI_ROUTER_SendMIDIClockEvent(0xf8, bpm_tick);
}
 
if (!end_of_file && bpm_tick >= next_prefetch)
{
// get number of prefetch ticks depending on current BPM
u32 prefetch_ticks = SEQ_BPM_TicksFor_mS(PREFETCH_TIME_MS);
 
if (bpm_tick >= prefetch_offset)
{
// buffer underrun - fetch more!
prefetch_ticks += (bpm_tick - prefetch_offset);
next_prefetch = bpm_tick; // ASAP
}
else if ((prefetch_offset - bpm_tick) < prefetch_ticks)
{
// close to a buffer underrun - fetch more!
prefetch_ticks *= 2;
next_prefetch = bpm_tick; // ASAP
}
else
{
next_prefetch += prefetch_ticks;
}
 
#if DEBUG_VERBOSE_LEVEL >= 3
DEBUG_MSG("[SEQ] Prefetch started at tick %u (prefetching %u..%u)\n", bpm_tick, prefetch_offset, prefetch_offset+prefetch_ticks-1);
#endif
 
if (MID_PARSER_FetchEvents(prefetch_offset, prefetch_ticks) == 0)
{
end_of_file = 1;
}
else
{
prefetch_offset += prefetch_ticks;
}
 
#if DEBUG_VERBOSE_LEVEL >= 3
DEBUG_MSG("[SEQ] Prefetch finished at tick %u\n", SEQ_BPM_TickGet());
#endif
}
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// handles song restart
// returns 1 if song has been restarted, otherwise 0
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_CheckSongFinished(u32 bpm_tick)
{
// synchronized switch to next file
if (end_of_file && ((bpm_tick+1) % SEQ_BPM_PPQN_Get()) == 0)
{
if( midi_play_mode == SEQ_MIDI_PLAY_MODE_SINGLE )
{
DEBUG_MSG("[SEQ] End of song reached after %u ticks - stopping sequencer!\n", bpm_tick);
 
SEQ_BPM_Stop();
SEQ_Reset(1);
SEQ_SetPauseMode(1);
}
else if( midi_play_mode == SEQ_MIDI_PLAY_MODE_SINGLE_LOOP )
{
DEBUG_MSG("[SEQ] End of song reached after %u ticks - restarting song!\n", bpm_tick);
SEQ_Reset(1);
}
else
{
DEBUG_MSG("[SEQ] End of song reached after %u ticks - loading next file!\n", bpm_tick);
 
SEQ_PlayFileReq(1, 0);
}
 
return 1;
}
 
return 0; // no error
}
 
/////////////////////////////////////////////////////////////////////////////
// called when a MIDI event should be played at a given tick
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_PlayEvent(u8 track, mios32_midi_package_t midi_package, u32 tick)
{
// ignore all events in silent mode (for SEQ_SongPos function)
// we could implement a more intelligent parser, which stores the sent CC/program change, etc...
// and sends the last received values before restarting the song...
if (ffwd_silent_mode)
return 0;
 
// In order to support an unlimited SysEx stream length, we pass them as single bytes directly w/o the sequencer!
if (midi_package.type == 0xf)
{
Hook_MIDI_SendPackage(UART0, midi_package);
return 0;
}
 
// Voxelspace note rendering
if (midi_package.event == NoteOn && midi_package.velocity > 0)
voxelNoteOn(midi_package.note, midi_package.velocity);
 
if (midi_package.event == NoteOff || (midi_package.event == NoteOn && midi_package.velocity == 0))
voxelNoteOff(midi_package.note);
 
seq_midi_out_event_type_t event_type = SEQ_MIDI_OUT_OnEvent;
if (midi_package.event == NoteOff || (midi_package.event == NoteOn && midi_package.velocity == 0))
event_type = SEQ_MIDI_OUT_OffEvent;
 
// output events on UART0 port
u32 status = 0;
status |= SEQ_MIDI_OUT_Send(UART0, midi_package, event_type, tick, 0);
 
/// DEBUG_MSG("in SEQ_PlayEvent");
 
return status;
}
 
 
/////////////////////////////////////////////////////////////////////////////
// called when a Meta event should be played/processed at a given tick
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_PlayMeta(u8 track, u8 meta, u32 len, u8 *buffer, u32 tick)
{
switch (meta)
{
case 0x00: // Sequence Number
if (len == 2)
{
u32 seq_number = (buffer[0] << 8) | buffer[1];
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Sequence Number %u\n", track, tick, seq_number);
#endif
}
else
{
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Sequence Number with %d bytes -- ERROR: expecting 2 bytes!\n", track, tick, len);
#endif
}
break;
 
case 0x01: // Text Event
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Text: %s\n", track, tick, buffer);
#endif
break;
 
case 0x02: // Copyright Notice
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Copyright: %s\n", track, tick, buffer);
#endif
break;
 
case 0x03: // Sequence/Track Name
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Track Name: %s\n", track, tick, buffer);
#endif
break;
 
case 0x04: // Instrument Name
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Instr. Name: %s\n", track, tick, buffer);
#endif
break;
 
case 0x05: // Lyric
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Lyric: %s\n", track, tick, buffer);
#endif
break;
 
case 0x06: // Marker
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Marker: %s\n", track, tick, buffer);
#endif
break;
 
case 0x07: // Cue Point
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Cue Point: %s\n", track, tick, buffer);
#endif
break;
 
case 0x20: // Channel Prefix
if( len == 1 ) {
u32 prefix = *buffer;
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Channel Prefix %u\n", track, tick, prefix);
#endif
} else {
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Channel Prefix with %d bytes -- ERROR: expecting 1 byte!\n", track, tick, len);
#endif
}
break;
 
case 0x2f: // End of Track
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - End of Track\n", track, tick, meta);
#endif
break;
 
case 0x51: // Set Tempo
if( len == 3 ) {
u32 tempo_us = (buffer[0] << 16) | (buffer[1] << 8) | buffer[2];
float bpm = 60.0 * (1E6 / (float)tempo_us);
SEQ_BPM_PPQN_Set(MIDI_PARSER_PPQN_Get());
 
if( !seq_clk_locked ) {
// set tempo immediately on first tick
if( tick == 0 ) {
SEQ_BPM_Set(bpm);
} else {
// put tempo change request into the queue
mios32_midi_package_t tempo_package; // or Softis?
tempo_package.ALL = (u32)bpm;
SEQ_MIDI_OUT_Send(UART0, tempo_package, SEQ_MIDI_OUT_TempoEvent, tick, 0);
}
}
 
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Tempo to %u uS -> %u BPM%s\n", track, tick, tempo_us, (u32)bpm,
seq_clk_locked ? " IGNORED (locked)" : "");
#endif
} else {
#if DEBUG_VERBOSE_LEVEL >= 2
DEBUG_MSG("[SEQ:%d:%u] Meta - Tempo with %u bytes -- ERROR: expecting 3 bytes!\n", track, tick, len);
#endif
}
break;
 
// other known events which are not handled here:
// 0x54: SMPTE offset
// 0x58: Time Signature
// 0x59: Key Signature
// 0x7f: Sequencer Specific Meta Event
 
#if DEBUG_VERBOSE_LEVEL >= 2
default:
DEBUG_MSG("[SEQ:%d:%u] Meta Event 0x%02x with length %u not processed\n", track, tick, meta, len);
#endif
}
 
return 0;
}
 
 
/////////////////////////////////////////////////////////////////////////////
// this hook is called when the MIDI scheduler sends a package
/////////////////////////////////////////////////////////////////////////////
static s32 Hook_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package)
{
// realtime events are already scheduled by MIDI_ROUTER_SendMIDIClockEvent()
if( package.evnt0 >= 0xf8 )
{
MIOS32_MIDI_SendPackage(port, package);
} else
{
// forward to enabled MIDI ports
int i;
u16 mask = 1;
 
for(i=0; i<16; ++i, mask <<= 1)
{
if( seq_play_enabled_ports & mask )
{
// USB0/1/2/3, UART0/1/2/3, IIC0/1/2/3, OSC0/1/2/3
mios32_midi_port_t port = USB0 + ((i&0xc) << 2) + (i&3);
MIOS32_MIDI_SendPackage(port, package);
}
}
}
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// To control the play/stop button function
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_PlayStopButton(void)
{
if( SEQ_BPM_IsRunning() )
{
SEQ_BPM_Stop(); // stop sequencer
SEQ_SetPauseMode(1);
MID_FILE_SetRecordMode(0);
 
strcpy(screenMode, "Pause");
}
else
{
if (SEQ_PauseEnabled())
{
// continue sequencer
SEQ_SetPauseMode(0);
SEQ_BPM_Cont();
}
else
{
MUTEX_SDCARD_TAKE;
 
// if in auto mode and BPM generator is clocked in slave mode:
// change to master mode
SEQ_BPM_CheckAutoMaster();
 
// request to play currently selected file
SEQ_PlayFileReq(0, 1);
 
// reset sequencer
SEQ_Reset(1);
 
// start sequencer
SEQ_BPM_Start();
 
MUTEX_SDCARD_GIVE;
}
}
 
return 0; // no error
}
 
 
/////////////////////////////////////////////////////////////////////////////
// To control the rec/stop button function
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_RecStopButton(void)
{
if( SEQ_BPM_IsRunning() )
{
SEQ_BPM_Stop(); // stop sequencer
SEQ_SetPauseMode(1);
MID_FILE_SetRecordMode(0);
 
strcpy(screenMode, "RecPause");
}
else
{
strcpy(screenMode, "Rec");
SEQ_SetPauseMode(0);
 
// if in auto mode and BPM generator is clocked in slave mode:
// change to master mode
SEQ_BPM_CheckAutoMaster();
 
// enter record mode
if( MID_FILE_SetRecordMode(1) >= 0 ) {
// reset sequencer
SEQ_Reset(1);
 
// start sequencer
SEQ_BPM_Start();
}
}
 
return 0; // no error
}
 
s32 SEQ_FFwdButton(void)
{
u32 tick = SEQ_BPM_TickGet();
u32 ticks_per_step = SEQ_BPM_PPQN_Get() / 4;
u32 ticks_per_measure = ticks_per_step * 16;
 
int measure = tick / ticks_per_measure;
int song_pos = 16 * (measure + 1);
if( song_pos > 65535 )
song_pos = 65535;
 
return SEQ_SongPos(song_pos);
}
 
s32 SEQ_FRewButton(void)
{
u32 tick = SEQ_BPM_TickGet();
u32 ticks_per_step = SEQ_BPM_PPQN_Get() / 4;
u32 ticks_per_measure = ticks_per_step * 16;
 
int measure = tick / ticks_per_measure;
int song_pos = 16 * (measure - 1);
if( song_pos < 0 )
song_pos = 0;
 
return SEQ_SongPos(song_pos);
}
 
/trunk/apps/sequencers/LoopA/attic/seq.h
New file
0,0 → 1,71
// $Id: seq.h 1540 2012-11-23 22:15:17Z tk $
/*
* Header file for sequencer routines
*
* ==========================================================================
*
* Copyright (C) 2008 Thorsten Klose (tk@midibox.org)
* Licensed for personal non-commercial use only.
* All other rights reserved.
*
* ==========================================================================
*/
 
#ifndef _SEQ_H
#define _SEQ_H
 
/////////////////////////////////////////////////////////////////////////////
// Global definitions
/////////////////////////////////////////////////////////////////////////////
 
#define SEQ_MIDI_PLAY_MODE_NUM 3 // three available modes
 
#define SEQ_MIDI_PLAY_MODE_ALL 0
#define SEQ_MIDI_PLAY_MODE_SINGLE 1
#define SEQ_MIDI_PLAY_MODE_SINGLE_LOOP 2
 
/////////////////////////////////////////////////////////////////////////////
// Global Types
/////////////////////////////////////////////////////////////////////////////
 
 
/////////////////////////////////////////////////////////////////////////////
// Prototypes
/////////////////////////////////////////////////////////////////////////////
 
extern s32 SEQ_Init(u32 mode);
 
extern u8 SEQ_ClockModeGet(void);
extern s32 SEQ_ClockModeSet(u8 mode);
 
extern s32 SEQ_Reset(u8 play_off_events);
extern s32 SEQ_Handler(void);
 
extern s32 SEQ_PlayFileReq(s8 next, u8 force);
 
extern s32 SEQ_PauseEnabled(void);
extern s32 SEQ_SetPauseMode(u8 enable);
 
extern s32 SEQ_PlayStopButton(void);
extern s32 SEQ_RecStopButton(void);
extern s32 SEQ_FFwdButton(void);
extern s32 SEQ_FRewButton(void);
 
extern s32 SEQ_PlayFile(char *midifile);
extern s32 SEQ_PlayNextFile(s8 next);
 
extern s32 SEQ_MidiPlayModeGet(void);
extern s32 SEQ_MidiPlayModeSet(u8 mode);
 
 
/////////////////////////////////////////////////////////////////////////////
// Export global variables
/////////////////////////////////////////////////////////////////////////////
 
extern u16 seq_play_enabled_ports;
extern u16 seq_rec_enabled_ports;
 
extern u8 seq_play_enable_dout;
extern u8 seq_rec_enable_din;
 
#endif /* _SEQ_H */
/trunk/apps/sequencers/LoopA/hardware.c
2,30 → 2,57
 
// --- LEDs ---
 
const u8 led_startstop = 127;
const u8 led_armrecord = 14;
const u8 HW_LED_RED_GP1 = 11;
const u8 HW_LED_RED_GP2 = 18;
const u8 HW_LED_RED_GP3 = 25;
const u8 HW_LED_RED_GP4 = 32;
const u8 HW_LED_RED_GP5 = 38;
const u8 HW_LED_RED_GP6 = 45;
 
const u8 LED_GP1 = 10;
const u8 led_gp2 = 17;
const u8 led_gp3 = 24;
const u8 led_gp4 = 30;
const u8 led_gp5 = 37;
const u8 led_gp6 = 44;
const u8 HW_LED_GREEN_GP1 = 10;
const u8 HW_LED_GREEN_GP2 = 17;
const u8 HW_LED_GREEN_GP3 = 24;
const u8 HW_LED_GREEN_GP4 = 30;
const u8 HW_LED_GREEN_GP5 = 37;
const u8 HW_LED_GREEN_GP6 = 44;
 
const u8 led_unmute1 = 10;
const u8 led_unmute2 = 17;
const u8 led_unmute3 = 24;
const u8 led_unmute4 = 30;
const u8 led_unmute5 = 37;
const u8 led_unmute6 = 44;
const u8 HW_LED_BLUE_GP1 = 9;
const u8 HW_LED_BLUE_GP2 = 16;
const u8 HW_LED_BLUE_GP3 = 22;
const u8 HW_LED_BLUE_GP4 = 29;
const u8 HW_LED_BLUE_GP5 = 36;
const u8 HW_LED_BLUE_GP6 = 43;
 
const u8 led_active1 = 9;
const u8 led_active2 = 16;
const u8 led_active3 = 22;
const u8 led_active4 = 29;
const u8 led_active5 = 36;
const u8 led_active6 = 43;
const u8 HW_LED_RED_RUNSTOP = 8;
const u8 HW_LED_RED_ARM = 14;
const u8 HW_LED_RED_SHIFT = 21;
const u8 HW_LED_RED_MENU = 28;
const u8 HW_LED_RED_COPY = 35;
const u8 HW_LED_RED_PASTE = 42;
const u8 HW_LED_RED_DELETE = 51;
 
const u8 HW_LED_GREEN_RUNSTOP = 127;
const u8 HW_LED_GREEN_ARM = 13;
const u8 HW_LED_GREEN_SHIFT = 20;
const u8 HW_LED_GREEN_MENU = 27;
const u8 HW_LED_GREEN_COPY = 34;
const u8 HW_LED_GREEN_PASTE = 41;
const u8 HW_LED_GREEN_DELETE = 52;
 
const u8 HW_LED_BLUE_RUNSTOP = 4;
const u8 HW_LED_BLUE_ARM = 12;
const u8 HW_LED_BLUE_SHIFT = 19;
const u8 HW_LED_BLUE_MENU = 26;
const u8 HW_LED_BLUE_COPY = 33;
const u8 HW_LED_BLUE_PASTE = 40;
const u8 HW_LED_BLUE_DELETE = 46;
 
// LOGICAL LED STATES
const u8 LED_OFF = 0;
const u8 LED_RED = 1;
const u8 LED_GREEN = 2;
const u8 LED_BLUE = 4;
 
const u8 led_scene1 = 15;
const u8 led_scene2 = 7;
const u8 led_scene3 = 6;
57,7 → 84,7
 
// --- Switches ---
 
const u8 sw_startstop = 15;
const u8 sw_runstop = 15;
const u8 sw_armrecord = 14;
const u8 sw_encoder2 = 4;