Code optimisations in effects.

Remove Wire initialisation from RTC.
Peek fix.
This commit is contained in:
Blaz Kristan 2022-08-09 21:14:37 +02:00
parent 7befafe7b7
commit 957948f906
14 changed files with 1459 additions and 1558 deletions

View File

@ -22,6 +22,7 @@ class RTCUsermod : public Usermod {
void setup() { void setup() {
PinManagerPinType pins[2] = { { HW_PIN_SCL, true }, { HW_PIN_SDA, true } }; PinManagerPinType pins[2] = { { HW_PIN_SCL, true }, { HW_PIN_SDA, true } };
if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) { disabled = true; return; } if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) { disabled = true; return; }
RTC.begin();
time_t rtcTime = RTC.get(); time_t rtcTime = RTC.get();
if (rtcTime) { if (rtcTime) {
toki.setTime(rtcTime,TOKI_NO_MS_ACCURACY,TOKI_TS_RTC); toki.setTime(rtcTime,TOKI_NO_MS_ACCURACY,TOKI_TS_RTC);

View File

@ -104,7 +104,7 @@ uint16_t blink(uint32_t color1, uint32_t color2, bool strobe, bool do_palette) {
uint32_t color = on ? color1 : color2; uint32_t color = on ? color1 : color2;
if (color == color1 && do_palette) if (color == color1 && do_palette)
{ {
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
} }
} else SEGMENT.fill(color); } else SEGMENT.fill(color);
@ -341,7 +341,7 @@ uint16_t mode_breath(void) {
} }
uint8_t lum = 30 + var; uint8_t lum = 30 + var;
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0), lum)); SEGMENT.setPixelColor(i, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0), lum));
} }
@ -357,7 +357,7 @@ uint16_t mode_fade(void) {
uint16_t counter = (strip.now * ((SEGMENT.speed >> 3) +10)); uint16_t counter = (strip.now * ((SEGMENT.speed >> 3) +10));
uint8_t lum = triwave16(counter) >> 8; uint8_t lum = triwave16(counter) >> 8;
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0), lum)); SEGMENT.setPixelColor(i, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0), lum));
} }
@ -440,7 +440,7 @@ uint16_t mode_rainbow_cycle(void) {
uint16_t counter = (strip.now * ((SEGMENT.speed >> 2) +2)) & 0xFFFF; uint16_t counter = (strip.now * ((SEGMENT.speed >> 2) +2)) & 0xFFFF;
counter = counter >> 8; counter = counter >> 8;
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
//intensity/29 = 0 (1/16) 1 (1/8) 2 (1/4) 3 (1/2) 4 (1) 5 (2) 6 (4) 7 (8) 8 (16) //intensity/29 = 0 (1/16) 1 (1/8) 2 (1/4) 3 (1/2) 4 (1) 5 (2) 6 (4) 7 (8) 8 (16)
uint8_t index = (i * (16 << (SEGMENT.intensity /29)) / SEGLEN) + counter; uint8_t index = (i * (16 << (SEGMENT.intensity /29)) / SEGLEN) + counter;
SEGMENT.setPixelColor(i, SEGMENT.color_wheel(index)); SEGMENT.setPixelColor(i, SEGMENT.color_wheel(index));
@ -460,7 +460,7 @@ uint16_t running(uint32_t color1, uint32_t color2, bool theatre = false) {
uint32_t it = strip.now / cycleTime; uint32_t it = strip.now / cycleTime;
bool usePalette = color1 == SEGCOLOR(0); bool usePalette = color1 == SEGCOLOR(0);
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint32_t col = color2; uint32_t col = color2;
if (usePalette) color1 = SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0); if (usePalette) color1 = SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0);
if (theatre) { if (theatre) {
@ -507,7 +507,7 @@ uint16_t running_base(bool saw, bool dual=false) {
uint8_t x_scale = SEGMENT.intensity >> 2; uint8_t x_scale = SEGMENT.intensity >> 2;
uint32_t counter = (strip.now * SEGMENT.speed) >> 9; uint32_t counter = (strip.now * SEGMENT.speed) >> 9;
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint16_t a = i*x_scale - counter; uint16_t a = i*x_scale - counter;
if (saw) { if (saw) {
a &= 0xFF; a &= 0xFF;
@ -663,7 +663,7 @@ static const char _data_FX_MODE_DISSOLVE_RANDOM[] PROGMEM = "Dissolve Rnd@Repeat
* Inspired by www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/ * Inspired by www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/
*/ */
uint16_t mode_sparkle(void) { uint16_t mode_sparkle(void) {
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1));
} }
uint32_t cycleTime = 10 + (255 - SEGMENT.speed)*2; uint32_t cycleTime = 10 + (255 - SEGMENT.speed)*2;
@ -687,7 +687,7 @@ static const char _data_FX_MODE_SPARKLE[] PROGMEM = "Sparkle@!,;!,!,;!;1d,2d";
* Inspired by www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/ * Inspired by www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/
*/ */
uint16_t mode_flash_sparkle(void) { uint16_t mode_flash_sparkle(void) {
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
} }
@ -709,13 +709,13 @@ static const char _data_FX_MODE_FLASH_SPARKLE[] PROGMEM = "Sparkle Dark@!,!;Bg,F
* Inspired by www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/ * Inspired by www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/
*/ */
uint16_t mode_hyper_sparkle(void) { uint16_t mode_hyper_sparkle(void) {
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
} }
if (strip.now - SEGENV.aux0 > SEGENV.step) { if (strip.now - SEGENV.aux0 > SEGENV.step) {
if(random8((255-SEGMENT.intensity) >> 4) == 0) { if(random8((255-SEGMENT.intensity) >> 4) == 0) {
for(uint16_t i = 0; i < MAX(1, SEGLEN/3); i++) { for (int i = 0; i < MAX(1, SEGLEN/3); i++) {
if (strip.isMatrix) SEGMENT.setPixelColorXY(random16(SEGLEN), random16(0,SEGMENT.virtualHeight()), SEGCOLOR(1)); if (strip.isMatrix) SEGMENT.setPixelColorXY(random16(SEGLEN), random16(0,SEGMENT.virtualHeight()), SEGCOLOR(1));
else SEGMENT.setPixelColor(random16(SEGLEN), SEGCOLOR(1)); else SEGMENT.setPixelColor(random16(SEGLEN), SEGCOLOR(1));
} }
@ -732,7 +732,7 @@ static const char _data_FX_MODE_HYPER_SPARKLE[] PROGMEM = "Sparkle+@!,!;Bg,Fx,;!
* Strobe effect with different strobe count and pause, controlled by speed. * Strobe effect with different strobe count and pause, controlled by speed.
*/ */
uint16_t mode_multi_strobe(void) { uint16_t mode_multi_strobe(void) {
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1));
} }
@ -763,7 +763,7 @@ static const char _data_FX_MODE_MULTI_STROBE[] PROGMEM = "Strobe Mega@!,!;!,!,;!
*/ */
uint16_t mode_android(void) { uint16_t mode_android(void) {
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1));
} }
@ -791,15 +791,15 @@ uint16_t mode_android(void) {
if (a + SEGENV.aux1 < SEGLEN) if (a + SEGENV.aux1 < SEGLEN)
{ {
for(uint16_t i = a; i < a+SEGENV.aux1; i++) { for (int i = a; i < a+SEGENV.aux1; i++) {
SEGMENT.setPixelColor(i, SEGCOLOR(0)); SEGMENT.setPixelColor(i, SEGCOLOR(0));
} }
} else } else
{ {
for(uint16_t i = a; i < SEGLEN; i++) { for (int i = a; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGCOLOR(0)); SEGMENT.setPixelColor(i, SEGCOLOR(0));
} }
for(uint16_t i = 0; i < SEGENV.aux1 - (SEGLEN -a); i++) { for (int i = 0; i < SEGENV.aux1 - (SEGLEN -a); i++) {
SEGMENT.setPixelColor(i, SEGCOLOR(0)); SEGMENT.setPixelColor(i, SEGCOLOR(0));
} }
} }
@ -841,7 +841,7 @@ uint16_t chase(uint32_t color1, uint32_t color2, uint32_t color3, bool do_palett
//background //background
if (do_palette) if (do_palette)
{ {
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1));
} }
} else SEGMENT.fill(color1); } else SEGMENT.fill(color1);
@ -977,7 +977,7 @@ static const char _data_FX_MODE_COLORFUL[] PROGMEM = "Colorful@!,Saturation;1,2,
* Emulates a traffic light. * Emulates a traffic light.
*/ */
uint16_t mode_traffic_light(void) { uint16_t mode_traffic_light(void) {
for(uint16_t i=0; i < SEGLEN; i++) for (int i=0; i < SEGLEN; i++)
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 1));
uint32_t mdelay = 500; uint32_t mdelay = 500;
for (int i = 0; i < SEGLEN-2 ; i+=3) for (int i = 0; i < SEGLEN-2 ; i+=3)
@ -1011,7 +1011,7 @@ static const char _data_FX_MODE_TRAFFIC_LIGHT[] PROGMEM = "Traffic Light@!,;,!,;
uint16_t mode_chase_flash(void) { uint16_t mode_chase_flash(void) {
uint8_t flash_step = SEGENV.call % ((FLASH_COUNT * 2) + 1); uint8_t flash_step = SEGENV.call % ((FLASH_COUNT * 2) + 1);
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
} }
@ -1040,14 +1040,14 @@ static const char _data_FX_MODE_CHASE_FLASH[] PROGMEM = "Chase Flash@!,;Bg,Fx,!;
uint16_t mode_chase_flash_random(void) { uint16_t mode_chase_flash_random(void) {
uint8_t flash_step = SEGENV.call % ((FLASH_COUNT * 2) + 1); uint8_t flash_step = SEGENV.call % ((FLASH_COUNT * 2) + 1);
for(uint16_t i = 0; i < SEGENV.step; i++) { for (int i = 0; i < SEGENV.aux1; i++) {
SEGMENT.setPixelColor(i, SEGMENT.color_wheel(SEGENV.aux0)); SEGMENT.setPixelColor(i, SEGMENT.color_wheel(SEGENV.aux0));
} }
uint16_t delay = 1 + ((10 * (uint16_t)(255 - SEGMENT.speed)) / SEGLEN); uint16_t delay = 1 + ((10 * (uint16_t)(255 - SEGMENT.speed)) / SEGLEN);
if(flash_step < (FLASH_COUNT * 2)) { if(flash_step < (FLASH_COUNT * 2)) {
uint16_t n = SEGENV.step; uint16_t n = SEGENV.aux1;
uint16_t m = (SEGENV.step + 1) % SEGLEN; uint16_t m = (SEGENV.aux1 + 1) % SEGLEN;
if(flash_step % 2 == 0) { if(flash_step % 2 == 0) {
SEGMENT.setPixelColor( n, SEGCOLOR(0)); SEGMENT.setPixelColor( n, SEGCOLOR(0));
SEGMENT.setPixelColor( m, SEGCOLOR(0)); SEGMENT.setPixelColor( m, SEGCOLOR(0));
@ -1058,9 +1058,9 @@ uint16_t mode_chase_flash_random(void) {
delay = 30; delay = 30;
} }
} else { } else {
SEGENV.step = (SEGENV.step + 1) % SEGLEN; SEGENV.aux1 = (SEGENV.aux1 + 1) % SEGLEN;
if (SEGENV.step == 0) { if (SEGENV.aux1 == 0) {
SEGENV.aux0 = SEGMENT.get_random_wheel_index(SEGENV.aux0); SEGENV.aux0 = SEGMENT.get_random_wheel_index(SEGENV.aux0);
} }
} }
@ -1247,7 +1247,7 @@ uint16_t mode_rain()
} else { } else {
//shift all leds left //shift all leds left
uint32_t ctemp = SEGMENT.getPixelColor(0); // TODO uint32_t ctemp = SEGMENT.getPixelColor(0); // TODO
for(uint16_t i = 0; i < SEGLEN - 1; i++) { for (int i = 0; i < SEGLEN - 1; i++) {
SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // TODO SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // TODO
} }
SEGMENT.setPixelColor(SEGLEN -1, ctemp); // wrap around SEGMENT.setPixelColor(SEGLEN -1, ctemp); // wrap around
@ -1278,7 +1278,7 @@ uint16_t mode_fire_flicker(void) {
byte b = (SEGCOLOR(0) ); byte b = (SEGCOLOR(0) );
byte lum = (SEGMENT.palette == 0) ? MAX(w, MAX(r, MAX(g, b))) : 255; byte lum = (SEGMENT.palette == 0) ? MAX(w, MAX(r, MAX(g, b))) : 255;
lum /= (((256-SEGMENT.intensity)/16)+1); lum /= (((256-SEGMENT.intensity)/16)+1);
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
byte flicker = random8(lum); byte flicker = random8(lum);
if (SEGMENT.palette == 0) { if (SEGMENT.palette == 0) {
SEGMENT.setPixelColor(i, MAX(r - flicker, 0), MAX(g - flicker, 0), MAX(b - flicker, 0), MAX(w - flicker, 0)); SEGMENT.setPixelColor(i, MAX(r - flicker, 0), MAX(g - flicker, 0), MAX(b - flicker, 0), MAX(w - flicker, 0));
@ -1306,7 +1306,7 @@ uint16_t gradient_base(bool loading) {
int p1 = pp-SEGLEN; int p1 = pp-SEGLEN;
int p2 = pp+SEGLEN; int p2 = pp+SEGLEN;
for(uint16_t i = 0; i < SEGLEN; i++) for (int i = 0; i < SEGLEN; i++)
{ {
if (loading) if (loading)
{ {
@ -1657,7 +1657,7 @@ uint16_t mode_tricolor_fade(void)
} }
byte stp = prog; // % 256 byte stp = prog; // % 256
for(uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint32_t color; uint32_t color;
if (stage == 2) { if (stage == 2) {
color = color_blend(SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 2), color2, stp); color = color_blend(SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 2), color2, stp);
@ -1689,7 +1689,7 @@ uint16_t mode_multi_comet(void)
uint16_t* comets = reinterpret_cast<uint16_t*>(SEGENV.data); uint16_t* comets = reinterpret_cast<uint16_t*>(SEGENV.data);
for(uint8_t i=0; i < 8; i++) { for (int i=0; i < 8; i++) {
if(comets[i] < SEGLEN) { if(comets[i] < SEGLEN) {
uint16_t index = comets[i]; uint16_t index = comets[i];
if (SEGCOLOR(2) != 0) if (SEGCOLOR(2) != 0)
@ -1729,7 +1729,7 @@ uint16_t mode_random_chase(void)
uint32_t color = SEGENV.step; uint32_t color = SEGENV.step;
random16_set_seed(SEGENV.aux0); random16_set_seed(SEGENV.aux0);
for(uint16_t i = SEGLEN -1; i > 0; i--) { for (int i = SEGLEN -1; i > 0; i--) {
uint8_t r = random8(6) != 0 ? (color >> 16 & 0xFF) : random8(); uint8_t r = random8(6) != 0 ? (color >> 16 & 0xFF) : random8();
uint8_t g = random8(6) != 0 ? (color >> 8 & 0xFF) : random8(); uint8_t g = random8(6) != 0 ? (color >> 8 & 0xFF) : random8();
uint8_t b = random8(6) != 0 ? (color & 0xFF) : random8(); uint8_t b = random8(6) != 0 ? (color & 0xFF) : random8();
@ -1779,7 +1779,7 @@ uint16_t mode_oscillate(void)
uint32_t cycleTime = 20 + (2 * (uint32_t)(255 - SEGMENT.speed)); uint32_t cycleTime = 20 + (2 * (uint32_t)(255 - SEGMENT.speed));
uint32_t it = strip.now / cycleTime; uint32_t it = strip.now / cycleTime;
for(uint8_t i = 0; i < numOscillators; i++) { for (int i = 0; i < numOscillators; i++) {
// if the counter has increased, move the oscillator by the random step // if the counter has increased, move the oscillator by the random step
if (it != SEGENV.step) oscillators[i].pos += oscillators[i].dir * oscillators[i].speed; if (it != SEGENV.step) oscillators[i].pos += oscillators[i].dir * oscillators[i].speed;
oscillators[i].size = SEGLEN/(3+SEGMENT.intensity/8); oscillators[i].size = SEGLEN/(3+SEGMENT.intensity/8);
@ -1796,9 +1796,9 @@ uint16_t mode_oscillate(void)
} }
} }
for(uint16_t i=0; i < SEGLEN; i++) { for (int i=0; i < SEGLEN; i++) {
uint32_t color = BLACK; uint32_t color = BLACK;
for(uint8_t j=0; j < numOscillators; j++) { for (int j=0; j < numOscillators; j++) {
if(i >= oscillators[j].pos - oscillators[j].size && i <= oscillators[j].pos + oscillators[j].size) { if(i >= oscillators[j].pos - oscillators[j].size && i <= oscillators[j].pos + oscillators[j].size) {
color = (color == BLACK) ? SEGCOLOR(j) : color_blend(color, SEGCOLOR(j), 128); color = (color == BLACK) ? SEGCOLOR(j) : color_blend(color, SEGCOLOR(j), 128);
} }
@ -1907,7 +1907,7 @@ uint16_t mode_juggle(void){
SEGMENT.fade_out(SEGMENT.intensity); SEGMENT.fade_out(SEGMENT.intensity);
CRGB fastled_col; CRGB fastled_col;
byte dothue = 0; byte dothue = 0;
for ( byte i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
uint16_t index = 0 + beatsin88((128 + SEGMENT.speed)*(i + 7), 0, SEGLEN -1); uint16_t index = 0 + beatsin88((128 + SEGMENT.speed)*(i + 7), 0, SEGLEN -1);
fastled_col = CRGB(SEGMENT.getPixelColor(index)); // TODO fastled_col = CRGB(SEGMENT.getPixelColor(index)); // TODO
fastled_col |= (SEGMENT.palette==0)?CHSV(dothue, 220, 255):ColorFromPalette(SEGPALETTE, dothue, 255); fastled_col |= (SEGMENT.palette==0)?CHSV(dothue, 220, 255):ColorFromPalette(SEGPALETTE, dothue, 255);
@ -2047,11 +2047,11 @@ uint16_t mode_colorwaves()
sPseudotime += duration * msmultiplier; sPseudotime += duration * msmultiplier;
sHue16 += duration * beatsin88(400, 5, 9); sHue16 += duration * beatsin88(400, 5, 9);
uint16_t brightnesstheta16 = sPseudotime; uint16_t brightnesstheta16 = sPseudotime;
CRGB fastled_col; //CRGB fastled_col;
if (SEGENV.call == 0) SEGMENT.fill(BLACK); if (SEGENV.call == 0) SEGMENT.fill(BLACK);
for ( uint16_t i = 0 ; i < SEGLEN; i++) { for (int i = 0 ; i < SEGLEN; i++) {
hue16 += hueinc16; hue16 += hueinc16;
uint8_t hue8 = hue16 >> 8; uint8_t hue8 = hue16 >> 8;
uint16_t h16_128 = hue16 >> 7; uint16_t h16_128 = hue16 >> 7;
@ -2068,11 +2068,12 @@ uint16_t mode_colorwaves()
uint8_t bri8 = (uint32_t)(((uint32_t)bri16) * brightdepth) / 65536; uint8_t bri8 = (uint32_t)(((uint32_t)bri16) * brightdepth) / 65536;
bri8 += (255 - brightdepth); bri8 += (255 - brightdepth);
CRGB newcolor = ColorFromPalette(SEGPALETTE, hue8, bri8); //CRGB newcolor = ColorFromPalette(SEGPALETTE, hue8, bri8);
fastled_col = CRGB(SEGMENT.getPixelColor(i)); // TODO //fastled_col = SEGMENT.getPixelColor(i); // TODO
nblend(fastled_col, newcolor, 128); //nblend(fastled_col, newcolor, 128);
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.blendPixelColor(i, SEGMENT.color_from_palette(hue8, false, PALETTE_SOLID_WRAP, 0, bri8), 128); // 50/50 mix
} }
SEGENV.step = sPseudotime; SEGENV.step = sPseudotime;
SEGENV.aux0 = sHue16; SEGENV.aux0 = sHue16;
@ -2084,12 +2085,13 @@ static const char _data_FX_MODE_COLORWAVES[] PROGMEM = "Colorwaves@!,!;!,!,!;!;1
// colored stripes pulsing at a defined Beats-Per-Minute (BPM) // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
uint16_t mode_bpm() uint16_t mode_bpm()
{ {
CRGB fastled_col; //CRGB fastled_col;
uint32_t stp = (strip.now / 20) & 0xFF; uint32_t stp = (strip.now / 20) & 0xFF;
uint8_t beat = beatsin8(SEGMENT.speed, 64, 255); uint8_t beat = beatsin8(SEGMENT.speed, 64, 255);
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
fastled_col = ColorFromPalette(SEGPALETTE, stp + (i * 2), beat - stp + (i * 10)); //fastled_col = ColorFromPalette(SEGPALETTE, stp + (i * 2), beat - stp + (i * 10));
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(stp + (i * 2), false, PALETTE_SOLID_WRAP, 0, beat - stp + (i * 10)));
} }
return FRAMETIME; return FRAMETIME;
} }
@ -2099,11 +2101,12 @@ static const char _data_FX_MODE_BPM[] PROGMEM = "Bpm@!,;1,2,3;!;sx=64,1d";
uint16_t mode_fillnoise8() uint16_t mode_fillnoise8()
{ {
if (SEGENV.call == 0) SEGENV.step = random16(12345); if (SEGENV.call == 0) SEGENV.step = random16(12345);
CRGB fastled_col; //CRGB fastled_col;
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint8_t index = inoise8(i * SEGLEN, SEGENV.step + i * SEGLEN); uint8_t index = inoise8(i * SEGLEN, SEGENV.step + i * SEGLEN);
fastled_col = ColorFromPalette(SEGPALETTE, index, 255, LINEARBLEND); //fastled_col = ColorFromPalette(SEGPALETTE, index, 255, LINEARBLEND);
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0));
} }
SEGENV.step += beatsin8(SEGMENT.speed, 1, 6); //10,1,4 SEGENV.step += beatsin8(SEGMENT.speed, 1, 6); //10,1,4
@ -2115,25 +2118,21 @@ static const char _data_FX_MODE_FILLNOISE8[] PROGMEM = "Fill Noise@!,!;!,!,!;!;1
uint16_t mode_noise16_1() uint16_t mode_noise16_1()
{ {
uint16_t scale = 320; // the "zoom factor" for the noise uint16_t scale = 320; // the "zoom factor" for the noise
CRGB fastled_col; //CRGB fastled_col;
SEGENV.step += (1 + SEGMENT.speed/16); SEGENV.step += (1 + SEGMENT.speed/16);
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint16_t shift_x = beatsin8(11); // the x position of the noise field swings @ 17 bpm uint16_t shift_x = beatsin8(11); // the x position of the noise field swings @ 17 bpm
uint16_t shift_y = SEGENV.step/42; // the y position becomes slowly incremented uint16_t shift_y = SEGENV.step/42; // the y position becomes slowly incremented
uint16_t real_x = (i + shift_x) * scale; // the x position of the noise field swings @ 17 bpm uint16_t real_x = (i + shift_x) * scale; // the x position of the noise field swings @ 17 bpm
uint16_t real_y = (i + shift_y) * scale; // the y position becomes slowly incremented uint16_t real_y = (i + shift_y) * scale; // the y position becomes slowly incremented
uint32_t real_z = SEGENV.step; // the z position becomes quickly incremented uint32_t real_z = SEGENV.step; // the z position becomes quickly incremented
uint8_t noise = inoise16(real_x, real_y, real_z) >> 8; // get the noise data and scale it down uint8_t noise = inoise16(real_x, real_y, real_z) >> 8; // get the noise data and scale it down
uint8_t index = sin8(noise * 3); // map LED color based on noise data uint8_t index = sin8(noise * 3); // map LED color based on noise data
fastled_col = ColorFromPalette(SEGPALETTE, index, 255, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED. //fastled_col = ColorFromPalette(SEGPALETTE, index, 255, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED.
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0));
} }
return FRAMETIME; return FRAMETIME;
@ -2144,21 +2143,18 @@ static const char _data_FX_MODE_NOISE16_1[] PROGMEM = "Noise 1@!,!;!,!,!;!;1d";
uint16_t mode_noise16_2() uint16_t mode_noise16_2()
{ {
uint16_t scale = 1000; // the "zoom factor" for the noise uint16_t scale = 1000; // the "zoom factor" for the noise
CRGB fastled_col; //CRGB fastled_col;
SEGENV.step += (1 + (SEGMENT.speed >> 1)); SEGENV.step += (1 + (SEGMENT.speed >> 1));
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint16_t shift_x = SEGENV.step >> 6; // x as a function of time uint16_t shift_x = SEGENV.step >> 6; // x as a function of time
uint32_t real_x = (i + shift_x) * scale; // calculate the coordinates within the noise field uint32_t real_x = (i + shift_x) * scale; // calculate the coordinates within the noise field
uint8_t noise = inoise16(real_x, 0, 4223) >> 8; // get the noise data and scale it down uint8_t noise = inoise16(real_x, 0, 4223) >> 8; // get the noise data and scale it down
uint8_t index = sin8(noise * 3); // map led color based on noise data uint8_t index = sin8(noise * 3); // map led color based on noise data
fastled_col = ColorFromPalette(SEGPALETTE, index, noise, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED. //fastled_col = ColorFromPalette(SEGPALETTE, index, noise, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED.
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0));
} }
return FRAMETIME; return FRAMETIME;
@ -2169,24 +2165,21 @@ static const char _data_FX_MODE_NOISE16_2[] PROGMEM = "Noise 2@!,!;!,!,!;!;1d";
uint16_t mode_noise16_3() uint16_t mode_noise16_3()
{ {
uint16_t scale = 800; // the "zoom factor" for the noise uint16_t scale = 800; // the "zoom factor" for the noise
CRGB fastled_col; //CRGB fastled_col;
SEGENV.step += (1 + SEGMENT.speed); SEGENV.step += (1 + SEGMENT.speed);
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint16_t shift_x = 4223; // no movement along x and y uint16_t shift_x = 4223; // no movement along x and y
uint16_t shift_y = 1234; uint16_t shift_y = 1234;
uint32_t real_x = (i + shift_x) * scale; // calculate the coordinates within the noise field uint32_t real_x = (i + shift_x) * scale; // calculate the coordinates within the noise field
uint32_t real_y = (i + shift_y) * scale; // based on the precalculated positions uint32_t real_y = (i + shift_y) * scale; // based on the precalculated positions
uint32_t real_z = SEGENV.step*8; uint32_t real_z = SEGENV.step*8;
uint8_t noise = inoise16(real_x, real_y, real_z) >> 8; // get the noise data and scale it down uint8_t noise = inoise16(real_x, real_y, real_z) >> 8; // get the noise data and scale it down
uint8_t index = sin8(noise * 3); // map led color based on noise data uint8_t index = sin8(noise * 3); // map led color based on noise data
fastled_col = ColorFromPalette(SEGPALETTE, index, noise, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED. //fastled_col = ColorFromPalette(SEGPALETTE, index, noise, LINEARBLEND); // With that value, look up the 8 bit colour palette value and assign it to the current LED.
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0));
} }
return FRAMETIME; return FRAMETIME;
@ -2197,12 +2190,13 @@ static const char _data_FX_MODE_NOISE16_3[] PROGMEM = "Noise 3@!,!;!,!,!;!;1d";
//https://github.com/aykevl/ledstrip-spark/blob/master/ledstrip.ino //https://github.com/aykevl/ledstrip-spark/blob/master/ledstrip.ino
uint16_t mode_noise16_4() uint16_t mode_noise16_4()
{ {
CRGB fastled_col; //CRGB fastled_col;
uint32_t stp = (strip.now * SEGMENT.speed) >> 7; uint32_t stp = (strip.now * SEGMENT.speed) >> 7;
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
int16_t index = inoise16(uint32_t(i) << 12, stp); int16_t index = inoise16(uint32_t(i) << 12, stp);
fastled_col = ColorFromPalette(SEGPALETTE, index); //fastled_col = ColorFromPalette(SEGPALETTE, index);
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0));
} }
return FRAMETIME; return FRAMETIME;
} }
@ -2284,14 +2278,15 @@ uint16_t mode_lake() {
int wave1 = beatsin8(sp +2, -64,64); int wave1 = beatsin8(sp +2, -64,64);
int wave2 = beatsin8(sp +1, -64,64); int wave2 = beatsin8(sp +1, -64,64);
uint8_t wave3 = beatsin8(sp +2, 0,80); uint8_t wave3 = beatsin8(sp +2, 0,80);
CRGB fastled_col; //CRGB fastled_col;
for (int i = 0; i < SEGLEN; i++) for (int i = 0; i < SEGLEN; i++)
{ {
int index = cos8((i*15)+ wave1)/2 + cubicwave8((i*23)+ wave2)/2; int index = cos8((i*15)+ wave1)/2 + cubicwave8((i*23)+ wave2)/2;
uint8_t lum = (index > wave3) ? index - wave3 : 0; uint8_t lum = (index > wave3) ? index - wave3 : 0;
fastled_col = ColorFromPalette(SEGPALETTE, map(index,0,255,0,240), lum, LINEARBLEND); //fastled_col = ColorFromPalette(SEGPALETTE, map(index,0,255,0,240), lum, LINEARBLEND);
SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue); //SEGMENT.setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, false, 0, lum));
} }
return FRAMETIME; return FRAMETIME;
} }
@ -2981,7 +2976,7 @@ uint16_t mode_popcorn(void) {
uint8_t numPopcorn = SEGMENT.intensity*maxNumPopcorn/255; uint8_t numPopcorn = SEGMENT.intensity*maxNumPopcorn/255;
if (numPopcorn == 0) numPopcorn = 1; if (numPopcorn == 0) numPopcorn = 1;
for(uint8_t i = 0; i < numPopcorn; i++) { for (int i = 0; i < numPopcorn; i++) {
if (popcorn[i].pos >= 0.0f) { // if kernel is active, update its position if (popcorn[i].pos >= 0.0f) { // if kernel is active, update its position
popcorn[i].pos += popcorn[i].vel; popcorn[i].pos += popcorn[i].vel;
popcorn[i].vel += gravity; popcorn[i].vel += gravity;
@ -3251,7 +3246,7 @@ static const char _data_FX_MODE_STARBURST[] PROGMEM = "Fireworks Starburst@Chanc
/* /*
* Exploding fireworks effect * Exploding fireworks effect
* adapted from: http://www.anirama.com/1000leds/1d-fireworks/ * adapted from: http://www.anirama.com/1000leds/1d-fireworks/
* adapted for 2D WLED by blazoncek (Blaz Kristan) * adapted for 2D WLED by blazoncek (Blaz Kristan (AKA blazoncek))
*/ */
uint16_t mode_exploding_fireworks(void) uint16_t mode_exploding_fireworks(void)
{ {
@ -3479,7 +3474,7 @@ static const char _data_FX_MODE_DRIP[] PROGMEM = "Drip@Gravity,# of drips;!,!;!;
/* /*
* Tetris or Stacking (falling bricks) Effect * Tetris or Stacking (falling bricks) Effect
* by Blaz Kristan (https://github.com/blazoncek, https://blaz.at/home) * by Blaz Kristan (AKA blazoncek) (https://github.com/blazoncek, https://blaz.at/home)
*/ */
//12 bytes //12 bytes
typedef struct Tetris { typedef struct Tetris {
@ -3559,8 +3554,9 @@ uint16_t mode_plasma(void) {
uint8_t colorIndex = cubicwave8((i*(2+ 3*(SEGMENT.speed >> 5))+thisPhase) & 0xFF)/2 // factor=23 // Create a wave and add a phase change and add another wave with its own phase change. uint8_t colorIndex = cubicwave8((i*(2+ 3*(SEGMENT.speed >> 5))+thisPhase) & 0xFF)/2 // factor=23 // Create a wave and add a phase change and add another wave with its own phase change.
+ cos8((i*(1+ 2*(SEGMENT.speed >> 5))+thatPhase) & 0xFF)/2; // factor=15 // Hey, you can even change the frequencies if you wish. + cos8((i*(1+ 2*(SEGMENT.speed >> 5))+thatPhase) & 0xFF)/2; // factor=15 // Hey, you can even change the frequencies if you wish.
uint8_t thisBright = qsub8(colorIndex, beatsin8(7,0, (128 - (SEGMENT.intensity>>1)))); uint8_t thisBright = qsub8(colorIndex, beatsin8(7,0, (128 - (SEGMENT.intensity>>1))));
CRGB color = ColorFromPalette(SEGPALETTE, colorIndex, thisBright, LINEARBLEND); //CRGB color = ColorFromPalette(SEGPALETTE, colorIndex, thisBright, LINEARBLEND);
SEGMENT.setPixelColor(i, color.red, color.green, color.blue); //SEGMENT.setPixelColor(i, color.red, color.green, color.blue);
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(colorIndex, false, PALETTE_SOLID_WRAP, 0, thisBright));
} }
return FRAMETIME; return FRAMETIME;
@ -3583,7 +3579,7 @@ uint16_t mode_percent(void) {
if (percent < 100) { if (percent < 100) {
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
if (i < SEGENV.step) { if (i < SEGENV.aux1) {
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0)); SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
} }
else { else {
@ -3592,7 +3588,7 @@ uint16_t mode_percent(void) {
} }
} else { } else {
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
if (i < (SEGLEN - SEGENV.step)) { if (i < (SEGLEN - SEGENV.aux1)) {
SEGMENT.setPixelColor(i, SEGCOLOR(1)); SEGMENT.setPixelColor(i, SEGCOLOR(1));
} }
else { else {
@ -3601,12 +3597,12 @@ uint16_t mode_percent(void) {
} }
} }
if(active_leds > SEGENV.step) { // smooth transition to the target value if(active_leds > SEGENV.aux1) { // smooth transition to the target value
SEGENV.step += size; SEGENV.aux1 += size;
if (SEGENV.step > active_leds) SEGENV.step = active_leds; if (SEGENV.aux1 > active_leds) SEGENV.aux1 = active_leds;
} else if (active_leds < SEGENV.step) { } else if (active_leds < SEGENV.aux1) {
if (SEGENV.step > size) SEGENV.step -= size; else SEGENV.step = 0; if (SEGENV.aux1 > size) SEGENV.aux1 -= size; else SEGENV.aux1 = 0;
if (SEGENV.step < active_leds) SEGENV.step = active_leds; if (SEGENV.aux1 < active_leds) SEGENV.aux1 = active_leds;
} }
return FRAMETIME; return FRAMETIME;
@ -3732,7 +3728,7 @@ uint16_t mode_pacifica()
uint8_t basethreshold = beatsin8( 9, 55, 65); uint8_t basethreshold = beatsin8( 9, 55, 65);
uint8_t wave = beat8( 7 ); uint8_t wave = beat8( 7 );
for( uint16_t i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
CRGB c = CRGB(2, 6, 10); CRGB c = CRGB(2, 6, 10);
// Render each of four layers, with different scales and speeds, that vary over time // Render each of four layers, with different scales and speeds, that vary over time
c += pacifica_one_layer(i, pacifica_palette_1, sCIStart1, beatsin16(3, 11 * 256, 14 * 256), beatsin8(10, 70, 130), 0-beat16(301)); c += pacifica_one_layer(i, pacifica_palette_1, sCIStart1, beatsin16(3, 11 * 256, 14 * 256), beatsin8(10, 70, 130), 0-beat16(301));
@ -4537,12 +4533,14 @@ uint16_t mode_wavesins(void) {
for (int i = 0; i < SEGLEN; i++) { for (int i = 0; i < SEGLEN; i++) {
uint8_t bri = sin8(millis()/4 + i * SEGMENT.intensity); uint8_t bri = sin8(millis()/4 + i * SEGMENT.intensity);
SEGMENT.setPixelColor(i, ColorFromPalette(SEGPALETTE, beatsin8(SEGMENT.speed, SEGMENT.custom1, SEGMENT.custom1+SEGMENT.custom2, 0, i * SEGMENT.custom3), bri, LINEARBLEND)); uint8_t index = beatsin8(SEGMENT.speed, SEGMENT.custom1, SEGMENT.custom1+SEGMENT.custom2, 0, i * SEGMENT.custom3);
//SEGMENT.setPixelColor(i, ColorFromPalette(SEGPALETTE, index, bri, LINEARBLEND));
SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(index, false, PALETTE_SOLID_WRAP, 0, bri));
} }
return FRAMETIME; return FRAMETIME;
} // mode_waveins() } // mode_waveins()
static const char _data_FX_MODE_WAVESINS[] PROGMEM = "Wavesins@Speed,Brightness variation,Starting Color,Range of Colors,Color variation;;!;1d"; static const char _data_FX_MODE_WAVESINS[] PROGMEM = "Wavesins@Speed,Brightness variation,Starting Color,Range of Colors,Color variation;!;!;1d";
////////////////////////////// //////////////////////////////
@ -4862,7 +4860,7 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
SEGMENT.setPixelColorXY(x,y, SEGMENT.color_from_palette(random8(), false, PALETTE_SOLID_WRAP, 0)); SEGMENT.setPixelColorXY(x,y, SEGMENT.color_from_palette(random8(), false, PALETTE_SOLID_WRAP, 0));
} }
for(uint16_t y = 0; y < rows; y++) for (uint16_t x = 0; x < cols; x++) prevLeds[XY(x,y)] = CRGB::Black; for (int y = 0; y < rows; y++) for (int x = 0; x < cols; x++) prevLeds[XY(x,y)] = CRGB::Black;
SEGENV.aux1 = 0; SEGENV.aux1 = 0;
@ -5525,7 +5523,7 @@ static const char _data_FX_MODE_2DTARTAN[] PROGMEM = "Tartan@X scale,Y scale;;!;
///////////////////////// /////////////////////////
// 2D spaceships // // 2D spaceships //
///////////////////////// /////////////////////////
uint16_t mode_2Dspaceships(void) { //// Space ships by stepko (c)05.02.21 [https://editor.soulmatelights.com/gallery/639-space-ships], adapted by Blaz Kristan uint16_t mode_2Dspaceships(void) { //// Space ships by stepko (c)05.02.21 [https://editor.soulmatelights.com/gallery/639-space-ships], adapted by Blaz Kristan (AKA blazoncek)
if (!strip.isMatrix) return mode_static(); // not a 2D set-up if (!strip.isMatrix) return mode_static(); // not a 2D set-up
const uint16_t cols = SEGMENT.virtualWidth(); const uint16_t cols = SEGMENT.virtualWidth();
@ -5571,7 +5569,7 @@ static const char _data_FX_MODE_2DSPACESHIPS[] PROGMEM = "Spaceships@!,Blur;!,!,
///////////////////////// /////////////////////////
// 2D Crazy Bees // // 2D Crazy Bees //
///////////////////////// /////////////////////////
//// Crazy bees by stepko (c)12.02.21 [https://editor.soulmatelights.com/gallery/651-crazy-bees], adapted by Blaz Kristan //// Crazy bees by stepko (c)12.02.21 [https://editor.soulmatelights.com/gallery/651-crazy-bees], adapted by Blaz Kristan (AKA blazoncek)
#define MAX_BEES 5 #define MAX_BEES 5
uint16_t mode_2Dcrazybees(void) { uint16_t mode_2Dcrazybees(void) {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up if (!strip.isMatrix) return mode_static(); // not a 2D set-up
@ -5645,7 +5643,7 @@ static const char _data_FX_MODE_2DCRAZYBEES[] PROGMEM = "Crazy Bees@!,Blur;;;2d"
///////////////////////// /////////////////////////
// 2D Ghost Rider // // 2D Ghost Rider //
///////////////////////// /////////////////////////
//// Ghost Rider by stepko (c)2021 [https://editor.soulmatelights.com/gallery/716-ghost-rider], adapted by Blaz Kristan //// Ghost Rider by stepko (c)2021 [https://editor.soulmatelights.com/gallery/716-ghost-rider], adapted by Blaz Kristan (AKA blazoncek)
#define LIGHTERS_AM 64 // max lighters (adequate for 32x32 matrix) #define LIGHTERS_AM 64 // max lighters (adequate for 32x32 matrix)
uint16_t mode_2Dghostrider(void) { uint16_t mode_2Dghostrider(void) {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up if (!strip.isMatrix) return mode_static(); // not a 2D set-up
@ -5735,7 +5733,7 @@ static const char _data_FX_MODE_2DGHOSTRIDER[] PROGMEM = "Ghost Rider@Fade rate,
//////////////////////////// ////////////////////////////
// 2D Floating Blobs // // 2D Floating Blobs //
//////////////////////////// ////////////////////////////
//// Floating Blobs by stepko (c)2021 [https://editor.soulmatelights.com/gallery/573-blobs], adapted by Blaz Kristan //// Floating Blobs by stepko (c)2021 [https://editor.soulmatelights.com/gallery/573-blobs], adapted by Blaz Kristan (AKA blazoncek)
#define MAX_BLOBS 8 #define MAX_BLOBS 8
uint16_t mode_2Dfloatingblobs(void) { uint16_t mode_2Dfloatingblobs(void) {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up if (!strip.isMatrix) return mode_static(); // not a 2D set-up
@ -5762,7 +5760,7 @@ uint16_t mode_2Dfloatingblobs(void) {
SEGENV.aux1 = rows; SEGENV.aux1 = rows;
SEGMENT.fill(BLACK); SEGMENT.fill(BLACK);
for (size_t i = 0; i < MAX_BLOBS; i++) { for (size_t i = 0; i < MAX_BLOBS; i++) {
blob->r[i] = cols>15 ? random8(1, cols/8.f) : 1; blob->r[i] = random8(1, cols>8 ? (cols/4) : 2);
blob->sX[i] = (float) random8(3, cols) / (float)(256 - SEGMENT.speed); // speed x blob->sX[i] = (float) random8(3, cols) / (float)(256 - SEGMENT.speed); // speed x
blob->sY[i] = (float) random8(3, rows) / (float)(256 - SEGMENT.speed); // speed y blob->sY[i] = (float) random8(3, rows) / (float)(256 - SEGMENT.speed); // speed y
blob->x[i] = random8(0, cols-1); blob->x[i] = random8(0, cols-1);
@ -5783,7 +5781,7 @@ uint16_t mode_2Dfloatingblobs(void) {
if (blob->grow[i]) { if (blob->grow[i]) {
// enlarge radius until it is >= 4 // enlarge radius until it is >= 4
blob->r[i] += (fabs(blob->sX[i]) > fabs(blob->sY[i]) ? fabs(blob->sX[i]) : fabs(blob->sY[i])) * 0.05f; blob->r[i] += (fabs(blob->sX[i]) > fabs(blob->sY[i]) ? fabs(blob->sX[i]) : fabs(blob->sY[i])) * 0.05f;
if (blob->r[i] >= MIN(cols/8.f,2.f)) { if (blob->r[i] >= MIN(cols/4.f,2.f)) {
blob->grow[i] = false; blob->grow[i] = false;
} }
} else { } else {
@ -5793,8 +5791,7 @@ uint16_t mode_2Dfloatingblobs(void) {
blob->grow[i] = true; blob->grow[i] = true;
} }
} }
CRGB c = ColorFromPalette(SEGPALETTE, blob->color[i]); uint32_t c = SEGMENT.color_from_palette(blob->color[i], false, false, 0);
//if (!SEGMENT.palette) c = SEGCOLOR(0);
if (blob->r[i] > 1.f) SEGMENT.fill_circle(blob->y[i], blob->x[i], blob->r[i], c); if (blob->r[i] > 1.f) SEGMENT.fill_circle(blob->y[i], blob->x[i], blob->r[i], c);
else SEGMENT.setPixelColorXY(blob->y[i], blob->x[i], c); else SEGMENT.setPixelColorXY(blob->y[i], blob->x[i], c);
// move x // move x
@ -5847,7 +5844,7 @@ uint16_t mode_2Dscrollingtext(void) {
const int letterHeight = 8; const int letterHeight = 8;
const int yoffset = map(SEGMENT.intensity, 0, 255, -rows/2, rows/2) + (rows-letterHeight)/2; const int yoffset = map(SEGMENT.intensity, 0, 255, -rows/2, rows/2) + (rows-letterHeight)/2;
char text[33] = {'\0'}; char text[33] = {'\0'};
if (SEGMENT.name && strlen(SEGMENT.name)) for (int i=0,j=0; i<strlen(SEGMENT.name); i++) if (SEGMENT.name[i]>31 && SEGMENT.name[i]<128) text[j++] = SEGMENT.name[i]; if (SEGMENT.name) for (size_t i=0,j=0; i<strlen(SEGMENT.name); i++) if (SEGMENT.name[i]>31 && SEGMENT.name[i]<128) text[j++] = SEGMENT.name[i];
if (!strlen(text) || !strncmp_P(text,PSTR("#DATE"),5) || !strncmp_P(text,PSTR("#TIME"),5)) { // fallback if empty segment name: display date and time if (!strlen(text) || !strncmp_P(text,PSTR("#DATE"),5) || !strncmp_P(text,PSTR("#TIME"),5)) { // fallback if empty segment name: display date and time
char sec[5]; char sec[5];
@ -5888,7 +5885,7 @@ static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Off
//////////////////////////// ////////////////////////////
// 2D Drift Rose // // 2D Drift Rose //
//////////////////////////// ////////////////////////////
//// Drift Rose by stepko (c)2021 [https://editor.soulmatelights.com/gallery/1369-drift-rose-pattern], adapted by Blaz Kristan //// Drift Rose by stepko (c)2021 [https://editor.soulmatelights.com/gallery/1369-drift-rose-pattern], adapted by Blaz Kristan (AKA blazoncek)
uint16_t mode_2Ddriftrose(void) { uint16_t mode_2Ddriftrose(void) {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up if (!strip.isMatrix) return mode_static(); // not a 2D set-up
@ -5899,7 +5896,6 @@ uint16_t mode_2Ddriftrose(void) {
const float CY = rows/2.f - .5f; const float CY = rows/2.f - .5f;
const float L = min(cols, rows) / 2.f; const float L = min(cols, rows) / 2.f;
if (SEGENV.call == 0) { if (SEGENV.call == 0) {
SEGMENT.setUpLeds(); SEGMENT.setUpLeds();
SEGMENT.fill(BLACK); SEGMENT.fill(BLACK);
@ -6110,7 +6106,7 @@ uint16_t mode_2DWaverly(void) {
} }
uint16_t thisMax = map(thisVal, 0, 512, 0, rows); uint16_t thisMax = map(thisVal, 0, 512, 0, rows);
for (uint16_t j = 0; j < thisMax; j++) { for (int j = 0; j < thisMax; j++) {
SEGMENT.addPixelColorXY(i, j, ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND)); 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.addPixelColorXY((cols - 1) - i, (rows - 1) - j, ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND));
} }
@ -6322,7 +6318,7 @@ uint16_t mode_matripix(void) { // Matripix. By Andrew Tuline.
SEGENV.aux0 = secondHand; SEGENV.aux0 = secondHand;
int pixBri = volumeRaw * SEGMENT.intensity / 64; int pixBri = volumeRaw * SEGMENT.intensity / 64;
for (uint16_t i=0; i<SEGLEN-1; i++) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // shift left for (int 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)); SEGMENT.setPixelColor(SEGLEN-1, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(millis(), false, PALETTE_SOLID_WRAP, 0), pixBri));
} }
@ -6573,7 +6569,7 @@ uint16_t mode_puddles(void) { // Puddles. By Andrew Tuline.
if (pos+size >= SEGLEN) size = SEGLEN - pos; if (pos+size >= SEGLEN) size = SEGLEN - pos;
} }
for(uint16_t i=0; i<size; i++) { // Flash the LED's. for (int i=0; i<size; i++) { // Flash the LED's.
SEGMENT.setPixelColor(pos+i, SEGMENT.color_from_palette(millis(), false, PALETTE_SOLID_WRAP, 0)); SEGMENT.setPixelColor(pos+i, SEGMENT.color_from_palette(millis(), false, PALETTE_SOLID_WRAP, 0));
} }
@ -7483,16 +7479,11 @@ void WS2812FX::setupEffectData() {
addEffect(FX_MODE_WATERFALL, &mode_waterfall, _data_FX_MODE_WATERFALL); addEffect(FX_MODE_WATERFALL, &mode_waterfall, _data_FX_MODE_WATERFALL);
addEffect(FX_MODE_FREQPIXELS, &mode_freqpixels, _data_FX_MODE_FREQPIXELS); addEffect(FX_MODE_FREQPIXELS, &mode_freqpixels, _data_FX_MODE_FREQPIXELS);
addEffect(FX_MODE_NOISEMOVE, &mode_noisemove, _data_FX_MODE_NOISEMOVE); addEffect(FX_MODE_NOISEMOVE, &mode_noisemove, _data_FX_MODE_NOISEMOVE);
//addEffect(FX_MODE_PERLINMOVE, &mode_perlinmove, _data_FX_MODE_PERLINMOVE);
//addEffect(FX_MODE_2DFIRE2012, &mode_2Dfire2012, _data_RESERVED);
addEffect(FX_MODE_FREQMAP, &mode_freqmap, _data_FX_MODE_FREQMAP); addEffect(FX_MODE_FREQMAP, &mode_freqmap, _data_FX_MODE_FREQMAP);
addEffect(FX_MODE_GRAVFREQ, &mode_gravfreq, _data_FX_MODE_GRAVFREQ); addEffect(FX_MODE_GRAVFREQ, &mode_gravfreq, _data_FX_MODE_GRAVFREQ);
addEffect(FX_MODE_DJLIGHT, &mode_DJLight, _data_FX_MODE_DJLIGHT); addEffect(FX_MODE_DJLIGHT, &mode_DJLight, _data_FX_MODE_DJLIGHT);
addEffect(FX_MODE_2DFUNKYPLANK, &mode_2DFunkyPlank, _data_FX_MODE_2DFUNKYPLANK); addEffect(FX_MODE_2DFUNKYPLANK, &mode_2DFunkyPlank, _data_FX_MODE_2DFUNKYPLANK);
//addEffect(FX_MODE_2DCENTERBARS, &mode_2DCenterBars, _data_FX_MODE_2DCENTERBARS);
addEffect(FX_MODE_BLURZ, &mode_blurz, _data_FX_MODE_BLURZ); addEffect(FX_MODE_BLURZ, &mode_blurz, _data_FX_MODE_BLURZ);
//addEffect(FX_MODE_FLOWSTRIPE, &mode_FlowStripe, _data_FX_MODE_FLOWSTRIPE);
//addEffect(FX_MODE_WAVESINS, &mode_wavesins, _data_FX_MODE_WAVESINS);
addEffect(FX_MODE_ROCKTAVES, &mode_rocktaves, _data_FX_MODE_ROCKTAVES); addEffect(FX_MODE_ROCKTAVES, &mode_rocktaves, _data_FX_MODE_ROCKTAVES);
//addEffect(FX_MODE_CUSTOMEFFECT, &mode_customEffect, _data_FX_MODE_CUSTOMEFFECT); //WLEDSR Custom Effects //addEffect(FX_MODE_CUSTOMEFFECT, &mode_customEffect, _data_FX_MODE_CUSTOMEFFECT); //WLEDSR Custom Effects
#endif // USERMOD_AUDIOREACTIVE #endif // USERMOD_AUDIOREACTIVE

View File

@ -281,26 +281,27 @@
#define FX_MODE_2DWAVERLY 145 // audio enhanced #define FX_MODE_2DWAVERLY 145 // audio enhanced
#define FX_MODE_2DSWIRL 146 // audio enhanced #define FX_MODE_2DSWIRL 146 // audio enhanced
#define FX_MODE_2DAKEMI 147 // audio enhanced #define FX_MODE_2DAKEMI 147 // audio enhanced
// 148 & 149 reserved
#endif #endif
#define FX_MODE_PIXELWAVE 160 // audio enhanced #define FX_MODE_PIXELWAVE 150 // audio enhanced
#define FX_MODE_JUGGLES 161 // audio enhanced #define FX_MODE_JUGGLES 151 // audio enhanced
#define FX_MODE_MATRIPIX 162 // audio enhanced #define FX_MODE_MATRIPIX 152 // audio enhanced
#define FX_MODE_GRAVIMETER 163 // audio enhanced #define FX_MODE_GRAVIMETER 153 // audio enhanced
#define FX_MODE_PLASMOID 164 // audio enhanced #define FX_MODE_PLASMOID 154 // audio enhanced
#define FX_MODE_PUDDLES 165 // audio enhanced #define FX_MODE_PUDDLES 155 // audio enhanced
#define FX_MODE_MIDNOISE 166 // audio enhanced #define FX_MODE_MIDNOISE 156 // audio enhanced
#define FX_MODE_NOISEMETER 167 // audio enhanced #define FX_MODE_NOISEMETER 157 // audio enhanced
#define FX_MODE_NOISEFIRE 168 // audio enhanced #define FX_MODE_NOISEFIRE 158 // audio enhanced
#define FX_MODE_PUDDLEPEAK 169 // audio enhanced #define FX_MODE_PUDDLEPEAK 159 // audio enhanced
#define FX_MODE_RIPPLEPEAK 170 // audio enhanced #define FX_MODE_RIPPLEPEAK 160 // audio enhanced
#define FX_MODE_GRAVCENTER 171 // audio enhanced #define FX_MODE_GRAVCENTER 161 // audio enhanced
#define FX_MODE_GRAVCENTRIC 172 // audio enhanced #define FX_MODE_GRAVCENTRIC 162 // audio enhanced
#endif #endif
#ifndef USERMOD_AUDIOREACTIVE #ifndef USERMOD_AUDIOREACTIVE
#ifndef WLED_DISABLE_AUDIO #ifndef WLED_DISABLE_AUDIO
#define MODE_COUNT 173 #define MODE_COUNT 163
#else #else
#ifndef WLED_DISABLE_2D #ifndef WLED_DISABLE_2D
#define MODE_COUNT 145 #define MODE_COUNT 145
@ -311,74 +312,29 @@
#else #else
#ifdef WLED_DISABLE_2D
#error Audioreactive usermod requires 2D support.
#endif
#ifdef WLED_DISABLE_AUDIO #ifdef WLED_DISABLE_AUDIO
#error Audioreactive usermod requires audio support. #error Incompatible options: WLED_DISABLE_AUDIO and USERMOD_AUDIOREACTIVE
#endif
#ifdef WLED_DISABLE_2D
#error AUDIOREACTIVE usermod requires 2D support.
#endif #endif
#define FX_MODE_PIXELS 173
// #define FX_MODE_PIXELWAVE 129 // audio enhanced
// #define FX_MODE_JUGGLES 130 // audio enhanced
// #define FX_MODE_MATRIPIX 131 // audio enhanced
// #define FX_MODE_GRAVIMETER 132 // audio enhanced
// #define FX_MODE_PLASMOID 133 // audio enhanced
// #define FX_MODE_PUDDLES 134 // audio enhanced
// #define FX_MODE_MIDNOISE 135 // audio enhanced
// #define FX_MODE_NOISEMETER 136 // audio enhanced
#define FX_MODE_FREQWAVE 174
#define FX_MODE_FREQMATRIX 175
#define FX_MODE_2DGEQ 148 #define FX_MODE_2DGEQ 148
#define FX_MODE_WATERFALL 176
#define FX_MODE_FREQPIXELS 177
#define FX_MODE_BINMAP 178
// #define FX_MODE_NOISEFIRE 143 // audio enhanced
// #define FX_MODE_PUDDLEPEAK 144 // audio enhanced
#define FX_MODE_NOISEMOVE 179
// #define FX_MODE_2DNOISE 146 // non audio
//#define FX_MODE_PERLINMOVE 147 // moved to 53
// #define FX_MODE_RIPPLEPEAK 148 // audio enhanced
// #define FX_MODE_2DFIRENOISE 149 // non audio
// #define FX_MODE_2DSQUAREDSWIRL 150 // non audio
//#define FX_MODE_2DFIRE2012 151 // implemented in native Fire2012
// #define FX_MODE_2DDNA 152 // non audio
// #define FX_MODE_2DMATRIX 153 // non audio
// #define FX_MODE_2DMETABALLS 154 // non audio
#define FX_MODE_FREQMAP 180
// #define FX_MODE_GRAVCENTER 156 // audio enhanced
// #define FX_MODE_GRAVCENTRIC 157 // audio enhanced
#define FX_MODE_GRAVFREQ 181
#define FX_MODE_DJLIGHT 182
#define FX_MODE_2DFUNKYPLANK 149 #define FX_MODE_2DFUNKYPLANK 149
//#define FX_MODE_2DCENTERBARS 161 // obsolete by X & Y mirroring #define FX_MODE_PIXELS 163
// #define FX_MODE_2DPULSER 162 // non audio #define FX_MODE_FREQWAVE 164
#define FX_MODE_BLURZ 183 #define FX_MODE_FREQMATRIX 165
// #define FX_MODE_2DDRIFT 164 // non audio #define FX_MODE_WATERFALL 166
// #define FX_MODE_2DWAVERLY 165 // audio enhanced #define FX_MODE_FREQPIXELS 167
// #define FX_MODE_2DSUNRADIATION 166 // non audio #define FX_MODE_BINMAP 168
// #define FX_MODE_2DCOLOREDBURSTS 167 // non audio #define FX_MODE_NOISEMOVE 169
// #define FX_MODE_2DJULIA 168 // non audio #define FX_MODE_FREQMAP 170
#define FX_MODE_2DPOOLNOISE 150 // reserved in JSON_mode_names #define FX_MODE_GRAVFREQ 171
#define FX_MODE_2DTWISTER 151 // reserved in JSON_mode_names #define FX_MODE_DJLIGHT 172
#define FX_MODE_2DCAELEMENTATY 152 // reserved in JSON_mode_names #define FX_MODE_BLURZ 173
// #define FX_MODE_2DGAMEOFLIFE 172 // non audio #define FX_MODE_ROCKTAVES 174
// #define FX_MODE_2DTARTAN 173 // non audio //#define FX_MODE_CUSTOMEFFECT 175 //WLEDSR Custom Effects
// #define FX_MODE_2DPOLARLIGHTS 174 // non audio
// #define FX_MODE_2DSWIRL 175 // audio enhanced
// #define FX_MODE_2DLISSAJOUS 176 // non audio
// #define FX_MODE_2DFRIZZLES 177 // non audio
// #define FX_MODE_2DPLASMABALL 178 // non audio
//#define FX_MODE_FLOWSTRIPE 179 // moved to 114
// #define FX_MODE_2DHIPHOTIC 180 // non audio
// #define FX_MODE_2DSINDOTS 181 // non audio
// #define FX_MODE_2DDNASPIRAL 182 // non audio
// #define FX_MODE_2DBLACKHOLE 183 // non audio
//#define FX_MODE_WAVESINS 184 // moved to 48
#define FX_MODE_ROCKTAVES 184
// #define FX_MODE_2DAKEMI 186 // audio enhanced
//#define FX_MODE_CUSTOMEFFECT 187 //WLEDSR Custom Effects
#define MODE_COUNT 185 #define MODE_COUNT 175
#endif #endif
typedef enum mapping1D2D { typedef enum mapping1D2D {

View File

@ -19,49 +19,43 @@
</style> </style>
</head> </head>
<body> <body>
<div id="canv" /> <div id="canv"></div>
<script> <script>
function updatePreview(leds) { var ws;
var str = "linear-gradient(90deg,"; try {
var len = leds.length; ws = top.window.ws;
for (i = 2; i < len; i+=3) { } catch (e) {}
if (ws && ws.readyState === WebSocket.OPEN) {
//console.info("Peek uses top WS");
ws.send("{'lv':true}");
} else {
console.info("Peek WS opening");
ws = new WebSocket((window.location.protocol == "https:"?"wss":"ws")+"://"+document.location.host+"/ws");
ws.onopen = function () {
//console.info("Peek WS open");
ws.send("{'lv':true}");
}
}
ws.binaryType = "arraybuffer";
ws.addEventListener('message', (e) => {
try {
if (toString.call(e.data) === '[object ArrayBuffer]') {
let leds = new Uint8Array(event.data);
if (leds[0] != 76) return; //'L'
let str = "linear-gradient(90deg,";
let len = leds.length;
let start = leds[1]==2 ? 4 : 2; // 1 = 1D, 2 = 1D/2D (leds[2]=w, leds[3]=h)
for (i = start; i < len; i+=3) {
str += `rgb(${leds[i]},${leds[i+1]},${leds[i+2]})`; str += `rgb(${leds[i]},${leds[i+1]},${leds[i+2]})`;
if (i < len -3) str += "," if (i < len -3) str += ","
} }
str += ")"; str += ")";
document.getElementById("canv").style.background = str; document.getElementById("canv").style.background = str;
} }
} catch (err) {
function getLiveJson(e) {
try {
if (toString.call(e.data) === '[object ArrayBuffer]') {
let leds = new Uint8Array(event.data);
if (leds[0] != 76) return; //'L'
updatePreview(leds);
}
}
catch (err) {
console.error("Peek WS error:",err); console.error("Peek WS error:",err);
} }
} });
var ws;
try {
ws = top.window.ws;
} catch (e) {}
if (ws && ws.readyState === WebSocket.OPEN) {
console.info("Peek uses top WS");
ws.send("{'lv':true}");
} else {
console.info("Peek WS opening");
ws = new WebSocket((window.location.protocol == "https:"?"wss":"ws")+"://"+document.location.host+"/ws");
ws.onopen = function () {
console.info("Peek WS open");
ws.send("{'lv':true}");
}
}
ws.binaryType = "arraybuffer";
ws.addEventListener('message',getLiveJson);
</script> </script>
</body> </body>
</html> </html>

View File

@ -12,9 +12,9 @@
</style> </style>
</head> </head>
<body> <body>
<canvas id="liveviewCanvas">LiveView</canvas> <canvas id="canv"></canvas>
<script> <script>
var c = document.getElementById('liveviewCanvas'); var c = document.getElementById('canv');
var leds = ""; var leds = "";
var throttled = false; var throttled = false;
function setCanvas() { function setCanvas() {
@ -43,7 +43,7 @@
try { try {
if (toString.call(e.data) === '[object ArrayBuffer]') { if (toString.call(e.data) === '[object ArrayBuffer]') {
let leds = new Uint8Array(event.data); let leds = new Uint8Array(event.data);
if (leds[0] != 76 || !ctx) return; //'L', set in ws.cpp if (leds[0] != 76 || leds[1] != 2 || !ctx) return; //'L', set in ws.cpp
let mW = leds[2]; // matrix width let mW = leds[2]; // matrix width
let mH = leds[3]; // matrix height let mH = leds[3]; // matrix height
let pPL = Math.min(c.width / mW, c.height / mH); // pixels per LED (width of circle) let pPL = Math.min(c.width / mW, c.height / mH); // pixels per LED (width of circle)

View File

@ -118,7 +118,7 @@ Serpentine: <input type="checkbox" name="P${i}S"></div>`;
<option value="1">2D Matrix</option> <option value="1">2D Matrix</option>
</select><br> </select><br>
<div id="mpdiv" style="display:none;"> <div id="mpdiv" style="display:none;">
<h3>2D Matrix</h3> <h3>Panel set-up</h3>
Panel dimensions (WxH): <input name="PW" type="number" min="1" max="128" value="8"> x <input name="PH" type="number" min="1" max="128" value="8"><br> Panel dimensions (WxH): <input name="PW" type="number" min="1" max="128" value="8"> x <input name="PH" type="number" min="1" max="128" value="8"><br>
Horizontal panels: <input name="MPH" type="number" min="1" max="8" value="1" oninput="UI()"> Horizontal panels: <input name="MPH" type="number" min="1" max="8" value="1" oninput="UI()">
Vertical panels: <input name="MPV" type="number" min="1" max="8" value="1" oninput="UI()"><br> Vertical panels: <input name="MPV" type="number" min="1" max="8" value="1" oninput="UI()"><br>
@ -135,17 +135,13 @@ Serpentine: <input type="checkbox" name="P${i}S"></div>`;
</select><br> </select><br>
Serpentine: <input type="checkbox" name="PS"> Serpentine: <input type="checkbox" name="PS">
<hr style="width:260px"> <hr style="width:260px">
<i>A matrix is made of 1 or more physical led panels of the same dimensions.<br> <i>A matrix is made of 1 or more physical LED panels of the same dimensions.<br>
Panels should be arranged from top-left to bottom-right order, starting with lower panel number on the left (or top if transposed).<br> Panels should be arranged from top-left to bottom-right order, starting with lower panel number on the left (or top if transposed).<br>
Each panel can have different orientation and/or starting point and/or layout.</i><br> Each panel can have different LED orientation and/or starting point and/or layout.</i><br>
<hr style="width:260px"> <hr style="width:260px">
<h3>2D Panel layout</h3> <h3>LED panel layout</h3>
<div id="panels"> <div id="panels">
</div> </div>
<!--
<button type="button" class="xs" id="pnl_add" onclick="addPanel()">+</button>
<button type="button" class="xs" id="pnl_rem" onclick="remPanel()">-</button>
-->
</div> </div>
<hr> <hr>
<button type="button" onclick="B()">Back</button><button type="submit">Save</button> <button type="button" onclick="B()">Back</button><button type="submit">Save</button>

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -188,30 +188,6 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
&& elem[F("c3")].isNull() ) && elem[F("c3")].isNull() )
{ {
int16_t sOpt; int16_t sOpt;
/*
uint8_t tmp = 255;
// compatibility mode begin
char buf[5]; // dummy buffer
for (int i=0; i<5; i++) {
uint8_t *var;
switch (i) {
case 0: var = &seg.speed; break;
case 1: var = &seg.intensity; break;
case 2: var = &seg.custom1; break;
case 3: var = &seg.custom2; break;
case 4: var = &seg.custom3; break;
}
extractModeSlider(fx, i, buf, 4, var);
}
extractModeSlider(fx, 255, buf, 4, &tmp);
if (tmp < strip.getPaletteCount() + strip.customPalettes.size()) {
if (tmp != seg.palette) {
if (strip.paletteFade && !seg.transitional) seg.startTransition(strip.getTransition());
seg.palette = tmp;
}
}
//end compatibility mode
*/
sOpt = extractModeDefaults(fx, SET_F("sx")); if (sOpt >= 0) seg.speed = sOpt; sOpt = extractModeDefaults(fx, SET_F("sx")); if (sOpt >= 0) seg.speed = sOpt;
sOpt = extractModeDefaults(fx, SET_F("ix")); if (sOpt >= 0) seg.intensity = sOpt; sOpt = extractModeDefaults(fx, SET_F("ix")); if (sOpt >= 0) seg.intensity = sOpt;
sOpt = extractModeDefaults(fx, SET_F("c1")); if (sOpt >= 0) seg.custom1 = sOpt; sOpt = extractModeDefaults(fx, SET_F("c1")); if (sOpt >= 0) seg.custom1 = sOpt;
@ -219,10 +195,10 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
sOpt = extractModeDefaults(fx, SET_F("c3")); if (sOpt >= 0) seg.custom3 = sOpt; sOpt = extractModeDefaults(fx, SET_F("c3")); if (sOpt >= 0) seg.custom3 = sOpt;
sOpt = extractModeDefaults(fx, SET_F("mp12")); if (sOpt >= 0) seg.map1D2D = sOpt & 0x03; sOpt = extractModeDefaults(fx, SET_F("mp12")); if (sOpt >= 0) seg.map1D2D = sOpt & 0x03;
sOpt = extractModeDefaults(fx, SET_F("ssim")); if (sOpt >= 0) seg.soundSim = sOpt & 0x07; sOpt = extractModeDefaults(fx, SET_F("ssim")); if (sOpt >= 0) seg.soundSim = sOpt & 0x07;
sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) seg.reverse = (bool)sOpt; // setOption(SEG_OPTION_REVERSED, (bool)sOpt); // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) seg.reverse = (bool)sOpt;
sOpt = extractModeDefaults(fx, SET_F("mi")); if (sOpt >= 0) seg.mirror = (bool)sOpt; // setOption(SEG_OPTION_MIRROR, (bool)sOpt); // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, SET_F("mi")); if (sOpt >= 0) seg.mirror = (bool)sOpt; // NOTE: setting this option is a risky business
sOpt = extractModeDefaults(fx, SET_F("rY")); if (sOpt >= 0) seg.reverse_y = (bool)sOpt; // setOption(SEG_OPTION_REVERSED_Y, (bool)sOpt); // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, SET_F("rY")); if (sOpt >= 0) seg.reverse_y = (bool)sOpt;
sOpt = extractModeDefaults(fx, SET_F("mY")); if (sOpt >= 0) seg.mirror_y = (bool)sOpt; // setOption(SEG_OPTION_MIRROR_Y, (bool)sOpt); // NOTE: setting this option is a risky business sOpt = extractModeDefaults(fx, SET_F("mY")); if (sOpt >= 0) seg.mirror_y = (bool)sOpt; // NOTE: setting this option is a risky business
sOpt = extractModeDefaults(fx, "pal"); sOpt = extractModeDefaults(fx, "pal");
if (sOpt >= 0 && sOpt < strip.getPaletteCount() + strip.customPalettes.size()) { if (sOpt >= 0 && sOpt < strip.getPaletteCount() + strip.customPalettes.size()) {
if (sOpt != seg.palette) { if (sOpt != seg.palette) {
@ -250,8 +226,6 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
JsonArray iarr = elem[F("i")]; //set individual LEDs JsonArray iarr = elem[F("i")]; //set individual LEDs
if (!iarr.isNull()) { if (!iarr.isNull()) {
//uint8_t oldSegId = strip.setPixelSegment(id);
// set brightness immediately and disable transition // set brightness immediately and disable transition
transitionDelayTemp = 0; transitionDelayTemp = 0;
jsonTransitionOnce = true; jsonTransitionOnce = true;
@ -301,7 +275,6 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
set = 0; set = 0;
} }
} }
//strip.setPixelSegment(oldSegId);
strip.trigger(); strip.trigger();
} }
// send UDP if not in preset and something changed that is not just selection // send UDP if not in preset and something changed that is not just selection
@ -614,7 +587,7 @@ void serializeInfo(JsonObject root)
leds[F("maxseg")] = strip.getMaxSegments(); leds[F("maxseg")] = strip.getMaxSegments();
//leds[F("actseg")] = strip.getActiveSegmentsNum(); //leds[F("actseg")] = strip.getActiveSegmentsNum();
//leds[F("seglock")] = false; //might be used in the future to prevent modifications to segment config //leds[F("seglock")] = false; //might be used in the future to prevent modifications to segment config
leds[F("cpal")] = strip.customPalettes.size(); leds[F("cpal")] = strip.customPalettes.size(); //number of custom palettes
#ifndef WLED_DISABLE_2D #ifndef WLED_DISABLE_2D
if (strip.isMatrix) { if (strip.isMatrix) {

View File

@ -33,11 +33,6 @@
#define DS1307_CTRL_ID 0x68 #define DS1307_CTRL_ID 0x68
DS1307RTC::DS1307RTC()
{
Wire.begin();
}
// PUBLIC FUNCTIONS // PUBLIC FUNCTIONS
time_t DS1307RTC::get() // Aquire data from buffer and convert to time_t time_t DS1307RTC::get() // Aquire data from buffer and convert to time_t
{ {

View File

@ -13,7 +13,8 @@ class DS1307RTC
{ {
// user-accessible "public" interface // user-accessible "public" interface
public: public:
DS1307RTC(); DS1307RTC() {}
static void begin() { Wire.begin(); }
static time_t get(); static time_t get();
static bool set(time_t t); static bool set(time_t t);
static bool read(tmElements_t &tm); static bool read(tmElements_t &tm);

View File

@ -138,31 +138,27 @@ void sendDataWs(AsyncWebSocketClient * client)
releaseJSONBufferLock(); releaseJSONBufferLock();
} }
#ifndef WLED_DISABLE_2D
#define MAX_LIVE_LEDS_WS 1024
#else
#define MAX_LIVE_LEDS_WS 256
#endif
bool sendLiveLedsWs(uint32_t wsClient) bool sendLiveLedsWs(uint32_t wsClient)
{ {
AsyncWebSocketClient * wsc = ws.client(wsClient); AsyncWebSocketClient * wsc = ws.client(wsClient);
if (!wsc || wsc->queueLength() > 0) return false; //only send if queue free if (!wsc || wsc->queueLength() > 0) return false; //only send if queue free
uint16_t used = strip.getLengthTotal(); uint16_t used = strip.getLengthTotal();
const uint16_t MAX_LIVE_LEDS_WS = strip.isMatrix ? 1024 : 256;
uint16_t n = ((used -1)/MAX_LIVE_LEDS_WS) +1; //only serve every n'th LED if count over MAX_LIVE_LEDS_WS uint16_t n = ((used -1)/MAX_LIVE_LEDS_WS) +1; //only serve every n'th LED if count over MAX_LIVE_LEDS_WS
uint16_t bufSize = 2 + (used/n)*3; uint16_t pos = (strip.isMatrix ? 4 : 2);
uint16_t bufSize = pos + (used/n)*3;
AsyncWebSocketMessageBuffer * wsBuf = ws.makeBuffer(bufSize); AsyncWebSocketMessageBuffer * wsBuf = ws.makeBuffer(bufSize);
if (!wsBuf) return false; //out of memory if (!wsBuf) return false; //out of memory
uint8_t* buffer = wsBuf->get(); uint8_t* buffer = wsBuf->get();
buffer[0] = 'L'; buffer[0] = 'L';
buffer[1] = 1; //version buffer[1] = 1; //version
#ifndef WLED_DISABLE_2D #ifndef WLED_DISABLE_2D
if (strip.isMatrix) {
buffer[1] = 2; //version
buffer[2] = strip.matrixWidth; buffer[2] = strip.matrixWidth;
buffer[3] = strip.matrixHeight; buffer[3] = strip.matrixHeight;
uint16_t pos = 4; }
#else
uint16_t pos = 2;
#endif #endif
for (uint16_t i = 0; pos < bufSize -2; i += n) for (uint16_t i = 0; pos < bufSize -2; i += n)