Merge branch 'integration' into merge-audio

This commit is contained in:
Blaz Kristan 2022-08-05 23:03:38 +02:00
commit 9270f80af2
10 changed files with 645 additions and 764 deletions

View File

@ -1958,7 +1958,7 @@ static const char _data_FX_MODE_PALETTE[] PROGMEM = "Palette@Cycle speed,;1,2,3;
//
// Temperature is in arbitrary units from 0 (cold black) to 255 (white hot).
//
// This simulation scales it self a bit depending on NUM_LEDS; it should look
// This simulation scales it self a bit depending on SEGLEN; it should look
// "OK" on anywhere from 20 to 100 LEDs without too much tweaking.
//
// I recommend running this simulation at anywhere from 30-100 frames per second,
@ -3840,7 +3840,7 @@ uint16_t phased_base(uint8_t moder) { // We're making sine wave
for (int i = 0; i < SEGLEN; i++) {
if (moder == 1) modVal = (inoise8(i*10 + i*10) /16); // Let's randomize our mod length with some Perlin noise.
uint16_t val = (i+1) * allfreq; // This sets the frequency of the waves. The +1 makes sure that leds[0] is used.
uint16_t val = (i+1) * allfreq; // This sets the frequency of the waves. The +1 makes sure that led 0 is used.
if (modVal == 0) modVal = 1;
val += *phase * (i % modVal +1) /2; // This sets the varying phase change of the waves. By Andrew Tuline.
uint8_t b = cubicwave8(val); // Now we make an 8 bit sinewave.
@ -4831,10 +4831,9 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
const uint16_t rows = SEGMENT.virtualHeight();
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize*2 + sizeof(unsigned long))) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
CRGB *prevLeds = reinterpret_cast<CRGB*>(SEGENV.data + dataSize);
unsigned long *resetMillis = reinterpret_cast<unsigned long*>(SEGENV.data + 2*dataSize); // triggers reset
if (!SEGENV.allocateData(dataSize + sizeof(unsigned long))) return mode_static(); //allocation failed
CRGB *prevLeds = reinterpret_cast<CRGB*>(SEGENV.data);
unsigned long *resetMillis = reinterpret_cast<unsigned long*>(SEGENV.data + dataSize); // triggers reset
CRGB backgroundColor = SEGCOLOR(1);
@ -4847,19 +4846,20 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
for (int x = 0; x < cols; x++) for (int y = 0; y < rows; y++) {
uint8_t state = random8()%2;
if (state == 0)
leds[XY(x,y)] = backgroundColor;
SEGMENT.setPixelColorXY(x,y, backgroundColor);
else
leds[XY(x,y)] = (CRGB)SEGMENT.color_from_palette(random8(), false, PALETTE_SOLID_WRAP, 0);
SEGMENT.setPixelColorXY(x,y, SEGMENT.color_from_palette(random8(), false, PALETTE_SOLID_WRAP, 0));
}
SEGMENT.fill_solid(prevLeds, CRGB::Black);
for(uint16_t y = 0; y < rows; y++) for (uint16_t x = 0; x < cols; x++) prevLeds[XY(x,y)] = CRGB::Black;
SEGENV.aux1 = 0;
SEGENV.aux0 = 0xFFFF;
}
//copy previous leds (save previous generation)
for (int x = 0; x < cols; x++) for (int y = 0; y < rows; y++) prevLeds[XY(x,y)] = leds[XY(x,y)];
for (int x = 0; x < cols; x++) for (int y = 0; y < rows; y++) prevLeds[XY(x,y)] = SEGMENT.getPixelColorXY(x,y);
//calculate new leds
for (int x = 0; x < cols; x++) for (int y = 0; y < rows; y++) {
@ -4891,29 +4891,30 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
} // i,j
// Rules of Life
if ((leds[XY(x,y)] != backgroundColor) && (neighbors < 2)) leds[XY(x,y)] = backgroundColor; // Loneliness
else if ((leds[XY(x,y)] != backgroundColor) && (neighbors > 3)) leds[XY(x,y)] = backgroundColor; // Overpopulation
else if ((leds[XY(x,y)] == backgroundColor) && (neighbors == 3)) { // Reproduction
uint32_t col = SEGMENT.getPixelColorXY(x,y);
uint32_t bgc = RGBW32(backgroundColor.r, backgroundColor.g, backgroundColor.b, 0);
if ((col != bgc) && (neighbors < 2)) SEGMENT.setPixelColorXY(x,y, bgc); // Loneliness
else if ((col != bgc) && (neighbors > 3)) SEGMENT.setPixelColorXY(x,y, bgc); // Overpopulation
else if ((col == bgc) && (neighbors == 3)) { // Reproduction
//find dominantcolor and assign to cell
colorCount dominantColorCount = {backgroundColor, 0};
for (int i=0; i<9 && colorsCount[i].count != 0; i++)
if (colorsCount[i].count > dominantColorCount.count) dominantColorCount = colorsCount[i];
if (dominantColorCount.count > 0) leds[XY(x,y)] = dominantColorCount.color; //assign the dominant color
if (dominantColorCount.count > 0) SEGMENT.setPixelColorXY(x,y, dominantColorCount.color); //assign the dominant color
}
// else do nothing!
} //x,y
// calculate CRC16 of leds[]
uint16_t crc = crc16((const unsigned char*)leds, dataSize-1);
// calculate CRC16 of leds
uint16_t crc = crc16((const unsigned char*)prevLeds, dataSize-1); //ewowi: prevLeds instead of leds work as well, tbd: compare more patterns, see SR!
// check if we had same CRC and reset if needed
// same CRC would mean image did not change or was repeating itself
if (!(crc == SEGENV.aux0 || crc == SEGENV.aux1)) *resetMillis = strip.now; //if no repetition avoid reset
// remeber last two
// remember last two
SEGENV.aux1 = SEGENV.aux0;
SEGENV.aux0 = crc;
SEGMENT.setPixels(leds);
return (SEGMENT.getOption(SEG_OPTION_TRANSITIONAL)) ? FRAMETIME : FRAMETIME_FIXED * (128-(SEGMENT.speed>>1)); // update only when appropriate time passes (in 42 FPS slots)
} // mode_2Dgameoflife()
static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!,;!,!;!;2d";
@ -5050,7 +5051,7 @@ uint16_t mode_2DJulia(void) { // An animated Julia set
}
y += dy;
}
// blur2d( leds, 64);
// SEGMENT.blur(64);
return FRAMETIME;
} // mode_2DJulia()
@ -5201,7 +5202,6 @@ uint16_t mode_2Dmetaballs(void) { // Metaballs by Stefan Petrick. Cannot have
}
}
//setPixels(leds);
return FRAMETIME;
} // mode_2Dmetaballs()
static const char _data_FX_MODE_2DMETABALLS[] PROGMEM = "Metaballs@Speed;!,!,!;!;2d";
@ -5605,10 +5605,10 @@ uint16_t mode_2Dcrazybees(void) {
SEGMENT.fadeToBlackBy(32);
for (size_t i = 0; i < n; i++) {
SEGMENT.addPixelColorXY(bee[i].aimX + 1, bee[i].aimY, CRGB(CHSV(bee[i].hue, 255, 255)));
SEGMENT.addPixelColorXY(bee[i].aimX, bee[i].aimY + 1, CRGB(CHSV(bee[i].hue, 255, 255)));
SEGMENT.addPixelColorXY(bee[i].aimX - 1, bee[i].aimY, CRGB(CHSV(bee[i].hue, 255, 255)));
SEGMENT.addPixelColorXY(bee[i].aimX, bee[i].aimY - 1, CRGB(CHSV(bee[i].hue, 255, 255)));
SEGMENT.addPixelColorXY(bee[i].aimX + 1, bee[i].aimY, CHSV(bee[i].hue, 255, 255));
SEGMENT.addPixelColorXY(bee[i].aimX, bee[i].aimY + 1, CHSV(bee[i].hue, 255, 255));
SEGMENT.addPixelColorXY(bee[i].aimX - 1, bee[i].aimY, CHSV(bee[i].hue, 255, 255));
SEGMENT.addPixelColorXY(bee[i].aimX, bee[i].aimY - 1, CHSV(bee[i].hue, 255, 255));
if (bee[i].posX != bee[i].aimX || bee[i].posY != bee[i].aimY) {
SEGMENT.setPixelColorXY(bee[i].posX, bee[i].posY, CRGB(CHSV(bee[i].hue, 60, 255)));
int8_t error2 = bee[i].error * 2;
@ -5953,11 +5953,13 @@ uint16_t mode_ripplepeak(void) { // * Ripple peak. By Andrew Tuli
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t samplePeak = *(uint8_t*)um_data->u_data[3];
#ifdef ESP32
float FFT_MajorPeak = *(float*) um_data->u_data[4];
#endif
uint8_t *maxVol = (uint8_t*)um_data->u_data[6];
uint8_t *binNum = (uint8_t*)um_data->u_data[7];
@ -6024,16 +6026,15 @@ uint16_t mode_2DSwirl(void) {
const uint16_t cols = SEGMENT.virtualWidth();
const uint16_t rows = SEGMENT.virtualHeight();
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
if (SEGENV.call == 0) SEGMENT.fill_solid(leds, CRGB::Black);
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
const uint8_t borderWidth = 2;
SEGMENT.blur2d(leds, SEGMENT.custom1);
SEGMENT.blur(SEGMENT.custom1);
uint8_t i = beatsin8( 27*SEGMENT.speed/255, borderWidth, cols - borderWidth);
uint8_t j = beatsin8( 41*SEGMENT.speed/255, borderWidth, rows - borderWidth);
@ -6043,7 +6044,7 @@ uint16_t mode_2DSwirl(void) {
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0]; //ewowi: use instead of sampleAvg???
@ -6051,14 +6052,13 @@ uint16_t mode_2DSwirl(void) {
// printUmData();
leds[XY( i, j)] += ColorFromPalette(SEGPALETTE, (ms / 11 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND); //CHSV( ms / 11, 200, 255);
leds[XY( j, i)] += ColorFromPalette(SEGPALETTE, (ms / 13 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND); //CHSV( ms / 13, 200, 255);
leds[XY(ni, nj)] += ColorFromPalette(SEGPALETTE, (ms / 17 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND); //CHSV( ms / 17, 200, 255);
leds[XY(nj, ni)] += ColorFromPalette(SEGPALETTE, (ms / 29 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND); //CHSV( ms / 29, 200, 255);
leds[XY( i, nj)] += ColorFromPalette(SEGPALETTE, (ms / 37 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND); //CHSV( ms / 37, 200, 255);
leds[XY(ni, j)] += ColorFromPalette(SEGPALETTE, (ms / 41 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND); //CHSV( ms / 41, 200, 255);
SEGMENT.addPixelColorXY( i, j, ColorFromPalette(SEGPALETTE, (ms / 11 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND)); //CHSV( ms / 11, 200, 255);
SEGMENT.addPixelColorXY( j, i, ColorFromPalette(SEGPALETTE, (ms / 13 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND)); //CHSV( ms / 13, 200, 255);
SEGMENT.addPixelColorXY(ni,nj, ColorFromPalette(SEGPALETTE, (ms / 17 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND)); //CHSV( ms / 17, 200, 255);
SEGMENT.addPixelColorXY(nj,ni, ColorFromPalette(SEGPALETTE, (ms / 29 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND)); //CHSV( ms / 29, 200, 255);
SEGMENT.addPixelColorXY( i,nj, ColorFromPalette(SEGPALETTE, (ms / 37 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND)); //CHSV( ms / 37, 200, 255);
SEGMENT.addPixelColorXY(ni, j, ColorFromPalette(SEGPALETTE, (ms / 41 + volumeSmth*4), volumeRaw * SEGMENT.intensity / 64, LINEARBLEND)); //CHSV( ms / 41, 200, 255);
SEGMENT.setPixels(leds);
return FRAMETIME;
} // mode_2DSwirl()
static const char _data_FX_MODE_2DSWIRL[] PROGMEM = "Swirl@!,Sensitivity,Blur;,Bg Swirl;!;ix=64ssim=0,2d,vo"; // Beatsin
@ -6073,23 +6073,20 @@ uint16_t mode_2DWaverly(void) {
const uint16_t cols = SEGMENT.virtualWidth();
const uint16_t rows = SEGMENT.virtualHeight();
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
if (SEGENV.call == 0) {
SEGMENT.fill_solid(leds, CRGB::Black);
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
SEGMENT.fadeToBlackBy(leds, SEGMENT.speed);
SEGMENT.fadeToBlackBy(SEGMENT.speed);
long t = millis() / 2;
for (int i = 0; i < cols; i++) {
@ -6101,14 +6098,13 @@ uint16_t mode_2DWaverly(void) {
}
uint16_t thisMax = map(thisVal, 0, 512, 0, rows);
for (int j = 0; j < thisMax; j++) {
leds[XY(i, j)] += ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND);
leds[XY((cols - 1) - i, (rows - 1) - j)] += ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND);
for (uint16_t j = 0; j < thisMax; j++) {
SEGMENT.addPixelColorXY(i, j, ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND));
SEGMENT.addPixelColorXY((cols - 1) - i, (rows - 1) - j, ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND));
}
}
SEGMENT.blur2d(leds, 16);
SEGMENT.blur(16);
SEGMENT.setPixels(leds);
return FRAMETIME;
} // mode_2DWaverly()
static const char _data_FX_MODE_2DWAVERLY[] PROGMEM = "Waverly@Amplification,Sensitivity;;!;ix=64,ssim=0,2d,vo"; // Beatsin
@ -6137,7 +6133,7 @@ uint16_t mode_gravcenter(void) { // Gravcenter. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
@ -6184,7 +6180,7 @@ uint16_t mode_gravcentric(void) { // Gravcentric. By Andrew
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
@ -6234,7 +6230,7 @@ uint16_t mode_gravimeter(void) { // Gravmeter. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
@ -6274,7 +6270,7 @@ static const char _data_FX_MODE_GRAVIMETER[] PROGMEM = "Gravimeter@Rate of fall,
uint16_t mode_juggles(void) { // Juggles. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
@ -6296,18 +6292,18 @@ static const char _data_FX_MODE_JUGGLES[] PROGMEM = "Juggles@!,# of balls;,!;!;m
//////////////////////
uint16_t mode_matripix(void) { // Matripix. By Andrew Tuline.
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
int16_t volumeRaw = *(int16_t*)um_data->u_data[1];
if (SEGENV.call == 0) SEGMENT.fill_solid(leds, CRGB::Black);
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
uint8_t secondHand = micros()/(256-SEGMENT.speed)/500 % 16;
if(SEGENV.aux0 != secondHand) {
@ -6317,7 +6313,6 @@ uint16_t mode_matripix(void) { // Matripix. By Andrew Tuline.
for (uint16_t i=0; i<SEGLEN-1; i++) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // shift left
SEGMENT.setPixelColor(SEGLEN-1, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(millis(), false, PALETTE_SOLID_WRAP, 0), pixBri));
}
for (int i=0; i<SEGLEN; i++) SEGMENT.setPixelColor(i, leds[i]);
return FRAMETIME;
} // mode_matripix()
@ -6332,7 +6327,7 @@ uint16_t mode_midnoise(void) { // Midnoise. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
@ -6371,7 +6366,7 @@ uint16_t mode_noisefire(void) { // Noisefire. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
@ -6399,7 +6394,7 @@ uint16_t mode_noisemeter(void) { // Noisemeter. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
@ -6430,18 +6425,15 @@ static const char _data_FX_MODE_NOISEMETER[] PROGMEM = "Noisemeter@Fade rate,Wid
//////////////////////
uint16_t mode_pixelwave(void) { // Pixelwave. By Andrew Tuline.
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
if (SEGENV.call == 0) {
SEGMENT.fill_solid(leds, CRGB::Black); // clear buffer
SEGMENT.fill(BLACK); // clear output
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
int16_t volumeRaw = *(int16_t*)um_data->u_data[1];
@ -6452,11 +6444,10 @@ uint16_t mode_pixelwave(void) { // Pixelwave. By Andrew Tuline.
int pixBri = volumeRaw * SEGMENT.intensity / 64;
leds[SEGLEN/2] = color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(millis(), false, PALETTE_SOLID_WRAP, 0), pixBri);
for (int i=SEGLEN-1; i>SEGLEN/2; i--) leds[i] = leds[i-1]; // Move to the right.
for (int i=0; i<SEGLEN/2; i++) leds[i] = leds[i+1]; // Move to the left.
SEGMENT.setPixelColor(SEGLEN/2, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(millis(), false, PALETTE_SOLID_WRAP, 0), pixBri));
for (int i = SEGLEN - 1; i > SEGLEN/2; i--) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i-1)); //move to the left
for (int i = 0; i < SEGLEN/2; i++) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // move to the right
}
for (int x = 0; x < SEGLEN; x++) SEGMENT.setPixelColor(x, leds[x]);
return FRAMETIME;
} // mode_pixelwave()
@ -6473,19 +6464,17 @@ typedef struct Plasphase {
uint16_t mode_plasmoid(void) { // Plasmoid. By Andrew Tuline.
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize + sizeof(plasphase))) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
Plasphase* plasmoip = reinterpret_cast<Plasphase*>(SEGENV.data + dataSize);
if (!SEGENV.allocateData(sizeof(plasphase))) return mode_static(); //allocation failed
Plasphase* plasmoip = reinterpret_cast<Plasphase*>(SEGENV.data);
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float volumeSmth = *(float*) um_data->u_data[0];
SEGMENT.fadeToBlackBy(leds, 64);
SEGMENT.fadeToBlackBy(64);
plasmoip->thisphase += beatsin8(6,-4,4); // You can change direction and speed individually.
plasmoip->thatphase += beatsin8(7,-4,4); // Two phase values to make a complex pattern. By Andrew Tuline.
@ -6498,9 +6487,8 @@ uint16_t mode_plasmoid(void) { // Plasmoid. By Andrew Tuline.
uint8_t colorIndex=thisbright;
if (volumeSmth * SEGMENT.intensity / 64 < thisbright) {thisbright = 0;}
leds[i] += color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(colorIndex, false, PALETTE_SOLID_WRAP, 0), thisbright);
SEGMENT.addPixelColor(i, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(colorIndex, false, PALETTE_SOLID_WRAP, 0), thisbright));
}
for (int x = 0; x < SEGLEN; x++) SEGMENT.setPixelColor(x, leds[x]);
return FRAMETIME;
} // mode_plasmoid()
@ -6519,7 +6507,7 @@ uint16_t mode_puddlepeak(void) { // Puddlepeak. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t samplePeak = *(uint8_t*)um_data->u_data[3];
@ -6563,7 +6551,7 @@ uint16_t mode_puddles(void) { // Puddles. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
int16_t volumeRaw = *(int16_t*)um_data->u_data[1];
@ -6625,36 +6613,29 @@ static const char _data_FX_MODE_PIXELS[] PROGMEM = "Pixels@Fade rate,# of pixels
//////////////////////
uint16_t mode_blurz(void) { // Blurz. By Andrew Tuline.
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t *fftResult = (uint8_t*)um_data->u_data[2];
if (!fftResult) return mode_static();
if (SEGENV.call == 0) {
SEGMENT.fill_solid(leds, CRGB::Black);
SEGMENT.fill(BLACK); // clear canvas
SEGMENT.fill(BLACK);
SEGENV.aux0 = 0;
}
SEGMENT.fade_out(SEGMENT.speed); // do not fade leds[] but only canvas
SEGMENT.fade_out(SEGMENT.speed);
SEGENV.step += FRAMETIME;
if (SEGENV.step > SPEED_FORMULA_L) {
uint16_t segLoc = random16(SEGLEN);
leds[segLoc] = color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(2*fftResult[SEGENV.aux0%16]*240/(SEGLEN-1), false, PALETTE_SOLID_WRAP, 0), 2*fftResult[SEGENV.aux0%16]);
SEGMENT.setPixelColor(segLoc, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(2*fftResult[SEGENV.aux0%16]*240/(SEGLEN-1), false, PALETTE_SOLID_WRAP, 0), 2*fftResult[SEGENV.aux0%16]));
++(SEGENV.aux0) %= 16; // make sure it doesn't cross 16
SEGENV.step = 1;
if (SEGMENT.is2D()) SEGMENT.blur2d(leds, SEGMENT.intensity);
else SEGMENT.blur1d(leds, SEGMENT.intensity);
for (int i=0; i<SEGLEN; i++) SEGMENT.setPixelColor(i, leds[i]);
SEGMENT.blur(SEGMENT.intensity);
}
return FRAMETIME;
@ -6666,33 +6647,31 @@ static const char _data_FX_MODE_BLURZ[] PROGMEM = "Blurz@Fade rate,Blur amount;!
// ** DJLight //
/////////////////////////
uint16_t mode_DJLight(void) { // Written by ??? Adapted by Will Tatam.
const int NUM_LEDS = SEGLEN; // aka SEGLEN
const int mid = NUM_LEDS / 2;
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
const int mid = SEGLEN / 2;
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t *fftResult = (uint8_t*)um_data->u_data[2];
if (!fftResult) return mode_static();
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
uint8_t secondHand = micros()/(256-SEGMENT.speed)/500+1 % 64;
if (SEGENV.aux0 != secondHand) { // Triggered millis timing.
SEGENV.aux0 = secondHand;
leds[mid] = CRGB(fftResult[15]/2, fftResult[5]/2, fftResult[0]/2); // 16-> 15 as 16 is out of bounds
leds[mid].fadeToBlackBy(map(fftResult[1*4], 0, 255, 255, 10)); // TODO - Update
SEGMENT.setPixelColor(mid, CRGB(fftResult[15]/2, fftResult[5]/2, fftResult[0]/2)); // 16-> 15 as 16 is out of bounds
CRGB color = SEGMENT.getPixelColor(mid);
SEGMENT.setPixelColor(mid, color.fadeToBlackBy(map(fftResult[1*4], 0, 255, 255, 10))); // TODO - Update
for (int i = NUM_LEDS - 1; i > mid; i--) leds[i] = leds[i - 1]; //move to the left
for (int i = 0; i < mid; i++) leds[i] = leds[i + 1]; // move to the right
for (int i = SEGLEN - 1; i > mid; i--) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i-1)); //move to the left
for (int i = 0; i < mid; i++) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // move to the right
}
for (int i=0; i<SEGLEN; i++) SEGMENT.setPixelColor(i, leds[i]);
return FRAMETIME;
} // mode_DJLight()
@ -6708,7 +6687,7 @@ uint16_t mode_freqmap(void) { // Map FFT_MajorPeak to SEGLEN.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float FFT_MajorPeak = *(float*) um_data->u_data[4];
@ -6733,19 +6712,19 @@ static const char _data_FX_MODE_FREQMAP[] PROGMEM = "Freqmap@Fade rate,Starting
// ** Freqmatrix //
///////////////////////
uint16_t mode_freqmatrix(void) { // Freqmatrix. By Andreas Pleschung.
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float FFT_MajorPeak = *(float*)um_data->u_data[4];
float volumeSmth = *(float*) um_data->u_data[0];
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
uint8_t secondHand = micros()/(256-SEGMENT.speed)/500 % 16;
if(SEGENV.aux0 != secondHand) {
SEGENV.aux0 = secondHand;
@ -6775,10 +6754,9 @@ uint16_t mode_freqmatrix(void) { // Freqmatrix. By Andreas Plesch
}
// shift the pixels one pixel up
leds[0] = color;
for (int i = SEGLEN-1; i > 0; i--) leds[i] = leds[i-1];
SEGMENT.setPixelColor(0, color);
for (int i = SEGLEN - 1; i > 0; i--) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i-1)); //move to the left
}
for (int x = 0; x < SEGLEN; x++) SEGMENT.setPixelColor(x, leds[x]);
return FRAMETIME;
} // mode_freqmatrix()
@ -6795,7 +6773,7 @@ static const char _data_FX_MODE_FREQMATRIX[] PROGMEM = "Freqmatrix@Time delay,So
uint16_t mode_freqpixels(void) { // Freqpixel. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float FFT_MajorPeak = *(float*) um_data->u_data[4];
@ -6831,19 +6809,19 @@ static const char _data_FX_MODE_FREQPIXELS[] PROGMEM = "Freqpixels@Fade rate,Sta
// As a compromise between speed and accuracy we are currently sampling with 10240Hz, from which we can then determine with a 512bin FFT our max frequency is 5120Hz.
// Depending on the music stream you have you might find it useful to change the frequency mapping.
uint16_t mode_freqwave(void) { // Freqwave. By Andreas Pleschung.
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float FFT_MajorPeak = *(float*) um_data->u_data[4];
float volumeSmth = *(float*) um_data->u_data[0];
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
uint8_t secondHand = micros()/(256-SEGMENT.speed)/500 % 16;
if(SEGENV.aux0 != secondHand) {
SEGENV.aux0 = secondHand;
@ -6875,13 +6853,12 @@ uint16_t mode_freqwave(void) { // Freqwave. By Andreas Pleschun
color = CHSV(i, 240, (uint8_t)b); // implicit conversion to RGB supplied by FastLED
}
leds[SEGLEN/2] = color;
SEGMENT.setPixelColor(SEGLEN/2, color);
// shift the pixels one pixel outwards
for (int i=SEGLEN-1; i>SEGLEN/2; i--) leds[i] = leds[i-1]; // Move to the right.
for (int i=0; i<SEGLEN/2; i++) leds[i] = leds[i+1]; // Move to the left.
for (int i = SEGLEN - 1; i > SEGLEN/2; i--) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i-1)); //move to the left
for (int i = 0; i < SEGLEN/2; i++) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // move to the right
}
for (int x = 0; x < SEGLEN; x++) SEGMENT.setPixelColor(x, leds[x]);
return FRAMETIME;
} // mode_freqwave()
@ -6899,7 +6876,7 @@ uint16_t mode_gravfreq(void) { // Gravfreq. By Andrew Tuline.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float FFT_MajorPeak = *(float*) um_data->u_data[4];
@ -6944,11 +6921,10 @@ static const char _data_FX_MODE_GRAVFREQ[] PROGMEM = "Gravfreq@Rate of fall,Sens
uint16_t mode_noisemove(void) { // Noisemove. By: Andrew Tuline
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t *fftResult = (uint8_t*)um_data->u_data[2];
if (!fftResult) return mode_static();
SEGMENT.fade_out(224); // Just in case something doesn't get faded.
@ -6968,20 +6944,15 @@ static const char _data_FX_MODE_NOISEMOVE[] PROGMEM = "Noisemove@Speed of perlin
// ** Rocktaves //
//////////////////////
uint16_t mode_rocktaves(void) { // Rocktaves. Same note from each octave is same colour. By: Andrew Tuline
// even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
float FFT_MajorPeak = *(float*) um_data->u_data[4];
float my_magnitude = *(float*) um_data->u_data[5] / 16.0f;
SEGMENT.fadeToBlackBy(leds, 64); // Just in case something doesn't get faded.
SEGMENT.fadeToBlackBy(64); // Just in case something doesn't get faded.
float frTemp = FFT_MajorPeak;
uint8_t octCount = 0; // Octave counter.
@ -6997,10 +6968,8 @@ uint16_t mode_rocktaves(void) { // Rocktaves. Same note from eac
frTemp -=132; // This should give us a base musical note of C3
frTemp = fabs(frTemp * 2.1); // Fudge factors to compress octave range starting at 0 and going to 255;
// leds[beatsin8(8+octCount*4,0,SEGLEN-1,0,octCount*8)] += CHSV((uint8_t)frTemp,255,volTemp); // Back and forth with different frequencies and phase shift depending on current octave.
uint16_t i = map(beatsin8(8+octCount*4, 0, 255, 0, octCount*8), 0, 255, 0, SEGLEN-1);
leds[i] += color_blend(SEGCOLOR(1), SEGMENT.color_from_palette((uint8_t)frTemp, false, PALETTE_SOLID_WRAP, 0), volTemp);
for (int x = 0; x < SEGLEN; x++) SEGMENT.setPixelColor(x, leds[x]);
SEGMENT.addPixelColor(i, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette((uint8_t)frTemp, false, PALETTE_SOLID_WRAP, 0), volTemp));
return FRAMETIME;
} // mode_rocktaves()
@ -7016,7 +6985,7 @@ uint16_t mode_waterfall(void) { // Waterfall. By: Andrew Tulin
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t samplePeak = *(uint8_t*)um_data->u_data[3];
@ -7026,6 +6995,8 @@ uint16_t mode_waterfall(void) { // Waterfall. By: Andrew Tulin
float my_magnitude = *(float*) um_data->u_data[5] / 8.0f;
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
SEGENV.aux0 = 255;
SEGMENT.custom2 = *binNum;
SEGMENT.custom3 = *maxVol * 2;
@ -7069,11 +7040,10 @@ uint16_t mode_2DGEQ(void) { // By Will Tatam. Code reduction by Ewoud Wijma.
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t *fftResult = (uint8_t*)um_data->u_data[2];
if (!fftResult) return mode_static();
if (SEGENV.call == 0) for (int i=0; i<cols; i++) previousBarHeight[i] = 0;
@ -7118,9 +7088,6 @@ uint16_t mode_2DFunkyPlank(void) { // Written by ??? Adapted by Wil
const uint16_t cols = SEGMENT.virtualWidth();
const uint16_t rows = SEGMENT.virtualHeight();
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
int NUMB_BANDS = map(SEGMENT.custom1, 0, 255, 1, 16);
int barWidth = (cols / NUMB_BANDS);
@ -7133,11 +7100,15 @@ uint16_t mode_2DFunkyPlank(void) { // Written by ??? Adapted by Wil
um_data_t *um_data;
if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) {
// add support for no audio data
// add support for no audio
um_data = simulateSound(SEGMENT.soundSim);
}
uint8_t *fftResult = (uint8_t*)um_data->u_data[2];
if (!fftResult) return mode_static();
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
SEGMENT.fill(BLACK);
}
uint8_t secondHand = micros()/(256-SEGMENT.speed)/500+1 % 64;
if (SEGENV.aux0 != secondHand) { // Triggered millis timing.
@ -7150,21 +7121,18 @@ uint16_t mode_2DFunkyPlank(void) { // Written by ??? Adapted by Wil
int v = map(fftResult[band], 0, 255, 10, 255);
for (int w = 0; w < barWidth; w++) {
int xpos = (barWidth * b) + w;
leds[XY(xpos, 0)] = CHSV(hue, 255, v);
SEGMENT.setPixelColorXY(xpos, 0, CHSV(hue, 255, v));
}
}
// Update the display:
for (int i = (rows - 1); i > 0; i--) {
for (int j = (cols - 1); j >= 0; j--) {
int src = XY(j, (i - 1));
int dst = XY(j, i);
leds[dst] = leds[src];
SEGMENT.setPixelColorXY(j, i, SEGMENT.getPixelColorXY(j, i-1));
}
}
}
SEGMENT.setPixels(leds);
return FRAMETIME;
} // mode_2DFunkyPlank
static const char _data_FX_MODE_2DFUNKYPLANK[] PROGMEM = "Funky Plank@Scroll speed,,# of bands;;;ssim=0,2d,fr"; // Beatsin

View File

@ -433,6 +433,7 @@ typedef struct Segment {
uint16_t aux1; // custom var
byte* data;
CRGB* leds;
static CRGB *_globalLeds;
private:
union {
@ -515,7 +516,7 @@ typedef struct Segment {
if (leds) Serial.printf(" [%u]", length()*sizeof(CRGB));
Serial.println();
#endif
if (leds) free(leds);
if (!Segment::_globalLeds && leds) free(leds);
if (name) delete[] name;
if (_t) delete _t;
deallocateData();
@ -560,7 +561,8 @@ typedef struct Segment {
* Safe to call from interrupts and network requests.
*/
inline void markForReset(void) { reset = true; } // setOption(SEG_OPTION_RESET, true)
inline void setUpLeds() { if (!leds) leds = (CRGB*)malloc(sizeof(CRGB)*length()); }
//inline void setUpLeds() { if (!leds) leds = (CRGB*)malloc(sizeof(CRGB)*length()); }
void setUpLeds(void);
// transition functions
void startTransition(uint16_t dur); // transition has to start before actual segment values change
@ -616,8 +618,8 @@ typedef struct Segment {
void addPixelColorXY(int x, int y, CRGB c) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0)); }
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade);
void box_blur(uint16_t i, bool vertical, fract8 blur_amount); // 1D box blur (with weight)
void blurRow(uint16_t row, fract8 blur_amount, CRGB* leds=nullptr);
void blurCol(uint16_t col, fract8 blur_amount, CRGB* leds=nullptr);
void blurRow(uint16_t row, fract8 blur_amount);
void blurCol(uint16_t col, fract8 blur_amount);
void moveX(int8_t delta);
void moveY(int8_t delta);
void move(uint8_t dir, uint8_t delta);
@ -627,13 +629,10 @@ typedef struct Segment {
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color);
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB c) { drawCharacter(chr, x, y, w, h, RGBW32(c.r,c.g,c.b,0)); } // automatic inline
void wu_pixel(uint32_t x, uint32_t y, CRGB c);
// obsolete
void blur1d(CRGB* leds, fract8 blur_amount);
void blur2d(CRGB* leds, fract8 blur_amount);
void fill_solid(CRGB* leds, CRGB c);
void fadeToBlackBy(CRGB* leds, uint8_t fadeBy);
void nscale8(CRGB* leds, uint8_t scale);
void setPixels(CRGB* leds);
void blur1d(fract8 blur_amount); // blur all rows in 1 dimension
void blur2d(fract8 blur_amount) { blur(blur_amount); }
void fill_solid(CRGB c) { fill(RGBW32(c.r,c.g,c.b,0)); }
void nscale8(uint8_t scale);
#else
uint16_t XY(uint16_t x, uint16_t y) { return x; }
void setPixelColorXY(int x, int y, uint32_t c) { setPixelColor(x, c); }
@ -650,8 +649,8 @@ typedef struct Segment {
void addPixelColorXY(int x, int y, CRGB c) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0)); }
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { fadePixelColor(x, fade); }
void box_blur(uint16_t i, bool vertical, fract8 blur_amount) {}
void blurRow(uint16_t row, fract8 blur_amount, CRGB* leds=nullptr) {}
void blurCol(uint16_t col, fract8 blur_amount, CRGB* leds=nullptr) {}
void blurRow(uint16_t row, fract8 blur_amount) {}
void blurCol(uint16_t col, fract8 blur_amount) {}
void moveX(int8_t delta) {}
void moveY(int8_t delta) {}
void move(uint8_t dir, uint8_t delta) {}
@ -786,7 +785,8 @@ class WS2812FX { // 96 bytes
hasRGBWBus(void),
hasCCTBus(void),
// return true if the strip is being sent pixel updates
isUpdating(void);
isUpdating(void),
useLedsArray = false;
inline bool isServicing(void) { return _isServicing; }
inline bool hasWhiteChannel(void) {return _hasWhiteChannel;}

View File

@ -238,7 +238,8 @@ void Segment::setPixelColorXY(float x, float y, uint32_t col, bool aa)
// returns RGBW values of pixel
uint32_t Segment::getPixelColorXY(uint16_t x, uint16_t y) {
if (leds) return RGBW32(leds[XY(x,y)].r, leds[XY(x,y)].g, leds[XY(x,y)].b, 0);
int i = XY(x,y);
if (leds) return RGBW32(leds[i].r, leds[i].g, leds[i].b, 0);
if (getOption(SEG_OPTION_REVERSED) ) x = virtualWidth() - x - 1;
if (getOption(SEG_OPTION_REVERSED_Y)) y = virtualHeight() - y - 1;
if (getOption(SEG_OPTION_TRANSPOSED)) { uint16_t t = x; x = y; y = t; } // swap X & Y if segment transposed
@ -264,7 +265,7 @@ void Segment::fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) {
}
// blurRow: perform a blur on a row of a rectangular matrix
void Segment::blurRow(uint16_t row, fract8 blur_amount, CRGB* leds) {
void Segment::blurRow(uint16_t row, fract8 blur_amount) {
const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight();
@ -274,24 +275,22 @@ void Segment::blurRow(uint16_t row, fract8 blur_amount, CRGB* leds) {
uint8_t seep = blur_amount >> 1;
CRGB carryover = CRGB::Black;
for (uint16_t x = 0; x < cols; x++) {
CRGB cur = leds ? leds[XY(x,row)] : CRGB(getPixelColorXY(x, row));
CRGB cur = getPixelColorXY(x, row);
CRGB part = cur;
part.nscale8(seep);
cur.nscale8(keep);
cur += carryover;
if (x) {
CRGB prev = (leds ? leds[XY(x-1,row)] : CRGB(getPixelColorXY(x-1, row))) + part;
if (leds) leds[XY(x-1,row)] = prev;
else setPixelColorXY(x-1, row, prev);
CRGB prev = CRGB(getPixelColorXY(x-1, row)) + part;
setPixelColorXY(x-1, row, prev);
}
if (leds) leds[XY(x,row)] = cur;
else setPixelColorXY(x, row, cur);
setPixelColorXY(x, row, cur);
carryover = part;
}
}
// blurCol: perform a blur on a column of a rectangular matrix
void Segment::blurCol(uint16_t col, fract8 blur_amount, CRGB* leds) {
void Segment::blurCol(uint16_t col, fract8 blur_amount) {
const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight();
@ -301,18 +300,16 @@ void Segment::blurCol(uint16_t col, fract8 blur_amount, CRGB* leds) {
uint8_t seep = blur_amount >> 1;
CRGB carryover = CRGB::Black;
for (uint16_t i = 0; i < rows; i++) {
CRGB cur = leds ? leds[XY(col,i)] : CRGB(getPixelColorXY(col, i));
CRGB cur = getPixelColorXY(col, i);
CRGB part = cur;
part.nscale8(seep);
cur.nscale8(keep);
cur += carryover;
if (i) {
CRGB prev = (leds ? leds[XY(col,i-1)] : CRGB(getPixelColorXY(col, i-1))) + part;
if (leds) leds[XY(col,i-1)] = prev;
else setPixelColorXY(col, i-1, prev);
CRGB prev = CRGB(getPixelColorXY(col, i-1)) + part;
setPixelColorXY(col, i-1, prev);
}
if (leds) leds[XY(col,i)] = cur;
else setPixelColorXY(col, i, cur);
setPixelColorXY(col, i, cur);
carryover = part;
}
}
@ -365,16 +362,9 @@ void Segment::box_blur(uint16_t i, bool vertical, fract8 blur_amount) {
// eventually all the way to black; this is by design so that
// it can be used to (slowly) clear the LEDs to black.
void Segment::blur1d(CRGB* leds, fract8 blur_amount) {
void Segment::blur1d(fract8 blur_amount) {
const uint16_t rows = virtualHeight();
for (uint16_t y = 0; y < rows; y++) blurRow(y, blur_amount, leds);
}
void Segment::blur2d(CRGB* leds, fract8 blur_amount) {
const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight();
for (uint16_t i = 0; i < rows; i++) blurRow(i, blur_amount, leds); // blur all rows
for (uint16_t k = 0; k < cols; k++) blurCol(k, blur_amount, leds); // blur all columns
for (uint16_t y = 0; y < rows; y++) blurRow(y, blur_amount);
}
void Segment::moveX(int8_t delta) {
@ -437,25 +427,12 @@ void Segment::fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB col) {
if (x * x + y * y <= radius * radius &&
int16_t(cx)+x>=0 && int16_t(cy)+y>=0 &&
int16_t(cx)+x<cols && int16_t(cy)+y<rows)
setPixelColorXY(cx + x, cy + y, col);
addPixelColorXY(cx + x, cy + y, col);
}
}
}
void Segment::fill_solid(CRGB* leds, CRGB color) {
const uint16_t cols = is2D() ? virtualWidth() : virtualLength();
const uint16_t rows = virtualHeight();
for(uint16_t y = 0; y < rows; y++) for (uint16_t x = 0; x < cols; x++) {
if (leds) leds[XY(x,y)] = color;
else setPixelColorXY(x, y, color);
}
}
void Segment::fadeToBlackBy(CRGB* leds, uint8_t fadeBy) {
nscale8(leds, 255 - fadeBy);
}
void Segment::nscale8(CRGB* leds, uint8_t scale) {
void Segment::nscale8(uint8_t scale) {
const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight();
for(uint16_t y = 0; y < rows; y++) for (uint16_t x = 0; x < cols; x++) {
@ -464,12 +441,6 @@ void Segment::nscale8(CRGB* leds, uint8_t scale) {
}
}
void Segment::setPixels(CRGB* leds) {
const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight();
for (uint16_t y = 0; y < rows; y++) for (uint16_t x = 0; x < cols; x++) setPixelColorXY(x, y, leds[XY(x,y)]);
}
//line function
void Segment::drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c) {
const uint16_t cols = virtualWidth();

View File

@ -74,6 +74,7 @@
// Segment class implementation
///////////////////////////////////////////////////////////////////////////////
uint16_t Segment::_usedSegmentData = 0U; // amount of RAM all segments use for their data[]
CRGB *Segment::_globalLeds = nullptr;
// copy constructor
Segment::Segment(const Segment &orig) {
@ -196,6 +197,17 @@ void Segment::resetIfRequired() {
}
}
void Segment::setUpLeds() {
if (Segment::_globalLeds)
#ifndef WLED_DISABLE_2D
leds = &Segment::_globalLeds[start + startY*strip.matrixWidth]; // TODO: remove this hack
#else
leds = &Segment::_globalLeds[start];
#endif
else if (!leds)
leds = (CRGB*)malloc(sizeof(CRGB)*length());
}
void Segment::startTransition(uint16_t dur) {
if (transitional || _t) return; // already in transition
@ -231,7 +243,6 @@ uint16_t Segment::progress() { //transition progression between 0-65535
uint8_t Segment::currentBri(uint8_t briNew, bool useCct) {
if (transitional && _t) {
//if (getOption(SEG_OPTION_TRANSITIONAL)) {
uint32_t prog = progress() + 1;
if (useCct) return ((briNew * prog) + _t->_cctT * (0x10000 - prog)) >> 16;
else return ((briNew * prog) + _t->_briT * (0x10000 - prog)) >> 16;
@ -333,7 +344,6 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) {
CRGBPalette16 &Segment::currentPalette(CRGBPalette16 &targetPalette, uint8_t pal) {
loadPalette(targetPalette, pal);
if (transitional && _t && progress() < 0xFFFFU) {
//if (strip.paletteFade && getOption(SEG_OPTION_TRANSITIONAL) && progress() < 0xFFFFU) {
// blend palettes
uint8_t blends = map(_t->_dur, 0, 0xFFFF, 48, 6); // do not blend palettes too quickly (0-65.5s)
nblendPaletteTowardPalette(_t->_palT, targetPalette, blends);
@ -810,10 +820,6 @@ void WS2812FX::finalizeInit(void)
seg.markForReset();
seg.resetIfRequired();
}
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
// _segments[i].markForReset();
// _segments[i].resetIfRequired();
// }
_hasWhiteChannel = _isOffRefreshRequired = false;
@ -855,8 +861,23 @@ void WS2812FX::finalizeInit(void)
#endif
}
//segments are created in makeAutoSegments();
//initialize leds array. TBD: realloc if nr of leds change
if (useLedsArray) {
if (Segment::_globalLeds) {
for (Segment seg : _segments) if (seg.leds) { free(seg.leds); seg.leds = nullptr; }
free(Segment::_globalLeds);
Segment::_globalLeds = nullptr;
}
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
if (psramFound())
Segment::_globalLeds = (CRGB*) ps_malloc(sizeof(CRGB) * _length);
else
#endif
Segment::_globalLeds = (CRGB*) malloc(sizeof(CRGB) * _length);
memset(Segment::_globalLeds, 0, sizeof(CRGB) * _length);
}
//segments are created in makeAutoSegments();
setBrightness(_brightness);
}
@ -869,8 +890,6 @@ void WS2812FX::service() {
_isServicing = true;
_segment_index = 0;
for (segment &seg : _segments) {
// for (int i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
// reset the segment runtime data if needed
seg.resetIfRequired();
@ -1059,13 +1078,12 @@ void WS2812FX::setTargetFps(uint8_t fps) {
void WS2812FX::setMode(uint8_t segid, uint8_t m) {
if (segid >= _segments.size()) return;
// if (segid >= getMaxSegments()) return;
if (m >= getModeCount()) m = getModeCount() - 1;
if (_segments[segid].mode != m) {
//_segments[segid].startTransition(_transitionDur); // set effect transitions
_segments[segid].markForReset();
_segments[segid].startTransition(_transitionDur); // set effect transitions
//_segments[segid].markForReset();
_segments[segid].mode = m;
}
}
@ -1075,8 +1093,6 @@ void WS2812FX::setColor(uint8_t slot, uint32_t c) {
if (slot >= NUM_COLORS) return;
for (segment &seg : _segments) {
// for (int i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
if (seg.isSelected()) {
seg.setColor(slot, c);
}
@ -1085,8 +1101,6 @@ void WS2812FX::setColor(uint8_t slot, uint32_t c) {
void WS2812FX::setCCT(uint16_t k) {
for (segment &seg : _segments) {
// for (int i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
if (seg.isActive() && seg.isSelected()) {
seg.setCCT(k);
}
@ -1099,8 +1113,6 @@ void WS2812FX::setBrightness(uint8_t b, bool direct) {
_brightness = b;
if (_brightness == 0) { //unfreeze all segments on power off
for (segment &seg : _segments) {
// for (int i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
seg.setOption(SEG_OPTION_FREEZE, false);
}
}
@ -1117,8 +1129,6 @@ uint8_t WS2812FX::getFirstSelectedSegId(void)
{
size_t i = 0;
for (segment &seg : _segments) {
// for (int i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
if (seg.isSelected()) return i;
i++;
}
@ -1127,16 +1137,6 @@ uint8_t WS2812FX::getFirstSelectedSegId(void)
}
void WS2812FX::setMainSegmentId(uint8_t n) {
// if (n >= getMaxSegments()) return;
// //use supplied n if active, or first active
// if (_segments[n].isActive()) {
// _mainSegment = n; return;
// }
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
// if (_segments[i].isActive()) {
// _mainSegment = i; return;
// }
// }
_mainSegment = 0;
if (n < _segments.size()) {
_mainSegment = n;
@ -1145,16 +1145,14 @@ void WS2812FX::setMainSegmentId(uint8_t n) {
}
uint8_t WS2812FX::getLastActiveSegmentId(void) {
// for (uint8_t i = getMaxSegments() -1; i > 0; i--) {
// if (_segments[i].isActive()) return i;
// }
// return 0;
return _segments.size()-1;
for (size_t i = _segments.size() -1; i > 0; i--) {
if (_segments[i].isActive()) return i;
}
return 0;
}
uint8_t WS2812FX::getActiveSegmentsNum(void) {
uint8_t c = 0;
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
for (size_t i = 0; i < _segments.size(); i++) {
if (_segments[i].isActive()) c++;
}
@ -1163,7 +1161,7 @@ uint8_t WS2812FX::getActiveSegmentsNum(void) {
uint16_t WS2812FX::getLengthPhysical(void) {
uint16_t len = 0;
for (uint8_t b = 0; b < busses.getNumBusses(); b++) {
for (size_t b = 0; b < busses.getNumBusses(); b++) {
Bus *bus = busses.getBus(b);
if (bus->getType() >= TYPE_NET_DDP_RGB) continue; //exclude non-physical network busses
len += bus->getLength();
@ -1175,7 +1173,7 @@ uint16_t WS2812FX::getLengthPhysical(void) {
//returns if there is an RGBW bus (supports RGB and White, not only white)
//not influenced by auto-white mode, also true if white slider does not affect output white channel
bool WS2812FX::hasRGBWBus(void) {
for (uint8_t b = 0; b < busses.getNumBusses(); b++) {
for (size_t b = 0; b < busses.getNumBusses(); b++) {
Bus *bus = busses.getBus(b);
if (bus == nullptr || bus->getLength()==0) break;
switch (bus->getType()) {
@ -1190,7 +1188,7 @@ bool WS2812FX::hasRGBWBus(void) {
bool WS2812FX::hasCCTBus(void) {
if (cctFromRgb && !correctWB) return false;
for (uint8_t b = 0; b < busses.getNumBusses(); b++) {
for (size_t b = 0; b < busses.getNumBusses(); b++) {
Bus *bus = busses.getBus(b);
if (bus == nullptr || bus->getLength()==0) break;
switch (bus->getType()) {
@ -1206,7 +1204,7 @@ void WS2812FX::purgeSegments(bool force) {
// remove all inactive segments (from the back)
int deleted = 0;
if (_segments.size() <= 1) return;
for (int i = _segments.size()-1; i > 0; i--)
for (size_t i = _segments.size()-1; i > 0; i--)
if (_segments[i].stop == 0 || force) {
DEBUG_PRINT(F("Purging segment segment: ")); DEBUG_PRINTLN(i);
deleted++;
@ -1219,13 +1217,11 @@ void WS2812FX::purgeSegments(bool force) {
}
Segment& WS2812FX::getSegment(uint8_t id) {
// return _segments[id >= getMaxSegments() ? getMainSegmentId() : id];
return _segments[id >= _segments.size() ? getMainSegmentId() : id]; // vectors
}
void WS2812FX::setSegment(uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping, uint8_t spacing, uint16_t offset, uint16_t startY, uint16_t stopY) {
if (n >= _segments.size()) return;
// if (n >= getMaxSegments()) return;
Segment& seg = _segments[n];
//return if neither bounds nor grouping have changed
@ -1277,10 +1273,6 @@ void WS2812FX::setSegment(uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping,
void WS2812FX::restartRuntime() {
for (segment &seg : _segments) seg.markForReset();
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
// seg.markForReset();
// }
}
void WS2812FX::resetSegments() {
@ -1292,45 +1284,6 @@ void WS2812FX::resetSegments() {
#endif
_segments.push_back(seg);
_mainSegment = 0;
/*
for (uint8_t i = 0; i < getMaxSegments(); i++) if (_segments[i].name) delete[] _segments[i].name;
_mainSegment = 0;
memset(_segments, 0, sizeof(_segments));
//memset(_segmentruntimes, 0, sizeof(_segmentruntimes));
_segment_index = 0;
_segments[0].mode = DEFAULT_MODE;
_segments[0].colors[0] = DEFAULT_COLOR;
_segments[0].start = 0;
_segments[0].startY = 0;
_segments[0].speed = DEFAULT_SPEED;
_segments[0].intensity = DEFAULT_INTENSITY;
_segments[0].stop = isMatrix ? matrixWidth : _length;
_segments[0].stopY = isMatrix ? matrixHeight : 1;
_segments[0].grouping = 1;
_segments[0].setOption(SEG_OPTION_SELECTED, 1);
_segments[0].setOption(SEG_OPTION_ON, 1);
_segments[0].opacity = 255;
_segments[0].cct = 127;
_segments[0].custom1 = DEFAULT_C1;
_segments[0].custom2 = DEFAULT_C2;
_segments[0].custom3 = DEFAULT_C3;
for (uint16_t i = 1; i < getMaxSegments(); i++)
{
_segments[i].colors[0] = _segments[i].color_wheel(i*51);
_segments[i].grouping = 1;
_segments[i].setOption(SEG_OPTION_ON, 1);
_segments[i].opacity = 255;
_segments[i].cct = 127;
_segments[i].speed = DEFAULT_SPEED;
_segments[i].intensity = DEFAULT_INTENSITY;
_segments[i].custom1 = DEFAULT_C1;
_segments[i].custom2 = DEFAULT_C2;
_segments[i].custom3 = DEFAULT_C3;
_segments[i].markForReset();
}
_segments[0].markForReset();
*/
}
void WS2812FX::makeAutoSegments(bool forceReset) {
@ -1360,7 +1313,7 @@ void WS2812FX::makeAutoSegments(bool forceReset) {
segStops[s] = segStarts[s] + b->getLength();
//check for overlap with previous segments
for (uint8_t j = 0; j < s; j++) {
for (size_t j = 0; j < s; j++) {
if (segStops[j] > segStarts[s] && segStarts[j] < segStops[s]) {
//segments overlap, merge
segStarts[j] = min(segStarts[s],segStarts[j]);
@ -1371,15 +1324,11 @@ void WS2812FX::makeAutoSegments(bool forceReset) {
s++;
}
_segments.clear();
for (uint8_t i = 0; i < s; i++) {
for (size_t i = 0; i < s; i++) {
Segment seg = Segment(segStarts[i], segStops[i]);
seg.setOption(SEG_OPTION_SELECTED, true);
_segments.push_back(seg);
}
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
// _segments[i].setOption(SEG_OPTION_SELECTED, true);
// setSegment(i, segStarts[i], segStops[i]);
// }
_mainSegment = 0;
} else {
if (forceReset || getSegmentsNum() == 0) resetSegments();
@ -1397,26 +1346,18 @@ void WS2812FX::makeAutoSegments(bool forceReset) {
void WS2812FX::fixInvalidSegments() {
//make sure no segment is longer than total (sanity check)
for (int i = getSegmentsNum()-1; i > 0; i--) {
for (size_t i = getSegmentsNum()-1; i > 0; i--) {
if (_segments[i].start >= _length) { _segments.erase(_segments.begin()+i); continue; }
if (_segments[i].stop > _length) _segments[i].stop = _length;
// this is always called as the last step after finalizeInit(), update covered bus types
_segments[i].refreshLightCapabilities();
}
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
// if (_segments[i].start >= _length) { _segments[i].start = _segments[i].stop = 0; _segments[i].markForReset(); }
// if (_segments[i].stop > _length) { _segments[i].stop = _length; _segments[i].markForReset(); }
// // this is always called as the last step after finalizeInit(), update covered bus types
// if (_segments[i].isActive()) _segments[i].refreshLightCapabilities();
// }
}
//true if all segments align with a bus, or if a segment covers the total length
bool WS2812FX::checkSegmentAlignment() {
bool aligned = false;
for (segment &seg : _segments) {
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
for (uint8_t b = 0; b<busses.getNumBusses(); b++) {
Bus *bus = busses.getBus(b);
if (seg.start == bus->getStart() && seg.stop == bus->getStart() + bus->getLength()) aligned = true;
@ -1434,7 +1375,6 @@ uint8_t WS2812FX::setPixelSegment(uint8_t n)
{
uint8_t prevSegId = _segment_index;
if (n < _segments.size()) {
// if (n < getMaxSegments()) {
_segment_index = n;
_virtualSegmentLength = _segments[_segment_index].virtualLength();
}
@ -1455,10 +1395,6 @@ void WS2812FX::setRange(uint16_t i, uint16_t i2, uint32_t col)
void WS2812FX::setTransitionMode(bool t)
{
for (segment &seg : _segments) if (!seg.transitional) seg.startTransition(t ? _transitionDur : 0);
// for (uint8_t i = 0; i < getMaxSegments(); i++) {
// Segment &seg = getSegment(i);
// if (!seg.transitional)seg.startTransition(t ? _transitionDur : 0);
// }
}
#ifdef WLED_DEBUG

View File

@ -90,6 +90,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
CJSON(strip.cctBlending, hw_led[F("cb")]);
Bus::setCCTBlend(strip.cctBlending);
strip.setTargetFps(hw_led["fps"]); //NOP if 0, default 42 FPS
CJSON(strip.useLedsArray, hw_led[F("ld")]);
#ifndef WLED_DISABLE_2D
// 2D Matrix Settings
@ -625,6 +626,7 @@ void serializeConfig() {
hw_led[F("cb")] = strip.cctBlending;
hw_led["fps"] = strip.getTargetFps();
hw_led[F("rgbwm")] = Bus::getAutoWhiteMode(); // global override
hw_led[F("ld")] = strip.useLedsArray;
#ifndef WLED_DISABLE_2D
// 2D Matrix Settings

View File

@ -590,6 +590,7 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
<hr style="width:260px">
Make a segment for each output: <input type="checkbox" name="MS"><br>
Custom bus start indices: <input type="checkbox" onchange="tglSi(this.checked)" id="si"><br>
Use global LED buffer: <input type="checkbox" name="LD"><br>
<hr style="width:260px">
<div id="color_order_mapping">
Color Order Override:

View File

@ -236,267 +236,267 @@ const uint8_t PAGE_settings_wifi[] PROGMEM = {
// Autogenerated from wled00/data/settings_leds.htm, do not edit!!
const uint16_t PAGE_settings_leds_length = 7326;
const uint16_t PAGE_settings_leds_length = 7343;
const uint8_t PAGE_settings_leds[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0xed, 0x76, 0xe2, 0xc6,
0x92, 0xff, 0x79, 0x8a, 0x76, 0x27, 0x71, 0xa4, 0x8b, 0x0c, 0x12, 0x1f, 0x8e, 0x07, 0x10, 0xac,
0xf1, 0x78, 0x26, 0xbe, 0xd7, 0x8e, 0x7d, 0x8c, 0x93, 0xb9, 0x7b, 0x26, 0x73, 0x32, 0x42, 0x34,
0xa0, 0xb1, 0x90, 0x74, 0x25, 0x61, 0x9b, 0xb5, 0xd9, 0x67, 0xda, 0x67, 0xd8, 0x27, 0xdb, 0xaa,
0xb1, 0x3d, 0x13, 0xdf, 0x6b, 0xc7, 0x3e, 0xc6, 0xc9, 0xdc, 0x3d, 0x93, 0x39, 0x19, 0x21, 0x1a,
0xd0, 0x58, 0x48, 0xba, 0x92, 0xb0, 0x87, 0xb5, 0xd9, 0x67, 0xda, 0x67, 0xd8, 0x27, 0xdb, 0xaa,
0xee, 0xd6, 0x17, 0x08, 0xec, 0xdc, 0xbb, 0xfb, 0x67, 0x73, 0xce, 0xc4, 0x20, 0x55, 0x57, 0x55,
0x57, 0xd7, 0x77, 0x77, 0xd3, 0x3b, 0x78, 0x7f, 0x7d, 0x76, 0xf7, 0xef, 0x37, 0xe7, 0x64, 0x1e,
0x2f, 0xdc, 0x7e, 0x0f, 0xff, 0x4f, 0x5c, 0xcb, 0x9b, 0x99, 0x94, 0x79, 0x14, 0xbe, 0x33, 0x6b,
0xd2, 0xef, 0x2d, 0x58, 0x6c, 0x11, 0x7b, 0x6e, 0x85, 0x11, 0x8b, 0x4d, 0xba, 0x8c, 0xa7, 0x47,
0x27, 0x54, 0x3e, 0xad, 0x78, 0xd6, 0x82, 0x99, 0xf4, 0xc1, 0x61, 0x8f, 0x81, 0x1f, 0xc6, 0x94,
0xd8, 0xbe, 0x17, 0x33, 0x0f, 0xc0, 0x1e, 0x9d, 0x49, 0x3c, 0x37, 0xdb, 0xba, 0x9e, 0x82, 0x6e,
0xbc, 0x9a, 0xb0, 0x07, 0xc7, 0x66, 0x47, 0xfc, 0x8b, 0xe6, 0x78, 0x4e, 0xec, 0x58, 0xee, 0x51,
0x64, 0x5b, 0x2e, 0x33, 0x0d, 0x6d, 0x61, 0x3d, 0x39, 0x8b, 0xe5, 0x22, 0xfd, 0xbe, 0x8c, 0x58,
0x57, 0xd7, 0x77, 0x77, 0xd3, 0x3b, 0x38, 0xbf, 0x39, 0xbb, 0xff, 0xf7, 0xdb, 0x0b, 0x32, 0x8f,
0x17, 0x6e, 0xbf, 0x87, 0xff, 0x27, 0xae, 0xe5, 0xcd, 0x4c, 0xca, 0x3c, 0x0a, 0xdf, 0x99, 0x35,
0xe9, 0xf7, 0x16, 0x2c, 0xb6, 0x88, 0x3d, 0xb7, 0xc2, 0x88, 0xc5, 0x26, 0x5d, 0xc6, 0xd3, 0xa3,
0x13, 0x2a, 0x9f, 0x56, 0x3c, 0x6b, 0xc1, 0x4c, 0xfa, 0xe8, 0xb0, 0xa7, 0xc0, 0x0f, 0x63, 0x4a,
0x6c, 0xdf, 0x8b, 0x99, 0x07, 0x60, 0x4f, 0xce, 0x24, 0x9e, 0x9b, 0x6d, 0x5d, 0x4f, 0x41, 0x37,
0x5e, 0x4d, 0xd8, 0xa3, 0x63, 0xb3, 0x23, 0xfe, 0x45, 0x73, 0x3c, 0x27, 0x76, 0x2c, 0xf7, 0x28,
0xb2, 0x2d, 0x97, 0x99, 0x86, 0xb6, 0xb0, 0xbe, 0x39, 0x8b, 0xe5, 0x22, 0xfd, 0xbe, 0x8c, 0x58,
0xc8, 0xbf, 0x58, 0x63, 0xf8, 0xee, 0xf9, 0x74, 0x8b, 0x72, 0xbf, 0x17, 0x3b, 0xb1, 0xcb, 0xfa,
0x97, 0xe7, 0xef, 0xc9, 0x88, 0xc5, 0xb1, 0xe3, 0xcd, 0xa2, 0x5e, 0x5d, 0x3c, 0xeb, 0x45, 0x76,
0xe8, 0x04, 0x71, 0xbf, 0xf2, 0x60, 0x85, 0xc4, 0xf5, 0x6d, 0x27, 0xd0, 0x62, 0x67, 0xc1, 0xfc,
0x65, 0xac, 0x4d, 0xcc, 0x89, 0x6f, 0x2f, 0x17, 0xc0, 0x97, 0xe6, 0x5a, 0x41, 0xc8, 0x1e, 0xcc,
0x76, 0x1b, 0xa9, 0x0f, 0x05, 0x13, 0x57, 0x66, 0x8b, 0x35, 0xf1, 0xc3, 0xcd, 0xd0, 0x6c, 0xe9,
0xef, 0x8e, 0xf1, 0xe3, 0xa5, 0x69, 0x34, 0x9b, 0xfc, 0xe1, 0xe5, 0xf8, 0x1f, 0x4b, 0x3f, 0x36,
0x75, 0xcd, 0x5e, 0x46, 0xb1, 0xbf, 0x18, 0xc5, 0x56, 0x18, 0x47, 0xe6, 0x81, 0xa1, 0x45, 0xfc,
0xd3, 0x7b, 0x27, 0x8c, 0x57, 0xe6, 0xe7, 0x2f, 0x08, 0x7a, 0x76, 0x7d, 0xfd, 0xc0, 0xc2, 0xd0,
0x99, 0xb0, 0xc8, 0x6c, 0x6b, 0xc0, 0x03, 0x80, 0x75, 0xa7, 0x4b, 0xcf, 0x8e, 0x1d, 0xdf, 0x23,
0x3f, 0x2b, 0xea, 0xf3, 0xa3, 0xe3, 0x4d, 0xfc, 0xc7, 0x9a, 0x1f, 0x30, 0x4f, 0xa1, 0xf3, 0x38,
0x0e, 0xa2, 0x4e, 0xbd, 0x7e, 0xef, 0xf9, 0xb5, 0x47, 0x97, 0x4d, 0x6a, 0x33, 0x56, 0x9f, 0x32,
0x2b, 0x5e, 0x86, 0x2c, 0xaa, 0x47, 0x72, 0x7a, 0xf5, 0xef, 0xe0, 0xcd, 0x51, 0xf2, 0x8d, 0xaa,
0xeb, 0x14, 0xdf, 0x70, 0x13, 0x5f, 0x3a, 0x86, 0x6a, 0xf4, 0x8f, 0x88, 0xb9, 0xd3, 0x3c, 0xf4,
0xec, 0x62, 0xa2, 0x30, 0xf5, 0x39, 0x64, 0x80, 0xde, 0x23, 0x48, 0x2b, 0x3e, 0x77, 0x19, 0xca,
0x64, 0xb8, 0xe2, 0xaf, 0x32, 0x50, 0x7f, 0x3a, 0x45, 0xd0, 0x3c, 0x4c, 0x34, 0x5c, 0xfd, 0x02,
0x4b, 0x01, 0x8f, 0x3f, 0xeb, 0x5f, 0x6a, 0x0f, 0x96, 0xbb, 0x64, 0xe6, 0x91, 0x91, 0x0d, 0x71,
0x7d, 0x6b, 0xf2, 0xd7, 0x91, 0xc2, 0x34, 0xcf, 0x3c, 0xd0, 0xd5, 0x67, 0x97, 0xc5, 0x24, 0x36,
0x27, 0x35, 0x3b, 0x84, 0xe9, 0x30, 0x89, 0x43, 0xa1, 0x62, 0x85, 0xa8, 0xda, 0x8d, 0x6b, 0xc0,
0xea, 0x69, 0x1c, 0x87, 0xce, 0x78, 0x19, 0x33, 0x78, 0x11, 0xda, 0x54, 0x63, 0xaa, 0xb6, 0xf9,
0x3c, 0x5e, 0x05, 0x0c, 0x26, 0x13, 0xb3, 0xa7, 0xb8, 0xfe, 0xcd, 0x7a, 0xb0, 0x12, 0x04, 0x5b,
0x80, 0x56, 0xb4, 0xf2, 0x00, 0x85, 0xa7, 0x6a, 0x93, 0xda, 0xd8, 0x9f, 0xac, 0x6a, 0x56, 0x00,
0x22, 0x99, 0x9c, 0xcd, 0x1d, 0x77, 0xa2, 0xc4, 0x08, 0x6f, 0x4d, 0x26, 0xe7, 0x0f, 0xc0, 0xc5,
0xa5, 0x13, 0x81, 0x82, 0xb2, 0x50, 0xa1, 0xc8, 0x33, 0xd5, 0x14, 0xd5, 0xec, 0x3f, 0x7f, 0x64,
0xf1, 0x6f, 0x8a, 0xaa, 0xd9, 0x73, 0x66, 0xdf, 0x8f, 0x1c, 0xf8, 0x84, 0xd8, 0x87, 0x97, 0x8a,
0xba, 0x2e, 0x1f, 0x0a, 0x8b, 0xec, 0x87, 0xc0, 0x31, 0x0c, 0x05, 0x85, 0x8f, 0x7c, 0x97, 0xd5,
0x5c, 0x7f, 0xa6, 0xd0, 0x73, 0x7c, 0x4e, 0xa4, 0x3c, 0x60, 0x25, 0xc8, 0xd4, 0x71, 0x19, 0x9f,
0x19, 0x68, 0x78, 0x08, 0x12, 0xb8, 0x94, 0xcf, 0xfd, 0x29, 0x1a, 0xd1, 0xd4, 0x99, 0x2d, 0x43,
0x8b, 0x0b, 0x50, 0xcc, 0x8c, 0x4c, 0x2d, 0x07, 0x15, 0xe1, 0x77, 0xef, 0xc2, 0xb3, 0xfd, 0x45,
0x00, 0x72, 0x64, 0x24, 0xb0, 0x66, 0x8c, 0x4c, 0xac, 0xd8, 0x3a, 0x80, 0xf5, 0xcc, 0x2d, 0x53,
0x34, 0xf7, 0x1f, 0xef, 0x7c, 0x2b, 0x8a, 0x85, 0xd8, 0x0d, 0xf5, 0x19, 0x35, 0x3f, 0x36, 0x71,
0xa5, 0x69, 0x8c, 0x2f, 0xb8, 0xa4, 0x1d, 0x0f, 0x58, 0xfe, 0xf9, 0xee, 0xea, 0xd2, 0x64, 0x30,
0x17, 0xdb, 0xb5, 0xa2, 0x08, 0x97, 0xd2, 0xf4, 0x06, 0x72, 0x1a, 0x1d, 0x8a, 0x98, 0xa8, 0x66,
0xbb, 0xcc, 0x0a, 0xef, 0x84, 0xc9, 0x28, 0xd2, 0x74, 0xb8, 0xa4, 0xe3, 0x15, 0xcc, 0xcf, 0xf2,
0x9c, 0x05, 0x67, 0xd5, 0xa4, 0x9e, 0xef, 0xc1, 0xa4, 0x24, 0x84, 0x09, 0xa2, 0x4a, 0x06, 0x29,
0x09, 0x6f, 0xa0, 0x99, 0x79, 0x52, 0xb9, 0xcf, 0xb5, 0x90, 0x05, 0xae, 0x65, 0xe3, 0x9a, 0x73,
0xa2, 0x14, 0xe7, 0xa4, 0x35, 0xde, 0xe9, 0x7a, 0x6e, 0x66, 0xe3, 0x4b, 0x67, 0xe1, 0xc4, 0x11,
0xce, 0x4b, 0x8b, 0x35, 0x47, 0x7d, 0xe6, 0xb6, 0xca, 0x84, 0xad, 0xc6, 0xd2, 0x52, 0x3d, 0x61,
0xa6, 0x4e, 0x36, 0x2c, 0x70, 0xbc, 0xe8, 0xfa, 0x6f, 0x8a, 0x90, 0x03, 0x33, 0x37, 0xf4, 0xf7,
0xce, 0x9a, 0x71, 0x15, 0xa6, 0x8e, 0x17, 0x2c, 0x51, 0x34, 0x53, 0x3f, 0x54, 0x1c, 0x53, 0xef,
0x3a, 0x3d, 0x58, 0x3d, 0xe6, 0xcd, 0xe2, 0x79, 0xd7, 0xa9, 0x56, 0xc5, 0x68, 0xcf, 0x64, 0x9f,
0x9d, 0x2f, 0x35, 0x74, 0x3f, 0xb5, 0x68, 0x39, 0x8e, 0x40, 0xd1, 0xbc, 0x99, 0xa2, 0x6b, 0x0d,
0xb5, 0xeb, 0x4c, 0x61, 0x19, 0x75, 0x6a, 0x9a, 0xde, 0xcb, 0x0b, 0xbd, 0x34, 0x92, 0x0f, 0x8d,
0xe4, 0x43, 0x13, 0x3f, 0x24, 0x6b, 0x51, 0x86, 0x45, 0xe0, 0x08, 0xd0, 0xd3, 0x5e, 0x80, 0x55,
0x94, 0x99, 0x19, 0xbd, 0xbc, 0xa3, 0xd5, 0x38, 0xb3, 0x35, 0xcd, 0xd0, 0xd5, 0xbe, 0x79, 0xa2,
0xab, 0xe8, 0x5e, 0x1d, 0x6f, 0xc9, 0xd6, 0x80, 0xe1, 0x0d, 0x6c, 0xe0, 0x87, 0x96, 0xfc, 0x70,
0x7b, 0x29, 0x3f, 0x0c, 0xef, 0xe4, 0x87, 0x8b, 0x5b, 0xce, 0xea, 0xe1, 0x21, 0xa5, 0x07, 0x82,
0x53, 0x4e, 0x0c, 0xbe, 0x1f, 0x19, 0x85, 0x27, 0xea, 0x33, 0x90, 0x9b, 0xd4, 0x96, 0x8b, 0x3f,
0x82, 0xc3, 0x43, 0xf1, 0xb7, 0x16, 0xf9, 0xc0, 0xa7, 0x67, 0xf6, 0x3d, 0xd3, 0x4c, 0xa7, 0x92,
0x8d, 0x40, 0x86, 0x55, 0x55, 0x3a, 0x1b, 0xa1, 0xfb, 0x5f, 0x47, 0x7e, 0x18, 0xae, 0x34, 0xbe,
0x4a, 0xe4, 0xfb, 0xe7, 0xbf, 0x8e, 0xae, 0x7f, 0xa9, 0x09, 0x89, 0x38, 0xd3, 0x95, 0xc4, 0xae,
0xae, 0x89, 0x6d, 0x79, 0x3f, 0xc6, 0x64, 0xcc, 0x08, 0x44, 0x83, 0x49, 0xed, 0xab, 0xaa, 0x65,
0x48, 0x4d, 0x4a, 0xc5, 0xb7, 0x29, 0x78, 0xf3, 0x08, 0xac, 0x14, 0xbc, 0x2b, 0x30, 0x96, 0x01,
0xf4, 0xdb, 0x87, 0x87, 0xd9, 0xb7, 0x9e, 0xd1, 0x28, 0x72, 0x40, 0xf3, 0x1c, 0x1c, 0x1f, 0x19,
0x06, 0x12, 0x23, 0x9e, 0x9f, 0x91, 0xa3, 0x6f, 0x20, 0x87, 0x62, 0x3b, 0x30, 0x3d, 0x90, 0x12,
0x08, 0x92, 0x7f, 0xc8, 0x31, 0xd0, 0x6c, 0xee, 0x21, 0x09, 0x6f, 0x89, 0x15, 0x32, 0xc2, 0x15,
0x10, 0xbc, 0x84, 0xbb, 0x7a, 0x9d, 0x20, 0x2a, 0xe9, 0x37, 0xd3, 0xa9, 0x1a, 0xdd, 0x6f, 0x99,
0x9a, 0x7e, 0x4b, 0xd4, 0xd4, 0x82, 0x45, 0xfa, 0xf6, 0x8a, 0x9a, 0x5a, 0x89, 0x7e, 0x58, 0x89,
0x7e, 0x58, 0x89, 0x7e, 0x58, 0x89, 0x7e, 0x58, 0x89, 0x7e, 0x58, 0x89, 0x7e, 0x58, 0x89, 0x7e,
0x58, 0x7c, 0xf1, 0x29, 0xbe, 0x34, 0xad, 0x02, 0x11, 0x43, 0x15, 0x4c, 0xf8, 0xa5, 0x4c, 0xbc,
0x55, 0xcb, 0xfd, 0x57, 0xb4, 0x5c, 0xe8, 0xe6, 0xb7, 0x54, 0x37, 0x73, 0xe2, 0xca, 0x3d, 0xdf,
0x50, 0xb5, 0x1b, 0xc7, 0xe3, 0xfe, 0xd5, 0x75, 0x6c, 0x5c, 0xdc, 0xf8, 0x91, 0x31, 0x0f, 0x74,
0x2e, 0xb5, 0xc6, 0x75, 0x1d, 0xbf, 0x48, 0xa6, 0xd7, 0x07, 0x5c, 0xcb, 0xbe, 0x15, 0x56, 0xe1,
0x5b, 0x7e, 0x15, 0xd6, 0xf0, 0x9f, 0x20, 0x70, 0xa0, 0x67, 0xee, 0x26, 0x0e, 0x57, 0xa3, 0xe5,
0x18, 0x1c, 0x95, 0x92, 0x18, 0xc8, 0x68, 0x5a, 0x43, 0x3f, 0x9d, 0xc3, 0x53, 0xc3, 0x6c, 0x03,
0xa6, 0xfc, 0x9e, 0x4d, 0xad, 0xa5, 0x1b, 0x23, 0xb6, 0xc4, 0x4b, 0x25, 0x2c, 0x83, 0xd0, 0x62,
0x3f, 0xb8, 0x09, 0x7d, 0xf0, 0xf3, 0x96, 0x70, 0x9e, 0x52, 0xd3, 0x78, 0xe2, 0xd1, 0x37, 0xc0,
0x35, 0x4a, 0x9f, 0x44, 0xef, 0x7c, 0x9f, 0x2c, 0x2c, 0x6f, 0x45, 0x20, 0x01, 0x8a, 0x08, 0xe8,
0x06, 0x59, 0x30, 0x12, 0xfb, 0x64, 0x6e, 0x79, 0x13, 0x97, 0x1d, 0xd0, 0x2e, 0x7a, 0xc8, 0x9e,
0xc1, 0x5a, 0x87, 0x87, 0x8a, 0x57, 0x35, 0xe9, 0xef, 0xde, 0xef, 0xe1, 0x19, 0x04, 0x28, 0xc8,
0x48, 0x42, 0xd0, 0x70, 0x8c, 0x3c, 0xa0, 0xf1, 0xe7, 0xa3, 0x9b, 0x66, 0x03, 0x55, 0x4f, 0x48,
0xcb, 0x53, 0xd7, 0x9c, 0x75, 0x1e, 0xfd, 0x7e, 0xb3, 0x5c, 0x67, 0xe2, 0xc4, 0x2b, 0x45, 0x45,
0x4b, 0x87, 0xa7, 0x91, 0x98, 0x62, 0xce, 0x3b, 0x33, 0x8f, 0x87, 0x46, 0xe9, 0x65, 0x79, 0xb4,
0xc1, 0x84, 0x8d, 0xaa, 0x02, 0x03, 0x9b, 0x74, 0xf9, 0xc0, 0xcb, 0x53, 0x29, 0x07, 0x36, 0x10,
0x49, 0x57, 0x47, 0xd7, 0x12, 0x60, 0x80, 0x15, 0x51, 0x65, 0xe2, 0x44, 0x10, 0x0e, 0x56, 0x00,
0x03, 0x6e, 0xd9, 0x75, 0x20, 0xae, 0x74, 0x64, 0x78, 0xe1, 0xa0, 0x41, 0xb4, 0x6c, 0xbc, 0x01,
0xb6, 0x40, 0xaf, 0xaf, 0x1f, 0x1e, 0xa6, 0xe1, 0x3b, 0xc7, 0xf4, 0xe5, 0x69, 0x2e, 0x32, 0x70,
0x78, 0x48, 0x91, 0xc4, 0x90, 0x4d, 0x86, 0x05, 0xf1, 0xcb, 0x53, 0xa0, 0xb8, 0x45, 0xbd, 0xad,
0x9b, 0x25, 0x1c, 0xfc, 0x7a, 0x91, 0x27, 0x96, 0x90, 0x7f, 0x8e, 0x1e, 0x9d, 0xd8, 0x9e, 0x2b,
0x25, 0x32, 0x82, 0x34, 0x49, 0xdb, 0x64, 0x03, 0x70, 0x6b, 0x39, 0x83, 0xc9, 0xb1, 0x04, 0x96,
0x66, 0x5b, 0x11, 0x23, 0x7a, 0xa7, 0x14, 0x95, 0xa1, 0xc9, 0x35, 0xe9, 0x8e, 0x21, 0xe1, 0xba,
0xef, 0x72, 0xd8, 0xa6, 0xde, 0xd9, 0x22, 0xd0, 0xd4, 0x0b, 0x10, 0xed, 0x12, 0x88, 0x76, 0x1e,
0xa2, 0x5d, 0x02, 0xd1, 0x2e, 0x40, 0x34, 0xca, 0x40, 0x1a, 0x29, 0xcc, 0x44, 0xe8, 0x7d, 0x67,
0x8f, 0x40, 0x13, 0x51, 0xae, 0x39, 0xcc, 0xc2, 0x00, 0x80, 0x2c, 0x65, 0x41, 0x7d, 0xd6, 0x4a,
0x7d, 0xc7, 0x08, 0xb2, 0x5b, 0xf4, 0x1c, 0xdb, 0xc9, 0x99, 0xd0, 0x58, 0x48, 0x50, 0x12, 0xfb,
0x54, 0x37, 0x96, 0x07, 0xb0, 0x5d, 0xb1, 0x05, 0x66, 0x17, 0x49, 0xa6, 0xfa, 0x8a, 0x9b, 0x3a,
0xa3, 0x55, 0x2f, 0x73, 0x53, 0x6a, 0x57, 0x5a, 0x6e, 0x5c, 0x7d, 0x65, 0xe0, 0xe8, 0xb2, 0x38,
0x50, 0x63, 0xbd, 0x66, 0x63, 0x90, 0xd9, 0x68, 0xd3, 0x34, 0xcb, 0x09, 0xea, 0x85, 0x71, 0x03,
0xd6, 0x6f, 0xbc, 0x1b, 0x34, 0xf4, 0xbf, 0xc4, 0x1d, 0xa3, 0x0d, 0xff, 0x43, 0x04, 0x7d, 0x13,
0x30, 0x88, 0x17, 0x27, 0xf0, 0xe8, 0x18, 0xfe, 0xf1, 0x2f, 0x2d, 0xf8, 0xd0, 0xe4, 0x5f, 0x9a,
0x06, 0x38, 0xcb, 0x5e, 0xeb, 0x64, 0xd0, 0xee, 0xb4, 0x5a, 0xa0, 0xb3, 0x2f, 0x2f, 0xad, 0x36,
0xaa, 0xae, 0x84, 0xc8, 0xc4, 0x01, 0xc2, 0x61, 0x69, 0xfa, 0x88, 0x89, 0xa4, 0x06, 0xd5, 0x4e,
0x57, 0x28, 0xda, 0x22, 0x78, 0xb4, 0x42, 0x0f, 0xfc, 0xc6, 0xd6, 0xb2, 0xf1, 0x45, 0xbf, 0x4a,
0x6c, 0xee, 0xa7, 0x86, 0xae, 0x6f, 0x19, 0x05, 0xa8, 0x81, 0x69, 0x16, 0xf4, 0x58, 0x7a, 0x02,
0xd3, 0x68, 0x74, 0xb6, 0x6c, 0x56, 0x91, 0xef, 0x8a, 0x8a, 0xdf, 0x15, 0x61, 0x6e, 0x57, 0x2e,
0x07, 0x3a, 0xc7, 0xec, 0x62, 0x32, 0x67, 0xe5, 0x93, 0x39, 0x1e, 0xba, 0x78, 0x3c, 0xdb, 0x91,
0xce, 0x25, 0x21, 0xcc, 0x2a, 0x4d, 0xd4, 0x34, 0x37, 0x5b, 0x61, 0xab, 0x90, 0xdc, 0x08, 0xf9,
0x04, 0xfa, 0x04, 0x23, 0x58, 0x4e, 0x61, 0x5d, 0x0c, 0x60, 0x87, 0x87, 0x6e, 0xef, 0xdd, 0xf1,
0x80, 0x5e, 0xdc, 0x10, 0x50, 0x4f, 0xa8, 0xe6, 0xa2, 0x0e, 0xed, 0xb8, 0xfd, 0xd6, 0xbb, 0x01,
0x7d, 0x0f, 0xf1, 0x81, 0x7c, 0xbc, 0xb9, 0xb8, 0x16, 0x4f, 0x8c, 0x01, 0xc5, 0x2f, 0xf8, 0x9e,
0x8a, 0xa7, 0xd2, 0xf1, 0x19, 0xdb, 0x88, 0x5b, 0xef, 0x10, 0xef, 0x71, 0x6b, 0x40, 0xcf, 0xdc,
0xfb, 0x04, 0x07, 0xa5, 0x5c, 0x42, 0xd1, 0x0e, 0x45, 0x32, 0x64, 0x80, 0xe5, 0xf2, 0x01, 0x7d,
0x95, 0xaa, 0xef, 0x6a, 0xbe, 0xaa, 0x4d, 0x4d, 0x48, 0x2f, 0x7a, 0xed, 0xee, 0x14, 0xb3, 0x09,
0x65, 0x17, 0x06, 0x5a, 0x9d, 0x0a, 0x14, 0x2a, 0x2e, 0x51, 0x36, 0xbb, 0xc3, 0xc3, 0x69, 0xaf,
0xf5, 0xf2, 0x22, 0xd8, 0x32, 0x4c, 0x73, 0xca, 0x3f, 0x1b, 0xf8, 0xb2, 0x0d, 0x20, 0xd3, 0x6a,
0x4b, 0xef, 0xb9, 0x03, 0x25, 0xda, 0x61, 0xed, 0x5a, 0x04, 0x95, 0xc0, 0x3f, 0x96, 0x4e, 0xc8,
0x5d, 0xa1, 0xda, 0xd9, 0x06, 0x14, 0x3a, 0x94, 0x07, 0x83, 0x92, 0x3b, 0x0d, 0xad, 0xaa, 0xba,
0x86, 0x64, 0x40, 0x78, 0xd6, 0x70, 0xca, 0x65, 0x95, 0xb8, 0xc3, 0x92, 0x67, 0x2f, 0x2f, 0x4d,
0x60, 0xd1, 0xd5, 0x5c, 0x6e, 0x15, 0x2e, 0x58, 0x05, 0x8c, 0xdd, 0x69, 0xeb, 0xb9, 0x94, 0xc4,
0x84, 0x24, 0x47, 0xcb, 0x23, 0xf4, 0x3d, 0x1b, 0x92, 0x8a, 0x7b, 0x93, 0xe3, 0x1b, 0xe4, 0xea,
0x1d, 0x99, 0x1f, 0x18, 0xeb, 0x4e, 0xee, 0xe1, 0x5a, 0xf3, 0x5e, 0xc0, 0xe9, 0x02, 0xa8, 0xe4,
0x80, 0x0b, 0x89, 0x4b, 0xb0, 0x05, 0x12, 0x6c, 0x35, 0x0f, 0x80, 0x29, 0x8e, 0xde, 0xf6, 0x39,
0xfa, 0xa2, 0x0c, 0x72, 0xe2, 0xc6, 0x81, 0xa6, 0x1c, 0x79, 0x32, 0x10, 0xc2, 0xe9, 0xa4, 0xc2,
0xe4, 0x28, 0x26, 0xce, 0x0c, 0x70, 0x54, 0xe9, 0xe3, 0x96, 0xad, 0xe6, 0x39, 0xd8, 0xb2, 0xd2,
0xa6, 0x0e, 0x4c, 0x80, 0x2f, 0x32, 0xf8, 0x9f, 0x72, 0xa9, 0x7c, 0xba, 0x2e, 0x4a, 0x45, 0x57,
0x8b, 0x24, 0x6d, 0x5a, 0xc2, 0xfa, 0xdb, 0xb8, 0x0d, 0xe9, 0x9e, 0x59, 0xef, 0x1f, 0x1a, 0xd1,
0xff, 0x1d, 0x81, 0x4d, 0xcb, 0xf0, 0x18, 0xc7, 0x38, 0xb4, 0xd9, 0xe0, 0x78, 0xda, 0x7a, 0x62,
0x7a, 0x65, 0x59, 0x4a, 0x82, 0xc7, 0xda, 0xc2, 0x03, 0xc5, 0x41, 0x0b, 0xc5, 0x5b, 0x3e, 0x0e,
0xbc, 0xdd, 0xb6, 0xf7, 0xc8, 0x58, 0xbe, 0xf0, 0x1e, 0x20, 0x3d, 0x63, 0x13, 0x02, 0xa5, 0x35,
0x56, 0xac, 0x1d, 0x7a, 0x0b, 0xb9, 0x24, 0x78, 0xa3, 0x09, 0x51, 0x42, 0x3f, 0xb6, 0xf0, 0x95,
0x71, 0xa2, 0xff, 0xf7, 0x7f, 0xa9, 0x69, 0xb6, 0x34, 0xd9, 0x8f, 0x6f, 0xc2, 0x9e, 0xd0, 0x65,
0xf0, 0x16, 0x56, 0x87, 0xae, 0xd1, 0x71, 0x84, 0x60, 0xf6, 0xff, 0x58, 0x32, 0x08, 0x95, 0xdc,
0x93, 0xfa, 0xe1, 0xa9, 0xeb, 0x2a, 0xb4, 0xf6, 0x08, 0x2b, 0xaa, 0x2d, 0xcd, 0x30, 0xf1, 0xa5,
0x99, 0x7b, 0x5d, 0x72, 0xbf, 0x1a, 0xa2, 0x33, 0xdc, 0x98, 0xeb, 0xe6, 0x24, 0xb9, 0x63, 0x0a,
0x5e, 0x2b, 0xc3, 0xb5, 0x85, 0xa9, 0x6b, 0x0f, 0xd8, 0x5e, 0x03, 0xf4, 0x19, 0x99, 0x60, 0xab,
0x24, 0x9f, 0x99, 0xc1, 0xae, 0x92, 0xdc, 0x2f, 0x7d, 0x95, 0x14, 0x41, 0x67, 0x50, 0x41, 0xcc,
0x64, 0x15, 0x83, 0x05, 0xd1, 0x2c, 0x29, 0x88, 0x66, 0xea, 0x2b, 0x2e, 0x00, 0x02, 0xad, 0xc9,
0x9b, 0x0d, 0xdd, 0x92, 0xc1, 0x49, 0x35, 0x35, 0x4b, 0xaa, 0x29, 0x41, 0x43, 0x71, 0xcd, 0x3f,
0x55, 0xf4, 0xa8, 0xa2, 0xe4, 0x79, 0xe6, 0x33, 0x40, 0x82, 0x10, 0x35, 0x35, 0xf1, 0xc5, 0xf1,
0x40, 0x2c, 0x41, 0x26, 0x69, 0xdb, 0x77, 0xfd, 0xd0, 0xa4, 0xdf, 0x4d, 0xa7, 0x53, 0xda, 0x4d,
0x6b, 0xa4, 0x74, 0x60, 0xb3, 0x99, 0x8d, 0x3b, 0x32, 0x72, 0x1d, 0x82, 0x7d, 0x3c, 0x27, 0x15,
0xe0, 0x2c, 0xa9, 0x00, 0x67, 0x49, 0x05, 0x38, 0x4b, 0x2a, 0xc0, 0x99, 0xec, 0x10, 0x04, 0x5b,
0x1d, 0x82, 0x20, 0xd7, 0x21, 0xc0, 0x25, 0x9a, 0x9a, 0x9f, 0xbf, 0x74, 0x73, 0xad, 0x82, 0xd3,
0x30, 0xb4, 0x56, 0x35, 0x27, 0xe2, 0x7f, 0x93, 0x12, 0x5f, 0xc5, 0x45, 0xbe, 0x87, 0x45, 0xbe,
0xef, 0xc9, 0x56, 0x82, 0x5c, 0xe9, 0x7b, 0x58, 0xe9, 0x69, 0x2d, 0x58, 0x46, 0x73, 0x09, 0xfa,
0xf9, 0xfe, 0x8b, 0x2a, 0x0b, 0x60, 0x1d, 0xca, 0xdf, 0x20, 0x5f, 0xfe, 0x02, 0x15, 0xe7, 0xc0,
0xfc, 0x26, 0xe8, 0xae, 0x80, 0x93, 0xd7, 0xca, 0xe0, 0x55, 0x22, 0x84, 0x55, 0x22, 0x84, 0x55,
0x22, 0x84, 0x55, 0x22, 0x84, 0x55, 0x22, 0x84, 0x55, 0x22, 0x84, 0x55, 0x22, 0x84, 0x55, 0xae,
0x0c, 0x5e, 0x95, 0x96, 0xc1, 0x97, 0xa5, 0x4c, 0xbc, 0xb5, 0x0c, 0xbe, 0xdc, 0x57, 0x06, 0x0b,
0xe9, 0x7f, 0xdb, 0x92, 0x7e, 0xf6, 0x44, 0xca, 0x2d, 0xa5, 0x93, 0xbd, 0xe3, 0x9d, 0x98, 0xf5,
0x7a, 0x2a, 0x1a, 0x36, 0xcc, 0xec, 0xb3, 0x5c, 0xc3, 0x26, 0x28, 0x36, 0x6c, 0x06, 0xdb, 0xca,
0x06, 0x81, 0x97, 0x76, 0xb6, 0x1e, 0xef, 0x40, 0xd0, 0x6f, 0x36, 0x07, 0xd4, 0x0f, 0x2d, 0x6f,
0x86, 0x4e, 0x80, 0xeb, 0xe9, 0x7a, 0xcd, 0xdc, 0x88, 0x71, 0x01, 0x5d, 0xec, 0x1a, 0xd6, 0xcd,
0x77, 0xd6, 0xa1, 0x78, 0xcb, 0xfa, 0xea, 0x9f, 0xfd, 0x2f, 0x2f, 0x2f, 0x22, 0xc8, 0xbb, 0x11,
0xf7, 0x6d, 0x22, 0xfe, 0x2c, 0x64, 0xfc, 0x91, 0x0f, 0xc1, 0x05, 0x61, 0x49, 0x04, 0x29, 0x42,
0x1e, 0x93, 0x76, 0x01, 0xe1, 0x4c, 0xb1, 0x32, 0xaa, 0x5b, 0x78, 0x54, 0xb5, 0x7a, 0xd1, 0x5f,
0x00, 0xd4, 0xc2, 0xb4, 0xaa, 0x17, 0xaa, 0x76, 0xd1, 0xb7, 0xe1, 0x8b, 0x6d, 0xc2, 0xc7, 0x3f,
0x6f, 0xc6, 0x3d, 0x8c, 0x3c, 0xca, 0x43, 0x15, 0x46, 0x83, 0xbc, 0x05, 0x2d, 0x8c, 0x8b, 0xd8,
0xbc, 0x3e, 0x93, 0xbb, 0x22, 0x0b, 0xe9, 0xa8, 0xb7, 0x9e, 0x9b, 0xe6, 0xc3, 0x80, 0x82, 0xcc,
0x14, 0x5a, 0x7d, 0xa8, 0x52, 0x12, 0xcc, 0x57, 0x91, 0x63, 0x5b, 0x6e, 0xe2, 0xd9, 0x17, 0x7a,
0xa1, 0x2a, 0x8a, 0x35, 0xb1, 0x27, 0x11, 0xd7, 0xb1, 0x14, 0xf8, 0x8b, 0xa1, 0xcb, 0xca, 0x7a,
0x32, 0xb6, 0xb2, 0x70, 0x3a, 0xb6, 0xec, 0xfb, 0x59, 0xe8, 0x2f, 0xbd, 0x89, 0xf9, 0x15, 0xdd,
0xb2, 0x15, 0x1e, 0xcd, 0x42, 0x6b, 0xe2, 0x60, 0x27, 0xfe, 0x9d, 0x3e, 0x61, 0x33, 0x8d, 0x7c,
0xff, 0x2c, 0x5a, 0x0c, 0xc7, 0xfa, 0x40, 0x7c, 0x78, 0x07, 0x49, 0x3c, 0x5f, 0xf1, 0xdc, 0x2a,
0xda, 0xb6, 0x4d, 0xd7, 0x44, 0x4f, 0x80, 0xd7, 0x3f, 0x68, 0xe4, 0xbb, 0x56, 0xab, 0x95, 0x7d,
0x27, 0x40, 0xff, 0x07, 0xf5, 0xab, 0x5c, 0x11, 0x36, 0xd9, 0x55, 0x31, 0xd8, 0xfd, 0x2b, 0x2b,
0x9e, 0xa3, 0x7b, 0x52, 0xb8, 0x53, 0xd5, 0x4e, 0x74, 0x5d, 0x7d, 0x79, 0x11, 0x94, 0x4f, 0xf4,
0xf2, 0x18, 0x59, 0x82, 0x4f, 0xa8, 0x60, 0x82, 0xcd, 0x7a, 0x2a, 0xc1, 0x66, 0xe8, 0x9b, 0x13,
0x11, 0xd8, 0x1e, 0xa1, 0x28, 0x8d, 0x7c, 0xaf, 0x20, 0xcc, 0x8c, 0xfe, 0x89, 0xfe, 0x03, 0x36,
0xe6, 0x01, 0x5d, 0x0d, 0x1b, 0x2c, 0x64, 0xc1, 0x16, 0x7e, 0xb8, 0xa2, 0xd5, 0xac, 0x11, 0x33,
0xf8, 0x4a, 0x94, 0xde, 0xb8, 0x7f, 0x7e, 0x7b, 0x7b, 0x7d, 0xdb, 0x21, 0xbf, 0xf2, 0x86, 0x8a,
0x0f, 0x31, 0x19, 0x84, 0x81, 0x2b, 0xb1, 0x1e, 0x1e, 0xf4, 0xea, 0xe3, 0xbe, 0xfa, 0x15, 0xd2,
0x72, 0xb5, 0x03, 0xf8, 0x74, 0xd1, 0xa8, 0x09, 0x00, 0x42, 0x06, 0x71, 0x1e, 0x14, 0xe7, 0x26,
0xe7, 0xdd, 0x66, 0x8e, 0xab, 0x28, 0x80, 0xb6, 0xfa, 0xf0, 0x17, 0x51, 0xfc, 0xa8, 0xf5, 0x36,
0xcc, 0xa2, 0xde, 0xe8, 0xce, 0xcd, 0x79, 0xbf, 0x3d, 0xc8, 0xa0, 0xe6, 0x6a, 0x67, 0xde, 0xb5,
0x4c, 0x99, 0xed, 0x8f, 0x79, 0x46, 0xb7, 0x59, 0x76, 0x6b, 0x43, 0x33, 0x5f, 0x71, 0x65, 0xdd,
0x8d, 0x79, 0xcf, 0xa8, 0xe9, 0x8d, 0xc3, 0xc3, 0x83, 0x31, 0xfc, 0x1b, 0x0e, 0x00, 0xcd, 0xf9,
0xe8, 0x86, 0xb4, 0x7f, 0xc3, 0xae, 0x24, 0x79, 0x74, 0xe2, 0x39, 0x31, 0x4e, 0xc9, 0xaf, 0xa3,
0x21, 0x89, 0x96, 0x41, 0xe0, 0xae, 0x68, 0x47, 0xb1, 0xaa, 0xe6, 0x78, 0x40, 0x8d, 0xc6, 0x6f,
0x84, 0x76, 0x86, 0x03, 0xfa, 0x69, 0xd4, 0x38, 0x31, 0xda, 0x44, 0x7c, 0xa7, 0x30, 0x90, 0x6a,
0x00, 0x31, 0xc7, 0xff, 0xd1, 0x53, 0x39, 0x0a, 0xfb, 0x6d, 0x1e, 0x64, 0x10, 0x90, 0x94, 0xc4,
0x3e, 0x9f, 0x36, 0x15, 0xc5, 0xdb, 0x68, 0xf7, 0x64, 0x0d, 0x31, 0x5b, 0xed, 0xdc, 0xa4, 0x0a,
0x6f, 0x66, 0xf9, 0x51, 0x4c, 0xd8, 0x74, 0x0a, 0x68, 0x22, 0x8d, 0xfc, 0x27, 0xed, 0x9e, 0x57,
0xcd, 0x91, 0x39, 0x2a, 0x48, 0x62, 0xa4, 0x76, 0x46, 0xda, 0x39, 0x27, 0xec, 0x44, 0x84, 0x79,
0xfe, 0x72, 0x36, 0x57, 0x7b, 0xe3, 0xb0, 0x9f, 0xb5, 0x8c, 0x0a, 0xcb, 0x6b, 0x15, 0x3a, 0x49,
0xd9, 0xf3, 0x21, 0xda, 0xdb, 0xb9, 0x78, 0xf9, 0x4d, 0xe8, 0x44, 0x51, 0x5d, 0x4f, 0xa4, 0x24,
0x2f, 0xee, 0x64, 0xed, 0x4a, 0x13, 0xcd, 0xcc, 0x6d, 0x7b, 0x59, 0x51, 0x7c, 0xee, 0x4d, 0x64,
0x03, 0x90, 0xf5, 0x8c, 0xa4, 0xa9, 0xa7, 0x77, 0x1f, 0x5e, 0xf3, 0x1f, 0x23, 0x50, 0x2c, 0x76,
0x04, 0xd1, 0x23, 0xf3, 0x21, 0xd5, 0xd7, 0xfb, 0x10, 0x9b, 0x43, 0xba, 0xa2, 0x68, 0x7f, 0xdd,
0x57, 0x6d, 0x0d, 0x94, 0x9c, 0x7a, 0xbc, 0x24, 0xf2, 0x44, 0x49, 0x04, 0x95, 0xb9, 0xaa, 0x39,
0xd1, 0x2f, 0xd6, 0x2f, 0xca, 0x83, 0x3a, 0xd0, 0x3b, 0x0f, 0xd9, 0x54, 0xa1, 0x90, 0xc5, 0x45,
0x4d, 0xb7, 0xf8, 0xc4, 0xfe, 0xc6, 0x06, 0xb9, 0xb3, 0x64, 0x9b, 0x07, 0xd2, 0xbb, 0xd1, 0x1d,
0x24, 0x77, 0x8e, 0x19, 0xa7, 0x89, 0xdc, 0x54, 0x39, 0x50, 0xa0, 0x02, 0x81, 0x68, 0xe5, 0xf4,
0x31, 0xad, 0x1a, 0xbe, 0xbc, 0x1c, 0x89, 0xef, 0xa0, 0xcc, 0x8e, 0x9a, 0x74, 0xb4, 0x85, 0xc3,
0x83, 0xb9, 0xf2, 0xc8, 0x89, 0x00, 0x49, 0x8d, 0xfe, 0xb5, 0x37, 0x71, 0x1e, 0x08, 0xdf, 0x4a,
0x32, 0x39, 0xfe, 0xfe, 0xef, 0x5e, 0x6f, 0x0e, 0xc5, 0x2f, 0xae, 0x9b, 0xdc, 0x71, 0xee, 0x34,
0x8e, 0xf5, 0xe0, 0x09, 0xdf, 0x7c, 0xff, 0xec, 0x54, 0xa1, 0x1a, 0x03, 0x10, 0xd1, 0x24, 0x20,
0x62, 0x2f, 0xf9, 0xf2, 0x0e, 0x5e, 0xac, 0x29, 0x81, 0x42, 0x6e, 0x8e, 0x9e, 0xc1, 0xa4, 0xbf,
0x5e, 0x28, 0x71, 0x08, 0x12, 0xe1, 0xe8, 0xfc, 0x80, 0xcf, 0x56, 0x96, 0x99, 0x8d, 0x06, 0x25,
0x62, 0x34, 0x9b, 0xf4, 0xb9, 0x15, 0x3c, 0xf5, 0xea, 0x02, 0x64, 0x1b, 0xb8, 0xa9, 0xd3, 0xfe,
0xe8, 0x6f, 0xc7, 0x27, 0x46, 0x83, 0xdc, 0x7e, 0x1c, 0x7e, 0xda, 0x03, 0x68, 0xd0, 0xfe, 0xdd,
0x95, 0x71, 0x62, 0xb4, 0x76, 0xc3, 0x34, 0x5a, 0x14, 0x0a, 0x45, 0xfd, 0xfe, 0xe7, 0xff, 0xd8,
0x0d, 0xd3, 0x06, 0x82, 0xc8, 0x94, 0x6e, 0xec, 0x81, 0x01, 0x5a, 0xa7, 0x37, 0xa7, 0x86, 0xde,
0xd8, 0x03, 0xd3, 0xa0, 0xfd, 0xcb, 0x9b, 0xf7, 0x27, 0x27, 0xfa, 0xf1, 0x1e, 0xa0, 0x26, 0xed,
0xdf, 0xbc, 0x3b, 0x31, 0x9a, 0xbb, 0x41, 0x5a, 0xc0, 0xcf, 0xb5, 0x57, 0xbf, 0x9e, 0x4e, 0xf7,
0xc0, 0x00, 0x3f, 0x37, 0x9f, 0xae, 0xc8, 0xa7, 0xb9, 0x13, 0xb3, 0x3d, 0x60, 0x0d, 0x01, 0x76,
0x76, 0x76, 0xb7, 0x07, 0xa8, 0x29, 0x80, 0x40, 0xda, 0x7b, 0x80, 0x5a, 0x29, 0xd0, 0x9e, 0x25,
0x69, 0xb5, 0x53, 0xa8, 0x6a, 0x91, 0xe6, 0xef, 0x4f, 0x4d, 0xfb, 0xe0, 0xe8, 0x68, 0x03, 0xfc,
0x38, 0x03, 0x7f, 0x9f, 0x83, 0x3f, 0x3a, 0x02, 0x70, 0xb6, 0x85, 0xfd, 0x04, 0x04, 0xf3, 0xfe,
0xfd, 0x0d, 0x82, 0x13, 0xc5, 0x63, 0xf1, 0xa3, 0x1f, 0xde, 0xab, 0xaf, 0xd1, 0x38, 0x01, 0x49,
0x9d, 0x1b, 0xb5, 0xa6, 0x51, 0x3e, 0x2c, 0x21, 0x55, 0x3e, 0x16, 0xc4, 0x77, 0x1a, 0xc6, 0xbf,
0xb0, 0x78, 0xff, 0xe0, 0x5e, 0x5d, 0x68, 0x77, 0x1f, 0x1d, 0x28, 0x7c, 0x45, 0xfb, 0x72, 0x26,
0x26, 0xb5, 0x7d, 0x61, 0x24, 0xd2, 0xb2, 0xa4, 0x4b, 0xec, 0xc8, 0x00, 0xdd, 0x3f, 0xc3, 0x08,
0x4c, 0xae, 0xc3, 0x09, 0x0b, 0xb7, 0xec, 0xeb, 0xec, 0x9a, 0x0f, 0xdd, 0x16, 0x31, 0xc8, 0xe0,
0xe3, 0xed, 0x9e, 0x85, 0x82, 0xe9, 0xee, 0x5d, 0x48, 0x98, 0xd2, 0xf0, 0xf6, 0xe3, 0x1e, 0xab,
0x82, 0xf1, 0xc3, 0x3d, 0xef, 0x41, 0x0f, 0x86, 0x1f, 0x6f, 0xf7, 0x28, 0x38, 0xf0, 0x37, 0x2c,
0xbc, 0x4f, 0x85, 0x53, 0x07, 0xb9, 0xe4, 0xc5, 0x03, 0x05, 0x3f, 0x4e, 0xf2, 0x71, 0x4b, 0x40,
0x3c, 0x3c, 0xf4, 0x47, 0x8f, 0x56, 0xd0, 0x21, 0x45, 0xb1, 0x7c, 0x92, 0x62, 0xd9, 0x16, 0xca,
0x2f, 0x30, 0x26, 0xa5, 0xba, 0x2d, 0x93, 0x4f, 0xe4, 0x90, 0x0c, 0x77, 0xbd, 0x6f, 0x88, 0xf7,
0x1f, 0x77, 0xbd, 0x6f, 0x8a, 0xf7, 0xd9, 0xac, 0x4a, 0xe7, 0x84, 0x7f, 0xa2, 0xc0, 0xf2, 0xf8,
0xdc, 0x82, 0x68, 0x22, 0x38, 0x15, 0x5d, 0x02, 0x18, 0x00, 0x6f, 0xfa, 0xa4, 0x27, 0x36, 0x2d,
0xf1, 0x40, 0x86, 0x49, 0xbd, 0xe5, 0x62, 0xcc, 0x42, 0x9a, 0x78, 0xd4, 0x91, 0x50, 0x16, 0x1c,
0xed, 0x46, 0xe2, 0xb3, 0x74, 0xd2, 0x2e, 0x11, 0xc9, 0x3c, 0x25, 0x58, 0x94, 0xc2, 0x6c, 0x31,
0xb9, 0x42, 0xd5, 0x7e, 0x67, 0xd0, 0x84, 0xc7, 0xef, 0x9f, 0x93, 0x28, 0xea, 0xa8, 0xdc, 0x2f,
0x73, 0x4a, 0x26, 0xcd, 0x97, 0x01, 0x88, 0xf4, 0x8b, 0x89, 0x5e, 0xba, 0x8b, 0xad, 0xfc, 0x2e,
0x25, 0x49, 0x57, 0x90, 0xd4, 0xfb, 0x87, 0xde, 0x38, 0x0a, 0xba, 0xdb, 0xcb, 0x63, 0xef, 0xd4,
0xdf, 0x4b, 0x1e, 0x91, 0x3a, 0x7b, 0x27, 0x75, 0x56, 0x9c, 0x88, 0x9c, 0x81, 0x21, 0x67, 0xc0,
0xf3, 0xbd, 0x9b, 0xe1, 0x9a, 0x66, 0x2b, 0x95, 0xb1, 0x94, 0x4e, 0x01, 0x79, 0xa5, 0xc0, 0xa1,
0x10, 0xb6, 0xb4, 0xb1, 0xfa, 0x96, 0xc4, 0x75, 0x29, 0x71, 0xde, 0xd2, 0x7d, 0x8b, 0xc0, 0x75,
0xc1, 0x5b, 0x41, 0xa6, 0xcd, 0x66, 0x8e, 0x03, 0xc9, 0x75, 0xb4, 0x11, 0xe6, 0x54, 0x5a, 0x2f,
0x52, 0x36, 0x24, 0x65, 0x49, 0x74, 0x1f, 0x4d, 0x63, 0x07, 0xcd, 0xb7, 0x92, 0x6a, 0xbc, 0x9d,
0x54, 0xe3, 0x5f, 0x24, 0xd5, 0x7c, 0x3b, 0xa9, 0xe6, 0xbf, 0x48, 0xaa, 0xf5, 0x76, 0x52, 0xad,
0x7f, 0x8a, 0xd4, 0x86, 0x4e, 0x87, 0x3b, 0x75, 0x1a, 0xb5, 0x2b, 0x63, 0x0c, 0xd2, 0x6b, 0xc1,
0x58, 0xd2, 0x32, 0x94, 0x0c, 0x6e, 0xe8, 0x3c, 0x6f, 0x8f, 0x8f, 0xfd, 0xa7, 0x84, 0xc9, 0xb3,
0xdf, 0x92, 0xe9, 0x94, 0x7b, 0xbc, 0x68, 0x2f, 0xf9, 0xd1, 0xbd, 0x13, 0x90, 0xa9, 0x13, 0x42,
0x12, 0x8f, 0xa9, 0xe2, 0x5e, 0xfb, 0x1a, 0x5d, 0x96, 0x88, 0x03, 0xca, 0x17, 0xba, 0x61, 0x3d,
0x3b, 0x59, 0x99, 0xee, 0x65, 0x05, 0x72, 0x10, 0x72, 0xcb, 0xa6, 0x21, 0x8b, 0x32, 0x33, 0xe7,
0x72, 0x99, 0x0a, 0xb2, 0xe5, 0xd3, 0xbf, 0xfd, 0xb0, 0x7f, 0xfa, 0xd6, 0x5e, 0x9a, 0xa7, 0xcb,
0xd8, 0x3f, 0x82, 0xa2, 0xdd, 0x5e, 0xba, 0x56, 0xcc, 0xc8, 0x23, 0x66, 0x38, 0x78, 0xa2, 0x12,
0x4a, 0x0e, 0x97, 0x4c, 0x43, 0x7f, 0x81, 0xb1, 0xb8, 0x23, 0xd6, 0x29, 0x1f, 0x1a, 0x4e, 0x3f,
0x95, 0x85, 0x06, 0x7d, 0x5f, 0x60, 0x30, 0xfa, 0xc3, 0xd0, 0x99, 0xcd, 0x63, 0x16, 0xee, 0x00,
0x68, 0xf4, 0x4f, 0x6d, 0x1b, 0xcf, 0x96, 0xed, 0xc2, 0xd0, 0xec, 0xbf, 0x5f, 0x5a, 0xee, 0x76,
0x5c, 0x10, 0xce, 0x34, 0x15, 0x00, 0xff, 0xfb, 0xb5, 0x6b, 0x41, 0xe1, 0x14, 0xb1, 0x30, 0x3e,
0x9d, 0x7c, 0xb3, 0x6c, 0x48, 0xf5, 0xb1, 0x82, 0x52, 0xe8, 0x98, 0x41, 0xd1, 0xc6, 0x98, 0x37,
0xa1, 0x9a, 0xaf, 0xae, 0x65, 0x2e, 0xaf, 0xc4, 0x9f, 0x8f, 0x8e, 0x9c, 0x2f, 0xb5, 0x10, 0x8a,
0xe7, 0x07, 0xa6, 0xa8, 0x1a, 0x7c, 0x93, 0xdd, 0x9a, 0xea, 0x56, 0x8d, 0xe5, 0xf4, 0xb0, 0x0e,
0x38, 0x32, 0xca, 0x6b, 0xff, 0xa3, 0x6d, 0xf8, 0xfe, 0x76, 0x9b, 0xc0, 0x7b, 0x79, 0xe1, 0xdb,
0xbb, 0x85, 0x52, 0xe5, 0xec, 0xfa, 0x4a, 0x01, 0x19, 0x42, 0xad, 0xc2, 0x77, 0x33, 0x45, 0x05,
0xe1, 0xec, 0x29, 0x57, 0x6c, 0x7f, 0xf1, 0x07, 0x3c, 0x84, 0x72, 0x5f, 0x2d, 0x14, 0x2c, 0x50,
0xaa, 0x60, 0x67, 0x4c, 0xd6, 0x26, 0x85, 0x0a, 0x24, 0x1b, 0xf2, 0x96, 0x3a, 0x84, 0x88, 0x78,
0xba, 0xcf, 0x26, 0xfe, 0x9e, 0x0b, 0xa4, 0x4f, 0x6f, 0x0a, 0xa4, 0xc7, 0xed, 0x76, 0xb3, 0x9d,
0x8b, 0xa4, 0x6c, 0xbd, 0x61, 0x3f, 0xb9, 0x48, 0x69, 0x52, 0x9a, 0x86, 0xca, 0x37, 0x04, 0xc0,
0xbf, 0x9f, 0xe5, 0x98, 0xb1, 0xf7, 0x06, 0xc3, 0x4d, 0x2e, 0xbc, 0x75, 0x81, 0xea, 0xa6, 0x45,
0x4b, 0xbb, 0xfa, 0x53, 0xb9, 0x25, 0xe7, 0x42, 0x26, 0xa5, 0x92, 0xbf, 0xff, 0x7f, 0x79, 0x66,
0x62, 0x6f, 0xdc, 0x45, 0x48, 0xcb, 0x93, 0x9b, 0x83, 0x42, 0xd3, 0x1c, 0x16, 0xf1, 0x1e, 0xc6,
0x5e, 0x53, 0xb4, 0xa4, 0xb5, 0x3d, 0xf9, 0xb4, 0xea, 0x24, 0x0d, 0xd3, 0x58, 0x1b, 0xc7, 0x1e,
0x57, 0x17, 0xe7, 0x64, 0xc4, 0xe2, 0xd8, 0xf1, 0x66, 0x51, 0xaf, 0x2e, 0x9e, 0xf5, 0x22, 0x3b,
0x74, 0x82, 0xb8, 0x5f, 0x79, 0xb4, 0x42, 0xe2, 0xfa, 0xb6, 0x13, 0x68, 0xb1, 0xb3, 0x60, 0xfe,
0x32, 0xd6, 0x26, 0xe6, 0xc4, 0xb7, 0x97, 0x0b, 0xe0, 0x4b, 0x73, 0xad, 0x20, 0x64, 0x8f, 0x66,
0xbb, 0x8d, 0xd4, 0x87, 0x82, 0x89, 0x6b, 0xb3, 0xc5, 0x9a, 0xf8, 0xe1, 0x76, 0x68, 0xb6, 0xf4,
0x77, 0xc7, 0xf8, 0xf1, 0xca, 0x34, 0x9a, 0x4d, 0xfe, 0xf0, 0x6a, 0xfc, 0x8f, 0xa5, 0x1f, 0x9b,
0xba, 0x66, 0x2f, 0xa3, 0xd8, 0x5f, 0x8c, 0x62, 0x2b, 0x8c, 0x23, 0xf3, 0xc0, 0xd0, 0x22, 0xfe,
0xe9, 0xdc, 0x09, 0xe3, 0x95, 0xf9, 0xe9, 0x33, 0x82, 0x9e, 0xdd, 0xdc, 0x3c, 0xb2, 0x30, 0x74,
0x26, 0x2c, 0x32, 0xdb, 0x1a, 0xf0, 0x00, 0x60, 0xdd, 0xe9, 0xd2, 0xb3, 0x63, 0xc7, 0xf7, 0xc8,
0xcf, 0x8a, 0xfa, 0xfc, 0xe4, 0x78, 0x13, 0xff, 0xa9, 0xe6, 0x07, 0xcc, 0x53, 0xe8, 0x3c, 0x8e,
0x83, 0xa8, 0x53, 0xaf, 0x3f, 0x78, 0x7e, 0xed, 0xc9, 0x65, 0x93, 0xda, 0x8c, 0xd5, 0xa7, 0xcc,
0x8a, 0x97, 0x21, 0x8b, 0xea, 0x91, 0x9c, 0x5e, 0xfd, 0x3b, 0x78, 0x73, 0x94, 0x7c, 0xa3, 0xea,
0x3a, 0xc5, 0x37, 0xdc, 0xc4, 0x97, 0x8e, 0xa1, 0x1a, 0xfd, 0x23, 0x62, 0xee, 0x34, 0x0f, 0x3d,
0xbb, 0x9c, 0x28, 0x4c, 0x7d, 0x0e, 0x19, 0xa0, 0xf7, 0x08, 0xd2, 0x8a, 0x2f, 0x5c, 0x86, 0x32,
0x19, 0xae, 0xf8, 0xab, 0x0c, 0xd4, 0x9f, 0x4e, 0x11, 0x34, 0x0f, 0x13, 0x0d, 0x57, 0xbf, 0xc0,
0x52, 0xc0, 0xe3, 0x4f, 0xfa, 0xe7, 0xda, 0xa3, 0xe5, 0x2e, 0x99, 0x79, 0x64, 0x64, 0x43, 0x5c,
0xdf, 0x9a, 0xfc, 0x75, 0xa4, 0x30, 0xcd, 0x33, 0x0f, 0x74, 0xf5, 0xd9, 0x65, 0x31, 0x89, 0xcd,
0x49, 0xcd, 0x0e, 0x61, 0x3a, 0x4c, 0xe2, 0x50, 0xa8, 0x58, 0x21, 0xaa, 0x76, 0xe3, 0x1a, 0xb0,
0x7a, 0x1a, 0xc7, 0xa1, 0x33, 0x5e, 0xc6, 0x0c, 0x5e, 0x84, 0x36, 0xd5, 0x98, 0xaa, 0x6d, 0x3e,
0x8f, 0x57, 0x01, 0x83, 0xc9, 0xc4, 0xec, 0x5b, 0x5c, 0xff, 0x6a, 0x3d, 0x5a, 0x09, 0x82, 0x2d,
0x40, 0x2b, 0x5a, 0x79, 0x80, 0xc2, 0x53, 0xb5, 0x49, 0x6d, 0xec, 0x4f, 0x56, 0x35, 0x2b, 0x00,
0x91, 0x4c, 0xce, 0xe6, 0x8e, 0x3b, 0x51, 0x62, 0x84, 0xb7, 0x26, 0x93, 0x8b, 0x47, 0xe0, 0xe2,
0xca, 0x89, 0x40, 0x41, 0x59, 0xa8, 0x50, 0xe4, 0x99, 0x6a, 0x8a, 0x6a, 0xf6, 0x9f, 0x3f, 0xb0,
0xf8, 0x37, 0x45, 0xd5, 0xec, 0x39, 0xb3, 0x1f, 0x46, 0x0e, 0x7c, 0x42, 0xec, 0xc3, 0x2b, 0x45,
0x5d, 0x97, 0x0f, 0x85, 0x45, 0xf6, 0x43, 0xe0, 0x18, 0x86, 0x82, 0xc2, 0x47, 0xbe, 0xcb, 0x6a,
0xae, 0x3f, 0x53, 0xe8, 0x05, 0x3e, 0x27, 0x52, 0x1e, 0xb0, 0x12, 0x64, 0xea, 0xb8, 0x8c, 0xcf,
0x0c, 0x34, 0x3c, 0x04, 0x09, 0x5c, 0xc9, 0xe7, 0xfe, 0x14, 0x8d, 0x68, 0xea, 0xcc, 0x96, 0xa1,
0xc5, 0x05, 0x28, 0x66, 0x46, 0xa6, 0x96, 0x83, 0x8a, 0xf0, 0xbb, 0x77, 0xe9, 0xd9, 0xfe, 0x22,
0x00, 0x39, 0x32, 0x12, 0x58, 0x33, 0x46, 0x26, 0x56, 0x6c, 0x1d, 0xc0, 0x7a, 0xe6, 0x96, 0x29,
0x9a, 0xfb, 0x4f, 0xf7, 0xbe, 0x15, 0xc5, 0x42, 0xec, 0x86, 0xfa, 0x8c, 0x9a, 0x1f, 0x9b, 0xb8,
0xd2, 0x34, 0xc6, 0x17, 0x5c, 0xd2, 0x8e, 0x07, 0x2c, 0xff, 0x7c, 0x7f, 0x7d, 0x65, 0x32, 0x98,
0x8b, 0xed, 0x5a, 0x51, 0x84, 0x4b, 0x69, 0x7a, 0x03, 0x39, 0x8d, 0x0e, 0x45, 0x4c, 0x54, 0xb3,
0x5d, 0x66, 0x85, 0xf7, 0xc2, 0x64, 0x14, 0x69, 0x3a, 0x5c, 0xd2, 0xf1, 0x0a, 0xe6, 0x67, 0x79,
0xce, 0x82, 0xb3, 0x6a, 0x52, 0xcf, 0xf7, 0x60, 0x52, 0x12, 0xc2, 0x04, 0x51, 0x25, 0x83, 0x94,
0x84, 0x37, 0xd0, 0xcc, 0x3c, 0xa9, 0xdc, 0xe7, 0x5a, 0xc8, 0x02, 0xd7, 0xb2, 0x71, 0xcd, 0x39,
0x51, 0x8a, 0x73, 0xd2, 0x1a, 0xef, 0x74, 0x3d, 0x37, 0xb3, 0xf1, 0x95, 0xb3, 0x70, 0xe2, 0x08,
0xe7, 0xa5, 0xc5, 0x9a, 0xa3, 0x3e, 0x73, 0x5b, 0x65, 0xc2, 0x56, 0x63, 0x69, 0xa9, 0x9e, 0x30,
0x53, 0x27, 0x1b, 0x16, 0x38, 0x5e, 0x74, 0xf3, 0x37, 0x45, 0xc8, 0x81, 0x99, 0x1b, 0xfa, 0x7b,
0x6f, 0xcd, 0xb8, 0x0a, 0x53, 0xc7, 0x0b, 0x96, 0x28, 0x9a, 0xa9, 0x1f, 0x2a, 0x8e, 0xa9, 0x77,
0x9d, 0x1e, 0xac, 0x1e, 0xf3, 0x66, 0xf1, 0xbc, 0xeb, 0x54, 0xab, 0x62, 0xb4, 0x67, 0xb2, 0x4f,
0xce, 0xe7, 0x1a, 0xba, 0x9f, 0x5a, 0xb4, 0x1c, 0x47, 0xa0, 0x68, 0xde, 0x4c, 0xd1, 0xb5, 0x86,
0xda, 0x75, 0xa6, 0xb0, 0x8c, 0x3a, 0x35, 0x4d, 0xef, 0xe5, 0x85, 0x5e, 0x19, 0xc9, 0x87, 0x46,
0xf2, 0xa1, 0x89, 0x1f, 0x92, 0xb5, 0x28, 0xc3, 0x22, 0x70, 0x04, 0xe8, 0x69, 0x2f, 0xc1, 0x2a,
0xca, 0xcc, 0x8c, 0x5e, 0xdd, 0xd3, 0x6a, 0x9c, 0xd9, 0x9a, 0x66, 0xe8, 0x6a, 0xdf, 0x3c, 0xd1,
0x55, 0x74, 0xaf, 0x8e, 0xb7, 0x64, 0x6b, 0xc0, 0xf0, 0x06, 0x36, 0xf0, 0x43, 0x4b, 0x7e, 0xb8,
0xbb, 0x92, 0x1f, 0x86, 0xf7, 0xf2, 0xc3, 0xe5, 0x1d, 0x67, 0xf5, 0xf0, 0x90, 0xd2, 0x03, 0xc1,
0x29, 0x27, 0x06, 0xdf, 0x8f, 0x8c, 0xc2, 0x13, 0xf5, 0x19, 0xc8, 0x4d, 0x6a, 0xcb, 0xc5, 0x1f,
0xc1, 0xe1, 0xa1, 0xf8, 0x5b, 0x8b, 0x7c, 0xe0, 0xd3, 0x33, 0xfb, 0x9e, 0x69, 0xa6, 0x53, 0xc9,
0x46, 0x20, 0xc3, 0xaa, 0x2a, 0x9d, 0x8d, 0xd0, 0xfd, 0x2f, 0x23, 0x3f, 0x0c, 0x57, 0x1a, 0x5f,
0x25, 0xf2, 0xfd, 0xf3, 0x5f, 0x47, 0x37, 0xbf, 0xd4, 0x84, 0x44, 0x9c, 0xe9, 0x4a, 0x62, 0x57,
0xd7, 0xc4, 0xb6, 0xbc, 0x1f, 0x63, 0x32, 0x66, 0x04, 0xa2, 0xc1, 0xa4, 0xf6, 0x45, 0xd5, 0x32,
0xa4, 0x26, 0xa5, 0xe2, 0xdb, 0x14, 0xbc, 0x79, 0x04, 0x56, 0x0a, 0xde, 0x15, 0x18, 0xcb, 0x00,
0xfa, 0xed, 0xc3, 0xc3, 0xec, 0x5b, 0xcf, 0x68, 0x14, 0x39, 0xa0, 0x79, 0x0e, 0x8e, 0x8f, 0x0c,
0x03, 0x89, 0x11, 0xcf, 0xcf, 0xc8, 0xd1, 0x37, 0x90, 0x43, 0xb1, 0x1d, 0x98, 0x1e, 0x48, 0x09,
0x04, 0xc9, 0x3f, 0xe4, 0x18, 0x68, 0x36, 0xf7, 0x90, 0x84, 0xb7, 0xc4, 0x0a, 0x19, 0xe1, 0x0a,
0x08, 0x5e, 0xc2, 0x5d, 0xbd, 0x4e, 0x10, 0x95, 0xf4, 0xab, 0xe9, 0x54, 0x8d, 0xee, 0xd7, 0x4c,
0x4d, 0xbf, 0x26, 0x6a, 0x6a, 0xc1, 0x22, 0x7d, 0x7d, 0x45, 0x4d, 0xad, 0x44, 0x3f, 0xac, 0x44,
0x3f, 0xac, 0x44, 0x3f, 0xac, 0x44, 0x3f, 0xac, 0x44, 0x3f, 0xac, 0x44, 0x3f, 0xac, 0x44, 0x3f,
0x2c, 0xbe, 0xf8, 0x14, 0x5f, 0x9a, 0x56, 0x81, 0x88, 0xa1, 0x0a, 0x26, 0xfc, 0x52, 0x26, 0xde,
0xaa, 0xe5, 0xfe, 0x2b, 0x5a, 0x2e, 0x74, 0xf3, 0x6b, 0xaa, 0x9b, 0x39, 0x71, 0xe5, 0x9e, 0x6f,
0xa8, 0xda, 0xad, 0xe3, 0x71, 0xff, 0xea, 0x3a, 0x36, 0x2e, 0x6e, 0xfc, 0xc4, 0x98, 0x07, 0x3a,
0x97, 0x5a, 0xe3, 0xba, 0x8e, 0x5f, 0x24, 0xd3, 0xeb, 0x03, 0xae, 0x65, 0x5f, 0x0b, 0xab, 0xf0,
0x35, 0xbf, 0x0a, 0x6b, 0xf8, 0x4f, 0x10, 0x38, 0xd0, 0x33, 0x77, 0x13, 0x87, 0xab, 0xd1, 0x72,
0x0c, 0x8e, 0x4a, 0x49, 0x0c, 0x64, 0x34, 0xad, 0xa1, 0x9f, 0xce, 0xe1, 0xa9, 0x61, 0xb6, 0x01,
0x53, 0x3e, 0x67, 0x53, 0x6b, 0xe9, 0xc6, 0x88, 0x2d, 0xf1, 0x52, 0x09, 0xcb, 0x20, 0xb4, 0xd8,
0x0f, 0x6e, 0x43, 0x1f, 0xfc, 0xbc, 0x25, 0x9c, 0xa7, 0xd4, 0x34, 0x9e, 0x78, 0xf4, 0x0d, 0x70,
0x8d, 0xd2, 0x27, 0xd1, 0x7b, 0xdf, 0x27, 0x0b, 0xcb, 0x5b, 0x11, 0x48, 0x80, 0x22, 0x02, 0xba,
0x41, 0x16, 0x8c, 0xc4, 0x3e, 0x99, 0x5b, 0xde, 0xc4, 0x65, 0x07, 0xb4, 0x8b, 0x1e, 0xb2, 0x67,
0xb0, 0xd6, 0xe1, 0xa1, 0xe2, 0x55, 0x4d, 0xfa, 0xbb, 0xf7, 0x7b, 0x78, 0x06, 0x01, 0x0a, 0x32,
0x92, 0x10, 0x34, 0x1c, 0x23, 0x0f, 0x68, 0xfc, 0xc5, 0xe8, 0xb6, 0xd9, 0x40, 0xd5, 0x13, 0xd2,
0xf2, 0xd4, 0x35, 0x67, 0x9d, 0x47, 0xbf, 0xdf, 0x2c, 0xd7, 0x99, 0x38, 0xf1, 0x4a, 0x51, 0xd1,
0xd2, 0xe1, 0x69, 0x24, 0xa6, 0x98, 0xf3, 0xce, 0xcc, 0xe3, 0xa1, 0x51, 0x7a, 0x59, 0x1e, 0x6d,
0x30, 0x61, 0xa3, 0xaa, 0xc0, 0xc0, 0x26, 0x5d, 0x3e, 0xf0, 0xea, 0x54, 0xca, 0x81, 0x0d, 0x44,
0xd2, 0xd5, 0xd1, 0xb5, 0x04, 0x18, 0x60, 0x45, 0x54, 0x99, 0x38, 0x11, 0x84, 0x83, 0x15, 0xc0,
0x80, 0x5b, 0x76, 0x1d, 0x88, 0x2b, 0x1d, 0x19, 0x5e, 0x38, 0x68, 0x10, 0x2d, 0x1b, 0x6f, 0x80,
0x2d, 0xd0, 0xeb, 0xeb, 0x87, 0x87, 0x69, 0xf8, 0xce, 0x31, 0x7d, 0x75, 0x9a, 0x8b, 0x0c, 0x1c,
0x1e, 0x52, 0x24, 0x31, 0x64, 0x93, 0x61, 0x41, 0xfc, 0xea, 0x14, 0x28, 0x6e, 0x51, 0x6f, 0xeb,
0x66, 0x09, 0x07, 0xbf, 0x5e, 0xe6, 0x89, 0x25, 0xe4, 0x9f, 0xa3, 0x27, 0x27, 0xb6, 0xe7, 0x4a,
0x89, 0x8c, 0x20, 0x4d, 0xd2, 0x36, 0xd9, 0x00, 0xdc, 0x5a, 0xce, 0x60, 0x72, 0x2c, 0x81, 0xa5,
0xd9, 0x56, 0xc4, 0x88, 0xde, 0x29, 0x45, 0x65, 0x68, 0x72, 0x4d, 0xba, 0x63, 0x48, 0xb8, 0x1e,
0xba, 0x1c, 0xb6, 0xa9, 0x77, 0xb6, 0x08, 0x34, 0xf5, 0x02, 0x44, 0xbb, 0x04, 0xa2, 0x9d, 0x87,
0x68, 0x97, 0x40, 0xb4, 0x0b, 0x10, 0x8d, 0x32, 0x90, 0x46, 0x0a, 0x33, 0x11, 0x7a, 0xdf, 0xd9,
0x23, 0xd0, 0x44, 0x94, 0x6b, 0x0e, 0xb3, 0x30, 0x00, 0x20, 0x4b, 0x59, 0x50, 0x9f, 0xb5, 0x52,
0xdf, 0x31, 0x82, 0xec, 0x16, 0x3d, 0xc7, 0x76, 0x72, 0x26, 0x34, 0x16, 0x12, 0x94, 0xc4, 0x3e,
0xd5, 0x8d, 0xe5, 0x01, 0x6c, 0xd7, 0x6c, 0x81, 0xd9, 0x45, 0x92, 0xa9, 0xbe, 0xe2, 0xa6, 0xce,
0x68, 0xd5, 0xcb, 0xdc, 0x94, 0xda, 0x95, 0x96, 0x1b, 0x57, 0x5f, 0x19, 0x38, 0xba, 0x2a, 0x0e,
0xd4, 0x58, 0xaf, 0xd9, 0x18, 0x64, 0x36, 0xda, 0x34, 0xcd, 0x72, 0x82, 0x7a, 0x61, 0xdc, 0x80,
0xf5, 0x1b, 0xef, 0x06, 0x0d, 0xfd, 0x2f, 0x71, 0xc7, 0x68, 0xc3, 0xff, 0x10, 0x41, 0xdf, 0x04,
0x0c, 0xe2, 0xc5, 0x09, 0x3c, 0x3a, 0x86, 0x7f, 0xfc, 0x4b, 0x0b, 0x3e, 0x34, 0xf9, 0x97, 0xa6,
0x01, 0xce, 0xb2, 0xd7, 0x3a, 0x19, 0xb4, 0x3b, 0xad, 0x16, 0xe8, 0xec, 0xcb, 0x4b, 0xab, 0x8d,
0xaa, 0x2b, 0x21, 0x32, 0x71, 0x80, 0x70, 0x58, 0x9a, 0x3e, 0x62, 0x22, 0xa9, 0x41, 0xb5, 0xd3,
0x15, 0x8a, 0xb6, 0x08, 0x9e, 0xac, 0xd0, 0x03, 0xbf, 0xb1, 0xb5, 0x6c, 0x7c, 0xd1, 0xaf, 0x13,
0x9b, 0xfb, 0xa9, 0xa1, 0xeb, 0x5b, 0x46, 0x01, 0x6a, 0x60, 0x9a, 0x05, 0x3d, 0x96, 0x9e, 0xc0,
0x34, 0x1a, 0x9d, 0x2d, 0x9b, 0x55, 0xe4, 0xbb, 0xa2, 0xe2, 0x77, 0x45, 0x98, 0xdb, 0x95, 0xcb,
0x81, 0xce, 0x31, 0xbb, 0x98, 0xcc, 0x59, 0xf9, 0x64, 0x8e, 0x87, 0x2e, 0x1e, 0xcf, 0x76, 0xa4,
0x73, 0x49, 0x08, 0xb3, 0x4a, 0x13, 0x35, 0xcd, 0xcd, 0x56, 0xd8, 0x2a, 0x24, 0x37, 0x42, 0x3e,
0x81, 0x3e, 0xc1, 0x08, 0x96, 0x53, 0x58, 0x17, 0x03, 0xd8, 0xe1, 0xa1, 0xdb, 0x7b, 0x77, 0x3c,
0xa0, 0x97, 0xb7, 0x04, 0xd4, 0x13, 0xaa, 0xb9, 0xa8, 0x43, 0x3b, 0x6e, 0xbf, 0xf5, 0x6e, 0x40,
0xcf, 0x21, 0x3e, 0x90, 0x0f, 0xb7, 0x97, 0x37, 0xe2, 0x89, 0x31, 0xa0, 0xf8, 0x05, 0xdf, 0x53,
0xf1, 0x54, 0x3a, 0x3e, 0x63, 0x1b, 0x71, 0xeb, 0x1d, 0xe2, 0x3d, 0x6e, 0x0d, 0xe8, 0x99, 0xfb,
0x90, 0xe0, 0xa0, 0x94, 0x4b, 0x28, 0xda, 0xa1, 0x48, 0x86, 0x0c, 0xb0, 0x5c, 0x3e, 0xa0, 0xaf,
0x52, 0xf5, 0x5d, 0xcd, 0x57, 0xb5, 0xa9, 0x09, 0xe9, 0x45, 0xaf, 0xdd, 0x9d, 0x62, 0x36, 0xa1,
0xec, 0xc2, 0x40, 0xab, 0x53, 0x81, 0x42, 0xc5, 0x25, 0xca, 0x66, 0x77, 0x78, 0x38, 0xed, 0xb5,
0x5e, 0x5e, 0x04, 0x5b, 0x86, 0x69, 0x4e, 0xf9, 0x67, 0x03, 0x5f, 0xb6, 0x01, 0x64, 0x5a, 0x6d,
0xe9, 0x3d, 0x77, 0xa0, 0x44, 0x3b, 0xac, 0x5d, 0x8b, 0xa0, 0x12, 0xf8, 0xc7, 0xd2, 0x09, 0xb9,
0x2b, 0x54, 0x3b, 0xdb, 0x80, 0x42, 0x87, 0xf2, 0x60, 0x50, 0x72, 0xa7, 0xa1, 0x55, 0x55, 0xd7,
0x90, 0x0c, 0x08, 0xcf, 0x1a, 0x4e, 0xb9, 0xac, 0x12, 0x77, 0x58, 0xf2, 0xec, 0xe5, 0xa5, 0x09,
0x2c, 0xba, 0x9a, 0xcb, 0xad, 0xc2, 0x05, 0xab, 0x80, 0xb1, 0x3b, 0x6d, 0x3d, 0x97, 0x92, 0x98,
0x90, 0xe4, 0x68, 0x79, 0x84, 0xbe, 0x67, 0x43, 0x52, 0xf1, 0x60, 0x72, 0x7c, 0x83, 0x5c, 0xbd,
0x23, 0xf3, 0x03, 0x63, 0xdd, 0xc9, 0x3d, 0x5c, 0x6b, 0xde, 0x0b, 0x38, 0x5d, 0x00, 0x95, 0x1c,
0x70, 0x21, 0x71, 0x09, 0xb6, 0x40, 0x82, 0xad, 0xe6, 0x01, 0x30, 0xc5, 0xd1, 0xdb, 0x3e, 0x47,
0x5f, 0x94, 0x41, 0x4e, 0xdc, 0x38, 0xd0, 0x94, 0x23, 0x4f, 0x06, 0x42, 0x38, 0x9d, 0x54, 0x98,
0x1c, 0xc5, 0xc4, 0x99, 0x01, 0x8e, 0x2a, 0x7d, 0xda, 0xb2, 0xd5, 0x3c, 0x07, 0x5b, 0x56, 0xda,
0xd4, 0x81, 0x09, 0xf0, 0x45, 0x06, 0xff, 0x53, 0x2e, 0x95, 0x8f, 0x37, 0x45, 0xa9, 0xe8, 0x6a,
0x91, 0xa4, 0x4d, 0x4b, 0x58, 0x7f, 0x1b, 0xb7, 0x21, 0xdd, 0x33, 0xeb, 0xfd, 0x43, 0x23, 0xfa,
0xbf, 0x23, 0xb0, 0x69, 0x19, 0x1e, 0xe3, 0x18, 0x87, 0x36, 0x1b, 0x1c, 0x4f, 0x5b, 0x4f, 0x4c,
0xaf, 0x2c, 0x4b, 0x49, 0xf0, 0x58, 0x5b, 0x78, 0xa0, 0x38, 0x68, 0xa1, 0x78, 0xcb, 0xc7, 0x81,
0xb7, 0xdb, 0xf6, 0x1e, 0x19, 0xcb, 0x97, 0xde, 0x23, 0xa4, 0x67, 0x6c, 0x42, 0xa0, 0xb4, 0xc6,
0x8a, 0xb5, 0x43, 0xef, 0x20, 0x97, 0x04, 0x6f, 0x34, 0x21, 0x4a, 0xe8, 0xc7, 0x16, 0xbe, 0x32,
0x4e, 0xf4, 0xff, 0xfe, 0x2f, 0x35, 0xcd, 0x96, 0x26, 0xfb, 0xf1, 0x4d, 0xd8, 0x37, 0x74, 0x19,
0xbc, 0x85, 0xd5, 0xa1, 0x6b, 0x74, 0x1c, 0x21, 0x98, 0xfd, 0x3f, 0x96, 0x0c, 0x42, 0x25, 0xf7,
0xa4, 0x7e, 0x78, 0xea, 0xba, 0x0a, 0xad, 0x3d, 0xc1, 0x8a, 0x6a, 0x4b, 0x33, 0x4c, 0x7c, 0x69,
0xe6, 0x5e, 0x97, 0xdc, 0xaf, 0x86, 0xe8, 0x0c, 0x37, 0xe6, 0xba, 0x39, 0x49, 0xee, 0x98, 0x82,
0xd7, 0xca, 0x70, 0x6d, 0x61, 0xea, 0xda, 0x23, 0xb6, 0xd7, 0x00, 0x7d, 0x46, 0x26, 0xd8, 0x2a,
0xc9, 0x67, 0x66, 0xb0, 0xab, 0x24, 0xf7, 0x4b, 0x5f, 0x25, 0x45, 0xd0, 0x19, 0x54, 0x10, 0x33,
0x59, 0xc5, 0x60, 0x41, 0x34, 0x4b, 0x0a, 0xa2, 0x99, 0xfa, 0x8a, 0x0b, 0x80, 0x40, 0x6b, 0xf2,
0x66, 0x43, 0xb7, 0x64, 0x70, 0x52, 0x4d, 0xcd, 0x92, 0x6a, 0x4a, 0xd0, 0x50, 0x5c, 0xf3, 0x4f,
0x15, 0x3d, 0xaa, 0x28, 0x79, 0x9e, 0xf9, 0x0c, 0x90, 0x20, 0x44, 0x4d, 0x4d, 0x7c, 0x71, 0x3c,
0x10, 0x4b, 0x90, 0x49, 0xda, 0xf6, 0x5d, 0x3f, 0x34, 0xe9, 0x77, 0xd3, 0xe9, 0x94, 0x76, 0xd3,
0x1a, 0x29, 0x1d, 0xd8, 0x6c, 0x66, 0xe3, 0x8e, 0x8c, 0x5c, 0x87, 0x60, 0x1f, 0xcf, 0x49, 0x05,
0x38, 0x4b, 0x2a, 0xc0, 0x59, 0x52, 0x01, 0xce, 0x92, 0x0a, 0x70, 0x26, 0x3b, 0x04, 0xc1, 0x56,
0x87, 0x20, 0xc8, 0x75, 0x08, 0x70, 0x89, 0xa6, 0xe6, 0xa7, 0xcf, 0xdd, 0x5c, 0xab, 0xe0, 0x34,
0x0c, 0xad, 0x55, 0xcd, 0x89, 0xf8, 0xdf, 0xa4, 0xc4, 0x57, 0x71, 0x91, 0x1f, 0x60, 0x91, 0x1f,
0x7a, 0xb2, 0x95, 0x20, 0x57, 0xfa, 0x01, 0x56, 0x7a, 0x5a, 0x0b, 0x96, 0xd1, 0x5c, 0x82, 0x7e,
0x7a, 0xf8, 0xac, 0xca, 0x02, 0x58, 0x87, 0xf2, 0x37, 0xc8, 0x97, 0xbf, 0x40, 0xc5, 0x39, 0x30,
0xbf, 0x0a, 0xba, 0x2b, 0xe0, 0xe4, 0xb5, 0x32, 0x78, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95,
0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x08, 0x61, 0x95, 0x2b,
0x83, 0x57, 0xa5, 0x65, 0xf0, 0x55, 0x29, 0x13, 0x6f, 0x2d, 0x83, 0xaf, 0xf6, 0x95, 0xc1, 0x42,
0xfa, 0x5f, 0xb7, 0xa4, 0x9f, 0x3d, 0x91, 0x72, 0x4b, 0xe9, 0x64, 0xef, 0x78, 0x27, 0x66, 0xbd,
0x9e, 0x8a, 0x86, 0x0d, 0x33, 0xfb, 0x2c, 0xd7, 0xb0, 0x09, 0x8a, 0x0d, 0x9b, 0xc1, 0xb6, 0xb2,
0x41, 0xe0, 0xa5, 0x9d, 0xad, 0xc7, 0x3b, 0x10, 0xf4, 0x9b, 0xcd, 0x01, 0xf5, 0x43, 0xcb, 0x9b,
0xa1, 0x13, 0xe0, 0x7a, 0xba, 0x5e, 0x33, 0x37, 0x62, 0x5c, 0x40, 0x97, 0xbb, 0x86, 0x75, 0xf3,
0x9d, 0x75, 0x28, 0xde, 0xb2, 0xbe, 0xfa, 0x27, 0xff, 0xf3, 0xcb, 0x8b, 0x08, 0xf2, 0x6e, 0xc4,
0x7d, 0x9b, 0x88, 0x3f, 0x0b, 0x19, 0x7f, 0xe4, 0x43, 0x70, 0x41, 0x58, 0x12, 0x41, 0x8a, 0x90,
0xc7, 0xa4, 0x5d, 0x42, 0x38, 0x53, 0xac, 0x8c, 0xea, 0x16, 0x1e, 0x55, 0xad, 0x5e, 0xf6, 0x17,
0x00, 0xb5, 0x30, 0xad, 0xea, 0xa5, 0xaa, 0x5d, 0xf6, 0x6d, 0xf8, 0x62, 0x9b, 0xf0, 0xf1, 0xcf,
0x9b, 0x71, 0x0f, 0x23, 0x8f, 0xf2, 0x58, 0x85, 0xd1, 0x20, 0x6f, 0x41, 0x0b, 0xe3, 0x22, 0x36,
0xaf, 0xcf, 0xe4, 0xae, 0xc8, 0x42, 0x3a, 0xea, 0xad, 0xe7, 0xa6, 0xf9, 0x38, 0xa0, 0x20, 0x33,
0x85, 0x56, 0x1f, 0xab, 0x94, 0x04, 0xf3, 0x55, 0xe4, 0xd8, 0x96, 0x9b, 0x78, 0xf6, 0x85, 0x5e,
0xa8, 0x8a, 0x62, 0x4d, 0xec, 0x49, 0xc4, 0x75, 0x2c, 0x05, 0xfe, 0x62, 0xe8, 0xb2, 0xb2, 0x9e,
0x8c, 0xad, 0x2c, 0x9c, 0x8e, 0x2d, 0xfb, 0x61, 0x16, 0xfa, 0x4b, 0x6f, 0x62, 0x7e, 0x41, 0xb7,
0x6c, 0x85, 0x47, 0xb3, 0xd0, 0x9a, 0x38, 0xd8, 0x89, 0x7f, 0xa7, 0x4f, 0xd8, 0x4c, 0x23, 0xdf,
0x3f, 0x8b, 0x16, 0xc3, 0xb1, 0x3e, 0x10, 0x1f, 0xde, 0x41, 0x12, 0xcf, 0x57, 0x3c, 0xb7, 0x8a,
0xb6, 0x6d, 0xd3, 0x35, 0xd1, 0x13, 0xe0, 0xf5, 0x0f, 0x1a, 0xf9, 0xae, 0xd5, 0x6a, 0x65, 0xdf,
0x09, 0xd0, 0xff, 0x41, 0xfd, 0x22, 0x57, 0x84, 0x4d, 0x76, 0x55, 0x0c, 0x76, 0xff, 0xda, 0x8a,
0xe7, 0xe8, 0x9e, 0x14, 0xee, 0x54, 0xb5, 0x13, 0x5d, 0x57, 0x5f, 0x5e, 0x04, 0xe5, 0x13, 0xbd,
0x3c, 0x46, 0x96, 0xe0, 0x13, 0x2a, 0x98, 0x60, 0xb3, 0xbe, 0x95, 0x60, 0x33, 0xf4, 0xcd, 0x89,
0x08, 0x6c, 0x4f, 0x50, 0x94, 0x46, 0xbe, 0x57, 0x10, 0x66, 0x46, 0xff, 0x44, 0xff, 0x01, 0x1b,
0xf3, 0x80, 0xae, 0x86, 0x0d, 0x16, 0xb2, 0x60, 0x0b, 0x3f, 0x5c, 0xd1, 0x6a, 0xd6, 0x88, 0x19,
0x7c, 0x21, 0x4a, 0x6f, 0xdc, 0xbf, 0xb8, 0xbb, 0xbb, 0xb9, 0xeb, 0x90, 0x5f, 0x79, 0x43, 0xc5,
0x87, 0x98, 0x0c, 0xc2, 0xc0, 0x95, 0x58, 0x0f, 0x0f, 0x7a, 0xf5, 0x71, 0x5f, 0xfd, 0x02, 0x69,
0xb9, 0xda, 0x01, 0x7c, 0xba, 0x68, 0xd4, 0x04, 0x00, 0x21, 0x83, 0x38, 0x0f, 0x8a, 0x73, 0x93,
0xf3, 0x6e, 0x33, 0xc7, 0x55, 0x14, 0x40, 0x5b, 0x7d, 0xfc, 0x8b, 0x28, 0x7e, 0xd4, 0x7a, 0x1b,
0x66, 0x51, 0x6f, 0x74, 0xe7, 0xe6, 0xbc, 0xdf, 0x1e, 0x64, 0x50, 0x73, 0xb5, 0x33, 0xef, 0x5a,
0xa6, 0xcc, 0xf6, 0xc7, 0x3c, 0xa3, 0xdb, 0x2c, 0xbb, 0xb5, 0xa1, 0x99, 0xaf, 0xb8, 0xb2, 0xee,
0xc6, 0xbc, 0x67, 0xd4, 0xf4, 0xc6, 0xe1, 0xe1, 0xc1, 0x18, 0xfe, 0x0d, 0x07, 0x80, 0xe6, 0x62,
0x74, 0x4b, 0xda, 0xbf, 0x61, 0x57, 0x92, 0x3c, 0x39, 0xf1, 0x9c, 0x18, 0xa7, 0xe4, 0xd7, 0xd1,
0x90, 0x44, 0xcb, 0x20, 0x70, 0x57, 0xb4, 0xa3, 0x58, 0x55, 0x73, 0x3c, 0xa0, 0x46, 0xe3, 0x37,
0x42, 0x3b, 0xc3, 0x01, 0xfd, 0x38, 0x6a, 0x9c, 0x18, 0x6d, 0x22, 0xbe, 0x53, 0x18, 0x48, 0x35,
0x80, 0x98, 0xe3, 0xff, 0xe8, 0xa9, 0x1c, 0x85, 0xfd, 0x36, 0x0f, 0x32, 0x08, 0x48, 0x4a, 0x62,
0x9f, 0x4f, 0x9b, 0x8a, 0xe2, 0x6d, 0xb4, 0x7b, 0xb2, 0x86, 0x98, 0xad, 0x76, 0x61, 0x52, 0x85,
0x37, 0xb3, 0xfc, 0x28, 0x26, 0x6c, 0x3a, 0x05, 0x34, 0x91, 0x46, 0xfe, 0x93, 0x76, 0x2f, 0xaa,
0xe6, 0xc8, 0x1c, 0x15, 0x24, 0x31, 0x52, 0x3b, 0x23, 0xed, 0x82, 0x13, 0x76, 0x22, 0xc2, 0x3c,
0x7f, 0x39, 0x9b, 0xab, 0xbd, 0x71, 0xd8, 0xcf, 0x5a, 0x46, 0x85, 0xe5, 0xb5, 0x0a, 0x9d, 0xa4,
0xec, 0xf9, 0x10, 0xed, 0xed, 0x42, 0xbc, 0xfc, 0x2a, 0x74, 0xa2, 0xa8, 0xae, 0x27, 0x52, 0x92,
0x97, 0xf7, 0xb2, 0x76, 0xa5, 0x89, 0x66, 0xe6, 0xb6, 0xbd, 0xac, 0x28, 0xbe, 0xf0, 0x26, 0xb2,
0x01, 0xc8, 0x7a, 0x46, 0xd2, 0xd4, 0xd3, 0xbb, 0x8f, 0xaf, 0xf9, 0x8f, 0x11, 0x28, 0x16, 0x3b,
0x82, 0xe8, 0x91, 0xf9, 0x90, 0xea, 0xeb, 0x7d, 0x88, 0xcd, 0x21, 0x5d, 0x51, 0xb4, 0xbf, 0xee,
0xab, 0xb6, 0x06, 0x4a, 0x4e, 0x3d, 0x5e, 0x12, 0x79, 0xa2, 0x24, 0x82, 0xca, 0x5c, 0xd5, 0x9c,
0xe8, 0x17, 0xeb, 0x17, 0xe5, 0x51, 0x1d, 0xe8, 0x9d, 0xc7, 0x6c, 0xaa, 0x50, 0xc8, 0xe2, 0xa2,
0xa6, 0x5b, 0x7c, 0x62, 0x7f, 0x63, 0x83, 0xdc, 0x59, 0xb2, 0xcd, 0x03, 0xe9, 0xdd, 0xe8, 0x1e,
0x92, 0x3b, 0xc7, 0x8c, 0xd3, 0x44, 0x6e, 0xaa, 0x1c, 0x28, 0x50, 0x81, 0x40, 0xb4, 0x72, 0xfa,
0x98, 0x56, 0x0d, 0x5f, 0x5e, 0x8e, 0xc4, 0x77, 0x50, 0x66, 0x47, 0x4d, 0x3a, 0xda, 0xc2, 0xe1,
0xc1, 0x5c, 0x79, 0xe4, 0x44, 0x80, 0xa4, 0x46, 0xff, 0xd2, 0x9b, 0x38, 0x8f, 0x84, 0x6f, 0x25,
0x99, 0x1c, 0x7f, 0xff, 0x77, 0xaf, 0x37, 0x87, 0xe2, 0x17, 0xd7, 0x4d, 0xee, 0x38, 0x77, 0x1a,
0xc7, 0x7a, 0xf0, 0x0d, 0xdf, 0x7c, 0xff, 0xec, 0x54, 0xa1, 0x1a, 0x03, 0x10, 0xd1, 0x24, 0x20,
0x62, 0x2f, 0xf9, 0xea, 0x1e, 0x5e, 0xac, 0x29, 0x81, 0x42, 0x6e, 0x8e, 0x9e, 0xc1, 0xa4, 0xbf,
0x5e, 0x2a, 0x71, 0x08, 0x12, 0xe1, 0xe8, 0xfc, 0x80, 0xcf, 0x56, 0x96, 0x99, 0x8d, 0x06, 0x25,
0x62, 0x34, 0x9b, 0xf4, 0xb9, 0x15, 0x7c, 0xeb, 0xd5, 0x05, 0xc8, 0x36, 0x70, 0x53, 0xa7, 0xfd,
0xd1, 0xdf, 0x8e, 0x4f, 0x8c, 0x06, 0xb9, 0xfb, 0x30, 0xfc, 0xb8, 0x07, 0xd0, 0xa0, 0xfd, 0xfb,
0x6b, 0xe3, 0xc4, 0x68, 0xed, 0x86, 0x69, 0xb4, 0x28, 0x14, 0x8a, 0xfa, 0xc3, 0xcf, 0xff, 0xb1,
0x1b, 0xa6, 0x0d, 0x04, 0x91, 0x29, 0xdd, 0xd8, 0x03, 0x03, 0xb4, 0x4e, 0x6f, 0x4f, 0x0d, 0xbd,
0xb1, 0x07, 0xa6, 0x41, 0xfb, 0x57, 0xb7, 0xe7, 0x27, 0x27, 0xfa, 0xf1, 0x1e, 0xa0, 0x26, 0xed,
0xdf, 0xbe, 0x3b, 0x31, 0x9a, 0xbb, 0x41, 0x5a, 0xc0, 0xcf, 0x8d, 0x57, 0xbf, 0x99, 0x4e, 0xf7,
0xc0, 0x00, 0x3f, 0xb7, 0x1f, 0xaf, 0xc9, 0xc7, 0xb9, 0x13, 0xb3, 0x3d, 0x60, 0x0d, 0x01, 0x76,
0x76, 0x76, 0xbf, 0x07, 0xa8, 0x29, 0x80, 0x40, 0xda, 0x7b, 0x80, 0x5a, 0x29, 0xd0, 0x9e, 0x25,
0x69, 0xb5, 0x53, 0xa8, 0x6a, 0x91, 0xe6, 0xef, 0xdf, 0x9a, 0xf6, 0xc1, 0xd1, 0xd1, 0x06, 0xf8,
0x71, 0x06, 0x7e, 0x9e, 0x83, 0x3f, 0x3a, 0x02, 0x70, 0xb6, 0x85, 0xfd, 0x04, 0x04, 0x73, 0x7e,
0x7e, 0x8b, 0xe0, 0x44, 0xf1, 0x58, 0xfc, 0xe4, 0x87, 0x0f, 0xea, 0x6b, 0x34, 0x4e, 0x40, 0x52,
0x17, 0x46, 0xad, 0x69, 0x94, 0x0f, 0x4b, 0x48, 0x95, 0x8f, 0x05, 0xf1, 0x9d, 0x86, 0xf1, 0x2f,
0x2c, 0xde, 0x3f, 0xb8, 0x57, 0x17, 0xda, 0xdd, 0x47, 0x07, 0x0a, 0x5f, 0xd1, 0xbe, 0x9c, 0x89,
0x49, 0x6d, 0x5f, 0x18, 0x89, 0xb4, 0x2c, 0xe9, 0x12, 0x3b, 0x32, 0x40, 0xf7, 0xcf, 0x30, 0x02,
0x93, 0x9b, 0x70, 0xc2, 0xc2, 0x2d, 0xfb, 0x3a, 0xbb, 0xe1, 0x43, 0xb7, 0x45, 0x0c, 0x32, 0xf8,
0x70, 0xb7, 0x67, 0xa1, 0x60, 0xba, 0x7b, 0x17, 0x12, 0xa6, 0x34, 0xbc, 0xfb, 0xb0, 0xc7, 0xaa,
0x60, 0xfc, 0x70, 0xcf, 0x7b, 0xd0, 0x83, 0xe1, 0x87, 0xbb, 0x3d, 0x0a, 0x0e, 0xfc, 0x0d, 0x0b,
0xef, 0x53, 0xe1, 0xd4, 0x41, 0x2e, 0x79, 0xf1, 0x40, 0xc1, 0x8f, 0x93, 0x7c, 0xda, 0x12, 0x10,
0x0f, 0x0f, 0xfd, 0xd1, 0x93, 0x15, 0x74, 0x48, 0x51, 0x2c, 0x1f, 0xa5, 0x58, 0xb6, 0x85, 0xf2,
0x0b, 0x8c, 0x49, 0xa9, 0x6e, 0xcb, 0xe4, 0x23, 0x39, 0x24, 0xc3, 0x5d, 0xef, 0x1b, 0xe2, 0xfd,
0x87, 0x5d, 0xef, 0x9b, 0xe2, 0x7d, 0x36, 0xab, 0xd2, 0x39, 0xe1, 0x9f, 0x28, 0xb0, 0x3c, 0x3e,
0xb7, 0x20, 0x9a, 0x08, 0x4e, 0x45, 0x97, 0x00, 0x06, 0xc0, 0x9b, 0x3e, 0xe9, 0x89, 0x4d, 0x4b,
0x3c, 0x90, 0x61, 0x52, 0x6f, 0xb9, 0x18, 0xb3, 0x90, 0x26, 0x1e, 0x75, 0x24, 0x94, 0x05, 0x47,
0xbb, 0x91, 0xf8, 0x2c, 0x9d, 0xb4, 0x4b, 0x44, 0x32, 0x4f, 0x09, 0x16, 0xa5, 0x30, 0x5b, 0x4c,
0xae, 0x50, 0xb5, 0xdf, 0x19, 0x34, 0xe1, 0xf1, 0xfb, 0xe7, 0x24, 0x8a, 0x3a, 0x2a, 0xf7, 0xcb,
0x9c, 0x92, 0x49, 0xf3, 0x65, 0x00, 0x22, 0xfd, 0x6c, 0xa2, 0x97, 0xee, 0x62, 0x2b, 0xbf, 0x4b,
0x49, 0xd2, 0x15, 0x24, 0xf5, 0xfe, 0xa1, 0x37, 0x8e, 0x82, 0xee, 0xf6, 0xf2, 0xd8, 0x3b, 0xf5,
0xf7, 0x8a, 0x47, 0xa4, 0xce, 0xde, 0x49, 0x9d, 0x15, 0x27, 0x22, 0x67, 0x60, 0xc8, 0x19, 0xf0,
0x7c, 0xef, 0x76, 0xb8, 0xa6, 0xd9, 0x4a, 0x65, 0x2c, 0xa5, 0x53, 0x40, 0x5e, 0x29, 0x70, 0x28,
0x84, 0x2d, 0x6d, 0xac, 0xbe, 0x25, 0x71, 0x5d, 0x4a, 0x9c, 0xb7, 0x74, 0xdf, 0x22, 0x70, 0x5d,
0xf0, 0x56, 0x90, 0x69, 0xb3, 0x99, 0xe3, 0x40, 0x72, 0x1d, 0x6d, 0x84, 0x39, 0x95, 0xd6, 0x8b,
0x94, 0x0d, 0x49, 0x59, 0x12, 0xdd, 0x47, 0xd3, 0xd8, 0x41, 0xf3, 0xad, 0xa4, 0x1a, 0x6f, 0x27,
0xd5, 0xf8, 0x17, 0x49, 0x35, 0xdf, 0x4e, 0xaa, 0xf9, 0x2f, 0x92, 0x6a, 0xbd, 0x9d, 0x54, 0xeb,
0x9f, 0x22, 0xb5, 0xa1, 0xd3, 0xe1, 0x4e, 0x9d, 0x46, 0xed, 0xca, 0x18, 0x83, 0xf4, 0x5a, 0x30,
0x96, 0xb4, 0x0c, 0x25, 0x83, 0x1b, 0x3a, 0xcf, 0xdb, 0xe3, 0x63, 0xff, 0x5b, 0xc2, 0xe4, 0xd9,
0x6f, 0xc9, 0x74, 0xca, 0x3d, 0x5e, 0xb4, 0x97, 0xfc, 0xe8, 0xc1, 0x09, 0xc8, 0xd4, 0x09, 0x21,
0x89, 0xc7, 0x54, 0x71, 0xaf, 0x7d, 0x8d, 0xae, 0x4a, 0xc4, 0x01, 0xe5, 0x0b, 0xdd, 0xb0, 0x9e,
0x9d, 0xac, 0x4c, 0xf7, 0xb2, 0x02, 0x39, 0x08, 0xb9, 0x63, 0xd3, 0x90, 0x45, 0x99, 0x99, 0x73,
0xb9, 0x4c, 0x05, 0xd9, 0xf2, 0xe9, 0xdf, 0xbd, 0xdf, 0x3f, 0x7d, 0x6b, 0x2f, 0xcd, 0xd3, 0x65,
0xec, 0x1f, 0x41, 0xd1, 0x6e, 0x2f, 0x5d, 0x2b, 0x66, 0xe4, 0x09, 0x33, 0x1c, 0x3c, 0x51, 0x09,
0x25, 0x87, 0x4b, 0xa6, 0xa1, 0xbf, 0xc0, 0x58, 0xdc, 0x11, 0xeb, 0x94, 0x0f, 0x0d, 0xa7, 0x1f,
0xcb, 0x42, 0x83, 0xbe, 0x2f, 0x30, 0x18, 0xfd, 0x61, 0xe8, 0xcc, 0xe6, 0x31, 0x0b, 0x77, 0x00,
0x34, 0xfa, 0xa7, 0xb6, 0x8d, 0x67, 0xcb, 0x76, 0x61, 0x68, 0xf6, 0xcf, 0x97, 0x96, 0xbb, 0x1d,
0x17, 0x84, 0x33, 0x4d, 0x05, 0xc0, 0xff, 0x7e, 0xe9, 0x5a, 0x50, 0x38, 0x45, 0x2c, 0x8c, 0x4f,
0x27, 0x5f, 0x2d, 0x1b, 0x52, 0x7d, 0xac, 0xa0, 0x14, 0x3a, 0x66, 0x50, 0xb4, 0x31, 0xe6, 0x4d,
0xa8, 0xe6, 0xab, 0x6b, 0x99, 0xcb, 0x2b, 0xf1, 0xa7, 0xa3, 0x23, 0xe7, 0x73, 0x2d, 0x84, 0xe2,
0xf9, 0x91, 0x29, 0xaa, 0x06, 0xdf, 0x64, 0xb7, 0xa6, 0xba, 0x55, 0x63, 0x39, 0x3d, 0xac, 0x03,
0x8e, 0x8c, 0xf2, 0xda, 0xff, 0x68, 0x1b, 0xbe, 0xbf, 0xdd, 0x26, 0xf0, 0x5e, 0x5e, 0xf8, 0xf6,
0x6e, 0xa1, 0x54, 0x39, 0xbb, 0xb9, 0x56, 0x40, 0x86, 0x50, 0xab, 0xf0, 0xdd, 0x4c, 0x51, 0x41,
0x38, 0x7b, 0xca, 0x15, 0xdb, 0x5f, 0xfc, 0x01, 0x0f, 0xa1, 0xdc, 0x57, 0x0b, 0x05, 0x0b, 0x94,
0x2a, 0xd8, 0x19, 0x93, 0xb5, 0x49, 0xa1, 0x02, 0xc9, 0x86, 0xbc, 0xa5, 0x0e, 0x21, 0x22, 0x9e,
0xee, 0xb3, 0x89, 0xbf, 0xe7, 0x02, 0xe9, 0xb7, 0x37, 0x05, 0xd2, 0xe3, 0x76, 0xbb, 0xd9, 0xce,
0x45, 0x52, 0xb6, 0xde, 0xb0, 0x9f, 0x5c, 0xa4, 0x34, 0x29, 0x4d, 0x43, 0xe5, 0x1b, 0x02, 0xe0,
0xdf, 0xcf, 0x72, 0xcc, 0xd8, 0x7b, 0x83, 0xe1, 0x26, 0x17, 0xde, 0xba, 0x40, 0x75, 0xd3, 0xa2,
0xa5, 0x5d, 0xfd, 0xa9, 0xdc, 0x92, 0x73, 0x21, 0x93, 0x52, 0xc9, 0xdf, 0xff, 0xbf, 0x3c, 0x33,
0xb1, 0x37, 0xee, 0x22, 0xa4, 0xe5, 0xc9, 0xcd, 0x41, 0xa1, 0x69, 0x0e, 0x8b, 0x78, 0x0f, 0x63,
0xaf, 0x29, 0x5a, 0xd2, 0xda, 0xbe, 0xf9, 0xb4, 0xea, 0x24, 0x0d, 0xd3, 0x58, 0x1b, 0xc7, 0x1e,
0x1a, 0x05, 0xe8, 0xa2, 0x3c, 0x0e, 0x91, 0xd9, 0x0b, 0x98, 0x2a, 0xbe, 0xda, 0x71, 0x6e, 0xb2,
0xdc, 0x48, 0xc0, 0xb2, 0xd2, 0xe3, 0x68, 0xfa, 0x81, 0x89, 0x3b, 0x5d, 0x0a, 0xfb, 0xec, 0x1d,
0xdc, 0x48, 0xc0, 0xb2, 0xd2, 0xe3, 0x68, 0xfa, 0x81, 0x89, 0x3b, 0x5d, 0x0a, 0xfb, 0xe4, 0x1d,
0x19, 0x39, 0xcb, 0x97, 0x24, 0xe1, 0xa1, 0x20, 0xa9, 0xe6, 0x49, 0x46, 0x2c, 0xe6, 0x46, 0xaa,
0x3e, 0xa3, 0xd3, 0xd8, 0x38, 0x3c, 0xcd, 0x44, 0xdf, 0x1f, 0x0f, 0x67, 0x30, 0x6c, 0xc9, 0xbd,
0x89, 0x25, 0x95, 0xa5, 0xa4, 0xbb, 0x92, 0x74, 0xe1, 0x50, 0xa9, 0x78, 0x04, 0x04, 0x53, 0x99,
@ -504,198 +504,199 @@ const uint8_t PAGE_settings_leds[] PROGMEM = {
0xbd, 0xed, 0xa0, 0x0a, 0x7e, 0x69, 0x18, 0x7b, 0xe2, 0x54, 0x6b, 0xe2, 0x91, 0x38, 0x36, 0x60,
0x2d, 0xca, 0x37, 0xa7, 0x34, 0xcb, 0xc4, 0xed, 0x87, 0xea, 0x88, 0xef, 0x21, 0xd4, 0x30, 0x76,
0x9c, 0xcd, 0xad, 0xf0, 0xcc, 0x9f, 0x30, 0x05, 0xbb, 0x4c, 0xfa, 0xa0, 0x75, 0xd2, 0x69, 0xb7,
0xd5, 0x2a, 0xc8, 0xc9, 0xa9, 0x9a, 0x5f, 0x87, 0xcb, 0x38, 0xf6, 0xf9, 0x01, 0xb7, 0xb5, 0x38,
0xd5, 0x2a, 0xc8, 0xc9, 0xa9, 0x9a, 0x5f, 0x86, 0xcb, 0x38, 0xf6, 0xf9, 0x01, 0xb7, 0xb5, 0x38,
0x17, 0x50, 0x6e, 0xd8, 0xdc, 0x68, 0x8f, 0x12, 0xab, 0x85, 0x6a, 0x5d, 0x9a, 0xd2, 0xf7, 0xcf,
0xd6, 0x7a, 0x2b, 0xfb, 0x48, 0x8c, 0xfd, 0x29, 0x2a, 0x5a, 0x76, 0xff, 0xab, 0x86, 0x24, 0x65,
0x9c, 0x28, 0x04, 0xb2, 0xef, 0x9f, 0xe9, 0xf0, 0xfc, 0x4d, 0x5c, 0xa7, 0x68, 0xb6, 0x6c, 0x17,
0x26, 0xa1, 0x9b, 0x66, 0x3c, 0xa0, 0x49, 0xdb, 0x05, 0x8f, 0x38, 0xac, 0xfb, 0xef, 0x65, 0x87,
0x3f, 0x35, 0x9b, 0xd2, 0xe1, 0x0d, 0x1c, 0xde, 0x28, 0x19, 0x7e, 0xb3, 0x8c, 0xe6, 0x63, 0x2e,
0xd6, 0x7a, 0x2b, 0xfb, 0x48, 0x8c, 0xfd, 0x5b, 0x54, 0xb4, 0xec, 0xfe, 0x17, 0x0d, 0x49, 0xca,
0x38, 0x51, 0x08, 0x64, 0xdf, 0x3f, 0xd3, 0xe1, 0xc5, 0x9b, 0xb8, 0x4e, 0xd1, 0x6c, 0xd9, 0x2e,
0x4c, 0x42, 0x37, 0xcd, 0x78, 0x40, 0x93, 0xb6, 0x0b, 0x1e, 0x71, 0x58, 0xf7, 0xcf, 0x65, 0x87,
0x3f, 0x35, 0x9b, 0xd2, 0xe1, 0x0d, 0x1c, 0xde, 0x28, 0x19, 0x7e, 0xbb, 0x8c, 0xe6, 0x63, 0x2e,
0xa4, 0xfd, 0x08, 0x9a, 0x88, 0xa0, 0xb9, 0x03, 0x01, 0x71, 0xe4, 0x86, 0xec, 0x7e, 0x1c, 0x2d,
0xc4, 0xd1, 0x2a, 0xc1, 0x31, 0xe2, 0x87, 0xc1, 0xf6, 0x0f, 0x6e, 0xe3, 0xe0, 0x76, 0x19, 0x03,
0x17, 0xb7, 0x24, 0x62, 0x5e, 0xe4, 0x87, 0xfb, 0x11, 0x1c, 0x23, 0x82, 0xe3, 0x12, 0x04, 0x77,
0x97, 0x77, 0x24, 0x62, 0x5e, 0xe4, 0x87, 0xfb, 0x11, 0x1c, 0x23, 0x82, 0xe3, 0x12, 0x04, 0xf7,
0xfe, 0xf2, 0x35, 0xe2, 0x3f, 0xe1, 0xd8, 0x9f, 0x4a, 0xc6, 0x9e, 0x7a, 0x96, 0xeb, 0xcf, 0xf6,
0x0f, 0x3e, 0xc1, 0xc1, 0x27, 0x3b, 0x07, 0xef, 0x10, 0x1e, 0x4d, 0x9d, 0x1f, 0x15, 0x48, 0x79,
0x06, 0x2b, 0x43, 0x03, 0x24, 0x30, 0x30, 0xdf, 0x0e, 0x09, 0x7c, 0xc7, 0x83, 0x54, 0xa7, 0xcb,
0x75, 0x94, 0x9f, 0xbe, 0xa0, 0x78, 0x45, 0xe1, 0x47, 0xd4, 0xdb, 0x1f, 0xd5, 0x24, 0xaa, 0x1d,
0x7e, 0xf7, 0xd4, 0xf8, 0xc9, 0x68, 0x77, 0x93, 0x54, 0x1c, 0x9c, 0xa8, 0xdc, 0x93, 0xd8, 0x34,
0xaf, 0xfc, 0x99, 0xf1, 0x78, 0xe6, 0x8e, 0x1c, 0x74, 0x0a, 0x4a, 0xe1, 0x7a, 0x07, 0x53, 0x5f,
0x5e, 0x94, 0xe2, 0x05, 0x8f, 0xcd, 0x53, 0x64, 0xe9, 0x65, 0x81, 0x67, 0x74, 0x55, 0xc2, 0x75,
0x1e, 0x18, 0x98, 0x71, 0x74, 0x21, 0xc0, 0xed, 0xef, 0x8b, 0x26, 0x9e, 0xd3, 0xc3, 0xcd, 0xed,
0xed, 0xfd, 0x29, 0xee, 0x32, 0xd5, 0x3f, 0xd1, 0x14, 0xf6, 0x8a, 0xbd, 0xdd, 0x83, 0x92, 0x3d,
0x2f, 0x2f, 0xc1, 0x87, 0x8e, 0x1a, 0x4f, 0x1f, 0xe6, 0xeb, 0x6b, 0xef, 0x0b, 0xf6, 0x74, 0xe5,
0xa6, 0x55, 0xa4, 0x53, 0x00, 0xd2, 0xb7, 0x91, 0xe0, 0x26, 0xd4, 0x6e, 0x1c, 0x3a, 0xc7, 0x21,
0x24, 0x1e, 0x39, 0xb9, 0xe3, 0x89, 0x4c, 0x4b, 0x84, 0x9c, 0x09, 0x6f, 0x19, 0xe0, 0x0d, 0x89,
0x0f, 0x8e, 0x8b, 0x57, 0x4a, 0xe4, 0xc1, 0x33, 0x8f, 0x3d, 0x92, 0xbf, 0x5f, 0x5d, 0xfe, 0x1c,
0xc7, 0xc1, 0x2d, 0x64, 0x0f, 0x2c, 0x8a, 0xbb, 0xde, 0xee, 0x6b, 0x1b, 0xb9, 0x53, 0x36, 0xd9,
0x45, 0x88, 0x78, 0xee, 0xe0, 0x81, 0xa1, 0x28, 0xf0, 0x21, 0x46, 0xde, 0xb1, 0xa7, 0x58, 0xe3,
0x4f, 0x80, 0xcd, 0x78, 0x19, 0xe1, 0x59, 0x08, 0x98, 0xa4, 0x0a, 0xb1, 0x6b, 0xf7, 0x95, 0x8e,
0x0c, 0x2f, 0xcb, 0x23, 0xc6, 0x43, 0xba, 0x96, 0x7d, 0xaf, 0x1d, 0x24, 0x08, 0xc4, 0x8d, 0x9b,
0x9b, 0x6b, 0x58, 0x4d, 0x8d, 0xd6, 0xc5, 0x74, 0xe4, 0x86, 0x47, 0xcc, 0x67, 0xf2, 0xc1, 0x0f,
0x17, 0x78, 0xd8, 0x2b, 0x3d, 0x2c, 0x28, 0xaf, 0xa4, 0x28, 0x14, 0x8f, 0x08, 0xcb, 0x33, 0xab,
0xfc, 0xb4, 0x30, 0xde, 0x11, 0x89, 0x40, 0x7c, 0x78, 0x4d, 0xc4, 0xab, 0x45, 0x08, 0x13, 0xab,
0x5a, 0xc9, 0x69, 0xe2, 0x83, 0x8d, 0x0b, 0x37, 0x67, 0xd3, 0x59, 0x2a, 0x3d, 0x2d, 0xee, 0xd2,
0xe4, 0x25, 0x05, 0x2b, 0x04, 0xc7, 0x0f, 0x71, 0x53, 0x5e, 0x0f, 0x42, 0x39, 0xdf, 0x32, 0x0b,
0x52, 0xaa, 0x01, 0xcc, 0x84, 0xd3, 0x1b, 0xb0, 0x94, 0xee, 0x40, 0xc1, 0x58, 0x9e, 0x72, 0xa1,
0x48, 0xfe, 0xd3, 0x31, 0x78, 0xe8, 0x09, 0xc9, 0x99, 0x79, 0xd1, 0x60, 0x68, 0xc6, 0x61, 0xa0,
0x00, 0xa0, 0x94, 0x28, 0xf3, 0xa5, 0x1b, 0xcb, 0xe9, 0xf3, 0xa3, 0xfd, 0x5c, 0x79, 0x14, 0x8f,
0x37, 0xf1, 0xe3, 0xda, 0xfc, 0x91, 0xef, 0x90, 0xe0, 0x07, 0xd0, 0xfd, 0x49, 0x66, 0x33, 0xe2,
0xb4, 0x87, 0xa1, 0xf3, 0x73, 0x1e, 0xc9, 0x1e, 0x03, 0x68, 0x73, 0x37, 0x01, 0xc5, 0x74, 0xa7,
0x06, 0xd0, 0xe7, 0x96, 0x3d, 0x57, 0x64, 0xec, 0x34, 0xfb, 0xcf, 0x09, 0xa8, 0x21, 0x32, 0x85,
0x0c, 0x15, 0xab, 0x05, 0x8e, 0x97, 0x3f, 0x3c, 0x52, 0x66, 0x35, 0x5f, 0x79, 0xf5, 0x89, 0xf1,
0xec, 0x6b, 0xee, 0x54, 0x13, 0x1f, 0xfa, 0xd9, 0xf9, 0xd2, 0xdd, 0xb9, 0x89, 0xe2, 0x15, 0xa0,
0x51, 0xc8, 0xda, 0xce, 0xcd, 0x9d, 0x22, 0x2c, 0xb7, 0x14, 0xed, 0x2d, 0xc7, 0x4b, 0x45, 0x5e,
0x55, 0x0e, 0x7a, 0x76, 0xbd, 0x09, 0xea, 0x63, 0xa2, 0xac, 0xbd, 0xe5, 0xf4, 0x29, 0x32, 0x01,
0x05, 0x7a, 0x39, 0xec, 0xed, 0x87, 0x04, 0x36, 0xb5, 0x5a, 0x58, 0xd3, 0xe9, 0x0e, 0x2e, 0x7e,
0x2b, 0x03, 0x7e, 0x58, 0xab, 0xeb, 0x64, 0x89, 0x21, 0x3d, 0x02, 0x17, 0x91, 0x26, 0x79, 0x78,
0x8b, 0x48, 0x3c, 0x4d, 0x57, 0x92, 0x89, 0x35, 0xe4, 0x19, 0x99, 0x14, 0x8e, 0x98, 0xb7, 0x9c,
0x12, 0x37, 0x33, 0x3e, 0x0a, 0xbc, 0x77, 0x52, 0x7e, 0x25, 0xdf, 0xbb, 0xc5, 0x83, 0x25, 0xbc,
0x3a, 0x55, 0x93, 0xd3, 0x80, 0x5b, 0xde, 0x9e, 0xe2, 0x49, 0xf7, 0xdd, 0x6a, 0x84, 0x29, 0x19,
0x92, 0xc5, 0xb5, 0x47, 0x23, 0xe4, 0xcb, 0x8a, 0x97, 0x92, 0x4a, 0xe7, 0x7e, 0x77, 0x47, 0x73,
0x22, 0xb5, 0x6a, 0x71, 0xbc, 0xe6, 0x5c, 0x39, 0xe1, 0xae, 0xb3, 0x73, 0x17, 0xb7, 0xf9, 0x11,
0x12, 0x18, 0xa9, 0x95, 0x13, 0xb8, 0xb8, 0x2b, 0x03, 0xe7, 0x3c, 0x09, 0x79, 0x84, 0x0c, 0x12,
0xcd, 0x5d, 0xc4, 0x6e, 0x2f, 0xb7, 0x46, 0x73, 0xf8, 0xdd, 0xf4, 0x6e, 0xaf, 0x68, 0x61, 0x29,
0x73, 0x63, 0x20, 0x64, 0x27, 0xb5, 0x82, 0x86, 0x26, 0x6e, 0x4d, 0x4e, 0x23, 0x74, 0xaa, 0x60,
0xd5, 0x6a, 0x47, 0xde, 0x6f, 0xb9, 0x71, 0x19, 0x1e, 0x03, 0x97, 0x79, 0xa0, 0x45, 0xd0, 0xf6,
0xf9, 0xad, 0x37, 0xd1, 0x08, 0x3a, 0xa0, 0x29, 0xe4, 0x1d, 0x78, 0x62, 0x32, 0x0e, 0xfd, 0x47,
0xa8, 0x5e, 0xc8, 0xc4, 0x67, 0x11, 0xde, 0xf3, 0xc1, 0xbd, 0x63, 0x3f, 0x84, 0x44, 0x75, 0xce,
0xc8, 0x57, 0xee, 0x82, 0xbe, 0x92, 0x20, 0x04, 0xe7, 0x0a, 0x11, 0x05, 0x13, 0x7f, 0x8e, 0x89,
0xe7, 0xb2, 0x11, 0xbf, 0x2b, 0x93, 0x9d, 0xff, 0xcc, 0xd0, 0x32, 0x01, 0x75, 0x7a, 0x73, 0x41,
0x9c, 0x3c, 0x52, 0xde, 0x89, 0x25, 0x71, 0x9e, 0xec, 0x0a, 0x5c, 0x55, 0xfe, 0x52, 0xe4, 0x08,
0xa2, 0x07, 0xc5, 0xd1, 0x1d, 0xf0, 0x99, 0xd2, 0x59, 0xba, 0xbe, 0xcd, 0xaf, 0x61, 0xd4, 0x80,
0x8f, 0xd8, 0xb7, 0x7d, 0x3c, 0x14, 0xc9, 0xaf, 0x72, 0xea, 0x9a, 0xc2, 0xaf, 0x95, 0x9a, 0x08,
0xe1, 0x8e, 0x62, 0x3f, 0xb4, 0x66, 0x0c, 0x45, 0x7a, 0x11, 0xb3, 0x05, 0xc6, 0x25, 0xfb, 0x22,
0x80, 0x2a, 0x04, 0x12, 0x07, 0x01, 0x06, 0xe3, 0x17, 0x01, 0x70, 0x88, 0x9e, 0x94, 0x5c, 0x41,
0x16, 0x5c, 0x23, 0x52, 0x5a, 0x0c, 0xd3, 0x19, 0xf2, 0x09, 0xcf, 0x18, 0x5c, 0xdc, 0x80, 0x88,
0xb4, 0x02, 0xc6, 0xa8, 0x88, 0x51, 0xe3, 0xd8, 0x54, 0x15, 0xa1, 0xf8, 0x25, 0x4b, 0x44, 0x3f,
0xe0, 0x97, 0x47, 0x3b, 0xf5, 0x3a, 0xad, 0xf2, 0xd7, 0x78, 0xe0, 0xa0, 0x9a, 0x5d, 0x00, 0xad,
0x47, 0xb5, 0x6f, 0xd1, 0x20, 0x30, 0x1b, 0x18, 0x34, 0xd4, 0x75, 0x05, 0x72, 0x22, 0x71, 0x39,
0xb6, 0xc7, 0x53, 0xab, 0xfe, 0xbf, 0x39, 0x0b, 0x2e, 0xf6, 0x65, 0xe8, 0x42, 0xb0, 0x16, 0xa7,
0x2a, 0x22, 0xdc, 0xb0, 0x07, 0x40, 0x0e, 0xd0, 0xab, 0x8b, 0x5b, 0xc1, 0x78, 0x97, 0x92, 0x48,
0xf7, 0x4f, 0x47, 0xbc, 0x1f, 0x07, 0x46, 0xb4, 0xa8, 0xf0, 0x82, 0x1c, 0x3f, 0xfd, 0x11, 0xa5,
0x1d, 0xbd, 0x29, 0x14, 0x16, 0x2c, 0x9e, 0xfb, 0xd8, 0x17, 0xf5, 0x23, 0xbc, 0xac, 0x9b, 0x6b,
0x96, 0xc4, 0x3e, 0x88, 0xe3, 0xb1, 0xf8, 0x6c, 0xce, 0xdc, 0x60, 0x48, 0xfb, 0x95, 0x9e, 0x48,
0xcd, 0x65, 0xb5, 0x22, 0xbe, 0xe4, 0x72, 0xbd, 0x9f, 0x91, 0xec, 0xa0, 0x57, 0x17, 0x2f, 0xd2,
0x66, 0x7a, 0xd9, 0x98, 0x4a, 0x3a, 0x68, 0x88, 0x83, 0x86, 0x10, 0xb2, 0xb3, 0x71, 0x85, 0x11,
0xf2, 0x92, 0x40, 0x7f, 0x64, 0x3d, 0xb0, 0x0c, 0x64, 0x9e, 0x14, 0xde, 0xbd, 0x79, 0xa3, 0x5f,
0xc1, 0xf5, 0x39, 0xb4, 0x16, 0x41, 0x97, 0xfc, 0x6c, 0x85, 0x78, 0x0c, 0x05, 0xf5, 0x3c, 0x5e,
0x06, 0x20, 0x9c, 0x06, 0xe4, 0xd3, 0xb1, 0xe5, 0x26, 0x7d, 0xce, 0xb4, 0xef, 0xea, 0xda, 0x9c,
0x55, 0xd9, 0xc2, 0xcf, 0xfa, 0xc4, 0x36, 0x4e, 0x33, 0x4b, 0x4c, 0x7b, 0x4e, 0xff, 0x96, 0x81,
0x3b, 0x04, 0x4b, 0x9c, 0x80, 0x9a, 0x06, 0xfe, 0x23, 0xe8, 0x83, 0x3c, 0x47, 0x81, 0x07, 0x21,
0xc6, 0xa2, 0xbb, 0x17, 0xc5, 0xa2, 0x8b, 0xd8, 0xe9, 0xd5, 0x1d, 0x31, 0x6e, 0x2c, 0x7b, 0xbc,
0x15, 0xb1, 0x55, 0xb3, 0xcc, 0xa8, 0xe1, 0xc1, 0x93, 0x62, 0x0f, 0x98, 0x1f, 0x79, 0x90, 0xcd,
0x84, 0x94, 0x72, 0xe5, 0xdc, 0xc3, 0x42, 0x8a, 0x58, 0x4b, 0x48, 0x76, 0x41, 0xcf, 0x6d, 0x49,
0xcb, 0x63, 0x51, 0x44, 0x5c, 0xbc, 0x76, 0xc9, 0xc2, 0x57, 0x9a, 0xc4, 0xa7, 0x43, 0x26, 0x45,
0x2d, 0xeb, 0x45, 0x79, 0xf9, 0x44, 0xf4, 0x8a, 0xf8, 0xdd, 0x14, 0x41, 0x35, 0xe9, 0x9e, 0xe2,
0x85, 0x9f, 0xfe, 0x95, 0xb8, 0xec, 0x4d, 0xce, 0x96, 0x61, 0x08, 0xfa, 0x9f, 0xd2, 0x90, 0x57,
0xbc, 0xaf, 0x4e, 0xe9, 0x46, 0xb5, 0xba, 0xd1, 0x6c, 0x6a, 0xb4, 0xb3, 0xa6, 0x97, 0xae, 0xeb,
0x9b, 0x5d, 0xa5, 0xb4, 0xe1, 0xd4, 0xaf, 0x90, 0xc5, 0x69, 0x91, 0x7c, 0x76, 0x89, 0x21, 0xad,
0x2c, 0xb0, 0xc9, 0xd4, 0x11, 0x47, 0x83, 0xba, 0xc5, 0xcd, 0xbb, 0xca, 0xe1, 0x77, 0xef, 0x4e,
0x4e, 0x4e, 0xba, 0xe4, 0xdf, 0xfd, 0x65, 0x58, 0x5c, 0x19, 0xd0, 0xe0, 0x07, 0x6c, 0x09, 0x90,
0x39, 0x48, 0x8c, 0xd8, 0x62, 0x22, 0x35, 0x2e, 0xd5, 0x3b, 0x9f, 0x80, 0x49, 0xc1, 0x7b, 0xc6,
0x5d, 0x59, 0x64, 0x4d, 0x99, 0x70, 0x60, 0x2b, 0xc4, 0xc2, 0xb5, 0x46, 0x43, 0xc0, 0x40, 0x38,
0x80, 0x65, 0x84, 0x70, 0xa0, 0xa8, 0xc4, 0x46, 0x79, 0x45, 0xfc, 0x5d, 0x65, 0x01, 0x29, 0x94,
0x03, 0x10, 0x92, 0xaa, 0xe3, 0x7d, 0x63, 0xf2, 0x62, 0x2b, 0x16, 0x40, 0x11, 0xb1, 0xbc, 0x09,
0x78, 0xd8, 0x29, 0x0c, 0x3e, 0xc8, 0x5a, 0x44, 0xa0, 0x4a, 0x95, 0xd3, 0x64, 0x31, 0x2d, 0x17,
0xd8, 0xe4, 0xab, 0x18, 0xe5, 0xd7, 0x35, 0xf6, 0xb1, 0x7d, 0xb8, 0x02, 0x91, 0xfa, 0x11, 0xbf,
0x2f, 0x86, 0x3c, 0x72, 0x30, 0xc1, 0xfd, 0xdf, 0x18, 0x0b, 0x88, 0x15, 0x93, 0x43, 0x48, 0xe1,
0x8c, 0x53, 0xe2, 0x4c, 0x05, 0x07, 0x78, 0xba, 0x89, 0x9f, 0x5f, 0x9a, 0x80, 0x60, 0xed, 0x18,
0x75, 0x13, 0xbb, 0xd8, 0x38, 0x38, 0x3b, 0x40, 0xc4, 0x59, 0xa9, 0x5c, 0xf0, 0x99, 0xf2, 0xdb,
0x8d, 0xe9, 0x35, 0x33, 0x88, 0x14, 0x2c, 0x84, 0xe2, 0xaf, 0x20, 0x44, 0x4d, 0x3a, 0x3f, 0xe4,
0x10, 0xaf, 0x3e, 0x7b, 0x33, 0xc1, 0x82, 0x22, 0xf5, 0x82, 0x80, 0xd2, 0xe3, 0x45, 0x63, 0xb0,
0x8a, 0x65, 0x04, 0xde, 0x30, 0x31, 0x2e, 0xa9, 0x0d, 0x01, 0xfa, 0x90, 0xa5, 0x77, 0xef, 0xf9,
0x8f, 0x9e, 0xd4, 0x6a, 0x35, 0x33, 0x8e, 0x50, 0xd8, 0xec, 0x83, 0xef, 0xc6, 0x78, 0x67, 0x5a,
0xb9, 0xc2, 0x93, 0x5c, 0x72, 0x9d, 0xb8, 0x5d, 0x59, 0x04, 0x99, 0x03, 0x09, 0x03, 0x98, 0x5a,
0xd2, 0x8a, 0xe7, 0xa7, 0xa6, 0x36, 0x74, 0x1b, 0xef, 0x8d, 0x6d, 0xed, 0xdb, 0xe2, 0x46, 0x45,
0x52, 0xe6, 0x9a, 0x59, 0xc1, 0xdb, 0x07, 0x99, 0xc8, 0x2b, 0x4f, 0x44, 0x69, 0xb7, 0x17, 0xa7,
0x6a, 0x65, 0xe7, 0xd6, 0x6c, 0x9b, 0x43, 0xb3, 0xe9, 0xd4, 0xb1, 0xf1, 0x4c, 0x1e, 0x51, 0x9a,
0x08, 0xbf, 0x13, 0x5c, 0x07, 0xd5, 0xc4, 0x03, 0x58, 0x4a, 0x53, 0xdf, 0x03, 0x86, 0x3b, 0x28,
0x7d, 0x79, 0x5c, 0x4b, 0x31, 0x1a, 0x7b, 0x20, 0xf1, 0xf0, 0x48, 0xe5, 0x8c, 0xd7, 0xbc, 0x25,
0xbb, 0xc3, 0x05, 0x47, 0x22, 0xee, 0x6d, 0x95, 0xef, 0x75, 0x4b, 0x14, 0xe2, 0xd0, 0x5c, 0x22,
0x6a, 0x3c, 0xef, 0x06, 0x12, 0x4e, 0x6d, 0x3c, 0x11, 0x2e, 0x2d, 0x6b, 0x48, 0x15, 0x36, 0x7f,
0xb8, 0x5f, 0x73, 0xad, 0xdd, 0xd6, 0x9d, 0x18, 0x77, 0xb2, 0xdf, 0x96, 0x29, 0x6f, 0x22, 0x77,
0x27, 0xa7, 0x8a, 0x5e, 0xb4, 0x84, 0x3f, 0xd6, 0xd8, 0x07, 0x26, 0xb8, 0x25, 0x22, 0x7d, 0x34,
0x4b, 0x54, 0xeb, 0x5a, 0xaa, 0x38, 0xd2, 0xe5, 0x37, 0xfb, 0x95, 0x2d, 0x47, 0xdf, 0xcc, 0xfc,
0x08, 0x9e, 0x49, 0xe2, 0xbf, 0x3c, 0x21, 0x8e, 0xf2, 0x45, 0x9d, 0x64, 0x5c, 0x79, 0xe7, 0x7f,
0x47, 0x58, 0x43, 0x4c, 0xd5, 0x5c, 0x74, 0x4b, 0x0b, 0x19, 0x8c, 0xd4, 0xb4, 0x5f, 0x4d, 0x83,
0x11, 0x49, 0xc6, 0x57, 0xb6, 0x11, 0x1c, 0x95, 0x20, 0x38, 0x92, 0x18, 0x8e, 0x72, 0x11, 0x2f,
0xe4, 0xfc, 0x5e, 0xf1, 0x73, 0x8c, 0xe4, 0x57, 0x61, 0x4f, 0x95, 0x6c, 0x61, 0x17, 0xa0, 0x03,
0x7a, 0x12, 0xad, 0xea, 0xb9, 0x78, 0xb5, 0x30, 0x72, 0x61, 0x6c, 0x58, 0xf0, 0xa6, 0xfc, 0x8c,
0x29, 0xa9, 0x94, 0x76, 0xef, 0x8f, 0xc6, 0x90, 0x8c, 0xdc, 0x77, 0x85, 0x18, 0x0c, 0x1d, 0xc4,
0xd0, 0x9d, 0x33, 0xf4, 0x42, 0xf0, 0x05, 0x3e, 0x8f, 0x79, 0x66, 0x7f, 0x84, 0x87, 0x50, 0x97,
0x51, 0xa7, 0xc1, 0xa5, 0x24, 0x64, 0x58, 0x29, 0x90, 0xc8, 0x9d, 0xf9, 0xfc, 0x93, 0x0e, 0x1b,
0x34, 0x0a, 0xa8, 0x91, 0x70, 0x09, 0xd3, 0xf0, 0x84, 0xd7, 0x1b, 0x3b, 0xae, 0x83, 0xae, 0x38,
0x24, 0xae, 0x35, 0x83, 0x04, 0x31, 0x5a, 0xb2, 0x88, 0xbb, 0x9c, 0x5f, 0xc1, 0x15, 0xba, 0xdc,
0x3b, 0x82, 0xa9, 0x93, 0x5c, 0x58, 0x4d, 0x0e, 0x89, 0xf6, 0x4b, 0xce, 0x6f, 0x26, 0x32, 0x41,
0x67, 0x82, 0x7e, 0x70, 0x8c, 0x31, 0x9a, 0x3d, 0x01, 0x00, 0xd8, 0xb0, 0x5d, 0xf0, 0xcb, 0xa0,
0x16, 0x95, 0x32, 0xbd, 0xb8, 0xb2, 0xee, 0x19, 0x3a, 0x22, 0x36, 0x5b, 0x24, 0x6e, 0x89, 0x41,
0x51, 0x22, 0x09, 0xec, 0x8c, 0xbd, 0x49, 0x9c, 0x1c, 0x89, 0xe0, 0x2a, 0xcd, 0x6e, 0xbc, 0x8c,
0xc4, 0xce, 0x10, 0xcc, 0x77, 0xe2, 0xd8, 0x2c, 0xda, 0x3d, 0x3e, 0xf3, 0x69, 0xa2, 0x1d, 0xc3,
0x3b, 0x23, 0x32, 0xeb, 0x97, 0xb1, 0x3b, 0x72, 0x64, 0xe4, 0xde, 0xa1, 0xd2, 0x7c, 0x85, 0x2a,
0xe2, 0x80, 0x10, 0xac, 0xc7, 0x1f, 0x7c, 0x3d, 0xff, 0x58, 0x58, 0x41, 0x80, 0x6b, 0x95, 0xdf,
0xba, 0x21, 0x49, 0xff, 0xbc, 0x93, 0x3b, 0x53, 0x94, 0x6d, 0x62, 0xbc, 0x26, 0xa3, 0xdd, 0xa6,
0x93, 0xb4, 0xed, 0x0b, 0xfa, 0xcf, 0x6b, 0x4c, 0xb0, 0x9d, 0xca, 0xb6, 0xf1, 0x94, 0x63, 0xc0,
0xd6, 0x7d, 0x86, 0x21, 0xd9, 0xff, 0xd8, 0xb4, 0x9d, 0xca, 0x7e, 0x03, 0x4f, 0x67, 0xc6, 0x2b,
0x4e, 0x39, 0x25, 0xde, 0x66, 0x05, 0xd5, 0xc0, 0x9d, 0x67, 0xdf, 0x9d, 0x64, 0x69, 0x4e, 0x69,
0x72, 0xb3, 0xb9, 0x9f, 0x67, 0xe8, 0x69, 0x53, 0x1e, 0x0a, 0xcd, 0xcc, 0xeb, 0x21, 0x37, 0x17,
0xb7, 0x85, 0xde, 0x7e, 0xe5, 0x8d, 0xcd, 0x7d, 0x28, 0x3f, 0xf7, 0xb4, 0xf6, 0xd3, 0xf8, 0x27,
0xd5, 0x0b, 0xaa, 0xcf, 0x4d, 0xe8, 0x92, 0x23, 0x4b, 0xb7, 0xe0, 0x50, 0x62, 0x46, 0x26, 0x9b,
0x4d, 0xf9, 0x04, 0xb2, 0x92, 0x6d, 0xb5, 0x35, 0x5a, 0x47, 0xf7, 0x6c, 0x55, 0x38, 0xa2, 0xb7,
0xbd, 0xdf, 0x26, 0x81, 0xf8, 0x51, 0xe4, 0xdc, 0xe1, 0xbb, 0x4d, 0x74, 0x4d, 0x3c, 0x12, 0xc9,
0x21, 0xc7, 0xf8, 0xf3, 0x0e, 0x3b, 0xf0, 0xe1, 0xc1, 0xc9, 0xdd, 0x44, 0x2b, 0xd9, 0x2e, 0x5c,
0xc3, 0x78, 0x8d, 0xb5, 0x63, 0xda, 0x3f, 0x96, 0xf4, 0x78, 0x25, 0xb1, 0x03, 0xd7, 0x4f, 0xb4,
0xff, 0x8e, 0x83, 0x85, 0x25, 0xb2, 0x48, 0xdb, 0xe3, 0x7d, 0x5e, 0x1a, 0x87, 0x5c, 0x74, 0x25,
0x11, 0x17, 0xfd, 0x4a, 0x65, 0xa3, 0xf3, 0x2d, 0x1b, 0xdf, 0x99, 0xaa, 0xfe, 0x88, 0x7d, 0x6f,
0xde, 0x51, 0xf8, 0x71, 0x77, 0xd7, 0xbb, 0x72, 0xca, 0xb3, 0x55, 0xd0, 0x17, 0xb1, 0x8e, 0x98,
0xf0, 0x2d, 0x2c, 0xc7, 0x4b, 0x5d, 0x0e, 0xfe, 0xf2, 0xc4, 0x2b, 0x39, 0xfe, 0xd5, 0xe8, 0x3a,
0x4b, 0xe2, 0x45, 0xb5, 0xc7, 0x0f, 0x49, 0x97, 0x27, 0x01, 0x69, 0xd1, 0xbf, 0x81, 0x95, 0xff,
0xfa, 0x8d, 0xc4, 0xc8, 0xbb, 0x9e, 0xa4, 0x62, 0xd9, 0x36, 0x0b, 0x20, 0xac, 0xd7, 0x38, 0xba,
0x1d, 0x86, 0x9e, 0x58, 0xc7, 0xc2, 0xcd, 0x95, 0x74, 0x3f, 0xe6, 0x7a, 0xc6, 0xb4, 0xee, 0x84,
0x02, 0x03, 0x08, 0xe2, 0x57, 0xfe, 0xbc, 0x60, 0xb9, 0xd2, 0x70, 0x2d, 0x52, 0x01, 0x43, 0x9c,
0x9a, 0xa5, 0xbf, 0xb4, 0xc4, 0x45, 0x3b, 0xb5, 0xc0, 0x67, 0xc2, 0xc7, 0x69, 0x08, 0x41, 0x7f,
0x52, 0x87, 0x04, 0x85, 0xf7, 0x33, 0x4d, 0xfa, 0x07, 0x2c, 0xb9, 0x77, 0x4f, 0xd1, 0xea, 0xe0,
0xad, 0xdf, 0xab, 0x5b, 0x42, 0xb6, 0xb7, 0xd8, 0x19, 0x79, 0xfb, 0x26, 0x1b, 0x1e, 0xf0, 0x91,
0x67, 0x4b, 0x2e, 0xb7, 0xed, 0xb0, 0x92, 0x33, 0x44, 0x22, 0xae, 0xfb, 0xed, 0x5f, 0x96, 0xdb,
0x2b, 0x9a, 0x14, 0x80, 0x6f, 0xd2, 0x14, 0x6c, 0x07, 0xed, 0xd1, 0x94, 0xdd, 0xfe, 0x17, 0xf2,
0x1e, 0xf9, 0x93, 0x15, 0x11, 0x4f, 0x82, 0xee, 0xb0, 0x85, 0xcd, 0x63, 0x21, 0xee, 0x63, 0x4e,
0x31, 0x83, 0x17, 0x59, 0xfd, 0x32, 0xa8, 0xf3, 0x36, 0xdf, 0xa6, 0xa3, 0xdb, 0xe4, 0x7c, 0x28,
0xf5, 0x49, 0x62, 0xcd, 0x55, 0x27, 0x1b, 0x59, 0xe2, 0x19, 0x64, 0x89, 0xe5, 0xce, 0x72, 0x51,
0x96, 0x30, 0x66, 0x89, 0xa1, 0xa2, 0x1f, 0xc1, 0x13, 0x35, 0xa9, 0x04, 0x4e, 0x65, 0xc9, 0x86,
0xcc, 0x41, 0xce, 0x93, 0x27, 0x31, 0xbc, 0xd9, 0x51, 0x6b, 0x6e, 0x53, 0xd0, 0x0b, 0x85, 0x25,
0x64, 0x99, 0x63, 0xdf, 0x87, 0x54, 0x5d, 0xc7, 0x0a, 0x2e, 0x4a, 0x52, 0xce, 0x28, 0x25, 0x8a,
0x39, 0xc5, 0x47, 0x6b, 0xb1, 0xb0, 0x88, 0xed, 0x87, 0xa1, 0xac, 0xde, 0x30, 0xc2, 0x8b, 0xfc,
0xe5, 0x15, 0x19, 0x7d, 0x84, 0xfc, 0x92, 0x28, 0x51, 0x1c, 0xfa, 0x50, 0xa3, 0xa0, 0x37, 0x49,
0x3b, 0x04, 0x9c, 0x40, 0x65, 0x27, 0xf6, 0x12, 0x61, 0xee, 0xa0, 0x80, 0xed, 0x16, 0xa2, 0xe0,
0x4f, 0xde, 0x6c, 0x62, 0xc7, 0x7f, 0xc3, 0xac, 0x64, 0x04, 0xc3, 0x88, 0x73, 0x1c, 0x4b, 0xc1,
0x7d, 0xd8, 0x14, 0x5c, 0x65, 0x43, 0x72, 0x46, 0xf9, 0xda, 0xfc, 0x80, 0x0a, 0x75, 0x07, 0xd9,
0x5b, 0xe4, 0x20, 0xd3, 0x42, 0xa7, 0xce, 0x42, 0x3f, 0x8a, 0xa6, 0xd6, 0x84, 0xbd, 0x26, 0x97,
0xbb, 0x0f, 0x42, 0x77, 0x32, 0x04, 0x04, 0x7f, 0x71, 0x6a, 0x83, 0xb9, 0xbb, 0xf7, 0xbb, 0x98,
0x7b, 0x72, 0xb7, 0x8f, 0xcd, 0xe0, 0x4f, 0xd6, 0x91, 0x45, 0x84, 0x68, 0x65, 0x47, 0xe4, 0xc6,
0x72, 0x59, 0x0c, 0x51, 0x2d, 0xce, 0xd8, 0x7c, 0x8d, 0xb1, 0x9b, 0x0f, 0xc2, 0x54, 0x90, 0x9b,
0x09, 0x14, 0xd4, 0x20, 0x3c, 0x3e, 0xb3, 0x44, 0xc9, 0xdf, 0xcb, 0x5f, 0xf7, 0xda, 0x6c, 0x76,
0xdc, 0x5d, 0xbe, 0xa2, 0x80, 0x3b, 0xc4, 0x08, 0xef, 0xb8, 0x22, 0x24, 0xf8, 0xef, 0xb8, 0xb3,
0xda, 0x6d, 0x4b, 0x77, 0xc3, 0xd7, 0x15, 0xbd, 0x52, 0x42, 0x08, 0x89, 0x60, 0xc3, 0x72, 0xf3,
0x10, 0xf3, 0xdd, 0xa7, 0xb2, 0x6c, 0xe0, 0x93, 0xe5, 0xc4, 0xbc, 0x37, 0x01, 0x96, 0x56, 0xd9,
0x73, 0x92, 0xf9, 0x03, 0x2c, 0xf5, 0x9e, 0x24, 0x00, 0x5f, 0x13, 0x9e, 0x42, 0xa6, 0x40, 0x95,
0xed, 0xa3, 0x37, 0xa3, 0xa5, 0x17, 0x3a, 0x51, 0x59, 0x00, 0x05, 0xb9, 0xf3, 0x4b, 0x05, 0xf8,
0x03, 0x39, 0x50, 0xe8, 0x60, 0xa4, 0xe3, 0x8b, 0x51, 0x11, 0x4f, 0x87, 0x16, 0x38, 0x74, 0x9b,
0xe5, 0x4c, 0xe7, 0xb5, 0xb3, 0x90, 0x67, 0x77, 0xf9, 0x53, 0x95, 0x89, 0x32, 0x3d, 0xda, 0xb4,
0xff, 0xd1, 0xf5, 0xc7, 0x96, 0xcb, 0x6f, 0x7e, 0x61, 0x8e, 0xcb, 0x6d, 0xb0, 0xec, 0xf4, 0x5f,
0xe9, 0x61, 0x3f, 0xba, 0x35, 0x2d, 0x5e, 0xb4, 0xbf, 0xdf, 0x95, 0x4c, 0xbd, 0x72, 0x52, 0x3c,
0x97, 0x6b, 0xbd, 0x72, 0x26, 0x10, 0x85, 0xfc, 0xca, 0xa9, 0x40, 0x94, 0x70, 0xa5, 0xfc, 0x60,
0x20, 0x2f, 0x3a, 0xd2, 0xe9, 0x81, 0x70, 0xb2, 0x23, 0x8d, 0xaf, 0x94, 0x2c, 0x67, 0xb7, 0xb2,
0x64, 0x81, 0x31, 0x90, 0xac, 0x83, 0x69, 0x3d, 0x40, 0xe1, 0xe4, 0x82, 0xeb, 0x81, 0xaa, 0x61,
0x47, 0x14, 0xdd, 0xce, 0x8f, 0x2b, 0x9b, 0x09, 0xf2, 0xd9, 0xb0, 0xe8, 0x61, 0x64, 0x58, 0x83,
0x15, 0x3f, 0x9d, 0x3c, 0xe0, 0x52, 0x4f, 0xf8, 0xf2, 0x27, 0x66, 0x9d, 0x23, 0x28, 0x66, 0x54,
0x49, 0x8c, 0x78, 0x58, 0xa6, 0xd4, 0x97, 0xfc, 0xc6, 0x24, 0x51, 0x1e, 0x43, 0x2b, 0xc0, 0x96,
0xc2, 0xc2, 0x7f, 0x80, 0xc1, 0xea, 0x1e, 0xf5, 0xae, 0x24, 0x43, 0x2c, 0xf7, 0xd1, 0x5a, 0x45,
0x04, 0x47, 0xaa, 0x7b, 0x96, 0x22, 0x01, 0xf7, 0xf0, 0x84, 0xee, 0x06, 0x74, 0x89, 0xe2, 0xe3,
0xe2, 0x97, 0x78, 0xee, 0xd2, 0x75, 0xaa, 0x48, 0xc7, 0x10, 0x8a, 0x13, 0xb0, 0xd8, 0x68, 0x63,
0x6f, 0x13, 0x74, 0xe2, 0x78, 0x8c, 0x46, 0x2a, 0xe7, 0x0f, 0x50, 0x40, 0x54, 0x32, 0x41, 0x7f,
0xb8, 0x19, 0xbd, 0x5a, 0x10, 0xd9, 0x53, 0x5e, 0x0d, 0xe2, 0xef, 0x1b, 0x92, 0x98, 0x2d, 0x02,
0x37, 0x4f, 0xbf, 0x52, 0x9e, 0x1b, 0x36, 0x28, 0xf9, 0xe7, 0x73, 0x43, 0x9a, 0x6c, 0x87, 0xa7,
0xbb, 0xe6, 0x0d, 0x28, 0x5c, 0x78, 0x0a, 0x50, 0x96, 0x17, 0x62, 0x9b, 0xff, 0xff, 0x64, 0xff,
0xa0, 0x8e, 0x5b, 0x22, 0xb9, 0x32, 0x59, 0xfc, 0x0a, 0x63, 0x42, 0xb6, 0x8e, 0xbb, 0x29, 0xb8,
0xb5, 0x82, 0x3f, 0xc3, 0xfa, 0x3f, 0x59, 0xcf, 0xc5, 0xe9, 0x96, 0x55, 0x00, 0x00
0x7e, 0xf7, 0xad, 0xf1, 0x93, 0xd1, 0xee, 0x26, 0xa9, 0x38, 0x38, 0x51, 0xb9, 0x27, 0xb1, 0x69,
0x5e, 0xf9, 0x33, 0xe3, 0xf1, 0xcc, 0x1d, 0x39, 0xe8, 0x14, 0x94, 0xc2, 0xf5, 0x0e, 0xa6, 0xbe,
0xbc, 0x28, 0xc5, 0x0b, 0x1e, 0x9b, 0xa7, 0xc8, 0xd2, 0xcb, 0x02, 0xcf, 0xe8, 0xaa, 0x84, 0xeb,
0x3c, 0x30, 0x30, 0xe3, 0xe8, 0x42, 0x80, 0xdb, 0xdf, 0x17, 0x4d, 0x3c, 0xa7, 0x87, 0x9b, 0xdb,
0xdb, 0xfb, 0x53, 0xdc, 0x65, 0xaa, 0x7f, 0xa2, 0x29, 0xec, 0x15, 0x7b, 0xbb, 0x07, 0x25, 0x7b,
0x5e, 0x5e, 0x82, 0x0f, 0x1d, 0x35, 0x9e, 0x3e, 0xcc, 0xd7, 0xd7, 0xde, 0x67, 0xec, 0xe9, 0xca,
0x4d, 0xab, 0x48, 0xa7, 0x00, 0xa4, 0x6f, 0x23, 0xc1, 0x4d, 0xa8, 0xdd, 0x38, 0x74, 0x8e, 0x43,
0x48, 0x3c, 0x72, 0x72, 0xc7, 0x13, 0x99, 0x96, 0x08, 0x39, 0x13, 0xde, 0x32, 0xc0, 0x1b, 0x12,
0xef, 0x1d, 0x17, 0xaf, 0x94, 0xc8, 0x83, 0x67, 0x1e, 0x7b, 0x22, 0x7f, 0xbf, 0xbe, 0xfa, 0x39,
0x8e, 0x83, 0x3b, 0xc8, 0x1e, 0x58, 0x14, 0x77, 0xbd, 0xdd, 0xd7, 0x36, 0x72, 0xa7, 0x6c, 0xb2,
0x8b, 0x10, 0xf1, 0xdc, 0xc1, 0x03, 0x43, 0x51, 0xe0, 0x43, 0x8c, 0xbc, 0x67, 0xdf, 0x62, 0x8d,
0x3f, 0x01, 0x36, 0xe3, 0x65, 0x84, 0x67, 0x21, 0x60, 0x92, 0x2a, 0xc4, 0xae, 0xdd, 0x57, 0x3a,
0x32, 0xbc, 0x2c, 0x8f, 0x18, 0x0f, 0xe9, 0x5a, 0xf6, 0x83, 0x76, 0x90, 0x20, 0x10, 0x37, 0x6e,
0x6e, 0x6f, 0x60, 0x35, 0x35, 0x5a, 0x17, 0xd3, 0x91, 0x1b, 0x1e, 0x31, 0x9f, 0xc9, 0x7b, 0x3f,
0x5c, 0xe0, 0x61, 0xaf, 0xf4, 0xb0, 0xa0, 0xbc, 0x92, 0xa2, 0x50, 0x3c, 0x22, 0x2c, 0xcf, 0xac,
0xf2, 0xd3, 0xc2, 0x78, 0x47, 0x24, 0x02, 0xf1, 0xe1, 0x35, 0x11, 0xaf, 0x16, 0x21, 0x4c, 0xac,
0x6a, 0x25, 0xa7, 0x89, 0x0f, 0x36, 0x2e, 0xdc, 0x9c, 0x4d, 0x67, 0xa9, 0xf4, 0xb4, 0xb8, 0x4b,
0x93, 0x97, 0x14, 0xac, 0x10, 0x1c, 0x3f, 0xc4, 0x4d, 0x79, 0x3d, 0x08, 0xe5, 0x7c, 0xc7, 0x2c,
0x48, 0xa9, 0x06, 0x30, 0x13, 0x4e, 0x6f, 0xc0, 0x52, 0xba, 0x03, 0x05, 0x63, 0x79, 0xca, 0x85,
0x22, 0xf9, 0x4f, 0xc7, 0xe0, 0xa1, 0x27, 0x24, 0x67, 0xe6, 0x45, 0x83, 0xa1, 0x19, 0x87, 0x81,
0x02, 0x80, 0x52, 0xa2, 0xcc, 0x97, 0x6e, 0x2c, 0xa7, 0xcf, 0x8f, 0xf6, 0x73, 0xe5, 0x51, 0x3c,
0xde, 0xc4, 0x8f, 0x6b, 0xf3, 0x27, 0xbe, 0x43, 0x82, 0x1f, 0x40, 0xf7, 0x27, 0x99, 0xcd, 0x88,
0xd3, 0x1e, 0x86, 0xce, 0xcf, 0x79, 0x24, 0x7b, 0x0c, 0xa0, 0xcd, 0xdd, 0x04, 0x14, 0xd3, 0x9d,
0x1a, 0x40, 0x5f, 0x58, 0xf6, 0x5c, 0x91, 0xb1, 0xd3, 0xec, 0x3f, 0x27, 0xa0, 0x86, 0xc8, 0x14,
0x32, 0x54, 0xac, 0x16, 0x38, 0x5e, 0xfe, 0xf0, 0x48, 0x99, 0xd5, 0x7c, 0xe1, 0xd5, 0x27, 0xc6,
0xb3, 0x2f, 0xb9, 0x53, 0x4d, 0x7c, 0xe8, 0x27, 0xe7, 0x73, 0x77, 0xe7, 0x26, 0x8a, 0x57, 0x80,
0x46, 0x21, 0x6b, 0x3b, 0x37, 0x77, 0x8a, 0xb0, 0xdc, 0x52, 0xb4, 0xb7, 0x1c, 0x2f, 0x15, 0x79,
0x55, 0x39, 0xe8, 0xd9, 0xcd, 0x26, 0xa8, 0x8f, 0x89, 0xb2, 0xf6, 0x96, 0xd3, 0xa7, 0xc8, 0x04,
0x14, 0xe8, 0xe5, 0xb0, 0x77, 0xef, 0x13, 0xd8, 0xd4, 0x6a, 0x61, 0x4d, 0xa7, 0x3b, 0xb8, 0xf8,
0xad, 0x0c, 0xf8, 0x71, 0xad, 0xae, 0x93, 0x25, 0x86, 0xf4, 0x08, 0x5c, 0x44, 0x9a, 0xe4, 0xe1,
0x2d, 0x22, 0xf1, 0x34, 0x5d, 0x49, 0x26, 0xd6, 0x90, 0x67, 0x64, 0x52, 0x38, 0x62, 0xde, 0x72,
0x4a, 0xdc, 0xcc, 0xf8, 0x28, 0xf0, 0xde, 0x49, 0xf9, 0x95, 0x7c, 0xef, 0x16, 0x0f, 0x96, 0xf0,
0xea, 0x54, 0x4d, 0x4e, 0x03, 0x6e, 0x79, 0x7b, 0x8a, 0x27, 0xdd, 0x77, 0xab, 0x11, 0xa6, 0x64,
0x48, 0x16, 0xd7, 0x1e, 0x8d, 0x90, 0x2f, 0x2b, 0x5e, 0x4a, 0x2a, 0x9d, 0xfb, 0xfd, 0x3d, 0xcd,
0x89, 0xd4, 0xaa, 0xc5, 0xf1, 0x9a, 0x73, 0xe5, 0x84, 0xbb, 0xce, 0xce, 0x5d, 0xde, 0xe5, 0x47,
0x48, 0x60, 0xa4, 0x56, 0x4e, 0xe0, 0xf2, 0xbe, 0x0c, 0x9c, 0xf3, 0x24, 0xe4, 0x11, 0x32, 0x48,
0x34, 0x77, 0x11, 0xbb, 0xbb, 0xda, 0x1a, 0xcd, 0xe1, 0x77, 0xd3, 0xbb, 0xbb, 0xa6, 0x85, 0xa5,
0xcc, 0x8d, 0x81, 0x90, 0x9d, 0xd4, 0x0a, 0x1a, 0x9a, 0xb8, 0x35, 0x39, 0x8d, 0xd0, 0xa9, 0x82,
0x55, 0xab, 0x1d, 0x79, 0xbf, 0xe5, 0xd6, 0x65, 0x78, 0x0c, 0x5c, 0xe6, 0x81, 0x16, 0x41, 0xdb,
0xe7, 0xb7, 0xde, 0x44, 0x23, 0xe8, 0x80, 0xa6, 0x90, 0xf7, 0xe0, 0x89, 0xc9, 0x38, 0xf4, 0x9f,
0xa0, 0x7a, 0x21, 0x13, 0x9f, 0x45, 0x78, 0xcf, 0x07, 0xf7, 0x8e, 0xfd, 0x10, 0x12, 0xd5, 0x39,
0x23, 0x5f, 0xb8, 0x0b, 0xfa, 0x42, 0x82, 0x10, 0x9c, 0x2b, 0x44, 0x14, 0x4c, 0xfc, 0x39, 0x26,
0x9e, 0xcb, 0x46, 0xfc, 0xae, 0x4c, 0x76, 0xfe, 0x33, 0x43, 0xcb, 0x04, 0xd4, 0xe9, 0xed, 0x25,
0x71, 0xf2, 0x48, 0x79, 0x27, 0x96, 0xc4, 0x79, 0xb2, 0x2b, 0x70, 0x55, 0xf9, 0x4b, 0x91, 0x23,
0x88, 0x1e, 0x14, 0x47, 0x77, 0xc0, 0x67, 0x4a, 0x67, 0xe9, 0xfa, 0x36, 0xbf, 0x86, 0x51, 0x03,
0x3e, 0x62, 0xdf, 0xf6, 0xf1, 0x50, 0x24, 0xbf, 0xca, 0xa9, 0x6b, 0x0a, 0xbf, 0x56, 0x6a, 0x22,
0x84, 0x3b, 0x8a, 0xfd, 0xd0, 0x9a, 0x31, 0x14, 0xe9, 0x65, 0xcc, 0x16, 0x18, 0x97, 0xec, 0xcb,
0x00, 0xaa, 0x10, 0x48, 0x1c, 0x04, 0x18, 0x8c, 0x5f, 0x04, 0xc0, 0x21, 0x7a, 0x52, 0x72, 0x0d,
0x59, 0x70, 0x8d, 0x48, 0x69, 0x31, 0x4c, 0x67, 0xc8, 0x47, 0x3c, 0x63, 0x70, 0x79, 0x0b, 0x22,
0xd2, 0x0a, 0x18, 0xa3, 0x22, 0x46, 0x8d, 0x63, 0x53, 0x55, 0x84, 0xe2, 0x97, 0x2c, 0x11, 0xfd,
0x80, 0x5f, 0x1e, 0xed, 0xd4, 0xeb, 0xb4, 0xca, 0x5f, 0xe3, 0x81, 0x83, 0x6a, 0x76, 0x01, 0xb4,
0x1e, 0xd5, 0xbe, 0x46, 0x83, 0xc0, 0x6c, 0x60, 0xd0, 0x50, 0xd7, 0x15, 0xc8, 0x89, 0xc4, 0xe5,
0xd8, 0x1e, 0x4f, 0xad, 0xfa, 0xff, 0xe6, 0x2c, 0xb8, 0xd8, 0x97, 0xa1, 0x0b, 0xc1, 0x5a, 0x9c,
0xaa, 0x88, 0x70, 0xc3, 0x1e, 0x00, 0x39, 0x40, 0xaf, 0x2e, 0x6e, 0x05, 0xe3, 0x5d, 0x4a, 0x22,
0xdd, 0x3f, 0x1d, 0xf1, 0x7e, 0x1c, 0x18, 0xd1, 0xa2, 0xc2, 0x0b, 0x72, 0xfc, 0xf4, 0x47, 0x94,
0x76, 0xf4, 0xa6, 0x50, 0x58, 0xb0, 0x78, 0xee, 0x63, 0x5f, 0xd4, 0x8f, 0xf0, 0xb2, 0x6e, 0xae,
0x59, 0x12, 0xfb, 0x20, 0x8e, 0xa7, 0xe2, 0xb3, 0x39, 0x73, 0x83, 0x21, 0xed, 0x57, 0x7a, 0x22,
0x35, 0x97, 0xd5, 0x8a, 0xf8, 0x92, 0xcb, 0xf5, 0x7e, 0x46, 0xb2, 0x83, 0x5e, 0x5d, 0xbc, 0x48,
0x9b, 0xe9, 0x65, 0x63, 0x2a, 0xe9, 0xa0, 0x21, 0x0e, 0x1a, 0x42, 0xc8, 0xce, 0xc6, 0x15, 0x46,
0xc8, 0x4b, 0x02, 0xfd, 0x91, 0xf5, 0xc8, 0x32, 0x90, 0x79, 0x52, 0x78, 0xf7, 0xe6, 0x8d, 0x7e,
0x05, 0xd7, 0xe7, 0xd0, 0x5a, 0x04, 0x5d, 0xf2, 0xb3, 0x15, 0xe2, 0x31, 0x14, 0xd4, 0xf3, 0x78,
0x19, 0x80, 0x70, 0x1a, 0x90, 0x4f, 0xc7, 0x96, 0x9b, 0xf4, 0x39, 0xd3, 0xbe, 0xab, 0x6b, 0x73,
0x56, 0x65, 0x0b, 0x3f, 0xeb, 0x13, 0xdb, 0x38, 0xcd, 0x2c, 0x31, 0xed, 0x39, 0xfd, 0x3b, 0x06,
0xee, 0x10, 0x2c, 0x71, 0x02, 0x6a, 0x1a, 0xf8, 0x4f, 0xa0, 0x0f, 0xf2, 0x1c, 0x05, 0x1e, 0x84,
0x18, 0x8b, 0xee, 0x5e, 0x14, 0x8b, 0x2e, 0x62, 0xa7, 0x57, 0x77, 0xc4, 0xb8, 0xb1, 0xec, 0xf1,
0x56, 0xc4, 0x56, 0xcd, 0x32, 0xa3, 0x86, 0x07, 0x4f, 0x8a, 0x3d, 0x60, 0x7e, 0xe4, 0x41, 0x36,
0x13, 0x52, 0xca, 0x95, 0x0b, 0x0f, 0x0b, 0x29, 0x62, 0x2d, 0x21, 0xd9, 0x05, 0x3d, 0xb7, 0x25,
0x2d, 0x8f, 0x45, 0x11, 0x71, 0xf1, 0xda, 0x25, 0x0b, 0x5f, 0x69, 0x12, 0x9f, 0x0e, 0x99, 0x14,
0xb5, 0xac, 0x17, 0xe5, 0xe5, 0x13, 0xd1, 0x2b, 0xe2, 0x77, 0x53, 0x04, 0xd5, 0xa4, 0x7b, 0x8a,
0x17, 0x7e, 0xfa, 0xd7, 0xe2, 0xb2, 0x37, 0x39, 0x5b, 0x86, 0x21, 0xe8, 0x7f, 0x4a, 0x43, 0x5e,
0xf1, 0xbe, 0x3e, 0xa5, 0x1b, 0xd5, 0xea, 0x46, 0xb3, 0xa9, 0xd1, 0xce, 0x9a, 0x5e, 0xba, 0xae,
0x6f, 0x76, 0x95, 0xd2, 0x86, 0x53, 0xbf, 0x42, 0x16, 0xa7, 0x45, 0xf2, 0xd9, 0x25, 0x86, 0xb4,
0xb2, 0xc0, 0x26, 0x53, 0x47, 0x1c, 0x0d, 0xea, 0x16, 0x37, 0xef, 0x2a, 0x87, 0xdf, 0xbd, 0x3b,
0x39, 0x39, 0xe9, 0x92, 0x7f, 0xf7, 0x97, 0x61, 0x71, 0x65, 0x40, 0x83, 0x1f, 0xb1, 0x25, 0x40,
0xe6, 0x20, 0x31, 0x62, 0x8b, 0x89, 0xd4, 0xb8, 0x54, 0xef, 0x7d, 0x02, 0x26, 0x05, 0xef, 0x19,
0x77, 0x65, 0x91, 0x35, 0x65, 0xc2, 0x81, 0xad, 0x10, 0x0b, 0xd7, 0x1a, 0x0d, 0x01, 0x03, 0xe1,
0x00, 0x96, 0x11, 0xc2, 0x81, 0xa2, 0x12, 0x1b, 0xe5, 0x15, 0xf1, 0x77, 0x95, 0x05, 0xa4, 0x50,
0x0e, 0x40, 0x48, 0xaa, 0x8e, 0xf7, 0x95, 0xc9, 0x8b, 0xad, 0x58, 0x00, 0x45, 0xc4, 0xf2, 0x26,
0xe0, 0x61, 0xa7, 0x30, 0xf8, 0x20, 0x6b, 0x11, 0x81, 0x2a, 0x55, 0x4e, 0x93, 0xc5, 0xb4, 0x5c,
0x60, 0x93, 0xaf, 0x62, 0x94, 0x5f, 0xd7, 0xd8, 0xc7, 0xf6, 0xe1, 0x0a, 0x44, 0xea, 0x47, 0xfc,
0xbe, 0x18, 0xf2, 0xc8, 0xc1, 0x04, 0xf7, 0x7f, 0x63, 0x2c, 0x20, 0x56, 0x4c, 0x0e, 0x21, 0x85,
0x33, 0x4e, 0x89, 0x33, 0x15, 0x1c, 0xe0, 0xe9, 0x26, 0x7e, 0x7e, 0x69, 0x02, 0x82, 0xb5, 0x63,
0xd4, 0x4d, 0xec, 0x62, 0xe3, 0xe0, 0xec, 0x00, 0x11, 0x67, 0xa5, 0x72, 0xc9, 0x67, 0xca, 0x6f,
0x37, 0xa6, 0xd7, 0xcc, 0x20, 0x52, 0xb0, 0x10, 0x8a, 0xbf, 0x82, 0x10, 0x35, 0xe9, 0xfc, 0x90,
0x43, 0xbc, 0xfa, 0xec, 0xcd, 0x04, 0x0b, 0x8a, 0xd4, 0x0b, 0x02, 0x4a, 0x8f, 0x17, 0x8d, 0xc1,
0x2a, 0x96, 0x11, 0x78, 0xc3, 0xc4, 0xb8, 0xa4, 0x36, 0x04, 0xe8, 0x43, 0x96, 0xde, 0x83, 0xe7,
0x3f, 0x79, 0x52, 0xab, 0xd5, 0xcc, 0x38, 0x42, 0x61, 0xb3, 0x8f, 0xbe, 0x1b, 0xe3, 0x9d, 0x69,
0xe5, 0x1a, 0x4f, 0x72, 0xc9, 0x75, 0xe2, 0x76, 0x65, 0x11, 0x64, 0x0e, 0x24, 0x0c, 0x60, 0x6a,
0x49, 0x2b, 0x9e, 0x9f, 0x9a, 0xda, 0xd0, 0x6d, 0xbc, 0x37, 0xb6, 0xb5, 0x6f, 0x8b, 0x1b, 0x15,
0x49, 0x99, 0x6b, 0x66, 0x05, 0x6f, 0x1f, 0x64, 0x22, 0xaf, 0x3c, 0x11, 0xa5, 0xdd, 0x5e, 0x9c,
0xaa, 0x95, 0x9d, 0x5b, 0xb3, 0x6d, 0x0e, 0xcd, 0xa6, 0x53, 0xc7, 0xc6, 0x33, 0x79, 0x44, 0x69,
0x22, 0xfc, 0x4e, 0x70, 0x1d, 0x54, 0x13, 0x0f, 0x60, 0x29, 0x4d, 0x7d, 0x0f, 0x18, 0xee, 0xa0,
0xf4, 0xe5, 0x71, 0x2d, 0xc5, 0x68, 0xec, 0x81, 0xc4, 0xc3, 0x23, 0x95, 0x33, 0x5e, 0xf3, 0x96,
0xec, 0x0e, 0x17, 0x1c, 0x89, 0xb8, 0xb7, 0x55, 0xbe, 0xd7, 0x2d, 0x51, 0x88, 0x43, 0x73, 0x89,
0xa8, 0xf1, 0xbc, 0x1b, 0x48, 0x38, 0xb5, 0xf1, 0x44, 0xb8, 0xb4, 0xac, 0x21, 0x55, 0xd8, 0xfc,
0xe1, 0x7e, 0xcd, 0xb5, 0x76, 0x5b, 0x77, 0x62, 0xdc, 0xc9, 0x7e, 0x5b, 0xa6, 0xbc, 0x89, 0xdc,
0x9d, 0x9c, 0x2a, 0x7a, 0xd1, 0x12, 0xfe, 0x58, 0x63, 0x1f, 0x98, 0xe0, 0x96, 0x88, 0xf4, 0xd1,
0x2c, 0x51, 0xad, 0x6b, 0xa9, 0xe2, 0x48, 0x97, 0xdf, 0xec, 0x57, 0xb6, 0x1c, 0x7d, 0x33, 0xf3,
0x23, 0x78, 0x26, 0x89, 0xff, 0xf2, 0x84, 0x38, 0xca, 0x17, 0x75, 0x92, 0x71, 0xe5, 0x9d, 0xff,
0x1d, 0x61, 0x0d, 0x31, 0x55, 0x73, 0xd1, 0x2d, 0x2d, 0x64, 0x30, 0x52, 0xd3, 0x7e, 0x35, 0x0d,
0x46, 0x24, 0x19, 0x5f, 0xd9, 0x46, 0x70, 0x54, 0x82, 0xe0, 0x48, 0x62, 0x38, 0xca, 0x45, 0xbc,
0x90, 0xf3, 0x7b, 0xcd, 0xcf, 0x31, 0x92, 0x5f, 0x85, 0x3d, 0x55, 0xb2, 0x85, 0x5d, 0x80, 0x0e,
0xe8, 0x49, 0xb4, 0xaa, 0xe7, 0xe2, 0xd5, 0xc2, 0xc8, 0x85, 0xb1, 0x61, 0xc1, 0x9b, 0xf2, 0x33,
0xa6, 0xa4, 0x52, 0xda, 0xbd, 0x3f, 0x1a, 0x43, 0x32, 0xf2, 0xd0, 0x15, 0x62, 0x30, 0x74, 0x10,
0x43, 0x77, 0xce, 0xd0, 0x0b, 0xc1, 0x17, 0xf8, 0x3c, 0xe6, 0x99, 0xfd, 0x11, 0x1e, 0x42, 0x5d,
0x46, 0x9d, 0x06, 0x97, 0x92, 0x90, 0x61, 0xa5, 0x40, 0x22, 0x77, 0xe6, 0xf3, 0x4f, 0x3a, 0x6c,
0xd0, 0x28, 0xa0, 0x46, 0xc2, 0x25, 0x4c, 0xc3, 0x13, 0x5e, 0x6f, 0xec, 0xb8, 0x0e, 0xba, 0xe2,
0x90, 0xb8, 0xd6, 0x0c, 0x12, 0xc4, 0x68, 0xc9, 0x22, 0xee, 0x72, 0x7e, 0x05, 0x57, 0xe8, 0x72,
0xef, 0x08, 0xa6, 0x4e, 0x72, 0x61, 0x35, 0x39, 0x24, 0xda, 0x2f, 0x39, 0xbf, 0x99, 0xc8, 0x04,
0x9d, 0x09, 0xfa, 0xc1, 0x31, 0xc6, 0x68, 0xf6, 0x0d, 0x00, 0xc0, 0x86, 0xed, 0x82, 0x5f, 0x06,
0xb5, 0xa8, 0x94, 0xe9, 0xc5, 0xb5, 0xf5, 0xc0, 0xd0, 0x11, 0xb1, 0xd9, 0x22, 0x71, 0x4b, 0x0c,
0x8a, 0x12, 0x49, 0x60, 0x67, 0xec, 0x4d, 0xe2, 0xe4, 0x48, 0x04, 0x57, 0x69, 0x76, 0xe3, 0x65,
0x24, 0x76, 0x86, 0x60, 0xbe, 0x13, 0xc7, 0x66, 0xd1, 0xee, 0xf1, 0x99, 0x4f, 0x13, 0xed, 0x18,
0xde, 0x19, 0x91, 0x59, 0xbf, 0x8c, 0xdd, 0x91, 0x23, 0x90, 0xa3, 0x68, 0x66, 0xae, 0x3f, 0x16,
0x09, 0x0e, 0x10, 0x99, 0x4e, 0x73, 0x59, 0x41, 0xa5, 0x3c, 0x2d, 0xb8, 0x3a, 0x97, 0x61, 0x7f,
0x87, 0x3d, 0xf0, 0xe5, 0xad, 0x88, 0xd3, 0x45, 0xb0, 0x98, 0x7f, 0x70, 0x65, 0xf8, 0x63, 0x61,
0x05, 0x01, 0x2e, 0x74, 0x7e, 0xdf, 0x87, 0x24, 0xcd, 0xf7, 0x4e, 0xee, 0x40, 0x52, 0xb6, 0x03,
0xf2, 0x9a, 0x80, 0x77, 0xdb, 0x5d, 0xd2, 0xf3, 0x2f, 0x18, 0x0f, 0x2f, 0x50, 0xc1, 0xf0, 0x2a,
0xdb, 0x96, 0x57, 0x8e, 0x01, 0xfb, 0xfe, 0x19, 0x86, 0x64, 0xf3, 0x64, 0xd3, 0xf0, 0x2a, 0xfb,
0xbd, 0x43, 0x3a, 0x33, 0x5e, 0xae, 0xca, 0x29, 0xf1, 0x1e, 0x2d, 0xe8, 0x15, 0x6e, 0x5b, 0xfb,
0xee, 0x64, 0x53, 0xe2, 0x1b, 0x99, 0xd1, 0xe6, 0x66, 0xa0, 0xa1, 0xa7, 0x1d, 0x7d, 0xa8, 0x52,
0x33, 0x97, 0x89, 0xdc, 0x5c, 0xde, 0x15, 0x36, 0x06, 0x2a, 0x6f, 0xdc, 0x19, 0x80, 0xda, 0x75,
0xcf, 0xbe, 0x40, 0x1a, 0x3c, 0xa5, 0x6e, 0x42, 0xe9, 0xba, 0x09, 0x5d, 0x72, 0xde, 0xe9, 0x0e,
0xbc, 0x51, 0xcc, 0xc8, 0x64, 0xb3, 0xa3, 0x9f, 0x40, 0x56, 0xb2, 0x7d, 0xba, 0x46, 0xeb, 0xe8,
0x81, 0xad, 0x0a, 0xe7, 0xfb, 0xb6, 0x37, 0xeb, 0x24, 0x10, 0x3f, 0xc7, 0x9c, 0x3b, 0xb9, 0xb7,
0x89, 0xae, 0x89, 0xe7, 0x29, 0x39, 0xe4, 0x18, 0x7f, 0x1b, 0x62, 0x07, 0x3e, 0x3c, 0x75, 0xb9,
0x9b, 0x68, 0x25, 0xdb, 0xc2, 0x6b, 0x18, 0xaf, 0xb1, 0x76, 0x4c, 0xfb, 0xc7, 0x92, 0x1e, 0x2f,
0x43, 0x76, 0xe0, 0xfa, 0x89, 0xf6, 0xdf, 0x71, 0xb0, 0xb0, 0x44, 0x16, 0x69, 0x6f, 0xbd, 0xcf,
0xeb, 0xea, 0x90, 0x8b, 0xae, 0x24, 0x5c, 0xa3, 0x53, 0xaa, 0x6c, 0xb4, 0xcd, 0x65, 0xd7, 0x3c,
0x53, 0xd5, 0x1f, 0xb1, 0x69, 0xce, 0xdb, 0x11, 0x3f, 0xee, 0x6e, 0x99, 0x57, 0x4e, 0x79, 0xaa,
0x0b, 0xfa, 0x22, 0xd6, 0x11, 0xb3, 0xc5, 0x85, 0xe5, 0x78, 0xa9, 0xbf, 0xc2, 0x9f, 0xad, 0x78,
0xa5, 0x40, 0xb8, 0x1e, 0xdd, 0x64, 0x15, 0x80, 0x28, 0x15, 0xf9, 0x09, 0xeb, 0xf2, 0x0c, 0x22,
0xed, 0x18, 0x6c, 0x60, 0xe5, 0x3f, 0x9d, 0x23, 0x31, 0xf2, 0x96, 0x29, 0xa9, 0x58, 0xb6, 0xcd,
0x02, 0xc8, 0x09, 0x6a, 0x1c, 0xdd, 0x0e, 0x43, 0x4f, 0xac, 0x63, 0xe1, 0xe6, 0xea, 0xc1, 0x1f,
0x73, 0x0d, 0x67, 0x5a, 0x77, 0x42, 0x81, 0x01, 0x04, 0xf1, 0x2b, 0x7f, 0x5e, 0xb0, 0x5c, 0x69,
0xb8, 0x16, 0xa9, 0x80, 0x21, 0x4e, 0xcd, 0xd2, 0x9f, 0x69, 0xe2, 0xa2, 0x9d, 0x5a, 0xe0, 0x70,
0xe1, 0xe3, 0x34, 0x84, 0x8c, 0x61, 0x52, 0x87, 0xec, 0x86, 0x37, 0x43, 0x4d, 0xfa, 0x07, 0x2c,
0xb9, 0xf7, 0x40, 0xd1, 0xea, 0xe0, 0xad, 0xdf, 0xab, 0x5b, 0x42, 0xb6, 0x77, 0xd8, 0x56, 0x79,
0xfb, 0x0e, 0x1d, 0x9e, 0x0e, 0x92, 0x07, 0x53, 0xae, 0xb6, 0xed, 0xb0, 0x92, 0x33, 0x44, 0x22,
0xee, 0x0a, 0xee, 0x5f, 0x96, 0xbb, 0x6b, 0x9a, 0x54, 0x8f, 0x6f, 0xd2, 0x14, 0xec, 0x25, 0xed,
0xd1, 0x94, 0xdd, 0xfe, 0x17, 0x92, 0x26, 0xf9, 0x7b, 0x17, 0x11, 0xcf, 0xa0, 0xee, 0xb1, 0xff,
0xcd, 0x03, 0x29, 0x6e, 0x82, 0x4e, 0x31, 0xfd, 0x17, 0x25, 0xc1, 0x32, 0xa8, 0xf3, 0x1e, 0xe1,
0x6b, 0xa1, 0x65, 0x28, 0xf5, 0x49, 0x62, 0xcd, 0x95, 0x36, 0x1b, 0x29, 0xe6, 0x19, 0xa4, 0x98,
0xe5, 0xce, 0x72, 0x51, 0x96, 0x6d, 0x66, 0x59, 0xa5, 0xa2, 0x1f, 0xc1, 0x13, 0x35, 0x29, 0x23,
0x4e, 0x65, 0xbd, 0x87, 0xcc, 0x41, 0xc2, 0x94, 0x27, 0x31, 0xbc, 0xdd, 0x51, 0xa8, 0x6e, 0x53,
0xd0, 0x0b, 0x55, 0x29, 0xa4, 0xa8, 0x63, 0xdf, 0x87, 0x3c, 0x5f, 0xc7, 0xf2, 0x2f, 0x4a, 0xf2,
0xd5, 0x28, 0x25, 0x8a, 0x51, 0xf7, 0x83, 0xb5, 0x58, 0x58, 0xc4, 0xf6, 0xc3, 0x50, 0x96, 0x7e,
0x98, 0x1e, 0x88, 0xe4, 0xe7, 0x15, 0x19, 0x7d, 0x80, 0xe4, 0x94, 0x28, 0x51, 0x1c, 0xfa, 0x50,
0xe0, 0xa0, 0x37, 0x49, 0xdb, 0x0b, 0x9c, 0x40, 0x65, 0x27, 0xf6, 0x12, 0x61, 0xee, 0xa0, 0x80,
0xbd, 0x1a, 0xa2, 0xe0, 0xef, 0xe5, 0x6c, 0x62, 0xc7, 0x7f, 0xc3, 0xac, 0xde, 0x04, 0xc3, 0x88,
0x73, 0x1c, 0x4b, 0xc1, 0xbd, 0xdf, 0x14, 0x5c, 0x65, 0x43, 0x72, 0x46, 0xf9, 0xda, 0xfc, 0x80,
0x0a, 0x75, 0x0f, 0xa9, 0x5f, 0xe4, 0x20, 0xd3, 0x42, 0xa7, 0xce, 0x42, 0x3f, 0x8a, 0xa6, 0xd6,
0x84, 0xbd, 0x26, 0x97, 0xfb, 0xf7, 0x42, 0x77, 0x32, 0x04, 0x04, 0x7f, 0xae, 0x6a, 0x83, 0xb9,
0xfb, 0xf3, 0x5d, 0xcc, 0x7d, 0x73, 0xb7, 0xcf, 0xdc, 0xe0, 0xef, 0xdd, 0x91, 0x45, 0x84, 0x68,
0x65, 0x3b, 0xe5, 0xd6, 0x72, 0x59, 0x0c, 0x51, 0x2d, 0xce, 0xd8, 0x7c, 0x8d, 0xb1, 0xdb, 0xf7,
0xc2, 0x54, 0x90, 0x9b, 0x09, 0x54, 0xe3, 0x20, 0x3c, 0x3e, 0xb3, 0x44, 0xc9, 0xcf, 0xe5, 0x4f,
0x83, 0x6d, 0x76, 0x4a, 0xee, 0xaf, 0x5e, 0x51, 0xc0, 0x1d, 0x62, 0x84, 0x77, 0x5c, 0x11, 0x12,
0xfc, 0xf7, 0xdc, 0x59, 0xed, 0xb6, 0xa5, 0xfb, 0xe1, 0xeb, 0x8a, 0x5e, 0x29, 0x21, 0x84, 0x44,
0xb0, 0xdb, 0xb9, 0x79, 0x02, 0xfa, 0xfe, 0x63, 0x59, 0x36, 0xf0, 0xd1, 0x72, 0x62, 0xde, 0xd8,
0x00, 0x4b, 0xab, 0xec, 0x39, 0x06, 0xfd, 0x1e, 0x96, 0x7a, 0x4f, 0x12, 0x80, 0xaf, 0x09, 0x4f,
0x21, 0x53, 0xa0, 0xca, 0xf6, 0xb9, 0x9d, 0xd1, 0xd2, 0x0b, 0x9d, 0xa8, 0x2c, 0x80, 0x82, 0xdc,
0xf9, 0x8d, 0x04, 0xfc, 0x75, 0x1d, 0xa8, 0x92, 0x30, 0xd2, 0xf1, 0xc5, 0xa8, 0x88, 0xa7, 0x43,
0x0b, 0x1c, 0xba, 0xcd, 0x72, 0xa6, 0xf3, 0xda, 0x41, 0xca, 0xb3, 0xfb, 0xfc, 0x91, 0xcc, 0x44,
0x99, 0x9e, 0x6c, 0xda, 0xff, 0x20, 0x12, 0x6b, 0x5f, 0xe6, 0xb8, 0xdc, 0x06, 0xcb, 0x8e, 0x0e,
0x96, 0x9e, 0x14, 0xa4, 0x5b, 0xd3, 0xe2, 0x15, 0xff, 0xf9, 0xae, 0x64, 0xea, 0x95, 0x63, 0xe6,
0xb9, 0x5c, 0xeb, 0x95, 0x03, 0x85, 0x28, 0xe4, 0x57, 0x8e, 0x14, 0xa2, 0x84, 0x2b, 0xe5, 0xa7,
0x0a, 0x79, 0xc5, 0x92, 0x4e, 0x0f, 0x84, 0x93, 0x9d, 0x87, 0x7c, 0xa5, 0xde, 0x39, 0xbb, 0x93,
0xf5, 0x0e, 0x8c, 0x81, 0x64, 0x1d, 0x4c, 0xeb, 0x11, 0xaa, 0x2e, 0x17, 0x5c, 0x0f, 0x54, 0x0d,
0x3b, 0xa2, 0xe8, 0x76, 0x7e, 0x5c, 0xd9, 0x4c, 0x90, 0xcf, 0x86, 0x45, 0x0f, 0x23, 0xc3, 0x1a,
0xac, 0xf8, 0xe9, 0xe4, 0x11, 0x97, 0x7a, 0xc2, 0x97, 0x3f, 0x31, 0xeb, 0x1c, 0x41, 0x31, 0xa3,
0x4a, 0x62, 0xc4, 0xc3, 0x32, 0xa5, 0xbe, 0xe2, 0xd7, 0x2d, 0x89, 0xf2, 0x14, 0x5a, 0x01, 0xf6,
0x23, 0x16, 0xfe, 0x23, 0x0c, 0x56, 0xf7, 0xa8, 0x77, 0x25, 0x19, 0x62, 0xb9, 0x4f, 0xd6, 0x2a,
0x22, 0x38, 0x52, 0xdd, 0xb3, 0x14, 0x09, 0xb8, 0x87, 0xc7, 0x7b, 0x37, 0xa0, 0x4b, 0x14, 0x1f,
0x17, 0xbf, 0xc4, 0x73, 0x97, 0xae, 0x53, 0x45, 0x3a, 0x86, 0x50, 0x1c, 0x9f, 0xc5, 0x2e, 0x1d,
0x7b, 0x9b, 0xa0, 0x13, 0xc7, 0x63, 0x34, 0x52, 0x39, 0xbf, 0x87, 0x02, 0xa2, 0x92, 0x09, 0xfa,
0xfd, 0xed, 0xe8, 0xd5, 0x82, 0xc8, 0x9e, 0xf2, 0x6a, 0x10, 0x7f, 0x1c, 0x91, 0xc4, 0x6c, 0x11,
0xb8, 0x79, 0xfa, 0x95, 0xf2, 0xdc, 0xb0, 0x41, 0xc9, 0x3f, 0x9f, 0x1b, 0xd2, 0x64, 0x2f, 0x3d,
0xdd, 0x72, 0x6f, 0x40, 0xe1, 0xc2, 0x53, 0x80, 0xb2, 0xbc, 0x10, 0xf7, 0x08, 0xfe, 0x4f, 0x36,
0x1f, 0xea, 0xb8, 0x9f, 0x92, 0x2b, 0x93, 0xc5, 0x4f, 0x38, 0x26, 0x64, 0xeb, 0xb8, 0x15, 0x83,
0xfb, 0x32, 0xf8, 0x1b, 0xae, 0xff, 0x03, 0x0d, 0x22, 0xe8, 0x1f, 0xd3, 0x55, 0x00, 0x00
};

View File

@ -85,6 +85,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
Bus::setCCTBlend(strip.cctBlending);
Bus::setAutoWhiteMode(request->arg(F("AW")).toInt());
strip.setTargetFps(request->arg(F("FR")).toInt());
strip.useLedsArray = request->hasArg(F("LD"));
bool busesChanged = false;
for (uint8_t s = 0; s < WLED_MAX_BUSSES; s++) {

View File

@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2208041
#define VERSION 2208051
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG

View File

@ -326,6 +326,7 @@ void getSettingsJS(byte subPage, char* dest)
sappend('v',SET_F("CB"),strip.cctBlending);
sappend('v',SET_F("FR"),strip.getTargetFps());
sappend('v',SET_F("AW"),Bus::getAutoWhiteMode());
sappend('v',SET_F("LD"),strip.useLedsArray);
for (uint8_t s=0; s < busses.getNumBusses(); s++) {
Bus* bus = busses.getBus(s);