Merge branch 'segment-api' into audioreactive-prototype
This commit is contained in:
commit
d05b49496c
@ -162,7 +162,7 @@ lib_compat_mode = strict
|
||||
lib_deps =
|
||||
fastled/FastLED @ 3.5.0
|
||||
IRremoteESP8266 @ 2.8.2
|
||||
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.4
|
||||
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.5
|
||||
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
|
||||
#TFT_eSPI
|
||||
#For use SSD1306 OLED display uncomment following
|
||||
|
@ -249,7 +249,7 @@ class UsermodCronixie : public Usermod {
|
||||
|
||||
if (backlight && _digitOut[i] <11)
|
||||
{
|
||||
uint32_t col = strip.gamma32(strip.getSegment(0).colors[1]);
|
||||
uint32_t col = gamma32(strip.getSegment(0).colors[1]);
|
||||
for (uint16_t j=o; j< o+10; j++) {
|
||||
if (j != excl) strip.setPixelColor(j, col);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ class RTCUsermod : public Usermod {
|
||||
void setup() {
|
||||
PinManagerPinType pins[2] = { { HW_PIN_SCL, true }, { HW_PIN_SDA, true } };
|
||||
if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) { disabled = true; return; }
|
||||
RTC.begin();
|
||||
time_t rtcTime = RTC.get();
|
||||
if (rtcTime) {
|
||||
toki.setTime(rtcTime,TOKI_NO_MS_ACCURACY,TOKI_TS_RTC);
|
||||
|
@ -368,7 +368,7 @@ class AudioReactive : public Usermod {
|
||||
WiFiUDP fftUdp;
|
||||
|
||||
// set your config variables to their boot default value (this can also be done in readFromConfig() or a constructor if you prefer)
|
||||
bool enabled = true;
|
||||
bool enabled = false;
|
||||
bool initDone = false;
|
||||
|
||||
const uint16_t delayMs = 10; // I don't want to sample too often and overload WLED
|
||||
|
@ -25,54 +25,32 @@
|
||||
//
|
||||
|
||||
//The SCL and SDA pins are defined here.
|
||||
#ifdef ARDUINO_ARCH_ESP32
|
||||
#define HW_PIN_SCL 22
|
||||
#define HW_PIN_SDA 21
|
||||
#define HW_PIN_CLOCKSPI 18
|
||||
#define HW_PIN_DATASPI 23
|
||||
#ifndef FLD_PIN_SCL
|
||||
#define FLD_PIN_SCL 22
|
||||
#endif
|
||||
#ifndef FLD_PIN_SDA
|
||||
#define FLD_PIN_SDA 21
|
||||
#endif
|
||||
#ifndef FLD_PIN_CLOCKSPI
|
||||
#define FLD_PIN_CLOCKSPI 18
|
||||
#endif
|
||||
#ifndef FLD_PIN_SCL
|
||||
#define FLD_PIN_SCL HW_PIN_SCL
|
||||
#endif
|
||||
#ifndef FLD_PIN_SDA
|
||||
#define FLD_PIN_SDA HW_PIN_SDA
|
||||
#endif
|
||||
#ifndef FLD_PIN_CLOCKSPI
|
||||
#define FLD_PIN_CLOCKSPI HW_PIN_CLOCKSPI
|
||||
#endif
|
||||
#ifndef FLD_PIN_DATASPI
|
||||
#define FLD_PIN_DATASPI 23
|
||||
#endif
|
||||
#define FLD_PIN_DATASPI HW_PIN_DATASPI
|
||||
#endif
|
||||
#ifndef FLD_PIN_CS
|
||||
#define FLD_PIN_CS HW_PIN_CSSPI
|
||||
#endif
|
||||
|
||||
#ifdef ARDUINO_ARCH_ESP32
|
||||
#ifndef FLD_PIN_DC
|
||||
#define FLD_PIN_DC 19
|
||||
#endif
|
||||
#ifndef FLD_PIN_CS
|
||||
#define FLD_PIN_CS 5
|
||||
#endif
|
||||
#ifndef FLD_PIN_RESET
|
||||
#define FLD_PIN_RESET 26
|
||||
#endif
|
||||
#else
|
||||
#define HW_PIN_SCL 5
|
||||
#define HW_PIN_SDA 4
|
||||
#define HW_PIN_CLOCKSPI 14
|
||||
#define HW_PIN_DATASPI 13
|
||||
#ifndef FLD_PIN_SCL
|
||||
#define FLD_PIN_SCL 5
|
||||
#endif
|
||||
#ifndef FLD_PIN_SDA
|
||||
#define FLD_PIN_SDA 4
|
||||
#endif
|
||||
#ifndef FLD_PIN_CLOCKSPI
|
||||
#define FLD_PIN_CLOCKSPI 14
|
||||
#endif
|
||||
#ifndef FLD_PIN_DATASPI
|
||||
#define FLD_PIN_DATASPI 13
|
||||
#endif
|
||||
#ifndef FLD_PIN_DC
|
||||
#define FLD_PIN_DC 12
|
||||
#endif
|
||||
#ifndef FLD_PIN_CS
|
||||
#define FLD_PIN_CS 15
|
||||
#endif
|
||||
#ifndef FLD_PIN_RESET
|
||||
#define FLD_PIN_RESET 16
|
||||
@ -92,13 +70,20 @@
|
||||
#define SCREEN_TIMEOUT_MS 60*1000 // 1 min
|
||||
|
||||
// Minimum time between redrawing screen in ms
|
||||
#define USER_LOOP_REFRESH_RATE_MS 1000
|
||||
#define REFRESH_RATE_MS 1000
|
||||
|
||||
// Extra char (+1) for null
|
||||
#define LINE_BUFFER_SIZE 16+1
|
||||
#define MAX_JSON_CHARS 19+1
|
||||
#define MAX_MODE_LINE_SPACE 13+1
|
||||
|
||||
|
||||
#ifdef ARDUINO_ARCH_ESP32
|
||||
static TaskHandle_t Display_Task = nullptr;
|
||||
void DisplayTaskCode(void * parameter);
|
||||
#endif
|
||||
|
||||
|
||||
typedef enum {
|
||||
NONE = 0,
|
||||
SSD1306, // U8X8_SSD1306_128X32_UNIVISION_HW_I2C
|
||||
@ -112,10 +97,15 @@ typedef enum {
|
||||
|
||||
|
||||
class FourLineDisplayUsermod : public Usermod {
|
||||
public:
|
||||
FourLineDisplayUsermod() { if (!instance) instance = this; }
|
||||
static FourLineDisplayUsermod* getInstance(void) { return instance; }
|
||||
|
||||
private:
|
||||
|
||||
static FourLineDisplayUsermod *instance;
|
||||
bool initDone = false;
|
||||
volatile bool drawing = false;
|
||||
|
||||
// HW interface & configuration
|
||||
U8X8 *u8x8 = nullptr; // pointer to U8X8 display object
|
||||
@ -132,7 +122,7 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
bool flip = false; // flip display 180°
|
||||
uint8_t contrast = 10; // screen contrast
|
||||
uint8_t lineHeight = 1; // 1 row or 2 rows
|
||||
uint16_t refreshRate = USER_LOOP_REFRESH_RATE_MS; // in ms
|
||||
uint16_t refreshRate = REFRESH_RATE_MS; // in ms
|
||||
uint32_t screenTimeout = SCREEN_TIMEOUT_MS; // in ms
|
||||
bool sleepMode = true; // allow screen sleep?
|
||||
bool clockMode = false; // display clock
|
||||
@ -207,6 +197,7 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
if (isSPI) {
|
||||
isHW = (ioPin[0]==HW_PIN_CLOCKSPI && ioPin[1]==HW_PIN_DATASPI);
|
||||
PinManagerPinType pins[5] = { { ioPin[0], true }, { ioPin[1], true }, { ioPin[2], true }, { ioPin[3], true }, { ioPin[4], true }};
|
||||
if (ioPin[0]==HW_PIN_CLOCKSPI && ioPin[1]==HW_PIN_DATASPI && ioPin[2]==HW_PIN_CSSPI) po = PinOwner::HW_SPI; // allow multiple allocations of HW SPI bus pins
|
||||
if (!pinManager.allocateMultiplePins(pins, 5, po)) { type=NONE; return; }
|
||||
} else {
|
||||
isHW = (ioPin[0]==HW_PIN_SCL && ioPin[1]==HW_PIN_SDA);
|
||||
@ -304,6 +295,7 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
setPowerSave(0);
|
||||
//drawString(0, 0, "Loading...");
|
||||
overlayLogo(3500);
|
||||
onUpdateBegin(false); // create Display task
|
||||
initDone = true;
|
||||
}
|
||||
|
||||
@ -319,11 +311,13 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
* Da loop.
|
||||
*/
|
||||
void loop() {
|
||||
#ifndef ARDUINO_ARCH_ESP32
|
||||
if (!enabled || strip.isUpdating()) return;
|
||||
unsigned long now = millis();
|
||||
if (now < nextUpdate) return;
|
||||
nextUpdate = now + ((displayTurnedOff && clockMode && showSeconds) ? 1000 : refreshRate);
|
||||
redraw(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@ -404,6 +398,8 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
}
|
||||
}
|
||||
|
||||
while (drawing && millis()-now < 250) delay(1); // wait if someone else is drawing
|
||||
|
||||
if (apActive && WLED_WIFI_CONFIGURED && now<15000) {
|
||||
knownSsid = apSSID;
|
||||
networkOverlay(PSTR("NETWORK INFO"),30000);
|
||||
@ -639,10 +635,14 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
bool wakeDisplay() {
|
||||
if (type == NONE || !enabled) return false;
|
||||
if (displayTurnedOff) {
|
||||
unsigned long now = millis();
|
||||
while (drawing && millis()-now < 250) delay(1); // wait if someone else is drawing
|
||||
drawing = true;
|
||||
clear();
|
||||
// Turn the display back on
|
||||
sleepOrClock(false);
|
||||
//lastRedraw = millis();
|
||||
drawing = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -654,6 +654,9 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
* Used in Rotary Encoder usermod.
|
||||
*/
|
||||
void overlay(const char* line1, long showHowLong, byte glyphType) {
|
||||
unsigned long now = millis();
|
||||
while (drawing && millis()-now < 250) delay(1); // wait if someone else is drawing
|
||||
drawing = true;
|
||||
// Turn the display back on
|
||||
if (!wakeDisplay()) clear();
|
||||
// Print the overlay
|
||||
@ -667,6 +670,7 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
drawString(0, (glyphType<255?3:0)*lineHeight, buf.c_str());
|
||||
}
|
||||
overlayUntil = millis() + showHowLong;
|
||||
drawing = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -674,6 +678,9 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
* Clears the screen and prints.
|
||||
*/
|
||||
void overlayLogo(long showHowLong) {
|
||||
unsigned long now = millis();
|
||||
while (drawing && millis()-now < 250) delay(1); // wait if someone else is drawing
|
||||
drawing = true;
|
||||
// Turn the display back on
|
||||
if (!wakeDisplay()) clear();
|
||||
// Print the overlay
|
||||
@ -723,6 +730,7 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
}
|
||||
}
|
||||
overlayUntil = millis() + showHowLong;
|
||||
drawing = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -731,6 +739,9 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
* Used in Auto Save usermod
|
||||
*/
|
||||
void overlay(const char* line1, const char* line2, long showHowLong) {
|
||||
unsigned long now = millis();
|
||||
while (drawing && millis()-now < 250) delay(1); // wait if someone else is drawing
|
||||
drawing = true;
|
||||
// Turn the display back on
|
||||
if (!wakeDisplay()) clear();
|
||||
// Print the overlay
|
||||
@ -745,9 +756,14 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
drawString(0, 2*lineHeight, buf.c_str());
|
||||
}
|
||||
overlayUntil = millis() + showHowLong;
|
||||
drawing = false;
|
||||
}
|
||||
|
||||
void networkOverlay(const char* line1, long showHowLong) {
|
||||
unsigned long now = millis();
|
||||
while (drawing && millis()-now < 250) delay(1); // wait if someone else is drawing
|
||||
drawing = true;
|
||||
|
||||
String line;
|
||||
// Turn the display back on
|
||||
if (!wakeDisplay()) clear();
|
||||
@ -778,6 +794,7 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
center(line, getCols());
|
||||
drawString(0, lineHeight*3, line.c_str());
|
||||
overlayUntil = millis() + showHowLong;
|
||||
drawing = false;
|
||||
}
|
||||
|
||||
|
||||
@ -806,6 +823,10 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
void showTime() {
|
||||
if (type == NONE || !enabled || !displayTurnedOff) return;
|
||||
|
||||
unsigned long now = millis();
|
||||
while (drawing && millis()-now < 250) delay(1); // wait if someone else is drawing
|
||||
drawing = true;
|
||||
|
||||
char lineBuffer[LINE_BUFFER_SIZE];
|
||||
static byte lastSecond;
|
||||
byte secondCurrent = second(localTime);
|
||||
@ -833,15 +854,14 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
|
||||
knownMinute = minuteCurrent;
|
||||
knownHour = hourCurrent;
|
||||
} else {
|
||||
if (secondCurrent == lastSecond) return;
|
||||
}
|
||||
if (showSeconds) {
|
||||
if (showSeconds && secondCurrent != lastSecond) {
|
||||
lastSecond = secondCurrent;
|
||||
draw2x2String(6, lineHeight*2, secondCurrent%2 ? " " : ":");
|
||||
sprintf_P(lineBuffer, PSTR("%02d"), secondCurrent);
|
||||
drawString(12, lineHeight*2+1, lineBuffer, true); // even with double sized rows print seconds in 1 line
|
||||
}
|
||||
drawing = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -918,6 +938,43 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
return handled;
|
||||
}
|
||||
|
||||
#if CONFIG_FREERTOS_UNICORE
|
||||
#define ARDUINO_RUNNING_CORE 0
|
||||
#else
|
||||
#define ARDUINO_RUNNING_CORE 1
|
||||
#endif
|
||||
void onUpdateBegin(bool init) {
|
||||
#ifdef ARDUINO_ARCH_ESP32
|
||||
if (init && Display_Task) {
|
||||
vTaskSuspend(Display_Task); // update is about to begin, disable task to prevent crash
|
||||
} else {
|
||||
// update has failed or create task requested
|
||||
if (Display_Task)
|
||||
vTaskResume(Display_Task);
|
||||
else
|
||||
xTaskCreatePinnedToCore(
|
||||
[](void * par) { // Function to implement the task
|
||||
// see https://www.freertos.org/vtaskdelayuntil.html
|
||||
const TickType_t xFrequency = REFRESH_RATE_MS * portTICK_PERIOD_MS / 2;
|
||||
TickType_t xLastWakeTime = xTaskGetTickCount();
|
||||
for(;;) {
|
||||
delay(1); // DO NOT DELETE THIS LINE! It is needed to give the IDLE(0) task enough time and to keep the watchdog happy.
|
||||
// taskYIELD(), yield(), vTaskDelay() and esp_task_wdt_feed() didn't seem to work.
|
||||
vTaskDelayUntil(&xLastWakeTime, xFrequency); // release CPU, by doing nothing for REFRESH_RATE_MS millis
|
||||
FourLineDisplayUsermod::getInstance()->redraw(false);
|
||||
}
|
||||
},
|
||||
"4LD", // Name of the task
|
||||
3072, // Stack size in words
|
||||
NULL, // Task input parameter
|
||||
1, // Priority of the task (not idle)
|
||||
&Display_Task, // Task handle
|
||||
ARDUINO_RUNNING_CORE
|
||||
);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API.
|
||||
* Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI.
|
||||
@ -985,7 +1042,9 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
top[FPSTR(_flip)] = (bool) flip;
|
||||
top[FPSTR(_contrast)] = contrast;
|
||||
top[FPSTR(_contrastFix)] = (bool) contrastFix;
|
||||
#ifndef ARDUINO_ARCH_ESP32
|
||||
top[FPSTR(_refreshRate)] = refreshRate;
|
||||
#endif
|
||||
top[FPSTR(_screenTimeOut)] = screenTimeout/1000;
|
||||
top[FPSTR(_sleepMode)] = (bool) sleepMode;
|
||||
top[FPSTR(_clockMode)] = (bool) clockMode;
|
||||
@ -1019,8 +1078,10 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
for (byte i=0; i<5; i++) newPin[i] = top["pin"][i] | ioPin[i];
|
||||
flip = top[FPSTR(_flip)] | flip;
|
||||
contrast = top[FPSTR(_contrast)] | contrast;
|
||||
#ifndef ARDUINO_ARCH_ESP32
|
||||
refreshRate = top[FPSTR(_refreshRate)] | refreshRate;
|
||||
refreshRate = min(5000, max(250, (int)refreshRate));
|
||||
#endif
|
||||
screenTimeout = (top[FPSTR(_screenTimeOut)] | screenTimeout/1000) * 1000;
|
||||
sleepMode = top[FPSTR(_sleepMode)] | sleepMode;
|
||||
clockMode = top[FPSTR(_clockMode)] | clockMode;
|
||||
@ -1045,8 +1106,10 @@ class FourLineDisplayUsermod : public Usermod {
|
||||
if (pinsChanged || type!=newType) {
|
||||
if (type != NONE) delete u8x8;
|
||||
PinOwner po = PinOwner::UM_FourLineDisplay;
|
||||
if (ioPin[0]==HW_PIN_SCL && ioPin[1]==HW_PIN_SDA) po = PinOwner::HW_I2C; // allow multiple allocations of HW I2C bus pins
|
||||
pinManager.deallocateMultiplePins((const uint8_t *)ioPin, (type == SSD1306_SPI || type == SSD1306_SPI64) ? 5 : 2, po);
|
||||
bool isSPI = (type == SSD1306_SPI || type == SSD1306_SPI64);
|
||||
if (!isSPI && ioPin[0]==HW_PIN_SCL && ioPin[1]==HW_PIN_SDA) po = PinOwner::HW_I2C; // allow multiple allocations of HW I2C bus pins
|
||||
if (isSPI && ioPin[0]==HW_PIN_CLOCKSPI && ioPin[1]==HW_PIN_DATASPI && ioPin[2]==HW_PIN_CSSPI) po = PinOwner::HW_SPI; // allow multiple allocations of HW SPI bus pins
|
||||
pinManager.deallocateMultiplePins((const uint8_t *)ioPin, isSPI ? 5 : 2, po);
|
||||
for (byte i=0; i<5; i++) ioPin[i] = newPin[i];
|
||||
if (ioPin[0]<0 || ioPin[1]<0) { // data & clock must be > -1
|
||||
type = NONE;
|
||||
@ -1089,3 +1152,5 @@ const char FourLineDisplayUsermod::_clockMode[] PROGMEM = "clockMode";
|
||||
const char FourLineDisplayUsermod::_showSeconds[] PROGMEM = "showSeconds";
|
||||
const char FourLineDisplayUsermod::_busClkFrequency[] PROGMEM = "i2c-freq-kHz";
|
||||
const char FourLineDisplayUsermod::_contrastFix[] PROGMEM = "contrastFix";
|
||||
|
||||
FourLineDisplayUsermod *FourLineDisplayUsermod::instance = nullptr;
|
||||
|
1768
wled00/FX.cpp
1768
wled00/FX.cpp
File diff suppressed because it is too large
Load Diff
378
wled00/FX.h
378
wled00/FX.h
@ -56,10 +56,6 @@
|
||||
#define RGBW32(r,g,b,w) (uint32_t((byte(w) << 24) | (byte(r) << 16) | (byte(g) << 8) | (byte(b))))
|
||||
#endif
|
||||
|
||||
//colors.cpp (.h does not like including other .h)
|
||||
uint32_t color_blend(uint32_t,uint32_t,uint16_t,bool b16);
|
||||
uint32_t color_add(uint32_t,uint32_t);
|
||||
|
||||
/* Not used in all effects yet */
|
||||
#define WLED_FPS 42
|
||||
#define FRAMETIME_FIXED (1000/WLED_FPS)
|
||||
@ -71,12 +67,12 @@ uint32_t color_add(uint32_t,uint32_t);
|
||||
#ifdef ESP8266
|
||||
#define MAX_NUM_SEGMENTS 16
|
||||
/* How much data bytes all segments combined may allocate */
|
||||
#define MAX_SEGMENT_DATA 4096
|
||||
#define MAX_SEGMENT_DATA 5120
|
||||
#else
|
||||
#ifndef MAX_NUM_SEGMENTS
|
||||
#define MAX_NUM_SEGMENTS 32
|
||||
#endif
|
||||
#define MAX_SEGMENT_DATA 32768
|
||||
#define MAX_SEGMENT_DATA 32767
|
||||
#endif
|
||||
|
||||
/* How much data bytes each segment should max allocate to leave enough space for other segments,
|
||||
@ -88,7 +84,7 @@ uint32_t color_add(uint32_t,uint32_t);
|
||||
#define NUM_COLORS 3 /* number of colors per segment */
|
||||
#define SEGMENT strip._segments[strip.getCurrSegmentId()]
|
||||
#define SEGENV strip._segments[strip.getCurrSegmentId()]
|
||||
//#define SEGCOLOR(x) strip._segments[s//trip.getCurrSegmentId()].currentColor(x, strip._segments[strip.getCurrSegmentId()].colors[x])
|
||||
//#define SEGCOLOR(x) strip._segments[strip.getCurrSegmentId()].currentColor(x, strip._segments[strip.getCurrSegmentId()].colors[x])
|
||||
//#define SEGLEN strip._segments[strip.getCurrSegmentId()].virtualLength()
|
||||
#define SEGCOLOR(x) strip.segColor(x) /* saves us a few kbytes of code */
|
||||
#define SEGPALETTE strip._currentPalette
|
||||
@ -108,6 +104,8 @@ uint32_t color_add(uint32_t,uint32_t);
|
||||
#define ORANGE (uint32_t)0xFF3000
|
||||
#define PINK (uint32_t)0xFF1493
|
||||
#define ULTRAWHITE (uint32_t)0xFFFFFFFF
|
||||
#define DARKSLATEGRAY (uint32_t)0x2F4F4F
|
||||
#define DARKSLATEGREY (uint32_t)0x2F4F4F
|
||||
|
||||
// options
|
||||
// bit 7: segment is in transition mode
|
||||
@ -247,120 +245,96 @@ uint32_t color_add(uint32_t,uint32_t);
|
||||
#define FX_MODE_BLENDS 115
|
||||
#define FX_MODE_TV_SIMULATOR 116
|
||||
#define FX_MODE_DYNAMIC_SMOOTH 117
|
||||
// new 2D effects
|
||||
#define FX_MODE_2DSPACESHIPS 118
|
||||
#define FX_MODE_2DCRAZYBEES 119
|
||||
#define FX_MODE_2DGHOSTRIDER 120
|
||||
#define FX_MODE_2DBLOBS 121
|
||||
#define FX_MODE_2DSCROLLTEXT 122
|
||||
#define FX_MODE_2DDRIFTROSE 123
|
||||
// WLED-SR effects (non SR compatible IDs)
|
||||
#define FX_MODE_2DBLACKHOLE 124 // non audio
|
||||
#define FX_MODE_2DDNASPIRAL 125 // non audio
|
||||
#define FX_MODE_2DHIPHOTIC 126 // non audio
|
||||
#define FX_MODE_2DPLASMABALL 127 // non audio
|
||||
#define FX_MODE_2DSINDOTS 128 // non audio
|
||||
#define FX_MODE_2DFRIZZLES 129 // non audio
|
||||
#define FX_MODE_2DLISSAJOUS 130 // non audio
|
||||
#define FX_MODE_2DPOLARLIGHTS 131 // non audio
|
||||
#define FX_MODE_2DTARTAN 132 // non audio
|
||||
#define FX_MODE_2DGAMEOFLIFE 133 // non audio
|
||||
#define FX_MODE_2DJULIA 134 // non audio
|
||||
#define FX_MODE_2DCOLOREDBURSTS 135 // non audio
|
||||
#define FX_MODE_2DSUNRADIATION 136 // non audio
|
||||
#define FX_MODE_2DNOISE 137 // non audio
|
||||
#define FX_MODE_2DFIRENOISE 138 // non audio
|
||||
#define FX_MODE_2DSQUAREDSWIRL 139 // non audio
|
||||
#define FX_MODE_2DDNA 140 // non audio
|
||||
#define FX_MODE_2DMATRIX 141 // non audio
|
||||
#define FX_MODE_2DMETABALLS 142 // non audio
|
||||
#define FX_MODE_2DPULSER 143 // non audio
|
||||
#define FX_MODE_2DDRIFT 144 // non audio
|
||||
#define FX_MODE_2DWAVERLY 145 // audio enhanced
|
||||
#define FX_MODE_2DSWIRL 146 // audio enhanced
|
||||
#define FX_MODE_2DAKEMI 147 // audio enhanced
|
||||
#define FX_MODE_PIXELWAVE 160 // audio enhanced
|
||||
#define FX_MODE_JUGGLES 161 // audio enhanced
|
||||
#define FX_MODE_MATRIPIX 162 // audio enhanced
|
||||
#define FX_MODE_GRAVIMETER 163 // audio enhanced
|
||||
#define FX_MODE_PLASMOID 164 // audio enhanced
|
||||
#define FX_MODE_PUDDLES 165 // audio enhanced
|
||||
#define FX_MODE_MIDNOISE 166 // audio enhanced
|
||||
#define FX_MODE_NOISEMETER 167 // audio enhanced
|
||||
#define FX_MODE_NOISEFIRE 168 // audio enhanced
|
||||
#define FX_MODE_PUDDLEPEAK 169 // audio enhanced
|
||||
#define FX_MODE_RIPPLEPEAK 170 // audio enhanced
|
||||
#define FX_MODE_GRAVCENTER 171 // audio enhanced
|
||||
#define FX_MODE_GRAVCENTRIC 172 // audio enhanced
|
||||
#ifndef WLED_DISABLE_2D
|
||||
// new 2D effects
|
||||
#define FX_MODE_2DSPACESHIPS 118
|
||||
#define FX_MODE_2DCRAZYBEES 119
|
||||
#define FX_MODE_2DGHOSTRIDER 120
|
||||
#define FX_MODE_2DBLOBS 121
|
||||
#define FX_MODE_2DSCROLLTEXT 122
|
||||
#define FX_MODE_2DDRIFTROSE 123
|
||||
// WLED-SR effects (non SR compatible IDs)
|
||||
#define FX_MODE_2DBLACKHOLE 124 // non audio
|
||||
#define FX_MODE_2DDNASPIRAL 125 // non audio
|
||||
#define FX_MODE_2DHIPHOTIC 126 // non audio
|
||||
#define FX_MODE_2DPLASMABALL 127 // non audio
|
||||
#define FX_MODE_2DSINDOTS 128 // non audio
|
||||
#define FX_MODE_2DFRIZZLES 129 // non audio
|
||||
#define FX_MODE_2DLISSAJOUS 130 // non audio
|
||||
#define FX_MODE_2DPOLARLIGHTS 131 // non audio
|
||||
#define FX_MODE_2DTARTAN 132 // non audio
|
||||
#define FX_MODE_2DGAMEOFLIFE 133 // non audio
|
||||
#define FX_MODE_2DJULIA 134 // non audio
|
||||
#define FX_MODE_2DCOLOREDBURSTS 135 // non audio
|
||||
#define FX_MODE_2DSUNRADIATION 136 // non audio
|
||||
#define FX_MODE_2DNOISE 137 // non audio
|
||||
#define FX_MODE_2DFIRENOISE 138 // non audio
|
||||
#define FX_MODE_2DSQUAREDSWIRL 139 // non audio
|
||||
#define FX_MODE_2DDNA 140 // non audio
|
||||
#define FX_MODE_2DMATRIX 141 // non audio
|
||||
#define FX_MODE_2DMETABALLS 142 // non audio
|
||||
#define FX_MODE_2DPULSER 143 // non audio
|
||||
#define FX_MODE_2DDRIFT 144 // non audio
|
||||
#endif
|
||||
#ifndef WLED_DISABLE_AUDIO
|
||||
#ifndef WLED_DISABLE_2D
|
||||
#define FX_MODE_2DWAVERLY 145 // audio enhanced
|
||||
#define FX_MODE_2DSWIRL 146 // audio enhanced
|
||||
#define FX_MODE_2DAKEMI 147 // audio enhanced
|
||||
// 148 & 149 reserved
|
||||
#endif
|
||||
#define FX_MODE_PIXELWAVE 150 // audio enhanced
|
||||
#define FX_MODE_JUGGLES 151 // audio enhanced
|
||||
#define FX_MODE_MATRIPIX 152 // audio enhanced
|
||||
#define FX_MODE_GRAVIMETER 153 // audio enhanced
|
||||
#define FX_MODE_PLASMOID 154 // audio enhanced
|
||||
#define FX_MODE_PUDDLES 155 // audio enhanced
|
||||
#define FX_MODE_MIDNOISE 156 // audio enhanced
|
||||
#define FX_MODE_NOISEMETER 157 // audio enhanced
|
||||
#define FX_MODE_NOISEFIRE 158 // audio enhanced
|
||||
#define FX_MODE_PUDDLEPEAK 159 // audio enhanced
|
||||
#define FX_MODE_RIPPLEPEAK 160 // audio enhanced
|
||||
#define FX_MODE_GRAVCENTER 161 // audio enhanced
|
||||
#define FX_MODE_GRAVCENTRIC 162 // audio enhanced
|
||||
#endif
|
||||
|
||||
#ifndef USERMOD_AUDIOREACTIVE
|
||||
|
||||
#define MODE_COUNT 173
|
||||
#ifndef WLED_DISABLE_AUDIO
|
||||
#define MODE_COUNT 163
|
||||
#else
|
||||
#ifndef WLED_DISABLE_2D
|
||||
#define MODE_COUNT 145
|
||||
#else
|
||||
#define MODE_COUNT 118
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#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
|
||||
#ifdef WLED_DISABLE_AUDIO
|
||||
#error Incompatible options: WLED_DISABLE_AUDIO and USERMOD_AUDIOREACTIVE
|
||||
#endif
|
||||
#ifdef WLED_DISABLE_2D
|
||||
#error AUDIOREACTIVE usermod requires 2D support.
|
||||
#endif
|
||||
#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_2DCENTERBARS 161 // obsolete by X & Y mirroring
|
||||
// #define FX_MODE_2DPULSER 162 // non audio
|
||||
#define FX_MODE_BLURZ 183
|
||||
// #define FX_MODE_2DDRIFT 164 // non audio
|
||||
// #define FX_MODE_2DWAVERLY 165 // audio enhanced
|
||||
// #define FX_MODE_2DSUNRADIATION 166 // non audio
|
||||
// #define FX_MODE_2DCOLOREDBURSTS 167 // non audio
|
||||
// #define FX_MODE_2DJULIA 168 // non audio
|
||||
#define FX_MODE_2DPOOLNOISE 150 // reserved in JSON_mode_names
|
||||
#define FX_MODE_2DTWISTER 151 // reserved in JSON_mode_names
|
||||
#define FX_MODE_2DCAELEMENTATY 152 // reserved in JSON_mode_names
|
||||
// #define FX_MODE_2DGAMEOFLIFE 172 // non audio
|
||||
// #define FX_MODE_2DTARTAN 173 // non audio
|
||||
// #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 FX_MODE_PIXELS 163
|
||||
#define FX_MODE_FREQWAVE 164
|
||||
#define FX_MODE_FREQMATRIX 165
|
||||
#define FX_MODE_WATERFALL 166
|
||||
#define FX_MODE_FREQPIXELS 167
|
||||
#define FX_MODE_BINMAP 168
|
||||
#define FX_MODE_NOISEMOVE 169
|
||||
#define FX_MODE_FREQMAP 170
|
||||
#define FX_MODE_GRAVFREQ 171
|
||||
#define FX_MODE_DJLIGHT 172
|
||||
#define FX_MODE_BLURZ 173
|
||||
#define FX_MODE_ROCKTAVES 174
|
||||
//#define FX_MODE_CUSTOMEFFECT 175 //WLEDSR Custom Effects
|
||||
|
||||
#define MODE_COUNT 185
|
||||
#define MODE_COUNT 175
|
||||
#endif
|
||||
|
||||
typedef enum mapping1D2D {
|
||||
@ -414,6 +388,8 @@ typedef struct Segment {
|
||||
uint16_t aux0; // custom var
|
||||
uint16_t aux1; // custom var
|
||||
byte* data;
|
||||
CRGB* leds;
|
||||
static CRGB *_globalLeds;
|
||||
|
||||
private:
|
||||
union {
|
||||
@ -427,21 +403,22 @@ typedef struct Segment {
|
||||
};
|
||||
};
|
||||
uint16_t _dataLen;
|
||||
static uint16_t _usedSegmentData;
|
||||
|
||||
// transition data, valid only if getOption(SEG_OPTION_TRANSITIONAL)==true, holds values during transition
|
||||
//struct Transition {
|
||||
// transition data, valid only if transitional==true, holds values during transition
|
||||
struct Transition {
|
||||
uint32_t _colorT[NUM_COLORS];
|
||||
uint8_t _briT; // temporary brightness
|
||||
uint8_t _cctT; // temporary CCT
|
||||
CRGBPalette16 _palT; // temporary palette
|
||||
//uint8_t _modeP; // previous mode/effect (transitioning effects is way more complex than this)
|
||||
uint8_t _modeP; // previous mode/effect
|
||||
uint32_t _start;
|
||||
uint16_t _dur;
|
||||
// Transition(uint16_t dur=750) : _briT(255), _cctT(127), _palT(CRGBPalette16(CRGB::Black)), _modeP(FX_MODE_STATIC), _start(millis()), _dur(dur) {}
|
||||
// Transition(uint16_t d, uint8_t b, uint8_t c, const uint32_t *o) : _briT(b), _cctT(c), _palT(CRGBPalette16(CRGB::Black)), _modeP(FX_MODE_STATIC), _start(millis()), _dur(d) {
|
||||
// for (size_t i=0; i<NUM_COLORS; i++) _colorT[i] = o[i];
|
||||
// }
|
||||
//} *_t; // this struct will bootloop ESP
|
||||
Transition(uint16_t dur=750) : _briT(255), _cctT(127), _palT(CRGBPalette16(CRGB::Black)), _modeP(FX_MODE_STATIC), _start(millis()), _dur(dur) {}
|
||||
Transition(uint16_t d, uint8_t b, uint8_t c, const uint32_t *o) : _briT(b), _cctT(c), _palT(CRGBPalette16(CRGB::Black)), _modeP(FX_MODE_STATIC), _start(millis()), _dur(d) {
|
||||
for (size_t i=0; i<NUM_COLORS; i++) _colorT[i] = o[i];
|
||||
}
|
||||
} *_t; // this struct will bootloop ESP
|
||||
|
||||
public:
|
||||
|
||||
@ -471,9 +448,10 @@ typedef struct Segment {
|
||||
aux0(0),
|
||||
aux1(0),
|
||||
data(nullptr),
|
||||
leds(nullptr),
|
||||
_capabilities(0),
|
||||
_dataLen(0)
|
||||
//_t(nullptr)
|
||||
_dataLen(0),
|
||||
_t(nullptr)
|
||||
{
|
||||
refreshLightCapabilities();
|
||||
}
|
||||
@ -488,28 +466,38 @@ typedef struct Segment {
|
||||
|
||||
~Segment() {
|
||||
#ifdef WLED_DEBUG
|
||||
Serial.print(F("Destroying segment."));
|
||||
Serial.print(F("Destroying segment:"));
|
||||
if (name) Serial.printf(" %s (%p)", name, name);
|
||||
if (data) Serial.printf(" %p", data);
|
||||
if (data) Serial.printf(" %d (%p)", (int)_dataLen, data);
|
||||
if (leds) Serial.printf(" [%u]", length()*sizeof(CRGB));
|
||||
Serial.println();
|
||||
#endif
|
||||
if (!Segment::_globalLeds && leds) free(leds);
|
||||
if (name) delete[] name;
|
||||
//if (_t) delete _t;
|
||||
if (_t) delete _t;
|
||||
deallocateData();
|
||||
}
|
||||
|
||||
Segment& operator= (const Segment &orig); // copy assignment
|
||||
Segment& operator= (Segment &&orig) noexcept; // move assignment
|
||||
|
||||
#ifdef WLED_DEBUG
|
||||
size_t getSize() { return sizeof(Segment) + (data?_dataLen:0) + (name?strlen(name):0) + (_t?sizeof(Transition):0) + (!Segment::_globalLeds && leds?sizeof(CRGB)*length():0); }
|
||||
#endif
|
||||
|
||||
inline bool getOption(uint8_t n) { return ((options >> n) & 0x01); }
|
||||
inline bool isSelected(void) { return getOption(0); }
|
||||
inline bool isSelected(void) { return selected; }
|
||||
inline bool isActive(void) { return stop > start; }
|
||||
inline uint16_t width(void) { return stop - start; }
|
||||
inline uint16_t height(void) { return stopY - startY; }
|
||||
inline uint16_t length(void) { return width(); }
|
||||
inline bool is2D(void) { return !(startY == 0 && stopY == 1); }
|
||||
inline uint16_t width(void) { return stop - start; } // segment width in physical pixels (length if 1D)
|
||||
inline uint16_t height(void) { return stopY - startY; } // segment height (if 2D) in physical pixels
|
||||
inline uint16_t length(void) { return width() * height(); } // segment length (count) in physical pixels
|
||||
inline uint16_t groupLength(void) { return grouping + spacing; }
|
||||
inline uint8_t getLightCapabilities(void) { return _capabilities; }
|
||||
|
||||
static uint16_t getUsedSegmentData(void) { return _usedSegmentData; }
|
||||
static void addUsedSegmentData(int len) { _usedSegmentData += len; }
|
||||
|
||||
bool setColor(uint8_t slot, uint32_t c); //returns true if changed
|
||||
void setCCT(uint16_t k);
|
||||
void setOpacity(uint8_t o);
|
||||
@ -518,9 +506,9 @@ typedef struct Segment {
|
||||
void refreshLightCapabilities(void);
|
||||
|
||||
// runtime data functions
|
||||
bool allocateData(uint16_t len);
|
||||
void deallocateData(void);
|
||||
inline uint16_t dataSize(void) { return _dataLen; }
|
||||
bool allocateData(size_t len);
|
||||
void deallocateData(void);
|
||||
void resetIfRequired(void);
|
||||
/**
|
||||
* Flags that before the next effect is calculated,
|
||||
@ -529,13 +517,16 @@ typedef struct Segment {
|
||||
* Safe to call from interrupts and network requests.
|
||||
*/
|
||||
inline void markForReset(void) { reset = true; } // setOption(SEG_OPTION_RESET, true)
|
||||
//inline void setUpLeds() { if (!leds) leds = (CRGB*)malloc(sizeof(CRGB)*length()); }
|
||||
void setUpLeds(void);
|
||||
|
||||
// transition functions
|
||||
void startTransition(uint16_t dur); // transition has to start before actual segment values change
|
||||
void handleTransition(void);
|
||||
uint16_t progress(void); //transition progression between 0-65535
|
||||
uint8_t currentBri(uint8_t briNew, bool useCct = false);
|
||||
uint32_t currentColor(uint8_t slot, uint32_t colorNew) { return getOption(SEG_OPTION_TRANSITIONAL) /*&& !_t*/ ? color_blend(/*_t->*/_colorT[slot], colorNew, progress(), true) : colorNew; }
|
||||
uint8_t currentMode(uint8_t modeNew);
|
||||
uint32_t currentColor(uint8_t slot, uint32_t colorNew);
|
||||
CRGBPalette16 &loadPalette(CRGBPalette16 &tgt, uint8_t pal);
|
||||
CRGBPalette16 ¤tPalette(CRGBPalette16 &tgt, uint8_t paletteID);
|
||||
|
||||
@ -543,18 +534,22 @@ typedef struct Segment {
|
||||
uint16_t virtualLength(void);
|
||||
void setPixelColor(int n, uint32_t c); // set relative pixel within segment with color
|
||||
void setPixelColor(int n, byte r, byte g, byte b, byte w = 0) { setPixelColor(n, RGBW32(r,g,b,w)); } // automatically inline
|
||||
void setPixelColor(int n, CRGB c) { setPixelColor(n, c.red, c.green, c.blue); } // automatically inline
|
||||
void setPixelColor(int n, CRGB c) { setPixelColor(n, RGBW32(c.r,c.g,c.b,0)); } // automatically inline
|
||||
void setPixelColor(float i, uint32_t c, bool aa = true);
|
||||
void setPixelColor(float i, uint8_t r, uint8_t g, uint8_t b, uint8_t w = 0, bool aa = true) { setPixelColor(i, RGBW32(r,g,b,w), aa); }
|
||||
void setPixelColor(float i, CRGB c, bool aa = true) { setPixelColor(i, c.red, c.green, c.blue, 0, aa); }
|
||||
void setPixelColor(float i, CRGB c, bool aa = true) { setPixelColor(i, RGBW32(c.r,c.g,c.b,0), aa); }
|
||||
uint32_t getPixelColor(uint16_t i);
|
||||
// 1D support functions (some implement 2D as well)
|
||||
void blur(uint8_t);
|
||||
void fill(uint32_t c);
|
||||
void fade_out(uint8_t r);
|
||||
void fadeToBlackBy(uint8_t fadeBy);
|
||||
void blendPixelColor(uint16_t n, uint32_t color, uint8_t blend);
|
||||
void addPixelColor(uint16_t n, uint32_t color);
|
||||
void blendPixelColor(int n, uint32_t color, uint8_t blend);
|
||||
void blendPixelColor(int n, CRGB c, uint8_t blend) { blendPixelColor(n, RGBW32(c.r,c.g,c.b,0), blend); }
|
||||
void addPixelColor(int n, uint32_t color);
|
||||
void addPixelColor(int n, byte r, byte g, byte b, byte w = 0) { addPixelColor(n, RGBW32(r,g,b,w)); } // automatically inline
|
||||
void addPixelColor(int n, CRGB c) { addPixelColor(n, RGBW32(c.r,c.g,c.b,0)); } // automatically inline
|
||||
void fadePixelColor(uint16_t n, uint8_t fade);
|
||||
uint8_t get_random_wheel_index(uint8_t pos);
|
||||
uint32_t color_from_palette(uint16_t, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri = 255);
|
||||
uint32_t color_wheel(uint8_t pos);
|
||||
@ -562,35 +557,66 @@ typedef struct Segment {
|
||||
// 2D matrix
|
||||
uint16_t virtualWidth(void);
|
||||
uint16_t virtualHeight(void);
|
||||
#ifndef WLED_DISABLE_2D
|
||||
uint16_t XY(uint16_t x, uint16_t y); // support function to get relative index within segment (for leds[])
|
||||
void setPixelColorXY(int x, int y, uint32_t c); // set relative pixel within segment with color
|
||||
void setPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { setPixelColorXY(x, y, RGBW32(r,g,b,w)); } // automatically inline
|
||||
void setPixelColorXY(int x, int y, CRGB c) { setPixelColorXY(x, y, c.red, c.green, c.blue); } // automatically inline
|
||||
void setPixelColorXY(int x, int y, CRGB c) { setPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0)); } // automatically inline
|
||||
void setPixelColorXY(float x, float y, uint32_t c, bool aa = true);
|
||||
void setPixelColorXY(float x, float y, byte r, byte g, byte b, byte w = 0, bool aa = true) { setPixelColorXY(x, y, RGBW32(r,g,b,w), aa); }
|
||||
void setPixelColorXY(float x, float y, CRGB c, bool aa = true) { setPixelColorXY(x, y, c.red, c.green, c.blue, 0, aa); }
|
||||
void setPixelColorXY(float x, float y, CRGB c, bool aa = true) { setPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), aa); }
|
||||
uint32_t getPixelColorXY(uint16_t x, uint16_t y);
|
||||
// 2D support functions
|
||||
void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend);
|
||||
void addPixelColorXY(uint16_t x, uint16_t y, uint32_t color);
|
||||
void blur1d(CRGB* leds, fract8 blur_amount);
|
||||
void blur1d(uint16_t i, bool vertical, fract8 blur_amount, CRGB* leds=nullptr); // 1D box blur (with weight)
|
||||
void blur2d(CRGB* leds, fract8 blur_amount);
|
||||
void blurRow(uint16_t row, fract8 blur_amount, CRGB* leds=nullptr);
|
||||
void blurCol(uint16_t col, fract8 blur_amount, CRGB* leds=nullptr);
|
||||
void moveX(CRGB *leds, int8_t delta);
|
||||
void moveY(CRGB *leds, int8_t delta);
|
||||
void move(uint8_t dir, uint8_t delta, CRGB *leds=nullptr);
|
||||
void fill_solid(CRGB* leds, CRGB c);
|
||||
void fill_circle(CRGB* leds, uint16_t cx, uint16_t cy, uint8_t radius, CRGB c);
|
||||
void fadeToBlackBy(CRGB* leds, uint8_t fadeBy);
|
||||
void nscale8(CRGB* leds, uint8_t scale);
|
||||
void setPixels(CRGB* leds);
|
||||
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c, CRGB *leds = nullptr);
|
||||
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB color, CRGB *leds = nullptr);
|
||||
void wu_pixel(CRGB *leds, uint32_t x, uint32_t y, CRGB c);
|
||||
inline void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c) { drawLine(x0, y0, x1, y1, CRGB(byte(c>>16), byte(c>>8), byte(c))); }
|
||||
inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t c) { drawCharacter(chr, x, y, w, h, CRGB(byte(c>>16), byte(c>>8), byte(c))); }
|
||||
void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), blend); }
|
||||
void addPixelColorXY(int x, int y, uint32_t color);
|
||||
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColorXY(x, y, RGBW32(r,g,b,w)); } // automatically inline
|
||||
void addPixelColorXY(int x, int y, CRGB c) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0)); }
|
||||
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade);
|
||||
void box_blur(uint16_t i, bool vertical, fract8 blur_amount); // 1D box blur (with weight)
|
||||
void blurRow(uint16_t row, fract8 blur_amount);
|
||||
void blurCol(uint16_t col, fract8 blur_amount);
|
||||
void moveX(int8_t delta);
|
||||
void moveY(int8_t delta);
|
||||
void move(uint8_t dir, uint8_t delta);
|
||||
void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c);
|
||||
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c);
|
||||
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c) { drawLine(x0, y0, x1, y1, RGBW32(c.r,c.g,c.b,0)); } // automatic inline
|
||||
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color);
|
||||
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB c) { drawCharacter(chr, x, y, w, h, RGBW32(c.r,c.g,c.b,0)); } // automatic inline
|
||||
void wu_pixel(uint32_t x, uint32_t y, CRGB c);
|
||||
void blur1d(fract8 blur_amount); // blur all rows in 1 dimension
|
||||
void blur2d(fract8 blur_amount) { blur(blur_amount); }
|
||||
void fill_solid(CRGB c) { fill(RGBW32(c.r,c.g,c.b,0)); }
|
||||
void nscale8(uint8_t scale);
|
||||
#else
|
||||
uint16_t XY(uint16_t x, uint16_t y) { return x; }
|
||||
void setPixelColorXY(int x, int y, uint32_t c) { setPixelColor(x, c); }
|
||||
void setPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { setPixelColor(x, RGBW32(r,g,b,w)); }
|
||||
void setPixelColorXY(int x, int y, CRGB c) { setPixelColor(x, RGBW32(c.r,c.g,c.b,0)); }
|
||||
void setPixelColorXY(float x, float y, uint32_t c, bool aa = true) { setPixelColor(x, c, aa); }
|
||||
void setPixelColorXY(float x, float y, byte r, byte g, byte b, byte w = 0, bool aa = true) { setPixelColor(x, RGBW32(r,g,b,w), aa); }
|
||||
void setPixelColorXY(float x, float y, CRGB c, bool aa = true) { setPixelColor(x, RGBW32(c.r,c.g,c.b,0), aa); }
|
||||
uint32_t getPixelColorXY(uint16_t x, uint16_t y) { return getPixelColor(x); }
|
||||
void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t c, uint8_t blend) { blendPixelColor(x, c, blend); }
|
||||
void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColor(x, RGBW32(c.r,c.g,c.b,0), blend); }
|
||||
void addPixelColorXY(int x, int y, uint32_t color) { addPixelColor(x, color); }
|
||||
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColor(x, RGBW32(r,g,b,w)); }
|
||||
void addPixelColorXY(int x, int y, CRGB c) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0)); }
|
||||
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { fadePixelColor(x, fade); }
|
||||
void box_blur(uint16_t i, bool vertical, fract8 blur_amount) {}
|
||||
void blurRow(uint16_t row, fract8 blur_amount) {}
|
||||
void blurCol(uint16_t col, fract8 blur_amount) {}
|
||||
void moveX(int8_t delta) {}
|
||||
void moveY(int8_t delta) {}
|
||||
void move(uint8_t dir, uint8_t delta) {}
|
||||
void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c) {}
|
||||
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c) {}
|
||||
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c) {}
|
||||
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color) {}
|
||||
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB color) {}
|
||||
void wu_pixel(uint32_t x, uint32_t y, CRGB c) {}
|
||||
#endif
|
||||
} segment;
|
||||
//static int i = sizeof(Segment);
|
||||
|
||||
@ -633,13 +659,11 @@ class WS2812FX { // 96 bytes
|
||||
#endif
|
||||
// semi-private (just obscured) used in effect functions through macros
|
||||
_currentPalette(CRGBPalette16(CRGB::Black)),
|
||||
_bri_t(0),
|
||||
_colors_t{0,0,0},
|
||||
_virtualSegmentLength(0),
|
||||
// true private variables
|
||||
_length(DEFAULT_LED_COUNT),
|
||||
_brightness(DEFAULT_BRIGHTNESS),
|
||||
_usedSegmentData(0),
|
||||
_transitionDur(750),
|
||||
_targetFps(WLED_FPS),
|
||||
_frametime(FRAMETIME_FIXED),
|
||||
@ -657,9 +681,9 @@ class WS2812FX { // 96 bytes
|
||||
_mainSegment(0)
|
||||
{
|
||||
WS2812FX::instance = this;
|
||||
_mode.reserve(_modeCount); // allocate memory to prevent initial fragmentation
|
||||
_modeData.reserve(_modeCount); // allocate memory to prevent initial fragmentation
|
||||
if (_mode.capacity() <= 1 || _modeData.capacity() <= 1) _modeCount = 1;
|
||||
_mode.reserve(_modeCount); // allocate memory to prevent initial fragmentation (does not increase size())
|
||||
_modeData.reserve(_modeCount); // allocate memory to prevent initial fragmentation (does not increase size())
|
||||
if (_mode.capacity() <= 1 || _modeData.capacity() <= 1) _modeCount = 1; // memory allocation failed only show Solid
|
||||
else setupEffectData();
|
||||
}
|
||||
|
||||
@ -669,11 +693,15 @@ class WS2812FX { // 96 bytes
|
||||
_modeData.clear();
|
||||
_segments.clear();
|
||||
customPalettes.clear();
|
||||
if (useLedsArray && Segment::_globalLeds) free(Segment::_globalLeds);
|
||||
}
|
||||
|
||||
static WS2812FX* getInstance(void) { return instance; }
|
||||
|
||||
void
|
||||
#ifdef WLED_DEBUG
|
||||
printSize(),
|
||||
#endif
|
||||
finalizeInit(),
|
||||
service(void),
|
||||
setMode(uint8_t segid, uint8_t m),
|
||||
@ -683,8 +711,7 @@ class WS2812FX { // 96 bytes
|
||||
setBrightness(uint8_t b, bool direct = false),
|
||||
setRange(uint16_t i, uint16_t i2, uint32_t col),
|
||||
setTransitionMode(bool t),
|
||||
calcGammaTable(float),
|
||||
purgeSegments(void),
|
||||
purgeSegments(bool force = false),
|
||||
setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t grouping = 1, uint8_t spacing = 0, uint16_t offset = UINT16_MAX, uint16_t startY=0, uint16_t stopY=1),
|
||||
setMainSegmentId(uint8_t n),
|
||||
restartRuntime(),
|
||||
@ -707,7 +734,6 @@ class WS2812FX { // 96 bytes
|
||||
inline void setShowCallback(show_callback cb) { _callback = cb; }
|
||||
inline void setTransition(uint16_t t) { _transitionDur = t; }
|
||||
inline void appendSegment(const Segment &seg = Segment()) { _segments.push_back(seg); }
|
||||
inline void addUsedSegmentData(int16_t size) { _usedSegmentData += size; }
|
||||
|
||||
bool
|
||||
gammaCorrectBri,
|
||||
@ -716,7 +742,8 @@ class WS2812FX { // 96 bytes
|
||||
hasRGBWBus(void),
|
||||
hasCCTBus(void),
|
||||
// return true if the strip is being sent pixel updates
|
||||
isUpdating(void);
|
||||
isUpdating(void),
|
||||
useLedsArray = false;
|
||||
|
||||
inline bool isServicing(void) { return _isServicing; }
|
||||
inline bool hasWhiteChannel(void) {return _hasWhiteChannel;}
|
||||
@ -730,9 +757,7 @@ class WS2812FX { // 96 bytes
|
||||
getActiveSegmentsNum(void),
|
||||
getFirstSelectedSegId(void),
|
||||
getLastActiveSegmentId(void),
|
||||
setPixelSegment(uint8_t n),
|
||||
gamma8(uint8_t),
|
||||
gamma8_cal(uint8_t, float);
|
||||
setPixelSegment(uint8_t n);
|
||||
|
||||
inline uint8_t getBrightness(void) { return _brightness; }
|
||||
inline uint8_t getMaxSegments(void) { return MAX_NUM_SEGMENTS; } // returns maximum number of supported segments (fixed value)
|
||||
@ -753,13 +778,11 @@ class WS2812FX { // 96 bytes
|
||||
inline uint16_t getMinShowDelay(void) { return MIN_SHOW_DELAY; }
|
||||
inline uint16_t getLengthTotal(void) { return _length; }
|
||||
inline uint16_t getTransition(void) { return _transitionDur; }
|
||||
inline uint16_t getUsedSegmentData(void) { return _usedSegmentData; }
|
||||
|
||||
uint32_t
|
||||
now,
|
||||
timebase,
|
||||
currentColor(uint32_t colorNew, uint8_t tNr),
|
||||
gamma32(uint32_t),
|
||||
getPixelColor(uint16_t);
|
||||
|
||||
inline uint32_t getLastShow(void) { return _lastShow; }
|
||||
@ -793,11 +816,10 @@ class WS2812FX { // 96 bytes
|
||||
matrixHeight;
|
||||
|
||||
typedef struct panel_bitfield_t {
|
||||
unsigned char
|
||||
bottomStart : 1, // starts at bottom?
|
||||
rightStart : 1, // starts on right?
|
||||
vertical : 1, // is vertical?
|
||||
serpentine : 1; // is serpentine?
|
||||
bool bottomStart : 1; // starts at bottom?
|
||||
bool rightStart : 1; // starts on right?
|
||||
bool vertical : 1; // is vertical?
|
||||
bool serpentine : 1; // is serpentine?
|
||||
} Panel;
|
||||
Panel
|
||||
matrix,
|
||||
@ -810,7 +832,7 @@ class WS2812FX { // 96 bytes
|
||||
|
||||
// outsmart the compiler :) by correctly overloading
|
||||
inline void setPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { setPixelColorXY(x, y, RGBW32(r,g,b,w)); } // automatically inline
|
||||
inline void setPixelColorXY(int x, int y, CRGB c) { setPixelColorXY(x, y, c.red, c.green, c.blue); }
|
||||
inline void setPixelColorXY(int x, int y, CRGB c) { setPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0)); }
|
||||
|
||||
uint32_t
|
||||
getPixelColorXY(uint16_t, uint16_t);
|
||||
@ -823,7 +845,6 @@ class WS2812FX { // 96 bytes
|
||||
|
||||
// using public variables to reduce code size increase due to inline function getSegment() (with bounds checking)
|
||||
// and color transitions
|
||||
uint8_t _bri_t; // opacity used for effect (includes transition)
|
||||
uint32_t _colors_t[3]; // color used for effect (includes transition)
|
||||
uint16_t _virtualSegmentLength;
|
||||
|
||||
@ -833,7 +854,6 @@ class WS2812FX { // 96 bytes
|
||||
private:
|
||||
uint16_t _length;
|
||||
uint8_t _brightness;
|
||||
uint16_t _usedSegmentData;
|
||||
uint16_t _transitionDur;
|
||||
|
||||
uint8_t _targetFps;
|
||||
|
6428
wled00/FX_2Dfcn.cpp
6428
wled00/FX_2Dfcn.cpp
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -518,7 +518,7 @@ class BusOnOff : public Bus {
|
||||
uint8_t b = B(c);
|
||||
uint8_t w = W(c);
|
||||
|
||||
_data = bool((r+g+b+w)*_bri) ? 0xFF : 0;
|
||||
_data = bool((r+g+b+w) && _bri) ? 0xFF : 0;
|
||||
}
|
||||
|
||||
uint32_t getPixelColor(uint16_t pix) {
|
||||
|
@ -265,7 +265,9 @@ void handleButton()
|
||||
if (b == 0 && dur > WLED_LONG_AP) { // long press on button 0 (when released)
|
||||
if (dur > WLED_LONG_FACTORY_RESET) { // factory reset if pressed > 10 seconds
|
||||
WLED_FS.format();
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
clearEEPROM();
|
||||
#endif
|
||||
doReboot = true;
|
||||
} else {
|
||||
WLED::instance().initAP(true);
|
||||
|
@ -90,6 +90,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
||||
CJSON(strip.cctBlending, hw_led[F("cb")]);
|
||||
Bus::setCCTBlend(strip.cctBlending);
|
||||
strip.setTargetFps(hw_led["fps"]); //NOP if 0, default 42 FPS
|
||||
CJSON(strip.useLedsArray, hw_led[F("ld")]);
|
||||
|
||||
#ifndef WLED_DISABLE_2D
|
||||
// 2D Matrix Settings
|
||||
@ -266,6 +267,40 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
||||
if (serialBaud < 96 || serialBaud > 15000) serialBaud = 1152;
|
||||
updateBaudRate(serialBaud *100);
|
||||
|
||||
JsonArray hw_if_i2c = hw[F("if")][F("i2c-pin")];
|
||||
CJSON(i2c_sda, hw_if_i2c[0]);
|
||||
CJSON(i2c_scl, hw_if_i2c[1]);
|
||||
PinManagerPinType i2c[2] = { { i2c_sda, true }, { i2c_scl, true } };
|
||||
if (pinManager.allocateMultiplePins(i2c, 2, PinOwner::HW_I2C)) {
|
||||
#ifdef ESP32
|
||||
Wire.setPins(i2c_sda, i2c_scl); // this will fail if Wire is initilised (Wire.begin() called prior)
|
||||
#endif
|
||||
Wire.begin();
|
||||
uint8_t i2c[2] = {i2c_sda, i2c_scl};
|
||||
pinManager.deallocateMultiplePins(i2c, 2, PinOwner::HW_I2C);
|
||||
} else {
|
||||
i2c_sda = -1;
|
||||
i2c_scl = -1;
|
||||
}
|
||||
JsonArray hw_if_spi = hw[F("if")][F("spi-pin")];
|
||||
CJSON(spi_mosi, hw_if_spi[0]);
|
||||
CJSON(spi_sclk, hw_if_spi[1]);
|
||||
CJSON(spi_cs, hw_if_spi[2]);
|
||||
PinManagerPinType spi[3] = { { spi_mosi, true }, { spi_sclk, true }, { spi_cs, true } };
|
||||
if (pinManager.allocateMultiplePins(spi, 3, PinOwner::HW_SPI)) {
|
||||
#ifdef ESP8266
|
||||
SPI.begin();
|
||||
#else
|
||||
SPI.begin(spi_sclk, (int8_t)-1, spi_mosi, spi_cs);
|
||||
#endif
|
||||
uint8_t spi[3] = { spi_mosi, spi_sclk, spi_cs };
|
||||
pinManager.deallocateMultiplePins(spi, 3, PinOwner::HW_SPI);
|
||||
} else {
|
||||
spi_mosi = -1;
|
||||
spi_sclk = -1;
|
||||
spi_cs = -1;
|
||||
}
|
||||
|
||||
//int hw_status_pin = hw[F("status")]["pin"]; // -1
|
||||
|
||||
JsonObject light = doc[F("light")];
|
||||
@ -507,7 +542,9 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
||||
void deserializeConfigFromFS() {
|
||||
bool success = deserializeConfigSec();
|
||||
if (!success) { //if file does not exist, try reading from EEPROM
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
deEEPSettings();
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
@ -517,7 +554,9 @@ void deserializeConfigFromFS() {
|
||||
|
||||
success = readObjectFromFile("/cfg.json", nullptr, &doc);
|
||||
if (!success) { //if file does not exist, try reading from EEPROM
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
deEEPSettings();
|
||||
#endif
|
||||
releaseJSONBufferLock();
|
||||
return;
|
||||
}
|
||||
@ -621,6 +660,7 @@ void serializeConfig() {
|
||||
hw_led[F("cb")] = strip.cctBlending;
|
||||
hw_led["fps"] = strip.getTargetFps();
|
||||
hw_led[F("rgbwm")] = Bus::getAutoWhiteMode(); // global override
|
||||
hw_led[F("ld")] = strip.useLedsArray;
|
||||
|
||||
#ifndef WLED_DISABLE_2D
|
||||
// 2D Matrix Settings
|
||||
@ -709,6 +749,15 @@ void serializeConfig() {
|
||||
|
||||
hw[F("baud")] = serialBaud;
|
||||
|
||||
JsonObject hw_if = hw.createNestedObject(F("if"));
|
||||
JsonArray hw_if_i2c = hw_if.createNestedArray("i2c-pin");
|
||||
hw_if_i2c.add(i2c_sda);
|
||||
hw_if_i2c.add(i2c_scl);
|
||||
JsonArray hw_if_spi = hw_if.createNestedArray("spi-pin");
|
||||
hw_if_spi.add(spi_mosi);
|
||||
hw_if_spi.add(spi_sclk);
|
||||
hw_if_spi.add(spi_cs);
|
||||
|
||||
//JsonObject hw_status = hw.createNestedObject("status");
|
||||
//hw_status["pin"] = -1;
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
/*
|
||||
* color blend function
|
||||
*/
|
||||
uint32_t IRAM_ATTR color_blend(uint32_t color1, uint32_t color2, uint16_t blend, bool b16) {
|
||||
uint32_t color_blend(uint32_t color1, uint32_t color2, uint16_t blend, bool b16) {
|
||||
if(blend == 0) return color1;
|
||||
uint16_t blendmax = b16 ? 0xFFFF : 0xFF;
|
||||
if(blend == blendmax) return color2;
|
||||
@ -319,3 +319,53 @@ uint16_t approximateKelvinFromRGB(uint32_t rgb) {
|
||||
return (k > 10091) ? 10091 : k;
|
||||
}
|
||||
}
|
||||
|
||||
//gamma 2.8 lookup table used for color correction
|
||||
static byte gammaT[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
|
||||
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
|
||||
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
|
||||
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
|
||||
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
|
||||
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
|
||||
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
|
||||
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
|
||||
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
|
||||
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
|
||||
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
|
||||
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
|
||||
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };
|
||||
|
||||
uint8_t gamma8_cal(uint8_t b, float gamma)
|
||||
{
|
||||
return (int)(powf((float)b / 255.0f, gamma) * 255.0f + 0.5f);
|
||||
}
|
||||
|
||||
void calcGammaTable(float gamma)
|
||||
{
|
||||
for (uint16_t i = 0; i < 256; i++) {
|
||||
gammaT[i] = gamma8_cal(i, gamma);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t gamma8(uint8_t b)
|
||||
{
|
||||
return gammaT[b];
|
||||
}
|
||||
|
||||
uint32_t gamma32(uint32_t color)
|
||||
{
|
||||
//if (!strip.gammaCorrectCol) return color;
|
||||
uint8_t w = W(color);
|
||||
uint8_t r = R(color);
|
||||
uint8_t g = G(color);
|
||||
uint8_t b = B(color);
|
||||
w = gammaT[w];
|
||||
r = gammaT[r];
|
||||
g = gammaT[g];
|
||||
b = gammaT[b];
|
||||
return RGBW32(r, g, b, w);
|
||||
}
|
||||
|
4099
wled00/console_font_5x12.h
Normal file
4099
wled00/console_font_5x12.h
Normal file
File diff suppressed because it is too large
Load Diff
3075
wled00/console_font_5x8.h
Normal file
3075
wled00/console_font_5x8.h
Normal file
File diff suppressed because it is too large
Load Diff
3075
wled00/console_font_6x8.h
Normal file
3075
wled00/console_font_6x8.h
Normal file
File diff suppressed because it is too large
Load Diff
3331
wled00/console_font_7x9.h
Normal file
3331
wled00/console_font_7x9.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -247,6 +247,7 @@
|
||||
// WLED Error modes
|
||||
#define ERR_NONE 0 // All good :)
|
||||
#define ERR_EEP_COMMIT 2 // Could not commit to EEPROM (wrong flash layout?)
|
||||
#define ERR_NOBUF 3 // JSON buffer was not released in time, request cannot be handled at this time
|
||||
#define ERR_JSON 9 // JSON parsing failed (input too large?)
|
||||
#define ERR_FS_BEGIN 10 // Could not init filesystem (no partition?)
|
||||
#define ERR_FS_QUOTA 11 // The FS is full or the maximum file size is reached
|
||||
@ -369,18 +370,10 @@
|
||||
#undef HW_PIN_SDA
|
||||
#endif
|
||||
#ifndef HW_PIN_SCL
|
||||
#ifdef ESP8266
|
||||
#define HW_PIN_SCL 5
|
||||
#else
|
||||
#define HW_PIN_SCL 22
|
||||
#endif
|
||||
#define HW_PIN_SCL SCL
|
||||
#endif
|
||||
#ifndef HW_PIN_SDA
|
||||
#ifdef ESP8266
|
||||
#define HW_PIN_SDA 4
|
||||
#else
|
||||
#define HW_PIN_SDA 21
|
||||
#endif
|
||||
#define HW_PIN_SDA SDA
|
||||
#endif
|
||||
|
||||
#if defined(ESP8266) && defined(HW_PIN_CLOCKSPI)
|
||||
@ -389,19 +382,17 @@
|
||||
#if defined(ESP8266) && defined(HW_PIN_DATASPI)
|
||||
#undef HW_PIN_DATASPI
|
||||
#endif
|
||||
#if defined(ESP8266) && defined(HW_PIN_CSSPI)
|
||||
#undef HW_PIN_CSSPI
|
||||
#endif
|
||||
#ifndef HW_PIN_CLOCKSPI
|
||||
#ifdef ESP8266
|
||||
#define HW_PIN_CLOCKSPI 14
|
||||
#else
|
||||
#define HW_PIN_CLOCKSPI 18
|
||||
#endif
|
||||
#define HW_PIN_CLOCKSPI SCK
|
||||
#endif
|
||||
#ifndef HW_PIN_DATASPI
|
||||
#ifdef ESP8266
|
||||
#define HW_PIN_DATASPI 13
|
||||
#else
|
||||
#define HW_PIN_DATASPI 23
|
||||
#endif
|
||||
#define HW_PIN_DATASPI MOSI
|
||||
#endif
|
||||
#ifndef HW_PIN_CSSPI
|
||||
#define HW_PIN_CSSPI SS
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -238,7 +238,10 @@ button {
|
||||
display: none;
|
||||
width: 90%;
|
||||
border: 0px;
|
||||
margin: 0 auto;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%,-50%);
|
||||
}
|
||||
|
||||
.tab {
|
||||
@ -398,10 +401,10 @@ button {
|
||||
|
||||
.filter {
|
||||
background-color: var(--c-4);
|
||||
box-shadow: 0px 0px 6px 6px var(--c-1);
|
||||
/*box-shadow: 0px 0px 6px 6px var(--c-1);*/
|
||||
border-radius: 26px;
|
||||
height: 26px;
|
||||
margin: 0 auto 4px; /* 8px if you want space */
|
||||
margin: 0 auto; /* add 4-8px if you want space at the bottom */
|
||||
padding: 8px 2px;
|
||||
position: relative;
|
||||
/*width: 260px;*/
|
||||
@ -1217,7 +1220,7 @@ TD .checkmark, TD .radiomark {
|
||||
.filter .fchkl {
|
||||
display: inline-block;
|
||||
min-width: 0.7em;
|
||||
padding: 4px 4px 4px 32px;
|
||||
padding: 1px 4px 4px 32px;
|
||||
text-align: left;
|
||||
line-height: 24px;
|
||||
vertical-align: middle;
|
||||
@ -1228,6 +1231,7 @@ TD .checkmark, TD .radiomark {
|
||||
.lbl-s {
|
||||
display: inline-block;
|
||||
/* margin: 10px 4px 0 0; */
|
||||
margin-top: 6px;
|
||||
font-size: 13px;
|
||||
width: 48%;
|
||||
text-align: center;
|
||||
|
@ -46,9 +46,9 @@
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
setTimeout(()=>{h.appendChild(l)},50);
|
||||
setTimeout(()=>{h.appendChild(l)},100);
|
||||
});
|
||||
setTimeout(()=>{h.appendChild(l)},50);
|
||||
setTimeout(()=>{h.appendChild(l)},100);
|
||||
</script>
|
||||
<link rel="stylesheet" href="index.css">
|
||||
</head>
|
||||
@ -218,16 +218,16 @@
|
||||
</div>
|
||||
<div id="sliders">
|
||||
<div id="filters" class="filter">
|
||||
<label id="filterPal" class="check fchkl">🎨
|
||||
<input type="checkbox" data-flt="🎨" onchange="filterFx(this)">
|
||||
<label id="filterPal" class="check fchkl">🎨
|
||||
<input type="checkbox" data-flt="🎨" onchange="filterFx(this)">
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
<label id="filter1D" class="check fchkl">1D
|
||||
<input type="checkbox" data-flt="*" onchange="filterFx(this)">
|
||||
<label id="filter1D" class="check fchkl">⋮
|
||||
<input type="checkbox" data-flt="⋮" onchange="filterFx(this)">
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
<label id="filter2D" class="check fchkl">2D<!-- ⊞ -->
|
||||
<input type="checkbox" data-flt="2D" onchange="filterFx(this)">
|
||||
<label id="filter2D" class="check fchkl">▦
|
||||
<input type="checkbox" data-flt="▦" onchange="filterFx(this)">
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
<label id="filterVol" class="check fchkl">♪
|
||||
|
@ -43,6 +43,7 @@ function gId(c) {return d.getElementById(c);}
|
||||
function gEBCN(c) {return d.getElementsByClassName(c);}
|
||||
function isEmpty(o) {return Object.keys(o).length === 0;}
|
||||
function isObj(i) {return (i && typeof i === 'object' && !Array.isArray(i));}
|
||||
function isNumeric(n) {return !isNaN(parseFloat(n)) && isFinite(n);}
|
||||
|
||||
// returns true if dataset R, G & B values are 0
|
||||
function isRgbBlack(a) {return (parseInt(a.r) == 0 && parseInt(a.g) == 0 && parseInt(a.b) == 0);}
|
||||
@ -604,8 +605,19 @@ function parseInfo(i) {
|
||||
mw = i.leds.matrix ? i.leds.matrix.w : 0;
|
||||
mh = i.leds.matrix ? i.leds.matrix.h : 0;
|
||||
isM = mw>0 && mh>0;
|
||||
if (!isM) hideModes("2D ");
|
||||
//if (!i.u || !i.u.AudioReactive) { /*hideModes(" ♪");*/ hideModes(" ♫"); } // hide /*audio*/ frequency reactive effects
|
||||
if (!isM) {
|
||||
gId("filter1D").classList.add("hide");
|
||||
//gId("filter2D").classList.add("hide");
|
||||
hideModes("2D");
|
||||
}
|
||||
if (i.noaudio) {
|
||||
gId("filterVol").classList.add("hide");
|
||||
gId("filterFreq").classList.add("hide");
|
||||
}
|
||||
// if (!i.u || !i.u.AudioReactive) {
|
||||
//gId("filterVol").classList.add("hide"); hideModes(" ♪"); // hide volume reactive effects
|
||||
//gId("filterFreq").classList.add("hide"); hideModes(" ♫"); // hide frequency reactive effects
|
||||
// }
|
||||
}
|
||||
|
||||
//https://stackoverflow.com/questions/2592092/executing-script-elements-inserted-with-innerhtml
|
||||
@ -755,7 +767,7 @@ function populateSegments(s)
|
||||
</table>
|
||||
<div class="h bp" id="seg${i}len"></div>
|
||||
${!isM?rvXck:''}
|
||||
${map2D}
|
||||
${isM?map2D:''}
|
||||
${s.AudioReactive && s.AudioReactive.on ? "" : sndSim}
|
||||
<label class="check revchkl">
|
||||
${isM?'Transpose':'Mirror effect'}
|
||||
@ -811,16 +823,22 @@ function populateEffects()
|
||||
for (let ef of effects) {
|
||||
// WLEDSR: add slider and color control to setX (used by requestjson)
|
||||
let id = ef.id;
|
||||
let nm = ef.name;
|
||||
let nm = ef.name+" ";
|
||||
let fd = "";
|
||||
if (ef.name.indexOf("Reserved") < 0) {
|
||||
if (ef.name.indexOf("RSVD") < 0) {
|
||||
if (Array.isArray(fxdata) && fxdata.length>id) {
|
||||
fd = fxdata[id].substr(1);
|
||||
var eP = (fd == '')?[]:fd.split(";");
|
||||
var p = (eP.length<3 || eP[2]==='')?[]:eP[2].split(",");
|
||||
var m = (eP.length<4 || eP[3]==='')?[]:eP[3].split(",");
|
||||
if (isM && m.length>0) for (let r of m) { if (r.substring(0,4)=="mp12") nm += " *"; } // 1D effects with defined mapping
|
||||
if (p.length>0 && p[0].substring(0,1) === "!") nm += " 🎨";
|
||||
if (fxdata[id].length==0) fd = ";;!;1d"
|
||||
else fd = fxdata[id].substr(1);
|
||||
let eP = (fd == '')?[]:fd.split(";"); // effect parameters
|
||||
let p = (eP.length<3 || eP[2]==='')?[]:eP[2].split(","); // palette data
|
||||
if (p.length>0 && (p[0] !== "" && !isNumeric(p[0]))) nm += "🎨"; // effects using palette
|
||||
let m = (eP.length<4 || eP[3]==='')?[]:eP[3].split(","); // metadata
|
||||
if (m.length>0) for (let r of m) {
|
||||
if (r.substring(0,2)=="1d") nm += "⋮"; // 1D effects
|
||||
if (r.substring(0,2)=="2d") nm += "▦"; // 2D effects
|
||||
if (r.substring(0,2)=="vo") nm += "♪"; // volume effects
|
||||
if (r.substring(0,2)=="fr") nm += "♫"; // frequency effects
|
||||
}
|
||||
}
|
||||
html += generateListItemHtml('fx',id,nm,'setX','',fd);
|
||||
}
|
||||
@ -1133,9 +1151,9 @@ function updateSelectedFx()
|
||||
|
||||
var selectedName = selectedEffect.querySelector(".lstIname").innerText;
|
||||
var segs = gId("segcont").querySelectorAll(`div[data-map="map2D"]`);
|
||||
for (const seg of segs) if (selectedName.indexOf("2D ")<0) seg.classList.remove("hide"); else seg.classList.add("hide");
|
||||
for (const seg of segs) if (selectedName.indexOf("\u25A6")<0) seg.classList.remove("hide"); else seg.classList.add("hide");
|
||||
var segs = gId("segcont").querySelectorAll(`div[data-snd="ssim"]`);
|
||||
for (const seg of segs) if (selectedName.indexOf(" ♪")<0 && selectedName.indexOf(" ♫")<0) seg.classList.add("hide"); else seg.classList.remove("hide"); // also "♫ "?
|
||||
for (const seg of segs) if (selectedName.indexOf("\u266A")<0 && selectedName.indexOf("\266B")<0) seg.classList.add("hide"); else seg.classList.remove("hide"); // also "♫ "?
|
||||
}
|
||||
}
|
||||
|
||||
@ -2478,11 +2496,11 @@ function getPalettesData(page, callback)
|
||||
function hideModes(txt)
|
||||
{
|
||||
for (let e of (gId('fxlist').querySelectorAll('.lstI')||[])) {
|
||||
if (e.querySelector('.lstIname').innerText.indexOf(txt) >= 0) e.classList.add("hide"); //else e.classList.remove("hide");
|
||||
}
|
||||
if (txt==="2D ") {
|
||||
gId("filter1D").classList.add("hide");
|
||||
gId("filter2D").classList.add("hide");
|
||||
let iT = e.querySelector('.lstIname').innerText;
|
||||
let f = false;
|
||||
if (txt==="2D") f = iT.indexOf("\u25A6") >= 0 && iT.indexOf("\u22EE") < 0; // 2D && !1D
|
||||
else f = iT.indexOf(txt) >= 0;
|
||||
if (f) e.classList.add("hide"); //else e.classList.remove("hide");
|
||||
}
|
||||
}
|
||||
|
||||
@ -2495,7 +2513,7 @@ function search(f,l=null)
|
||||
for (i = (l==='pcont'?0:1); i < el.length; i++) {
|
||||
var it = el[i];
|
||||
var itT = it.querySelector('.lstIname').innerText.toUpperCase();
|
||||
it.style.display = (itT.indexOf(f.value.toUpperCase())<0 || (!isM && l==='fxlist' && itT.indexOf("2D")>=0)) ? 'none' : '';
|
||||
it.style.display = (itT.indexOf(f.value.toUpperCase())<0) ? 'none' : '';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,49 +19,43 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="canv" />
|
||||
<div id="canv"></div>
|
||||
<script>
|
||||
function updatePreview(leds) {
|
||||
var str = "linear-gradient(90deg,";
|
||||
var len = leds.length;
|
||||
for (i = 2; i < len; i+=3) {
|
||||
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', (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]})`;
|
||||
if (i < len -3) str += ","
|
||||
}
|
||||
str += ")";
|
||||
document.getElementById("canv").style.background = str;
|
||||
}
|
||||
|
||||
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) {
|
||||
} catch (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>
|
||||
</body>
|
||||
</html>
|
@ -12,102 +12,66 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="liveviewCanvas">
|
||||
LiveView
|
||||
</canvas>
|
||||
<canvas id="canv"></canvas>
|
||||
<script>
|
||||
var canvas = document.getElementById('liveviewCanvas');
|
||||
canvas.width = window.innerWidth * 0.98; //remove scroll bars
|
||||
canvas.height = window.innerHeight * 0.98; //remove scroll bars
|
||||
var c = document.getElementById('canv');
|
||||
var leds = "";
|
||||
var matrixWidth = 0;
|
||||
var pixelsPerLed = 0;
|
||||
var throttled = false;
|
||||
function setCanvas() {
|
||||
c.width = window.innerWidth * 0.98; //remove scroll bars
|
||||
c.height = window.innerHeight * 0.98; //remove scroll bars
|
||||
}
|
||||
setCanvas();
|
||||
// Check for canvas support
|
||||
if (canvas.getContext) {
|
||||
// Access the rendering context
|
||||
var ctx = canvas.getContext('2d');
|
||||
|
||||
//In case of pixels
|
||||
|
||||
// // ImageData object
|
||||
// var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||
// // One-dimensional array containing the data in the RGBA order
|
||||
// var data = imageData.data;
|
||||
|
||||
// function drawLedPixels(x, y, r, g, b, a) { //old
|
||||
// // console.log(x, y, r, g, b, a);
|
||||
// for (right = 0; right < pixelsPerLed; right++) {
|
||||
// for (down = 0; down < pixelsPerLed; down++) {
|
||||
// ff = (x * pixelsPerLed + right + (y * pixelsPerLed + down) * matrixWidth * pixelsPerLed) * 4;
|
||||
// // if (x==15 && y==15)
|
||||
// // console.log("ff=" + x + " * " + pixelsPerLed + " +" + right + " + (" + y + " * " + pixelsPerLed + " +" + down + ") * " + matrixWidth + ") * 4 = " + ff, data.length); //(5*10+1 + (12*10+1) * 16) * 4 = (51 + 121*16) * 4
|
||||
// data[ff + 0] = r;
|
||||
// data[ff + 1] = g;
|
||||
// data[ff + 2] = b;
|
||||
// data[ff + 3] = a;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
function drawLedCircles(x, y, r, g, b, a) {
|
||||
ctx.fillStyle = `rgb(${r},${g},${b})`;
|
||||
ctx.beginPath();
|
||||
ctx.arc(x*pixelsPerLed+pixelsPerLed*0.5, y*pixelsPerLed+pixelsPerLed*0.5, pixelsPerLed*0.4, 0, 2 * Math.PI);
|
||||
ctx.fill();
|
||||
}
|
||||
|
||||
function paintLeds() {
|
||||
// data represents the Uint8ClampedArray containing the data
|
||||
// in the RGBA order [r0, g0, b0, a0, r1, g1, b1, a1, ..., rn, gn, bn, an]
|
||||
|
||||
for (i = 4; i < leds.length; i+=3) {
|
||||
let ff = (i-4)/3;
|
||||
drawLedCircles(ff%matrixWidth, Math.floor(ff/matrixWidth), leds[i], leds[i+1], leds[i+2], 255)
|
||||
}
|
||||
|
||||
// ctx.putImageData(imageData, 0, 0); //in case of drawLedPixels
|
||||
}
|
||||
}
|
||||
|
||||
function updatePreview(ledsp) {
|
||||
leds = ledsp;
|
||||
matrixWidth = leds[2];
|
||||
matrixHeight = leds[3];
|
||||
pixelsPerLed = Math.min(canvas.width / matrixWidth, canvas.height / matrixHeight);
|
||||
// console.log(canvas.width, matrixWidth, canvas.height, matrixHeight, pixelsPerLed, leds);
|
||||
paintLeds();
|
||||
}
|
||||
|
||||
function getLiveJson(e) {
|
||||
try {
|
||||
if (toString.call(e.data) === '[object ArrayBuffer]') {
|
||||
let leds = new Uint8Array(event.data);
|
||||
if (leds[0] != 76) return; //'L', set in ws.cpp
|
||||
updatePreview(leds);
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
console.error("Peek WS error:",err);
|
||||
}
|
||||
}
|
||||
|
||||
var ctx = c.getContext('2d');
|
||||
if (ctx) { // Access the rendering context
|
||||
// use parent WS or open new
|
||||
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.onopen = ()=>{
|
||||
ws.send("{'lv':true}");
|
||||
}
|
||||
}
|
||||
ws.binaryType = "arraybuffer";
|
||||
ws.addEventListener('message',getLiveJson);
|
||||
ws.addEventListener('message',(e)=>{
|
||||
try {
|
||||
if (toString.call(e.data) === '[object ArrayBuffer]') {
|
||||
let leds = new Uint8Array(event.data);
|
||||
if (leds[0] != 76 || leds[1] != 2 || !ctx) return; //'L', set in ws.cpp
|
||||
let mW = leds[2]; // matrix width
|
||||
let mH = leds[3]; // matrix height
|
||||
let pPL = Math.min(c.width / mW, c.height / mH); // pixels per LED (width of circle)
|
||||
let lOf = Math.floor((c.width - pPL*mW)/2); //left offeset (to center matrix)
|
||||
var i = 4;
|
||||
for (y=0.5;y<mH;y++) for (x=0.5; x<mW; x++) {
|
||||
ctx.fillStyle = `rgb(${leds[i]},${leds[i+1]},${leds[i+2]})`;
|
||||
ctx.beginPath();
|
||||
ctx.arc(x*pPL+lOf, y*pPL, pPL*0.4, 0, 2 * Math.PI);
|
||||
ctx.fill();
|
||||
i+=3;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Peek WS error:",err);
|
||||
}
|
||||
});
|
||||
}
|
||||
// window.resize event listener
|
||||
window.addEventListener('resize', (e)=>{
|
||||
if (!throttled) { // only run if we're not throttled
|
||||
setCanvas(); // actual callback action
|
||||
throttled = true; // we're throttled!
|
||||
setTimeout(()=>{ // set a timeout to un-throttle
|
||||
throttled = false;
|
||||
}, 250);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -118,7 +118,7 @@ Serpentine: <input type="checkbox" name="P${i}S"></div>`;
|
||||
<option value="1">2D Matrix</option>
|
||||
</select><br>
|
||||
<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>
|
||||
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>
|
||||
@ -135,17 +135,13 @@ Serpentine: <input type="checkbox" name="P${i}S"></div>`;
|
||||
</select><br>
|
||||
Serpentine: <input type="checkbox" name="PS">
|
||||
<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>
|
||||
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">
|
||||
<h3>2D Panel layout</h3>
|
||||
<h3>LED panel layout</h3>
|
||||
<div id="panels">
|
||||
</div>
|
||||
<!--
|
||||
<button type="button" class="xs" id="pnl_add" onclick="addPanel()">+</button>
|
||||
<button type="button" class="xs" id="pnl_rem" onclick="remPanel()">-</button>
|
||||
-->
|
||||
</div>
|
||||
<hr>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
||||
|
@ -588,8 +588,9 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
|
||||
Use less than <span id="wreason">800 LEDs per output</span> for the best experience!<br>
|
||||
</div>
|
||||
<hr style="width:260px">
|
||||
Make a segment for each output: <input type="checkbox" name="MS"> <br>
|
||||
Custom bus start indices: <input type="checkbox" onchange="tglSi(this.checked)" id="si"> <br>
|
||||
Make a segment for each output: <input type="checkbox" name="MS"><br>
|
||||
Custom bus start indices: <input type="checkbox" onchange="tglSi(this.checked)" id="si"><br>
|
||||
Use global LED buffer: <input type="checkbox" name="LD"><br>
|
||||
<hr style="width:260px">
|
||||
<div id="color_order_mapping">
|
||||
Color Order Override:
|
||||
|
@ -24,6 +24,8 @@
|
||||
scE.addEventListener("load", () => {
|
||||
//console.log("File loaded");
|
||||
GetV();
|
||||
setBckFilename(gId("bckcfg"));
|
||||
setBckFilename(gId("bckpresets"));
|
||||
});
|
||||
// error event
|
||||
scE.addEventListener("error", (ev) => {
|
||||
@ -59,6 +61,9 @@
|
||||
event.preventDefault();
|
||||
return false;
|
||||
}
|
||||
function setBckFilename(x) {
|
||||
x.setAttribute("download","wled_" + x.getAttribute("download") + (sd=="WLED"?"":("_" +sd)));
|
||||
}
|
||||
function S() {
|
||||
if (window.location.protocol == "file:") {
|
||||
loc = true;
|
||||
@ -101,9 +106,9 @@
|
||||
Enable ArduinoOTA: <input type="checkbox" name="AO">
|
||||
<hr>
|
||||
<h3>Backup & Restore</h3>
|
||||
<a class="btn lnk" href="/presets.json?download" target="download-frame">Backup presets</a><br>
|
||||
<a class="btn lnk" id="bckcfg" href="/presets.json" download="presets">Backup presets</a><br>
|
||||
<div>Restore presets<br><input type="file" name="data" accept=".json"> <button type="button" onclick="uploadFile(d.Sf.data,'/presets.json');">Upload</button><br></div><br>
|
||||
<a class="btn lnk" href="/cfg.json?download" target="download-frame">Backup configuration</a><br>
|
||||
<a class="btn lnk" id="bckpresets" href="/cfg.json" download="cfg">Backup configuration</a><br>
|
||||
<div>Restore configuration<br><input type="file" name="data2" accept=".json"> <button type="button" onclick="uploadFile(d.Sf.data2,'/cfg.json');">Upload</button><br></div>
|
||||
<div style="color: #fa0;">⚠ Restoring presets/configuration will OVERWRITE your current presets/configuration.<br>
|
||||
Incorrect configuration may require a factory reset or re-flashing of your ESP.</div>
|
||||
@ -119,6 +124,5 @@
|
||||
<div id="toast"></div>
|
||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
||||
</form>
|
||||
<iframe name=download-frame style='display:none;'></iframe>
|
||||
</body>
|
||||
</html>
|
@ -55,6 +55,7 @@
|
||||
if (o.type=="number" && n.substr(0,3)=="pin") {
|
||||
for (var i=0; i<pins.length; i++) {
|
||||
if (k==pinO[i]) continue;
|
||||
if (o.value==pins[i] && pinO[i]==="if") { o.style.color="lime"; break; }
|
||||
if (o.value==pins[i] || o.value<-1 || o.value>39) { o.style.color="red"; break; } else o.style.color=o.value>33?"orange":"#fff";
|
||||
}
|
||||
}
|
||||
@ -79,6 +80,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
function updPins() {}
|
||||
function addField(k,f,o,a=false) { //key, field, (sub)object, isArray
|
||||
if (isO(o)) {
|
||||
urows += '<hr style="width:260px">';
|
||||
@ -205,6 +207,16 @@
|
||||
<span id="lserr" style="color:red; display:none">⚠ Could not load configuration.</span><hr>
|
||||
</div>
|
||||
<h2>Usermod Setup</h2>
|
||||
Global I<sup>2</sup>C GPIOs (HW)<br>
|
||||
<i style="color: orange;">(only changable on ESP32, change requires reboot!)</i><br>
|
||||
SDA:<input type="number" min="-1" max="33" name="SDA" onchange="updPins()" class="s" placeholder="SDA">
|
||||
SCL:<input type="number" min="-1" max="33" name="SCL" onchange="updPins()" class="s" placeholder="SCL">
|
||||
<hr style="width:260px">
|
||||
Global SPI GPIOs (HW)<br>
|
||||
<i style="color: orange;">(only changable on ESP32, change requires reboot!)</i><br>
|
||||
MOSI:<input type="number" min="-1" max="33" name="MOSI" onchange="updPins()" class="s" placeholder="MOSI">
|
||||
SCLK:<input type="number" min="-1" max="33" name="SCLK" onchange="updPins()" class="s" placeholder="SCLK">
|
||||
CS:<input type="number" min="-1" max="33" name="CS" onchange="updPins()" class="s" placeholder="CS">
|
||||
<div id="um">Loading settings...</div>
|
||||
<hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
||||
</form>
|
||||
|
@ -644,7 +644,7 @@ function populateEffects()
|
||||
|
||||
for (let i = 0; i < effects.length; i++) {
|
||||
// WLEDSR: add slider and color control to setEffect (used by requestjson)
|
||||
if (effects[i].name.indexOf("Reserved") < 0) {
|
||||
if (effects[i].name.indexOf("RSVD") < 0) {
|
||||
var posAt = effects[i].name.indexOf("@");
|
||||
var extra = '';
|
||||
if (posAt > 0)
|
||||
|
@ -60,22 +60,21 @@ bool getJsonValue(const JsonVariant& element, DestType& destination, const Defau
|
||||
//colors.cpp
|
||||
uint32_t color_blend(uint32_t,uint32_t,uint16_t,bool b16=false);
|
||||
uint32_t color_add(uint32_t,uint32_t);
|
||||
|
||||
inline uint32_t colorFromRgbw(byte* rgbw) { return uint32_t((byte(rgbw[3]) << 24) | (byte(rgbw[0]) << 16) | (byte(rgbw[1]) << 8) | (byte(rgbw[2]))); }
|
||||
void colorHStoRGB(uint16_t hue, byte sat, byte* rgb); //hue, sat to rgb
|
||||
void colorKtoRGB(uint16_t kelvin, byte* rgb);
|
||||
void colorCTtoRGB(uint16_t mired, byte* rgb); //white spectrum to rgb
|
||||
|
||||
void colorXYtoRGB(float x, float y, byte* rgb); // only defined if huesync disabled TODO
|
||||
void colorRGBtoXY(byte* rgb, float* xy); // only defined if huesync disabled TODO
|
||||
|
||||
void colorFromDecOrHexString(byte* rgb, char* in);
|
||||
bool colorFromHexString(byte* rgb, const char* in);
|
||||
|
||||
uint32_t colorBalanceFromKelvin(uint16_t kelvin, uint32_t rgb);
|
||||
uint16_t approximateKelvinFromRGB(uint32_t rgb);
|
||||
|
||||
void setRandomColor(byte* rgb);
|
||||
uint8_t gamma8_cal(uint8_t b, float gamma);
|
||||
void calcGammaTable(float gamma);
|
||||
uint8_t gamma8(uint8_t b);
|
||||
uint32_t gamma32(uint32_t);
|
||||
|
||||
//dmx.cpp
|
||||
void initDMX();
|
||||
@ -238,7 +237,7 @@ typedef enum UM_Data_Types {
|
||||
typedef struct UM_Exchange_Data {
|
||||
// should just use: size_t arr_size, void **arr_ptr, byte *ptr_type
|
||||
size_t u_size; // size of u_data array
|
||||
um_types_t *u_type; // array of data types ewowi: not used???
|
||||
um_types_t *u_type; // array of data types
|
||||
void **u_data; // array of pointers to data
|
||||
UM_Exchange_Data() {
|
||||
u_size = 0;
|
||||
@ -328,12 +327,15 @@ uint8_t extractModeSlider(uint8_t mode, uint8_t slider, char *dest, uint8_t maxL
|
||||
int16_t extractModeDefaults(uint8_t mode, const char *segVar);
|
||||
uint16_t crc16(const unsigned char* data_p, size_t length);
|
||||
um_data_t* simulateSound(uint8_t simulationId);
|
||||
void enumerateLedmaps();
|
||||
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
//wled_eeprom.cpp
|
||||
void applyMacro(byte index);
|
||||
void deEEP();
|
||||
void deEEPSettings();
|
||||
void clearEEPROM();
|
||||
#endif
|
||||
|
||||
//wled_math.cpp
|
||||
#ifndef WLED_USE_REAL_MATH
|
||||
|
@ -229,117 +229,111 @@ const uint8_t PAGE_liveview[] PROGMEM = {
|
||||
|
||||
|
||||
// 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 = {
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x75, 0x54, 0x5d, 0x6f, 0xdb, 0x38,
|
||||
0x10, 0x7c, 0xf7, 0xaf, 0x50, 0x99, 0x4b, 0x2a, 0xc1, 0xb2, 0xec, 0xa4, 0x68, 0xd3, 0x93, 0x44,
|
||||
0x07, 0xfd, 0xf0, 0x43, 0x0f, 0xc1, 0x35, 0x40, 0x52, 0x04, 0x87, 0x20, 0x40, 0x29, 0x69, 0x2d,
|
||||
0xf1, 0x22, 0x91, 0x02, 0xb9, 0xb2, 0x60, 0x18, 0xfa, 0xef, 0xb7, 0x94, 0x1d, 0xe7, 0xee, 0xda,
|
||||
0xfa, 0x41, 0x22, 0xcd, 0xdd, 0x9d, 0xd9, 0x19, 0xae, 0xd2, 0x57, 0x9f, 0xbf, 0x7e, 0xba, 0xfb,
|
||||
0xeb, 0x66, 0xe5, 0x55, 0xd8, 0xd4, 0xcb, 0xf4, 0xf0, 0x04, 0x51, 0x2c, 0xd3, 0x06, 0x50, 0x78,
|
||||
0x4a, 0x34, 0xc0, 0xd9, 0x46, 0x42, 0xdf, 0x6a, 0x83, 0xcc, 0x9b, 0xe4, 0x5a, 0x21, 0x28, 0xe4,
|
||||
0xac, 0x97, 0x05, 0x56, 0xbc, 0x80, 0x8d, 0xcc, 0x61, 0x36, 0x6e, 0x42, 0xa9, 0x24, 0x4a, 0x51,
|
||||
0xcf, 0x6c, 0x2e, 0x6a, 0xe0, 0xe7, 0x61, 0x43, 0x7f, 0x34, 0x5d, 0xf3, 0xbc, 0x67, 0x87, 0x9a,
|
||||
0x93, 0xbc, 0x12, 0xc6, 0x02, 0xd5, 0xe8, 0x70, 0x3d, 0x7b, 0xcf, 0xfe, 0x03, 0x85, 0x15, 0x34,
|
||||
0x30, 0xcb, 0x75, 0xad, 0x0d, 0xf3, 0x8e, 0x60, 0x27, 0x17, 0xe3, 0x8f, 0x42, 0x51, 0x62, 0x0d,
|
||||
0xcb, 0xc9, 0xfd, 0xf5, 0xea, 0xb3, 0x77, 0x2d, 0x37, 0xe0, 0xdd, 0x18, 0x70, 0xf4, 0xd2, 0xf9,
|
||||
0xfe, 0x24, 0xb5, 0xb8, 0x75, 0x01, 0x99, 0x2e, 0xb6, 0xbb, 0x46, 0x98, 0x52, 0xaa, 0x78, 0x31,
|
||||
0x9c, 0xe4, 0x42, 0x6d, 0x76, 0x99, 0xc8, 0x9f, 0x4a, 0xa3, 0x3b, 0x55, 0xc4, 0x27, 0x8b, 0xc5,
|
||||
0x22, 0x59, 0xcb, 0x1a, 0xc1, 0xc4, 0x99, 0x91, 0x65, 0x85, 0x0a, 0xac, 0xf5, 0xcf, 0x2f, 0xdf,
|
||||
0x9e, 0x06, 0xc9, 0xd8, 0x4d, 0x7c, 0xbe, 0x58, 0x9c, 0x26, 0x15, 0xb8, 0xb3, 0xfd, 0xba, 0xd5,
|
||||
0x96, 0xfa, 0xd3, 0x2a, 0x16, 0x99, 0xd5, 0x75, 0x87, 0x30, 0x4c, 0xd2, 0xf9, 0x1e, 0x2e, 0x9d,
|
||||
0xef, 0x35, 0x73, 0xa8, 0xcb, 0xb4, 0x90, 0x1b, 0x4f, 0x16, 0x9c, 0x39, 0x50, 0xa2, 0x6c, 0x73,
|
||||
0x23, 0x5b, 0x5c, 0x4e, 0xd6, 0x9d, 0xca, 0x5d, 0xbe, 0xd7, 0xb5, 0x85, 0x40, 0x38, 0x10, 0xf7,
|
||||
0x21, 0xd8, 0x6d, 0x84, 0xf1, 0x14, 0x67, 0xb5, 0x54, 0x20, 0xcc, 0xac, 0x34, 0xa2, 0x90, 0xd4,
|
||||
0xb6, 0xff, 0xfb, 0xa2, 0x80, 0x32, 0x64, 0x21, 0x72, 0x88, 0x6a, 0x50, 0x25, 0x56, 0xc9, 0x5a,
|
||||
0x1b, 0x5f, 0xf2, 0x8b, 0x44, 0xa6, 0x98, 0xc8, 0x29, 0x7f, 0x13, 0xa8, 0x29, 0xff, 0x6e, 0xca,
|
||||
0xcc, 0xff, 0x6d, 0x07, 0x0f, 0xf2, 0x71, 0x08, 0xc7, 0xf7, 0xf4, 0xfc, 0xb8, 0xba, 0x78, 0x1c,
|
||||
0x82, 0xef, 0x21, 0x85, 0xcf, 0xde, 0x9c, 0x9d, 0xf9, 0x14, 0xcd, 0x42, 0x16, 0x24, 0xee, 0x1d,
|
||||
0xb0, 0xb0, 0xd0, 0x79, 0xd7, 0x10, 0x52, 0x54, 0x02, 0xae, 0x6a, 0x70, 0xcb, 0x8f, 0xdb, 0x2f,
|
||||
0x85, 0xbf, 0x67, 0x1e, 0x44, 0x63, 0x73, 0xd1, 0x8b, 0x6c, 0x5c, 0x0d, 0xc7, 0x26, 0x28, 0xc5,
|
||||
0xe9, 0xff, 0x87, 0xd5, 0xca, 0xb5, 0x80, 0x66, 0xbb, 0x93, 0x6b, 0x9f, 0x3d, 0xe8, 0xec, 0x6f,
|
||||
0xc8, 0xd1, 0xfb, 0x60, 0x8c, 0xd8, 0x7e, 0xec, 0xd6, 0x6b, 0x30, 0x8f, 0x8c, 0x73, 0x8e, 0xfa,
|
||||
0x16, 0x8d, 0x54, 0x65, 0x44, 0x77, 0xa1, 0xf6, 0x21, 0x22, 0x05, 0x44, 0x10, 0xec, 0x6a, 0x40,
|
||||
0x0f, 0xb8, 0x82, 0xde, 0xfb, 0x26, 0x15, 0xbe, 0x1f, 0xb3, 0x7c, 0xd8, 0x38, 0x4e, 0x63, 0x44,
|
||||
0x42, 0x35, 0x2f, 0xdf, 0xbd, 0xe2, 0xf0, 0xb0, 0x78, 0x0c, 0x0c, 0x60, 0x67, 0x54, 0xf2, 0x7f,
|
||||
0xf9, 0x86, 0x21, 0x17, 0x98, 0x57, 0x8e, 0x05, 0x5d, 0x18, 0xb2, 0x06, 0x22, 0x30, 0x86, 0x84,
|
||||
0x62, 0x37, 0x00, 0x4f, 0xde, 0xfd, 0xad, 0x37, 0x6e, 0x63, 0x16, 0xba, 0x58, 0xa7, 0x75, 0x6f,
|
||||
0x13, 0xc7, 0xb7, 0xb7, 0x44, 0xab, 0x8d, 0x7a, 0xa9, 0x0a, 0xdd, 0x47, 0xbd, 0x7d, 0xa9, 0x33,
|
||||
0xf4, 0xf6, 0xec, 0xac, 0xb7, 0x91, 0x21, 0x57, 0xb7, 0xb7, 0x48, 0x70, 0xd4, 0xc2, 0x3d, 0x64,
|
||||
0xb7, 0x3a, 0x7f, 0x02, 0x8c, 0xbe, 0xde, 0xac, 0xfe, 0xbc, 0xf2, 0x9f, 0xc1, 0xa4, 0x5a, 0xeb,
|
||||
0x03, 0x56, 0x67, 0xc1, 0x7a, 0x54, 0x93, 0x40, 0x59, 0x10, 0x52, 0x01, 0x0b, 0x8a, 0xe4, 0xdc,
|
||||
0xbd, 0xae, 0x37, 0xaf, 0x63, 0x34, 0x1d, 0x0c, 0x2c, 0x08, 0xe2, 0x9f, 0x65, 0x12, 0x4b, 0xdd,
|
||||
0x82, 0x22, 0x85, 0x28, 0xd1, 0x27, 0x66, 0x4e, 0x93, 0x23, 0xa2, 0xef, 0xb3, 0x0a, 0xb1, 0xb5,
|
||||
0x31, 0x49, 0x79, 0xa0, 0x5b, 0x6b, 0x62, 0x4b, 0x46, 0x44, 0xad, 0xd1, 0xa8, 0x69, 0x60, 0xae,
|
||||
0x58, 0x6f, 0x2d, 0x8b, 0xe9, 0xc9, 0x82, 0x29, 0x8b, 0xe7, 0x73, 0x36, 0x3d, 0xfa, 0x7b, 0x0c,
|
||||
0xae, 0xb4, 0xc5, 0x29, 0x9b, 0xbb, 0x98, 0x20, 0xd2, 0xca, 0x41, 0xf2, 0x67, 0x4b, 0xfd, 0x17,
|
||||
0xfd, 0x7e, 0x24, 0xf6, 0xcb, 0x76, 0x86, 0xf1, 0x20, 0x93, 0x4a, 0x98, 0xed, 0xdd, 0xb6, 0xa5,
|
||||
0x11, 0x16, 0xce, 0xc4, 0x6c, 0xb4, 0x9e, 0xb9, 0x33, 0x51, 0x14, 0x2b, 0xe7, 0xe8, 0xb5, 0xb4,
|
||||
0x34, 0xcd, 0x40, 0xbe, 0x34, 0x34, 0x6b, 0xa2, 0x04, 0x16, 0xfe, 0xeb, 0x12, 0x05, 0x6e, 0x98,
|
||||
0xf6, 0x93, 0x92, 0xce, 0xf7, 0x73, 0x34, 0x1f, 0x3f, 0x47, 0xff, 0x00, 0xeb, 0x0e, 0x42, 0x19,
|
||||
0xa4, 0x04, 0x00, 0x00
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x6d, 0x54, 0x5d, 0x8f, 0x9b, 0x3a,
|
||||
0x10, 0x7d, 0xcf, 0xaf, 0xa0, 0xde, 0xdb, 0x2d, 0x56, 0x08, 0x24, 0xdb, 0xdb, 0x2f, 0xc0, 0x59,
|
||||
0xb5, 0xb7, 0x79, 0xa8, 0xb4, 0x6a, 0x57, 0xda, 0x5e, 0xad, 0xaa, 0x55, 0xa4, 0x1a, 0x98, 0x80,
|
||||
0xef, 0x82, 0x1d, 0xd9, 0x43, 0x50, 0x84, 0xf8, 0xef, 0x77, 0x20, 0xdb, 0xac, 0x2a, 0x95, 0x07,
|
||||
0xdb, 0xc3, 0x9c, 0x99, 0x33, 0x33, 0x3e, 0x90, 0xbe, 0xf8, 0xfc, 0xed, 0x9f, 0xef, 0x3f, 0x6e,
|
||||
0x37, 0x5e, 0x85, 0x4d, 0xbd, 0x4e, 0x9f, 0x56, 0x90, 0xc5, 0x3a, 0x6d, 0x00, 0xa5, 0xa7, 0x65,
|
||||
0x03, 0x82, 0x1d, 0x14, 0x74, 0x7b, 0x63, 0x91, 0x79, 0xb3, 0xdc, 0x68, 0x04, 0x8d, 0x82, 0x75,
|
||||
0xaa, 0xc0, 0x4a, 0x14, 0x70, 0x50, 0x39, 0x2c, 0x26, 0x23, 0x50, 0x5a, 0xa1, 0x92, 0xf5, 0xc2,
|
||||
0xe5, 0xb2, 0x06, 0xb1, 0x0a, 0x1a, 0x7a, 0xd1, 0xb4, 0xcd, 0x2f, 0x9b, 0x3d, 0xe5, 0x9c, 0xe5,
|
||||
0x95, 0xb4, 0x0e, 0x28, 0x47, 0x8b, 0xbb, 0xc5, 0x7b, 0xf6, 0x1b, 0x15, 0x56, 0xd0, 0xc0, 0x22,
|
||||
0x37, 0xb5, 0xb1, 0xcc, 0x3b, 0x93, 0x5d, 0x5c, 0x4d, 0x0f, 0x41, 0x51, 0x61, 0x0d, 0xeb, 0xd9,
|
||||
0xfd, 0xcd, 0xe6, 0xb3, 0x77, 0xa3, 0x0e, 0xe0, 0xdd, 0x5a, 0x18, 0xcb, 0x4b, 0xa3, 0x93, 0x27,
|
||||
0x75, 0x78, 0x1c, 0x01, 0x99, 0x29, 0x8e, 0x7d, 0x23, 0x6d, 0xa9, 0x74, 0xbc, 0x1c, 0x2e, 0x72,
|
||||
0xa9, 0x0f, 0x7d, 0x26, 0xf3, 0xc7, 0xd2, 0x9a, 0x56, 0x17, 0xf1, 0xc5, 0x72, 0xb9, 0x4c, 0x76,
|
||||
0xaa, 0x46, 0xb0, 0x71, 0x66, 0x55, 0x59, 0xa1, 0x06, 0xe7, 0xfc, 0xd5, 0xbb, 0x37, 0x2f, 0x79,
|
||||
0x32, 0x75, 0x13, 0xaf, 0x96, 0xcb, 0x97, 0x49, 0x05, 0xa3, 0xef, 0x74, 0xde, 0x1b, 0x47, 0xfd,
|
||||
0x19, 0x1d, 0xcb, 0xcc, 0x99, 0xba, 0x45, 0x18, 0x66, 0x69, 0x74, 0xa2, 0x4b, 0xa3, 0xd3, 0xcc,
|
||||
0x46, 0xd6, 0x75, 0x5a, 0xa8, 0x83, 0xa7, 0x0a, 0xc1, 0x46, 0x52, 0x2a, 0x39, 0x22, 0x9b, 0xea,
|
||||
0xca, 0xad, 0xda, 0xe3, 0x7a, 0x76, 0x90, 0xd6, 0xeb, 0x5c, 0x82, 0xf6, 0xd8, 0x77, 0x4e, 0xa0,
|
||||
0xd9, 0x87, 0x9d, 0xd2, 0x85, 0xe9, 0xc2, 0xce, 0x0d, 0xb9, 0xc4, 0xbc, 0xf2, 0x81, 0xf7, 0x43,
|
||||
0xe7, 0x2e, 0x2f, 0x3b, 0x17, 0x5a, 0xca, 0x7a, 0xbc, 0x43, 0x89, 0x20, 0x84, 0xb8, 0x87, 0xec,
|
||||
0xce, 0xe4, 0x8f, 0x80, 0xe1, 0xb7, 0xdb, 0xcd, 0xd7, 0x6b, 0x72, 0x3b, 0xd0, 0x85, 0xcf, 0xfa,
|
||||
0x57, 0xf5, 0xe1, 0x55, 0x8c, 0xb6, 0x85, 0x81, 0xf1, 0xd8, 0xa7, 0xa1, 0x51, 0x79, 0x10, 0x2a,
|
||||
0xbd, 0x33, 0x3e, 0xbb, 0x05, 0x78, 0xf4, 0xee, 0xef, 0x3c, 0xb3, 0x07, 0xad, 0x74, 0xc9, 0x78,
|
||||
0xe0, 0x13, 0xad, 0x86, 0xce, 0x3b, 0xa7, 0xf3, 0x7d, 0x56, 0x21, 0xee, 0x5d, 0xcc, 0x84, 0x78,
|
||||
0xaa, 0xa5, 0x36, 0x54, 0x0a, 0xb5, 0x1a, 0xee, 0xad, 0x41, 0x43, 0xb7, 0x71, 0xcd, 0x3a, 0xe7,
|
||||
0x58, 0x4c, 0x2b, 0xe3, 0x73, 0x16, 0x47, 0x11, 0x9b, 0x17, 0x26, 0x6f, 0x1b, 0xba, 0x9d, 0x67,
|
||||
0x70, 0x65, 0x1c, 0xce, 0x59, 0x34, 0x62, 0x78, 0x68, 0xf4, 0x48, 0x29, 0x76, 0xad, 0xce, 0x47,
|
||||
0xa7, 0xcf, 0xfb, 0x3f, 0x17, 0x3c, 0xf0, 0x80, 0x1c, 0x99, 0xd2, 0xd2, 0x1e, 0xbf, 0x1f, 0xf7,
|
||||
0x24, 0x01, 0x69, 0xad, 0x3c, 0x66, 0xed, 0x6e, 0x07, 0x96, 0x8d, 0x3e, 0x59, 0x14, 0x9b, 0x03,
|
||||
0x11, 0xdd, 0x28, 0x47, 0x6a, 0x00, 0xeb, 0xb3, 0x86, 0xee, 0x4a, 0x96, 0xc0, 0x02, 0x10, 0xeb,
|
||||
0x7e, 0x9c, 0xa4, 0xda, 0xf9, 0xec, 0xc1, 0x64, 0xff, 0x41, 0x8e, 0xde, 0xc7, 0x31, 0xfc, 0xd3,
|
||||
0x14, 0xbe, 0xa5, 0x8e, 0x68, 0xc4, 0x77, 0x68, 0xa9, 0xf5, 0x90, 0x54, 0x58, 0xfb, 0x10, 0x16,
|
||||
0x12, 0x25, 0xe7, 0x7d, 0x0d, 0xe8, 0xc1, 0x34, 0x88, 0x7f, 0x95, 0xc6, 0xf7, 0x53, 0x94, 0x0f,
|
||||
0x23, 0xcf, 0x09, 0x91, 0x50, 0xce, 0x77, 0x6f, 0x5f, 0x08, 0x78, 0x58, 0x6e, 0xb9, 0x05, 0x6c,
|
||||
0xad, 0x4e, 0xc6, 0x18, 0x52, 0x63, 0xad, 0x34, 0x48, 0xbb, 0x28, 0xad, 0x2c, 0x14, 0xe1, 0xfd,
|
||||
0x0f, 0xcb, 0x02, 0xca, 0x80, 0x05, 0x5a, 0x40, 0x58, 0x83, 0x2e, 0xe9, 0x53, 0xb0, 0xe2, 0x4a,
|
||||
0x50, 0xe8, 0x6a, 0x7b, 0xfd, 0x77, 0x7c, 0x95, 0xec, 0x8c, 0xf5, 0x95, 0xb0, 0x89, 0x4a, 0x75,
|
||||
0xa2, 0xe6, 0xe2, 0x35, 0xc7, 0xb9, 0xf8, 0x69, 0xcb, 0xcc, 0xff, 0xab, 0x87, 0x07, 0xb5, 0x1d,
|
||||
0x82, 0x69, 0x9f, 0xaf, 0xce, 0xa7, 0xab, 0xed, 0xc0, 0x7f, 0x06, 0x04, 0x5f, 0xbc, 0xbe, 0xbc,
|
||||
0xf4, 0x09, 0xcd, 0x02, 0xc6, 0x93, 0x71, 0xe7, 0x2c, 0x38, 0x0f, 0xbe, 0x04, 0xdc, 0xd4, 0x30,
|
||||
0x1e, 0x3f, 0x1d, 0xbf, 0xd0, 0x5c, 0x27, 0xbd, 0xf1, 0x70, 0x92, 0x64, 0xf8, 0x2c, 0x76, 0x81,
|
||||
0xc3, 0xb3, 0xb2, 0x7e, 0xa9, 0x03, 0xac, 0xa5, 0xa2, 0xce, 0xf2, 0x98, 0xcc, 0x98, 0x06, 0xca,
|
||||
0x87, 0x81, 0x8f, 0xb2, 0x3e, 0xa9, 0x35, 0x8d, 0x4e, 0x8a, 0x8e, 0xa6, 0x1f, 0xc3, 0xff, 0x16,
|
||||
0x7e, 0x9e, 0x8e, 0x2e, 0x04, 0x00, 0x00
|
||||
};
|
||||
|
||||
|
||||
// Autogenerated from wled00/data/liveviewws2D.htm, do not edit!!
|
||||
const uint16_t PAGE_liveviewws2D_length = 896;
|
||||
const uint16_t PAGE_liveviewws2D_length = 818;
|
||||
const uint8_t PAGE_liveviewws2D[] PROGMEM = {
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x7d, 0x55, 0x6d, 0x6f, 0xdb, 0x36,
|
||||
0x10, 0xfe, 0xee, 0x5f, 0xa1, 0x72, 0x5d, 0x4b, 0xc6, 0x8a, 0xe4, 0x3a, 0xc9, 0x96, 0xd9, 0x92,
|
||||
0x8b, 0x35, 0x35, 0xb0, 0x0e, 0xd9, 0x6a, 0xc0, 0xdd, 0x82, 0x21, 0x30, 0x50, 0x5a, 0x3a, 0x5b,
|
||||
0x5c, 0x25, 0x52, 0x20, 0x69, 0x2b, 0x86, 0xa0, 0xff, 0xbe, 0xa3, 0xe4, 0x38, 0x76, 0xb2, 0xcd,
|
||||
0x1f, 0x24, 0x91, 0x77, 0x7c, 0xee, 0xe1, 0x73, 0x2f, 0x8e, 0x5e, 0x7d, 0xfc, 0x7c, 0xf3, 0xe5,
|
||||
0xaf, 0xd9, 0xd4, 0xcb, 0x6c, 0x91, 0x4f, 0xa2, 0xfd, 0x13, 0x78, 0x3a, 0x89, 0x0a, 0xb0, 0xdc,
|
||||
0x93, 0xbc, 0x80, 0x98, 0x6c, 0x05, 0x54, 0xa5, 0xd2, 0x96, 0x78, 0xbd, 0x44, 0x49, 0x0b, 0xd2,
|
||||
0xc6, 0xa4, 0x12, 0xa9, 0xcd, 0xe2, 0x14, 0xb6, 0x22, 0x81, 0xf3, 0x76, 0xe1, 0x0b, 0x29, 0xac,
|
||||
0xe0, 0xf9, 0xb9, 0x49, 0x78, 0x0e, 0xf1, 0x3b, 0xbf, 0xc0, 0x8d, 0x62, 0x53, 0x3c, 0xae, 0xc9,
|
||||
0x1e, 0xb3, 0x97, 0x64, 0x5c, 0x1b, 0x40, 0x8c, 0x8d, 0x5d, 0x9d, 0x5f, 0x93, 0x93, 0x50, 0x36,
|
||||
0x83, 0x02, 0xce, 0x13, 0x95, 0x2b, 0x4d, 0xbc, 0x43, 0xb0, 0xef, 0x86, 0xed, 0x0f, 0x5d, 0xad,
|
||||
0xb0, 0x39, 0x4c, 0x7a, 0x77, 0xb7, 0xd3, 0x8f, 0xde, 0xad, 0xd8, 0x82, 0x37, 0xd3, 0xe0, 0xe8,
|
||||
0x45, 0x61, 0x67, 0x89, 0x8c, 0xdd, 0xe1, 0x6b, 0xa9, 0xd2, 0x5d, 0x5d, 0x70, 0xbd, 0x16, 0x72,
|
||||
0x34, 0x68, 0xa2, 0xb0, 0xdb, 0x8d, 0xc2, 0xee, 0x6a, 0xce, 0x3a, 0x89, 0x12, 0x2e, 0xb7, 0xdc,
|
||||
0x78, 0x3d, 0x91, 0xc6, 0x24, 0x47, 0x28, 0x07, 0x73, 0xd3, 0xee, 0x91, 0x89, 0x83, 0xfe, 0xb3,
|
||||
0x85, 0xed, 0xbc, 0x10, 0x37, 0xd1, 0xa2, 0xb4, 0x93, 0xde, 0x96, 0x6b, 0xaf, 0xdb, 0x8b, 0x53,
|
||||
0x95, 0x6c, 0x0a, 0xe4, 0x17, 0xac, 0xc1, 0x4e, 0x73, 0x70, 0x9f, 0x1f, 0x76, 0x9f, 0x52, 0xfa,
|
||||
0x1c, 0x8d, 0x8d, 0xbb, 0x03, 0x41, 0xa7, 0x59, 0xf0, 0xd3, 0xf5, 0x59, 0x25, 0x64, 0xaa, 0xaa,
|
||||
0x40, 0x48, 0x09, 0xfa, 0xae, 0x15, 0x6f, 0xef, 0x92, 0x81, 0x58, 0x67, 0xf6, 0x85, 0xcf, 0x2f,
|
||||
0xed, 0xf6, 0xd8, 0x05, 0xaf, 0x8c, 0x9f, 0x43, 0x6a, 0x62, 0x42, 0xfc, 0x82, 0x5b, 0x2d, 0x1e,
|
||||
0xda, 0xf3, 0xf1, 0xc0, 0x2f, 0xc5, 0x03, 0xe4, 0x66, 0x06, 0xfa, 0x16, 0xd2, 0x78, 0x30, 0x16,
|
||||
0x2b, 0xba, 0xc7, 0x44, 0x7a, 0x37, 0x4e, 0xc9, 0x07, 0xcb, 0xea, 0x96, 0xbe, 0x7d, 0x88, 0x5f,
|
||||
0x98, 0x28, 0x19, 0xa6, 0xc8, 0x74, 0xb5, 0x91, 0x89, 0x15, 0x4a, 0x7a, 0xa9, 0xe6, 0x15, 0x02,
|
||||
0xdd, 0x08, 0x9d, 0xe4, 0x60, 0x28, 0xf8, 0xd6, 0x17, 0xbe, 0xf4, 0xb9, 0x6f, 0x58, 0x8d, 0x00,
|
||||
0xc1, 0x4a, 0xe4, 0xf9, 0xdc, 0xa9, 0x1a, 0x7f, 0xd5, 0xeb, 0x25, 0x7d, 0x5d, 0x8b, 0xc6, 0x7f,
|
||||
0x5d, 0x4b, 0xf7, 0xe0, 0x0d, 0xfb, 0xea, 0x3b, 0x9f, 0x25, 0xa0, 0xfe, 0x33, 0x6e, 0x33, 0xca,
|
||||
0xda, 0x35, 0xd7, 0x09, 0x85, 0xb3, 0x63, 0x9e, 0xfd, 0xe0, 0xea, 0x64, 0xed, 0xdb, 0xff, 0x37,
|
||||
0x07, 0x97, 0xa7, 0xeb, 0x81, 0x3f, 0x3c, 0xfb, 0x0d, 0x03, 0x04, 0xb3, 0x4f, 0x5d, 0x08, 0x47,
|
||||
0x8b, 0xb2, 0xe6, 0x70, 0x8d, 0x92, 0x0b, 0x69, 0xd1, 0xd3, 0x50, 0x56, 0xaf, 0x94, 0xa6, 0x22,
|
||||
0xbe, 0x1c, 0x8b, 0xc8, 0x09, 0x18, 0xe4, 0x20, 0xd7, 0x36, 0x1b, 0x8b, 0x7e, 0x7c, 0xc1, 0xea,
|
||||
0x1c, 0xac, 0x07, 0x31, 0x15, 0xe7, 0x97, 0x2c, 0xbc, 0x18, 0x3f, 0xbf, 0xfc, 0xf7, 0x47, 0x4a,
|
||||
0xfb, 0x6d, 0xbc, 0x55, 0xae, 0x10, 0x0d, 0xc2, 0x23, 0x03, 0x6b, 0xf3, 0x72, 0x2f, 0x16, 0xfb,
|
||||
0x77, 0xff, 0xdd, 0xe1, 0x6b, 0xb8, 0xf0, 0x87, 0x57, 0x57, 0xac, 0x69, 0x9e, 0x88, 0x6d, 0xca,
|
||||
0x94, 0x5b, 0xd8, 0x57, 0x2f, 0x05, 0x56, 0x1f, 0x27, 0x93, 0xb6, 0x19, 0x06, 0x76, 0x8f, 0x07,
|
||||
0xbb, 0xfd, 0xae, 0x00, 0xe2, 0x16, 0xef, 0x62, 0x71, 0x9a, 0xeb, 0x96, 0x10, 0x36, 0x1b, 0x3d,
|
||||
0x2e, 0xb3, 0x63, 0x66, 0xa7, 0xc5, 0x15, 0x1e, 0x23, 0x32, 0xff, 0x48, 0xa1, 0x27, 0x76, 0x58,
|
||||
0x17, 0xae, 0x05, 0x7e, 0x35, 0x4a, 0x3a, 0x6e, 0x56, 0xef, 0x6a, 0xac, 0x27, 0x72, 0xaf, 0x96,
|
||||
0x7f, 0x43, 0x62, 0xbd, 0x9f, 0xb5, 0xe6, 0xbb, 0x0f, 0x9b, 0xd5, 0x0a, 0xf4, 0x82, 0xc4, 0x71,
|
||||
0x6c, 0xd5, 0x1c, 0x21, 0xe5, 0x3a, 0xc0, 0x4e, 0xcf, 0x29, 0x04, 0x78, 0x35, 0xce, 0x1e, 0x45,
|
||||
0x95, 0x50, 0x79, 0x7f, 0x60, 0x8c, 0xeb, 0xf6, 0x14, 0x85, 0xad, 0x6b, 0x99, 0xd6, 0xc3, 0xd5,
|
||||
0xe8, 0x8f, 0x3f, 0xbc, 0x8a, 0xe1, 0x7e, 0xb0, 0x60, 0x1a, 0xec, 0x46, 0xcb, 0xf1, 0x73, 0x5d,
|
||||
0x9a, 0x26, 0xe1, 0x36, 0xc9, 0x1c, 0x0b, 0x1c, 0x07, 0x46, 0xe5, 0x10, 0x80, 0xd6, 0xa8, 0x3d,
|
||||
0x99, 0x01, 0x7c, 0xf3, 0xee, 0xe6, 0x5e, 0xbb, 0x1c, 0x11, 0xdf, 0xf9, 0x3a, 0xa2, 0x95, 0x41,
|
||||
0x3e, 0x65, 0xb0, 0x6f, 0x9f, 0xca, 0x3c, 0x01, 0x34, 0x95, 0x79, 0xf3, 0xa6, 0x32, 0x81, 0xc6,
|
||||
0x29, 0xb0, 0x9b, 0x5b, 0x8c, 0x83, 0xdc, 0xef, 0x60, 0x39, 0x57, 0xc9, 0x37, 0xb0, 0xc1, 0xe7,
|
||||
0xd9, 0xf4, 0xf7, 0xf7, 0xf4, 0x31, 0x8a, 0x90, 0x2b, 0xb5, 0x0f, 0xb2, 0x31, 0x60, 0x3c, 0xc4,
|
||||
0xc4, 0x68, 0x84, 0xf9, 0x08, 0x60, 0x40, 0x62, 0x9b, 0xd7, 0x6f, 0xf3, 0xed, 0xdb, 0x91, 0xd5,
|
||||
0x1b, 0x68, 0x08, 0x63, 0xa3, 0x7f, 0x3b, 0x89, 0xf4, 0x54, 0x09, 0x12, 0xa5, 0xc1, 0x83, 0x14,
|
||||
0x99, 0x39, 0x31, 0x0e, 0x11, 0x29, 0x25, 0x99, 0xb5, 0xa5, 0x19, 0xa1, 0x86, 0x7b, 0xba, 0xb9,
|
||||
0x42, 0xb6, 0x98, 0x81, 0xa0, 0xd4, 0xca, 0x2a, 0x9c, 0x83, 0xef, 0x49, 0x65, 0x0c, 0x19, 0xe1,
|
||||
0x93, 0xb0, 0x3e, 0x19, 0x85, 0x21, 0xe9, 0x1f, 0xe6, 0xce, 0xc1, 0x39, 0x53, 0xc6, 0xf6, 0x49,
|
||||
0xe8, 0x7c, 0x58, 0xa0, 0xa4, 0x0b, 0x19, 0x3f, 0xe6, 0x92, 0x3e, 0x09, 0xf7, 0x92, 0xd8, 0x7f,
|
||||
0x5e, 0xa7, 0x69, 0x0d, 0x4b, 0x21, 0xb9, 0xde, 0x7d, 0xd9, 0x95, 0x38, 0x99, 0xb9, 0xcb, 0xde,
|
||||
0xb2, 0xcd, 0x39, 0x71, 0x36, 0x9e, 0xa6, 0x53, 0x97, 0xca, 0x5b, 0x61, 0x70, 0x48, 0x03, 0x26,
|
||||
0xa4, 0x00, 0x63, 0xf8, 0x1a, 0x88, 0x7f, 0x54, 0x3d, 0xac, 0x87, 0xc3, 0xb7, 0x1b, 0x9d, 0x51,
|
||||
0xd8, 0xcd, 0xdd, 0xb0, 0xfd, 0x97, 0xf9, 0x07, 0xa8, 0x98, 0x44, 0x5c, 0x7b, 0x06, 0x00, 0x00
|
||||
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, 0xb2, 0xe4, 0xb8, 0xed, 0x96, 0xd9, 0xa2,
|
||||
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, 0x7d, 0x47, 0xc9, 0xf1, 0x32, 0x74, 0xfa,
|
||||
0x40, 0x91, 0xf7, 0xf2, 0xdc, 0xf1, 0xb9, 0x3b, 0xc6, 0x57, 0x9f, 0xbe, 0xdc, 0xde, 0xff, 0xb9,
|
||||
0x98, 0x7b, 0x19, 0x16, 0xf9, 0x2c, 0x3e, 0xaf, 0x20, 0xd3, 0x59, 0x5c, 0x00, 0x4a, 0x4f, 0xcb,
|
||||
0x02, 0x04, 0x3b, 0x28, 0xa8, 0x76, 0xc6, 0x22, 0xf3, 0x7a, 0x89, 0xd1, 0x08, 0x1a, 0x05, 0xab,
|
||||
0x54, 0x8a, 0x99, 0x48, 0xe1, 0xa0, 0x12, 0x18, 0xb6, 0x87, 0x40, 0x69, 0x85, 0x4a, 0xe6, 0xc3,
|
||||
0x32, 0x91, 0x39, 0x88, 0xeb, 0xa0, 0x20, 0x41, 0xb1, 0x2f, 0x9e, 0xcf, 0xec, 0x8c, 0xd9, 0x4b,
|
||||
0x32, 0x69, 0x4b, 0x20, 0x8c, 0x3d, 0x6e, 0x86, 0x37, 0xec, 0x3f, 0xa1, 0x30, 0x83, 0x02, 0x86,
|
||||
0x89, 0xc9, 0x8d, 0x65, 0xde, 0x25, 0xd8, 0x0f, 0xe3, 0xf6, 0x23, 0x53, 0x54, 0x98, 0xc3, 0xac,
|
||||
0xf7, 0x70, 0x37, 0xff, 0xe4, 0xdd, 0xa9, 0x03, 0x78, 0x0b, 0x0b, 0x2e, 0xbd, 0x38, 0xea, 0x34,
|
||||
0x71, 0x89, 0x35, 0xfd, 0xd6, 0x26, 0xad, 0x4f, 0x85, 0xb4, 0x5b, 0xa5, 0x27, 0xa3, 0x26, 0x8e,
|
||||
0x3a, 0x69, 0x1c, 0x75, 0x57, 0x73, 0xda, 0x59, 0x9c, 0x48, 0x7d, 0x90, 0xa5, 0xd7, 0x53, 0xa9,
|
||||
0x60, 0x6e, 0x4f, 0xe8, 0x51, 0x27, 0x23, 0x94, 0xc4, 0xaa, 0x1d, 0xce, 0x7a, 0x07, 0x69, 0xbd,
|
||||
0x44, 0xa4, 0x26, 0xd9, 0x17, 0x94, 0x48, 0xb8, 0x05, 0x9c, 0xe7, 0xe0, 0xb6, 0x1f, 0xeb, 0xcf,
|
||||
0xa9, 0xdf, 0xb9, 0xf1, 0x20, 0x87, 0xb4, 0x14, 0x8c, 0x05, 0x98, 0x59, 0x83, 0x94, 0x45, 0x2a,
|
||||
0xae, 0xae, 0xa7, 0x9b, 0xbd, 0x4e, 0x50, 0x19, 0xed, 0xd1, 0x55, 0x6f, 0x5b, 0x58, 0x9f, 0x9f,
|
||||
0x92, 0xb0, 0xe3, 0x2d, 0xfc, 0xe5, 0xa6, 0x5f, 0x29, 0x9d, 0x9a, 0x2a, 0x54, 0x5a, 0x83, 0x7d,
|
||||
0x68, 0x09, 0x4c, 0xc2, 0x0c, 0xd4, 0x36, 0xc3, 0xef, 0xd4, 0xbf, 0xb6, 0xe2, 0xe6, 0x05, 0xd2,
|
||||
0xb4, 0xcd, 0x0c, 0x8f, 0x22, 0x71, 0x49, 0xdd, 0x3a, 0xa2, 0x8e, 0xe8, 0xb3, 0x71, 0xca, 0xf8,
|
||||
0x54, 0x6d, 0x7c, 0xd2, 0xf0, 0x93, 0x33, 0xa9, 0xca, 0x29, 0xda, 0xfa, 0x54, 0x95, 0x02, 0xcd,
|
||||
0x2e, 0x3c, 0x63, 0x56, 0x65, 0x93, 0x48, 0x4c, 0x32, 0x1f, 0xf9, 0xa9, 0xa9, 0xca, 0x57, 0xaf,
|
||||
0xaa, 0x32, 0xb4, 0xc4, 0x4c, 0xbd, 0x44, 0x89, 0x20, 0x84, 0x78, 0x80, 0xf5, 0xd2, 0x24, 0xdf,
|
||||
0x00, 0xc3, 0x2f, 0x8b, 0xf9, 0xef, 0xef, 0x49, 0x5d, 0x82, 0xa6, 0xfb, 0x9e, 0x5e, 0xe7, 0x87,
|
||||
0xd7, 0x13, 0xb4, 0x7b, 0x68, 0x18, 0x9f, 0xf8, 0x84, 0xaa, 0xa1, 0xf2, 0x2e, 0xd6, 0xbe, 0xcf,
|
||||
0x32, 0xc4, 0x5d, 0x39, 0x61, 0x42, 0x9c, 0x43, 0xe5, 0x86, 0x22, 0x11, 0x0b, 0xe1, 0x8e, 0xa8,
|
||||
0x31, 0x54, 0xd7, 0xf7, 0xac, 0x2a, 0x4b, 0x36, 0xa1, 0x95, 0xf1, 0x01, 0x9b, 0x44, 0x11, 0x1b,
|
||||
0x5c, 0xe8, 0xbd, 0x18, 0x67, 0xa6, 0xc4, 0x01, 0x8b, 0x9c, 0x0d, 0x0f, 0x8d, 0x36, 0x3b, 0xd0,
|
||||
0xc2, 0xe7, 0x62, 0x76, 0xfa, 0xff, 0x4c, 0x9a, 0x80, 0xe4, 0x6b, 0xa5, 0xa5, 0xad, 0xef, 0xeb,
|
||||
0x1d, 0x75, 0x91, 0xb4, 0x56, 0xd6, 0xeb, 0xfd, 0x66, 0x03, 0x96, 0x39, 0x9d, 0x4c, 0xd3, 0xf9,
|
||||
0x81, 0x22, 0xdc, 0xa9, 0x92, 0x1a, 0x0a, 0xac, 0xcf, 0x0a, 0x28, 0x4b, 0xb9, 0x05, 0xaa, 0x19,
|
||||
0xa1, 0x3a, 0x86, 0x88, 0x34, 0xf6, 0x68, 0xd6, 0x7f, 0x41, 0x82, 0xde, 0x07, 0xe7, 0xfe, 0xb1,
|
||||
0x75, 0x5f, 0xd1, 0x55, 0x88, 0xba, 0x25, 0x5a, 0xa5, 0xb7, 0x21, 0x35, 0x72, 0xee, 0x63, 0x98,
|
||||
0x4a, 0x94, 0x9c, 0x9f, 0x72, 0x40, 0x0f, 0x5b, 0x06, 0xfe, 0x50, 0x1a, 0x6f, 0x5a, 0x2f, 0x1f,
|
||||
0x5c, 0x9c, 0xce, 0xc2, 0x15, 0xe2, 0xe7, 0x9f, 0xae, 0x04, 0x3e, 0x8e, 0x56, 0x4f, 0x4f, 0x63,
|
||||
0xb7, 0xb9, 0xa6, 0xcd, 0x95, 0x2b, 0x8e, 0x05, 0xdc, 0x5b, 0x3d, 0x75, 0x10, 0x96, 0xe4, 0xe3,
|
||||
0x55, 0xa0, 0xe9, 0xf7, 0x66, 0x15, 0x18, 0xf1, 0x9b, 0xc4, 0x2c, 0xa4, 0xd9, 0xf1, 0xcf, 0xcd,
|
||||
0x12, 0xd9, 0x4b, 0x63, 0x44, 0x9a, 0x07, 0xb2, 0x33, 0xd8, 0xe4, 0xc6, 0x58, 0xff, 0xd9, 0x66,
|
||||
0x68, 0xfa, 0x96, 0x47, 0xe3, 0xae, 0x2d, 0x40, 0xbc, 0x9d, 0x6e, 0x48, 0x59, 0x8b, 0xf0, 0xdd,
|
||||
0xb4, 0x8e, 0xf5, 0xb4, 0x1e, 0x0c, 0xb8, 0x13, 0x1c, 0x9d, 0xe0, 0x18, 0xdb, 0xe9, 0x91, 0x04,
|
||||
0x94, 0x45, 0xb8, 0x51, 0x79, 0xbe, 0x74, 0xa3, 0x21, 0xbe, 0xda, 0xed, 0xda, 0xff, 0xf1, 0x84,
|
||||
0x8f, 0xb0, 0x6a, 0x82, 0xf6, 0x3f, 0xb8, 0xbe, 0xec, 0xc6, 0xab, 0x86, 0x7f, 0x0d, 0x9c, 0xc3,
|
||||
0x1a, 0x68, 0xa2, 0x16, 0x14, 0xdf, 0xe7, 0xed, 0x59, 0xda, 0xc4, 0x3f, 0xf6, 0xcd, 0x40, 0x06,
|
||||
0x75, 0xdf, 0x04, 0xe1, 0x5b, 0x5a, 0x46, 0xc1, 0xb8, 0xdf, 0x66, 0xb8, 0xf8, 0xdc, 0xd9, 0xb8,
|
||||
0x20, 0x64, 0x0e, 0x03, 0xf1, 0xa6, 0xf9, 0xb7, 0xef, 0x68, 0xb6, 0x4b, 0x93, 0x43, 0x08, 0xd6,
|
||||
0x52, 0x66, 0x6c, 0x01, 0xf0, 0xcd, 0x7b, 0x58, 0x7a, 0xed, 0x71, 0x42, 0x65, 0xe1, 0x4d, 0xc3,
|
||||
0x9b, 0x73, 0x13, 0x7d, 0x5f, 0x3e, 0x0b, 0xa5, 0xfa, 0xfb, 0xb9, 0x7a, 0xcf, 0x53, 0xf7, 0xf4,
|
||||
0xe4, 0xbf, 0x98, 0x90, 0x97, 0xd3, 0x38, 0x0a, 0x48, 0x71, 0xaf, 0x0a, 0x30, 0x7b, 0x6a, 0x52,
|
||||
0xfe, 0xd2, 0x89, 0x46, 0xb5, 0x09, 0xc6, 0xef, 0x46, 0x9c, 0x37, 0xbc, 0x47, 0x0f, 0x45, 0x37,
|
||||
0xf8, 0x71, 0xd4, 0xbd, 0x11, 0x51, 0xfb, 0x22, 0xfe, 0x03, 0x69, 0xb3, 0xce, 0x95, 0x27, 0x05,
|
||||
0x00, 0x00
|
||||
};
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
// 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 = {
|
||||
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,
|
||||
@ -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,
|
||||
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,
|
||||
0x1c, 0x83, 0x15, 0x69, 0x13, 0xf4, 0x56, 0xcd, 0xcb, 0x5e, 0x92, 0xc3, 0x03, 0x0d, 0xf6, 0x18,
|
||||
0x64, 0x20, 0xff, 0x5d, 0xf4, 0x97, 0xfe, 0x9a, 0x62, 0xff, 0x46, 0xef, 0x2b, 0x0e, 0xda, 0xdc,
|
||||
0x15, 0x7f, 0x38, 0xa1, 0x12, 0xce, 0x48, 0x06, 0xbd, 0x36, 0x69, 0xf2, 0x35, 0xb3, 0x51, 0xad,
|
||||
0x56, 0x51, 0x1b, 0xe8, 0xe3, 0x96, 0x1a, 0xa0, 0x0e, 0x69, 0x1e, 0x5d, 0xa6, 0x47, 0xee, 0x50,
|
||||
0x4f, 0x72, 0xbd, 0x29, 0x90, 0x22, 0x56, 0xd3, 0x54, 0x61, 0xa5, 0xba, 0x08, 0x0a, 0xbe, 0x80,
|
||||
0xf2, 0x84, 0xa1, 0x1b, 0x77, 0x5b, 0xf0, 0x7f, 0x50, 0x12, 0x29, 0xa1, 0xfa, 0x47, 0xf0, 0xde,
|
||||
0xd7, 0xb3, 0x96, 0xae, 0x38, 0xdf, 0x32, 0xc4, 0xb9, 0xfa, 0xff, 0x64, 0x9a, 0xbc, 0x5d, 0x79,
|
||||
0x9c, 0xa3, 0x40, 0x07, 0xf4, 0xfb, 0xc3, 0x74, 0x38, 0x12, 0xde, 0x7a, 0xdf, 0x88, 0x46, 0xcf,
|
||||
0xdf, 0x89, 0xb8, 0x34, 0x3d, 0x5c, 0x9a, 0x0c, 0x97, 0x42, 0xe8, 0xf0, 0x17, 0x27, 0x7c, 0x7b,
|
||||
0xef, 0xbc, 0x17, 0x30, 0x3e, 0x66, 0x8f, 0xfb, 0x07, 0xe6, 0xd6, 0x23, 0x36, 0xb2, 0x89, 0x9c,
|
||||
0x64, 0x41, 0x47, 0x64, 0x6d, 0x94, 0xec, 0x57, 0x0f, 0x52, 0x82, 0xde, 0xf7, 0xcb, 0xbd, 0x8b,
|
||||
0xea, 0x39, 0x1b, 0x32, 0xe2, 0x36, 0x8d, 0xae, 0x30, 0xe8, 0x35, 0x8e, 0xc3, 0x61, 0x29, 0xf1,
|
||||
0x30, 0xd9, 0xa0, 0xeb, 0x7c, 0x1d, 0x37, 0xa8, 0x1c, 0xb6, 0xd3, 0x89, 0xc8, 0xf1, 0xfa, 0xd5,
|
||||
0x72, 0x1c, 0xa0, 0x3e, 0x7e, 0x11, 0xde, 0x9c, 0x0b, 0xe7, 0xb1, 0x5d, 0x96, 0xf0, 0xf1, 0x8b,
|
||||
0xe5, 0x6e, 0xdd, 0x32, 0xed, 0x27, 0xa1, 0x42, 0xe7, 0x8b, 0xeb, 0xef, 0xbe, 0xf8, 0x77, 0x14,
|
||||
0x24, 0x58, 0x08, 0x6f, 0xb6, 0x01, 0xe2, 0x89, 0x0d, 0x02, 0xbd, 0x04, 0x40, 0x14, 0x0d, 0xf4,
|
||||
0x58, 0x09, 0xd1, 0x88, 0x0e, 0x4c, 0xe7, 0xbd, 0x7c, 0xc8, 0x6d, 0x80, 0xba, 0xc3, 0xf3, 0x51,
|
||||
0xf7, 0x11, 0xc3, 0xa1, 0x58, 0x27, 0xdf, 0x7d, 0x78, 0x75, 0x82, 0x48, 0xa1, 0xb6, 0x32, 0x28,
|
||||
0xec, 0x2e, 0xf6, 0x84, 0xae, 0x60, 0x41, 0x17, 0x24, 0xc1, 0x6e, 0x7c, 0xc9, 0x62, 0xc7, 0xa2,
|
||||
0xed, 0x38, 0x3c, 0x6f, 0x37, 0xd0, 0x91, 0x94, 0x81, 0x16, 0xfe, 0x05, 0x86, 0x8e, 0xc0, 0x7c,
|
||||
0x49, 0x82, 0x0e, 0x5f, 0xb9, 0x5f, 0x82, 0x04, 0x5f, 0xf9, 0x5f, 0x75, 0xea, 0x42, 0x81, 0xca,
|
||||
0x9c, 0x0d, 0x4a, 0x80, 0xc3, 0x1b, 0xd8, 0x1f, 0xcf, 0x82, 0xa7, 0xb7, 0x1e, 0xa1, 0x7b, 0x7b,
|
||||
0x4d, 0x9a, 0xb4, 0x9a, 0x16, 0x80, 0x0a, 0x0e, 0xb4, 0xf8, 0xd4, 0x80, 0xcd, 0xee, 0x64, 0xeb,
|
||||
0xd0, 0xbe, 0x9f, 0x03, 0x03, 0x40, 0xcc, 0xe8, 0xd1, 0x94, 0x2c, 0xed, 0x55, 0x38, 0x25, 0xf7,
|
||||
0x6b, 0xf1, 0x05, 0xd0, 0xda, 0xb0, 0x01, 0x61, 0x76, 0x83, 0x64, 0x7c, 0x7c, 0xe0, 0x78, 0x02,
|
||||
0xb7, 0xd7, 0x6f, 0x8c, 0xaa, 0x40, 0x65, 0x4a, 0x40, 0x83, 0x5b, 0x40, 0x5b, 0x9c, 0x07, 0x79,
|
||||
0x67, 0x2f, 0xfe, 0xf9, 0x9b, 0xf7, 0x34, 0xa0, 0xdf, 0xa1, 0x2b, 0x9b, 0x12, 0x1b, 0xef, 0x6c,
|
||||
0xc2, 0x08, 0xb3, 0x67, 0x53, 0xa3, 0x41, 0x0d, 0xf5, 0xdf, 0x51, 0x6a, 0xa1, 0xcb, 0xec, 0x92,
|
||||
0xbe, 0xdf, 0x24, 0x58, 0x68, 0x54, 0x13, 0xf2, 0x77, 0x27, 0xd9, 0xbb, 0x4f, 0x96, 0x3a, 0x2a,
|
||||
0x59, 0xb0, 0x1d, 0x48, 0x50, 0x28, 0x69, 0x4e, 0x78, 0xf3, 0x71, 0xed, 0xb2, 0xa5, 0x1b, 0x9e,
|
||||
0x82, 0x83, 0xbe, 0x18, 0x4e, 0x40, 0x37, 0x09, 0x20, 0x23, 0xbc, 0xfd, 0x19, 0xf7, 0xea, 0xe1,
|
||||
0x60, 0x43, 0xe7, 0x40, 0xb1, 0x2d, 0xef, 0x27, 0x34, 0xd8, 0x60, 0x2e, 0x09, 0x50, 0x73, 0x5a,
|
||||
0x4c, 0xcd, 0x41, 0x35, 0xc0, 0xf7, 0xf0, 0xc5, 0x4c, 0x92, 0xd0, 0xed, 0xdf, 0xdc, 0xaa, 0x85,
|
||||
0xb3, 0xf4, 0xdf, 0x51, 0x5d, 0x1b, 0x37, 0x54, 0x99, 0x3a, 0xbd, 0x34, 0x74, 0x3c, 0xc5, 0x1a,
|
||||
0xa7, 0x60, 0xa9, 0x2c, 0x07, 0x83, 0x0d, 0xab, 0xbe, 0x6c, 0xa1, 0xa1, 0xaf, 0xfe, 0x4b, 0x23,
|
||||
0xb0, 0x74, 0x49, 0x7a, 0x20, 0x39, 0x4d, 0xd7, 0xb5, 0x35, 0x50, 0xad, 0x48, 0x92, 0x03, 0x2b,
|
||||
0x80, 0xe3, 0x41, 0x13, 0x95, 0xfc, 0x24, 0xea, 0x15, 0x63, 0xd7, 0x9c, 0xd4, 0x80, 0xec, 0x04,
|
||||
0xb3, 0xc1, 0xec, 0x76, 0x9a, 0x92, 0x71, 0xeb, 0x49, 0x73, 0x69, 0xb4, 0xc2, 0x32, 0xff, 0x5e,
|
||||
0x14, 0x99, 0xce, 0x94, 0xf3, 0x3d, 0x5d, 0xbf, 0xd7, 0xbf, 0x1c, 0x30, 0x74, 0x05, 0x3f, 0x1d,
|
||||
0xd7, 0x3f, 0x85, 0xd0, 0x0d, 0xcc, 0x2c, 0x85, 0xff, 0x0d, 0x7c, 0x9d, 0xbd, 0x8b, 0x0e, 0xf5,
|
||||
0x87, 0x4d, 0xc7, 0x35, 0x62, 0x66, 0x07, 0x06, 0x12, 0xae, 0x04, 0x7a, 0x34, 0x1c, 0xcf, 0xa3,
|
||||
0x1b, 0x01, 0xb8, 0x09, 0x76, 0x10, 0x99, 0xc8, 0xcc, 0x11, 0x0a, 0x12, 0x7d, 0xc0, 0x49, 0x23,
|
||||
0xec, 0x19, 0xf5, 0xee, 0x7e, 0x09, 0x91, 0x6a, 0x38, 0x34, 0x85, 0x06, 0xab, 0xa7, 0xd9, 0x31,
|
||||
0xbf, 0xbf, 0xdb, 0x66, 0x28, 0x08, 0x84, 0x81, 0x4e, 0x72, 0xf1, 0x77, 0x07, 0x86, 0xb7, 0x54,
|
||||
0x97, 0x9e, 0x5a, 0x7f, 0x63, 0x97, 0x9e, 0x78, 0xe1, 0xa8, 0x03, 0xfa, 0x43, 0xe9, 0xba, 0x2e,
|
||||
0xe2, 0xc4, 0x3b, 0x83, 0x86, 0x1b, 0xc3, 0x01, 0x30, 0xdc, 0x4b, 0xf8, 0x0f, 0x81, 0x01, 0x19,
|
||||
0x46, 0x4e, 0xb2, 0xed, 0x8a, 0x3e, 0x39, 0x52, 0xf3, 0xcc, 0xfa, 0xc7, 0x3c, 0x92, 0xbd, 0x30,
|
||||
0x7f, 0xf3, 0x75, 0xb0, 0xe7, 0xdc, 0x10, 0x54, 0x49, 0x55, 0xc3, 0x20, 0x85, 0xe4, 0xa6, 0xba,
|
||||
0xaf, 0xba, 0x0c, 0x46, 0xde, 0xbb, 0x95, 0x17, 0x71, 0x14, 0xe2, 0x5e, 0x0e, 0x8b, 0x46, 0x09,
|
||||
0xdf, 0x98, 0x1b, 0x8e, 0x49, 0xc1, 0x43, 0x7f, 0xd4, 0x33, 0xa0, 0x8d, 0x09, 0x0d, 0xe7, 0x60,
|
||||
0x08, 0xa7, 0x96, 0x98, 0xce, 0x76, 0xe4, 0xe9, 0x97, 0x87, 0x17, 0x3e, 0x08, 0xe9, 0x63, 0xf8,
|
||||
0x0a, 0xe7, 0x51, 0x9c, 0xf9, 0xd5, 0x10, 0x75, 0xc0, 0x50, 0x1a, 0xa1, 0xd3, 0x7f, 0x40, 0x46,
|
||||
0x60, 0xe3, 0xca, 0x36, 0x91, 0x5e, 0x16, 0xbe, 0x52, 0x80, 0x57, 0x35, 0x84, 0x75, 0x82, 0x6f,
|
||||
0x1b, 0xaf, 0x6d, 0xa0, 0x27, 0xdd, 0xbf, 0xa5, 0xf4, 0x20, 0x5e, 0x02, 0x8d, 0x4b, 0xd4, 0x34,
|
||||
0x1b, 0x22, 0xdb, 0x34, 0xdc, 0xde, 0x26, 0x2b, 0x1d, 0xf5, 0x26, 0x75, 0x4d, 0x27, 0xc9, 0xba,
|
||||
0x4e, 0xb6, 0xa7, 0xe1, 0x3e, 0x7a, 0x2a, 0x6a, 0xb8, 0xc1, 0x88, 0x9a, 0x0a, 0x9a, 0x54, 0x83,
|
||||
0xf2, 0x88, 0x06, 0x0d, 0x24, 0xf0, 0xf4, 0xc7, 0xcf, 0x8d, 0x28, 0xb8, 0xed, 0xe2, 0x5b, 0x2a,
|
||||
0xda, 0x40, 0x48, 0x4d, 0x5d, 0xc4, 0xcd, 0xfd, 0xd0, 0xa5, 0xaf, 0xbc, 0xbf, 0x5b, 0xb7, 0x92,
|
||||
0xcb, 0xee, 0x72, 0xd9, 0x9c, 0xbf, 0xbc, 0x9e, 0x84, 0xf7, 0xfa, 0xcc, 0x2e, 0xd7, 0x8a, 0x9f,
|
||||
0x10, 0x62, 0x3b, 0x11, 0xf1, 0x63, 0x42, 0xac, 0x02, 0x5e, 0x51, 0x15, 0x2f, 0xaf, 0x28, 0xee,
|
||||
0xda, 0xc2, 0x2f, 0x6b, 0xa1, 0xd3, 0xd2, 0xb4, 0x54, 0xcd, 0xab, 0x14, 0xde, 0x9e, 0x89, 0xa9,
|
||||
0x83, 0x7e, 0x56, 0x97, 0x0e, 0x00, 0xb4, 0x6e, 0x8f, 0x21, 0xc7, 0x0f, 0xdc, 0x18, 0x1f, 0x9f,
|
||||
0xab, 0x62, 0x04, 0x11, 0x21, 0x06, 0x4a, 0x05, 0xd1, 0xde, 0x39, 0xb1, 0x91, 0x84, 0xe2, 0x4d,
|
||||
0x86, 0x56, 0x27, 0x2c, 0xb1, 0x13, 0x04, 0x37, 0xd6, 0x8c, 0x1f, 0xa0, 0xb0, 0xe3, 0x83, 0x1f,
|
||||
0x85, 0xf3, 0x83, 0xfb, 0xbf, 0x50, 0x37, 0x01, 0x46, 0x2b, 0xcb, 0xe7, 0x63, 0x2a, 0x3c, 0xd5,
|
||||
0xdb, 0xd6, 0x94, 0xa6, 0xc9, 0x06, 0x8b, 0xe8, 0x10, 0x85, 0xb9, 0x31, 0x1a, 0x12, 0x5b, 0x53,
|
||||
0x6a, 0x5f, 0xc4, 0x05, 0x5f, 0x0b, 0x76, 0x4b, 0x97, 0xbd, 0xf1, 0x03, 0x97, 0xe7, 0x13, 0xe7,
|
||||
0xcf, 0x9f, 0x64, 0x12, 0xa3, 0xdd, 0xc8, 0x24, 0x11, 0x04, 0xc4, 0xc1, 0x4c, 0x39, 0xd4, 0x86,
|
||||
0xa6, 0x26, 0x35, 0x33, 0xa4, 0x57, 0x6e, 0x73, 0x36, 0x1d, 0x97, 0x9a, 0x13, 0x60, 0x5e, 0x4f,
|
||||
0x1c, 0x3c, 0x28, 0x86, 0x2e, 0x6a, 0xc7, 0xc1, 0x80, 0x79, 0x3f, 0x28, 0xdf, 0x0d, 0x87, 0xaa,
|
||||
0x10, 0xaa, 0x4a, 0xf3, 0x4c, 0x87, 0xa5, 0x3e, 0x76, 0x7e, 0x1e, 0x89, 0x15, 0x0c, 0x6d, 0x1a,
|
||||
0xf3, 0x42, 0xe8, 0xc7, 0x32, 0x12, 0xcf, 0x3b, 0xe7, 0x1b, 0x84, 0x04, 0xaf, 0x5a, 0xdb, 0x7f,
|
||||
0x2d, 0xda, 0x51, 0xe7, 0x39, 0x4f, 0xf5, 0x05, 0xfd, 0x1e, 0xac, 0xf2, 0xba, 0xf9, 0x23, 0xb0,
|
||||
0xd0, 0x1b, 0xa6, 0x10, 0xda, 0xc8, 0xf3, 0xce, 0x36, 0x6f, 0x6f, 0x47, 0x36, 0xbd, 0x40, 0xda,
|
||||
0x83, 0x4d, 0x19, 0xd8, 0xf4, 0x18, 0x5d, 0x48, 0x83, 0x0b, 0x93, 0x78, 0x92, 0x00, 0xbe, 0x7f,
|
||||
0x78, 0xdf, 0x35, 0x17, 0x38, 0xac, 0x30, 0x41, 0x07, 0x36, 0x0d, 0x30, 0xa4, 0x08, 0xfa, 0xcb,
|
||||
0x81, 0x99, 0x7f, 0x31, 0x28, 0xd1, 0x6b, 0xd0, 0xb4, 0x88, 0x41, 0xdb, 0x9b, 0xa0, 0x47, 0x19,
|
||||
0x23, 0x95, 0xe6, 0xdf, 0xc6, 0xdf, 0x6a, 0xae, 0x3d, 0x02, 0x15, 0x11, 0x57, 0xcc, 0xab, 0x73,
|
||||
0x46, 0xfa, 0x92, 0x8e, 0xf1, 0xf9, 0x2b, 0xf8, 0x0c, 0xc7, 0x3b, 0x2c, 0x47, 0xe7, 0x87, 0x97,
|
||||
0xe2, 0x4c, 0x12, 0xcf, 0x1a, 0x41, 0x1b, 0x00, 0x8f, 0x81, 0x13, 0x74, 0xd2, 0xc7, 0x79, 0x0e,
|
||||
0xd3, 0x13, 0x20, 0x4f, 0xb6, 0x35, 0xc1, 0xd0, 0x9b, 0xe8, 0xee, 0xd3, 0xa9, 0x37, 0x5f, 0xdf,
|
||||
0x1f, 0xd9, 0xec, 0x97, 0x3a, 0xb2, 0xe1, 0xe7, 0x8d, 0xe4, 0xfd, 0x74, 0x59, 0xd1, 0xb6, 0xa4,
|
||||
0x12, 0x96, 0x80, 0x2f, 0x1f, 0xa7, 0xdb, 0x97, 0x5d, 0x18, 0x04, 0x24, 0x8d, 0x54, 0xcb, 0xa0,
|
||||
0x03, 0x8a, 0x1d, 0x09, 0x07, 0xfd, 0x42, 0xff, 0x2e, 0xfe, 0xc0, 0x5d, 0xa2, 0x1a, 0x3e, 0xe3,
|
||||
0xf1, 0x6e, 0xd0, 0x42, 0x82, 0x57, 0xf7, 0x64, 0xb2, 0xa2, 0x37, 0xe7, 0x22, 0x0d, 0x9f, 0x5e,
|
||||
0xb3, 0x05, 0x12, 0x13, 0xed, 0xab, 0x7b, 0x1f, 0xcc, 0x48, 0xa4, 0xdb, 0x88, 0xb8, 0x77, 0x81,
|
||||
0x6c, 0x80, 0x80, 0x94, 0x32, 0x41, 0xc7, 0x62, 0x12, 0xc0, 0x49, 0xa5, 0x16, 0xbe, 0xb6, 0xe5,
|
||||
0xed, 0x6e, 0x20, 0xb2, 0x0c, 0x3f, 0x8e, 0x2b, 0xe4, 0x64, 0xba, 0x30, 0x13, 0x7e, 0xd3, 0x9e,
|
||||
0x5f, 0x89, 0x2e, 0xe2, 0xa5, 0x18, 0xae, 0x07, 0x26, 0x49, 0xc3, 0xc0, 0xe3, 0xaa, 0xde, 0x3e,
|
||||
0xe6, 0x9a, 0x70, 0xf0, 0x90, 0xf5, 0xe6, 0x07, 0xc9, 0x83, 0xdd, 0x43, 0x76, 0xd1, 0x96, 0xdb,
|
||||
0xd9, 0xf1, 0x7c, 0x98, 0x82, 0x2d, 0x68, 0x82, 0x52, 0x97, 0x18, 0x30, 0xcf, 0x12, 0xb2, 0x97,
|
||||
0xbf, 0xc0, 0x0a, 0xd2, 0x96, 0xbf, 0xc0, 0x52, 0x63, 0xfc, 0x1c, 0xcf, 0x43, 0x2c, 0x93, 0x31,
|
||||
0xf6, 0x1d, 0x1f, 0xde, 0x0b, 0x34, 0xe7, 0x52, 0x52, 0x8a, 0x13, 0xb8, 0x94, 0x4d, 0x3f, 0x35,
|
||||
0xdc, 0x9b, 0x5a, 0xc2, 0x62, 0x97, 0x00, 0x00, 0x84, 0xa5, 0xea, 0xac, 0x60, 0x18, 0xed, 0x32,
|
||||
0x24, 0x1d, 0xcf, 0xfb, 0xf3, 0x28, 0xa7, 0x43, 0xc4, 0x74, 0x1f, 0x90, 0x92, 0x57, 0x1f, 0x0b,
|
||||
0xfd, 0x12, 0x0c, 0xdc, 0x97, 0xde, 0xde, 0xa6, 0x5f, 0xbb, 0x54, 0xb2, 0x86, 0xea, 0x34, 0x83,
|
||||
0x3a, 0x34, 0x9f, 0x17, 0x56, 0x45, 0x5e, 0x90, 0xef, 0x4c, 0x85, 0xf5, 0x02, 0x2f, 0x28, 0xa1,
|
||||
0x4d, 0x05, 0x92, 0xa6, 0xe1, 0xb6, 0xdb, 0xdb, 0x22, 0x18, 0x11, 0xec, 0x99, 0xa1, 0x56, 0x45,
|
||||
0x87, 0x89, 0xef, 0x38, 0xf7, 0x33, 0x98, 0x87, 0x5c, 0xac, 0xd1, 0xcb, 0x70, 0x7d, 0x77, 0xe2,
|
||||
0x10, 0xbd, 0xf3, 0x89, 0x5e, 0xb0, 0x5d, 0xf8, 0x85, 0x63, 0x74, 0xe3, 0xf9, 0xd3, 0xb3, 0x58,
|
||||
0x1a, 0x37, 0xc4, 0x89, 0x61, 0x8e, 0xfa, 0x83, 0x04, 0x7d, 0x7b, 0x11, 0xc6, 0x11, 0x3a, 0xd2,
|
||||
0x98, 0x24, 0x58, 0xac, 0x5d, 0xac, 0x4a, 0xae, 0x16, 0x5c, 0xcb, 0x47, 0x5b, 0xf0, 0x7c, 0xb3,
|
||||
0x91, 0x32, 0x79, 0x2c, 0x73, 0xae, 0x39, 0x0e, 0xbe, 0xeb, 0xe1, 0xf8, 0x9a, 0x7a, 0x2f, 0x63,
|
||||
0x45, 0xaa, 0x58, 0xa4, 0x19, 0xea, 0x59, 0x82, 0x0e, 0x23, 0x01, 0x16, 0x52, 0xc2, 0x54, 0x60,
|
||||
0xa1, 0xa1, 0x5b, 0x78, 0x11, 0xa2, 0x5e, 0xca, 0x2c, 0xe8, 0x5e, 0x24, 0x2d, 0x98, 0xe2, 0x6a,
|
||||
0xf0, 0x43, 0xa5, 0xb1, 0x42, 0xe1, 0xeb, 0x1b, 0x0c, 0x90, 0x01, 0x7a, 0xf8, 0x76, 0x07, 0x23,
|
||||
0xdd, 0x9b, 0x86, 0xc3, 0x86, 0x10, 0x7f, 0x21, 0x56, 0x94, 0xad, 0x87, 0xd8, 0xce, 0x32, 0xda,
|
||||
0x3f, 0x14, 0x25, 0xf9, 0xd7, 0xb9, 0xe7, 0x17, 0xf2, 0xe7, 0x4f, 0xd0, 0x04, 0x3f, 0x0f, 0x09,
|
||||
0x18, 0x10, 0x81, 0x61, 0x71, 0x13, 0x62, 0xa7, 0xd1, 0x18, 0x2c, 0x21, 0x4f, 0xf2, 0xbc, 0xef,
|
||||
0x1c, 0xa3, 0x9c, 0xd8, 0x6c, 0x7c, 0xe4, 0x74, 0x76, 0x34, 0xdc, 0xa4, 0xf8, 0x38, 0xfc, 0x1c,
|
||||
0x74, 0x10, 0xf2, 0x83, 0xb3, 0x40, 0xa8, 0x72, 0xcc, 0x33, 0x8d, 0x67, 0xd7, 0x93, 0x5f, 0xa0,
|
||||
0x1e, 0x72, 0x32, 0xe8, 0x21, 0x18, 0x5b, 0x0d, 0xe6, 0x75, 0xc6, 0xad, 0xf4, 0x70, 0x10, 0x36,
|
||||
0x8a, 0xc2, 0xb4, 0x61, 0x4e, 0x92, 0x3c, 0x06, 0x5b, 0x50, 0x43, 0x20, 0x16, 0x3f, 0x4b, 0x78,
|
||||
0x9f, 0x73, 0x61, 0x54, 0x05, 0x3d, 0x01, 0x07, 0xfc, 0x1b, 0x96, 0xdb, 0x0f, 0x5f, 0x28, 0x00,
|
||||
0x0e, 0xbe, 0xcd, 0xb9, 0x31, 0xc7, 0xe4, 0xc2, 0x37, 0xbe, 0x86, 0x61, 0xa8, 0xd8, 0x72, 0x44,
|
||||
0xba, 0x84, 0xe6, 0x42, 0xc8, 0xa1, 0x0b, 0x84, 0x39, 0xde, 0xcd, 0xc0, 0xa7, 0x6e, 0x08, 0x78,
|
||||
0x92, 0x8d, 0xe0, 0xa5, 0x14, 0x18, 0x07, 0x8f, 0x36, 0xfd, 0x0e, 0x6e, 0x4e, 0xc0, 0x98, 0xf0,
|
||||
0x88, 0x94, 0xc6, 0x74, 0x07, 0x8a, 0x99, 0x3a, 0x5e, 0xb5, 0x6a, 0x23, 0xc7, 0xbe, 0xbd, 0x69,
|
||||
0xef, 0x54, 0xb8, 0x85, 0x80, 0x6f, 0x2a, 0xa9, 0xb9, 0x7f, 0x33, 0x10, 0x2e, 0xf9, 0xbf, 0xac,
|
||||
0x4a, 0xf4, 0x79, 0xbc, 0x5d, 0xe0, 0x07, 0xea, 0xe1, 0x8a, 0x02, 0x6a, 0x10, 0x9d, 0x31, 0x8d,
|
||||
0xaa, 0x0c, 0x4b, 0x95, 0x82, 0xa5, 0x7c, 0xac, 0x57, 0xf8, 0x15, 0x78, 0x3e, 0xa4, 0x53, 0x10,
|
||||
0x4f, 0xa7, 0xf0, 0xbe, 0x6b, 0x24, 0x2a, 0xbc, 0xf9, 0x5a, 0x78, 0x59, 0xe2, 0x8d, 0x0d, 0xb0,
|
||||
0x74, 0x1c, 0x0b, 0x0c, 0x07, 0xc2, 0x8e, 0x1d, 0xfc, 0xbd, 0xed, 0x86, 0x55, 0xe3, 0xde, 0x7b,
|
||||
0x4d, 0x4a, 0xe4, 0x18, 0xce, 0xdc, 0x34, 0x6a, 0xec, 0x16, 0x18, 0xfc, 0x0c, 0x6b, 0x0d, 0xe1,
|
||||
0x2b, 0x92, 0xe6, 0xde, 0xb5, 0x30, 0x60, 0x8a, 0x86, 0x2f, 0xc1, 0x11, 0x92, 0xfe, 0xc5, 0x31,
|
||||
0xec, 0x9b, 0x8f, 0x5d, 0x93, 0xe1, 0x1d, 0x3f, 0xc5, 0xbb, 0xb5, 0xfc, 0x69, 0x08, 0xee, 0x2e,
|
||||
0x6f, 0xb0, 0x2a, 0x3f, 0xb8, 0xd0, 0x1d, 0xe6, 0xf8, 0x0a, 0x20, 0x20, 0xb8, 0x50, 0x0a, 0xbe,
|
||||
0x6f, 0x8b, 0xf7, 0xcc, 0x0a, 0xff, 0x55, 0x2c, 0x51, 0x5b, 0x96, 0x01, 0x59, 0x5a, 0xb3, 0xf1,
|
||||
0x01, 0xf8, 0x3b, 0x4d, 0xfe, 0x74, 0x85, 0x87, 0x85, 0xfd, 0xf7, 0xae, 0xbb, 0xf1, 0x1e, 0x78,
|
||||
0x76, 0xf0, 0xcb, 0x1f, 0x1f, 0x0b, 0xf6, 0xa2, 0xbb, 0x4f, 0xeb, 0x06, 0x40, 0x8b, 0xfd, 0xe5,
|
||||
0x11, 0x5c, 0x78, 0xf0, 0xc2, 0xa3, 0xf0, 0x20, 0xad, 0x1d, 0x06, 0x7b, 0x09, 0x8a, 0x1f, 0x70,
|
||||
0xe9, 0x15, 0x01, 0x36, 0x14, 0x02, 0xd9, 0xea, 0x84, 0xe1, 0xd5, 0x37, 0xe6, 0x20, 0xa7, 0xc2,
|
||||
0x15, 0xcd, 0x60, 0xb0, 0x4e, 0x79, 0x17, 0xc2, 0xc7, 0xcd, 0x35, 0x12, 0x37, 0xd6, 0x68, 0xe1,
|
||||
0xf1, 0x5a, 0xd3, 0x6e, 0x7d, 0x59, 0xff, 0x66, 0xf1, 0x8f, 0x4a, 0xfb, 0x7b, 0x16, 0xec, 0x97,
|
||||
0x3f, 0x30, 0x76, 0x4d, 0x70, 0xac, 0x6e, 0x7d, 0x73, 0x56, 0x23, 0x6e, 0x5d, 0x46, 0x31, 0x18,
|
||||
0x0a, 0x90, 0xf1, 0x7d, 0x2d, 0x64, 0xa1, 0x38, 0x90, 0xf5, 0x9b, 0x4f, 0x7b, 0xa1, 0x1a, 0xf5,
|
||||
0x65, 0x8e, 0x99, 0xfd, 0xbd, 0x06, 0xfe, 0xaa, 0xad, 0xeb, 0x95, 0xce, 0xfd, 0xfe, 0x7c, 0x6f,
|
||||
0xbc, 0x70, 0x11, 0x12, 0x5b, 0x87, 0xa0, 0x6c, 0xd6, 0xe8, 0x1e, 0x11, 0x0a, 0xdb, 0xda, 0x72,
|
||||
0xab, 0x9f, 0xa0, 0x38, 0x5e, 0xf6, 0x71, 0xb1, 0x88, 0xde, 0x4d, 0x11, 0xb9, 0x1c, 0x33, 0x7c,
|
||||
0x26, 0x22, 0x7c, 0x5d, 0xa2, 0xd7, 0xb9, 0xfa, 0xb2, 0x7b, 0x4b, 0x64, 0x07, 0x69, 0x6b, 0xe7,
|
||||
0x30, 0x74, 0x3b, 0x66, 0x7c, 0x84, 0x1e, 0x16, 0xd6, 0x40, 0xda, 0xde, 0x5e, 0xd7, 0x03, 0xfa,
|
||||
0x16, 0x35, 0xd0, 0xcc, 0xcc, 0x3b, 0x8d, 0x4c, 0x92, 0x73, 0x99, 0x0c, 0xa4, 0xb1, 0x66, 0xda,
|
||||
0x35, 0xce, 0x19, 0x9a, 0x26, 0x06, 0xae, 0x51, 0x40, 0x35, 0xff, 0xd2, 0xdc, 0xd8, 0x38, 0xc3,
|
||||
0x17, 0x8d, 0x86, 0x87, 0xb9, 0xda, 0xc1, 0xbf, 0x31, 0xca, 0x35, 0xb8, 0xfa, 0xfc, 0x30, 0xa3,
|
||||
0x3d, 0xf8, 0x0f, 0x46, 0xb9, 0x0c, 0xc4, 0xd9, 0x4c, 0x1b, 0xc0, 0xad, 0xbf, 0xf8, 0xf1, 0x3d,
|
||||
0xe4, 0xd7, 0x62, 0xb5, 0x3a, 0x06, 0xcc, 0x6c, 0xae, 0x0e, 0xa6, 0x59, 0x2d, 0x50, 0xdb, 0xc3,
|
||||
0x34, 0x46, 0xc3, 0x49, 0x02, 0xa7, 0x70, 0x14, 0x2a, 0xdb, 0x36, 0x45, 0xaf, 0x1b, 0x3f, 0x8f,
|
||||
0xcd, 0x84, 0xb0, 0xda, 0x4e, 0x6f, 0x5a, 0x0b, 0x9d, 0x54, 0x8b, 0xc3, 0xf2, 0xef, 0x8f, 0xf4,
|
||||
0xf5, 0xc1, 0x38, 0x05, 0xaf, 0x01, 0x08, 0x93, 0x53, 0x23, 0x71, 0x38, 0xf4, 0x9d, 0x47, 0xd1,
|
||||
0x51, 0xae, 0x8c, 0x6d, 0xd5, 0x8e, 0xe5, 0xe3, 0xf8, 0x62, 0x17, 0x1e, 0xaf, 0xc1, 0x96, 0x33,
|
||||
0x5d, 0x0b, 0x2b, 0x62, 0x76, 0xac, 0x0c, 0x2e, 0x74, 0xdd, 0xef, 0xba, 0x09, 0x58, 0x0f, 0x72,
|
||||
0xc5, 0x56, 0x59, 0x01, 0x8b, 0x97, 0xc2, 0xc5, 0xa7, 0x14, 0xef, 0x14, 0x23, 0x71, 0xdc, 0xb2,
|
||||
0x68, 0xec, 0x80, 0xcf, 0xcd, 0xd1, 0x8e, 0x5e, 0xd4, 0x23, 0xe7, 0xca, 0x70, 0xff, 0x10, 0xcc,
|
||||
0x77, 0xaa, 0x8f, 0x86, 0xb4, 0x0e, 0xff, 0x3d, 0x72, 0x96, 0x7f, 0x98, 0xcd, 0x3f, 0xe5, 0xe6,
|
||||
0xc5, 0x28, 0xd2, 0xf0, 0xc4, 0xc8, 0xdc, 0xb8, 0x91, 0xb6, 0x03, 0xdb, 0x0f, 0xc3, 0x8e, 0xf0,
|
||||
0xba, 0x37, 0x52, 0x5f, 0xf2, 0xda, 0xcd, 0xb6, 0xee, 0xca, 0x4e, 0x25, 0x6e, 0x50, 0xae, 0x71,
|
||||
0xbf, 0xd3, 0xf7, 0xa2, 0x73, 0x7c, 0x3d, 0x96, 0x4d, 0x5d, 0xe1, 0x5e, 0x9e, 0x80, 0x08, 0xa0,
|
||||
0x92, 0x2c, 0xe9, 0x6e, 0x34, 0x6f, 0x23, 0x26, 0xe4, 0x8a, 0x49, 0x4a, 0x7e, 0x7d, 0xe8, 0x85,
|
||||
0xa4, 0xd6, 0x0e, 0xea, 0x78, 0x03, 0xe8, 0xfb, 0x32, 0x46, 0xa0, 0xe5, 0xed, 0x4f, 0xd1, 0xf7,
|
||||
0xbf, 0x34, 0x70, 0x83, 0x0a, 0x08, 0x7c, 0x3e, 0xa8, 0x89, 0x82, 0x03, 0x7f, 0x63, 0x7c, 0x6b,
|
||||
0x28, 0x28, 0x71, 0x91, 0xe3, 0x99, 0x41, 0xb8, 0xb3, 0xb7, 0x09, 0x9a, 0x2a, 0x8a, 0x7c, 0x5d,
|
||||
0x35, 0xe7, 0x24, 0x3d, 0x08, 0x17, 0xcb, 0x97, 0x62, 0xe5, 0xf8, 0x05, 0xf4, 0x56, 0x27, 0x49,
|
||||
0x9a, 0x28, 0xc9, 0x18, 0xeb, 0x3c, 0xa0, 0x77, 0x95, 0x0d, 0x70, 0xfb, 0x8a, 0xaf, 0xb3, 0xce,
|
||||
0x41, 0xe2, 0x62, 0x89, 0x10, 0x42, 0xb1, 0xe3, 0xbf, 0xd5, 0x60, 0x65, 0xcf, 0x25, 0x18, 0x9d,
|
||||
0xc7, 0x57, 0xd9, 0x79, 0x72, 0x76, 0x13, 0x17, 0xc8, 0xf0, 0x7a, 0x08, 0x67, 0xd7, 0x21, 0x8f,
|
||||
0x90, 0x1d, 0x46, 0xe6, 0x61, 0x28, 0xa3, 0x1f, 0xf1, 0x22, 0x85, 0x7d, 0x48, 0xf5, 0x30, 0xe8,
|
||||
0x01, 0x99, 0x76, 0xa9, 0x9d, 0xe3, 0x39, 0xc0, 0xe1, 0xc9, 0x0f, 0x31, 0x77, 0x23, 0x5e, 0x82,
|
||||
0xba, 0x8b, 0x51, 0xe2, 0xb8, 0x8d, 0xd4, 0xf5, 0x4a, 0x95, 0x22, 0x27, 0x9d, 0xfd, 0x17, 0xcb,
|
||||
0xe0, 0x59, 0x67, 0xd6, 0x54, 0xb8, 0x19, 0x9a, 0xe2, 0x79, 0x8f, 0x61, 0x4a, 0x22, 0x3d, 0x18,
|
||||
0x81, 0xb0, 0x8d, 0xa4, 0x38, 0x92, 0x3b, 0xb2, 0xa9, 0xa5, 0xe3, 0xcd, 0x1a, 0x18, 0x77, 0x9a,
|
||||
0x6d, 0xa6, 0x5b, 0xac, 0xbc, 0x33, 0xbe, 0x31, 0xf1, 0x7d, 0x18, 0x0e, 0xee, 0x6d, 0x7b, 0xae,
|
||||
0x12, 0x23, 0xcd, 0xdc, 0x24, 0x46, 0xba, 0xef, 0x7d, 0xcb, 0xb8, 0x5a, 0xa0, 0x2f, 0x06, 0x99,
|
||||
0xfa, 0x7b, 0x64, 0x5d, 0x4d, 0xd6, 0xe9, 0x48, 0xd7, 0xdf, 0x52, 0xb2, 0x61, 0x97, 0x11, 0x6f,
|
||||
0x28, 0x4a, 0x88, 0xff, 0x14, 0xe8, 0x8e, 0x2d, 0xff, 0x3b, 0x8c, 0xd6, 0xd3, 0x00, 0xad, 0xe1,
|
||||
0xee, 0xbf, 0x10, 0x7d, 0xac, 0x19, 0x51, 0xa6, 0xe0, 0x93, 0x80, 0xc7, 0x14, 0xd0, 0x6c, 0x0a,
|
||||
0x46, 0x84, 0x1e, 0x33, 0x97, 0xc1, 0xd9, 0x15, 0x7f, 0x44, 0x10, 0x41, 0xf0, 0xf0, 0x46, 0x2d,
|
||||
0x96, 0xd4, 0x62, 0xaf, 0xd8, 0x48, 0x72, 0x80, 0x09, 0x18, 0x2b, 0xfc, 0x85, 0xc9, 0xc9, 0x7b,
|
||||
0x7d, 0xcf, 0xfc, 0xc3, 0x4a, 0x2b, 0x37, 0xdd, 0x2d, 0xa7, 0xd0, 0x67, 0x81, 0x11, 0xa0, 0xa7,
|
||||
0xab, 0x40, 0x93, 0x73, 0x36, 0xd6, 0xda, 0x26, 0x58, 0x01, 0x82, 0x16, 0x31, 0x60, 0xf4, 0x7d,
|
||||
0x26, 0xf3, 0x25, 0x66, 0xbc, 0x20, 0x80, 0x75, 0x44, 0x8e, 0x21, 0x01, 0xeb, 0x68, 0x3c, 0x96,
|
||||
0xbe, 0xb7, 0x6c, 0xea, 0xf7, 0x86, 0x95, 0x16, 0x24, 0x46, 0x94, 0xd0, 0x38, 0x63, 0xcc, 0x02,
|
||||
0xeb, 0xd8, 0xde, 0x8e, 0xde, 0xf5, 0xd0, 0x68, 0xb8, 0x6c, 0x15, 0xac, 0xe7, 0x68, 0xdb, 0xdb,
|
||||
0x1f, 0x62, 0x9b, 0x46, 0x3c, 0xbc, 0x0b, 0x24, 0xbe, 0xe2, 0xd9, 0x32, 0x13, 0x72, 0x5f, 0xb0,
|
||||
0x3b, 0xc9, 0xf0, 0x52, 0x6c, 0xac, 0x93, 0x60, 0x01, 0x23, 0x0d, 0xc2, 0x51, 0x62, 0xf0, 0x04,
|
||||
0x58, 0x79, 0x54, 0x04, 0x42, 0x4a, 0xed, 0xe7, 0x4f, 0x13, 0x58, 0x87, 0x09, 0x5c, 0xc2, 0x4c,
|
||||
0xcb, 0x42, 0x18, 0xf8, 0x2f, 0xe1, 0x27, 0xfe, 0x0f, 0x5a, 0x4d, 0x3d, 0x4b, 0x9b, 0x8e, 0x59,
|
||||
0x04, 0xeb, 0x0d, 0x15, 0x30, 0xd7, 0xd1, 0x13, 0xd2, 0x4f, 0xf7, 0xa6, 0xa0, 0xa0, 0x08, 0x80,
|
||||
0x43, 0x04, 0xf6, 0x23, 0xda, 0x24, 0xc0, 0x7d, 0xaf, 0x55, 0x68, 0xb2, 0x96, 0x63, 0x15, 0xa9,
|
||||
0x8b, 0x25, 0x56, 0xf5, 0xbd, 0xda, 0xa8, 0x83, 0x45, 0x04, 0xa3, 0x13, 0x53, 0x54, 0xbc, 0x17,
|
||||
0xae, 0xac, 0xd5, 0xc9, 0x14, 0xc5, 0x8d, 0x2b, 0x4b, 0x88, 0xc0, 0x81, 0x12, 0x96, 0x2e, 0xb8,
|
||||
0x0d, 0x70, 0x78, 0x84, 0x3b, 0x3e, 0x6c, 0x1f, 0x07, 0x7f, 0x27, 0x83, 0x5b, 0x69, 0xbc, 0x4b,
|
||||
0x2f, 0xf1, 0x82, 0xce, 0xe5, 0x95, 0xbe, 0x19, 0x8c, 0xcd, 0xcd, 0x4c, 0x34, 0x3c, 0xa4, 0xb2,
|
||||
0xf0, 0x14, 0x13, 0x1b, 0xa6, 0x88, 0x1d, 0xfd, 0xf3, 0x2d, 0xe1, 0x64, 0x72, 0xa0, 0xa4, 0x1a,
|
||||
0xd9, 0x0a, 0xbf, 0x9b, 0xa7, 0xa7, 0xeb, 0xb1, 0x59, 0x5e, 0x18, 0x28, 0xbb, 0x39, 0xff, 0x67,
|
||||
0x5e, 0x2c, 0x01, 0x46, 0x0b, 0x85, 0x46, 0x63, 0xa0, 0xd0, 0x94, 0x54, 0x23, 0x8f, 0x29, 0x62,
|
||||
0x25, 0x94, 0x02, 0x00, 0x18, 0x67, 0x62, 0x97, 0x0e, 0xfb, 0xd3, 0x43, 0x67, 0xbf, 0xf1, 0x7b,
|
||||
0xe0, 0xe0, 0x05, 0x4c, 0x03, 0x65, 0x81, 0xb7, 0x59, 0x21, 0x2f, 0x2b, 0x82, 0x39, 0xfc, 0x9b,
|
||||
0x5f, 0x08, 0xd5, 0xac, 0xc8, 0xc8, 0x45, 0x31, 0x7a, 0x76, 0xc4, 0x6f, 0xb8, 0xbc, 0x09, 0x99,
|
||||
0xee, 0x53, 0x60, 0x7e, 0x44, 0xe5, 0x0f, 0x2e, 0x4f, 0x0e, 0xce, 0xa8, 0x93, 0x48, 0x9b, 0xdc,
|
||||
0x57, 0x7c, 0x61, 0x9b, 0x40, 0x42, 0x3b, 0xb2, 0x1c, 0x7d, 0xf9, 0xa8, 0x3d, 0x4c, 0xb0, 0x9b,
|
||||
0x95, 0x39, 0xea, 0xa9, 0x4f, 0xb2, 0x96, 0x61, 0x9d, 0x6e, 0x78, 0xdf, 0x29, 0x6d, 0x88, 0x5b,
|
||||
0x7f, 0x92, 0x38, 0x72, 0x7a, 0x34, 0x1e, 0x03, 0xc6, 0xba, 0xe5, 0x89, 0xb2, 0x77, 0x0e, 0x7a,
|
||||
0x4b, 0xfa, 0x94, 0x45, 0x14, 0xb8, 0xbc, 0x6b, 0xcf, 0x10, 0x4c, 0x32, 0xb2, 0xf1, 0xe6, 0xb2,
|
||||
0xcd, 0xff, 0x31, 0x6e, 0x58, 0x07, 0x5b, 0x47, 0x78, 0x04, 0xc8, 0x3f, 0x54, 0x1e, 0x6a, 0xb4,
|
||||
0x81, 0x27, 0xf1, 0xe9, 0xb0, 0xd8, 0xd1, 0x4e, 0x7e, 0xe1, 0x5d, 0xfa, 0xc3, 0xcf, 0x17, 0x91,
|
||||
0x72, 0xf3, 0x05, 0x1e, 0xf2, 0x89, 0x8c, 0x43, 0x14, 0xbc, 0xcb, 0x5b, 0x36, 0xdd, 0xbf, 0x48,
|
||||
0x7b, 0x1a, 0x3f, 0xdb, 0x3f, 0xb7, 0x6a, 0x91, 0x8b, 0x87, 0xa1, 0x63, 0xb5, 0x70, 0x2f, 0x17,
|
||||
0x18, 0xaf, 0xb8, 0xee, 0x70, 0x76, 0xe4, 0xaa, 0x8b, 0x28, 0x42, 0x71, 0x9b, 0xf5, 0xd3, 0x67,
|
||||
0xb3, 0xa7, 0x3f, 0x2c, 0x14, 0x9f, 0xa0, 0x9f, 0x46, 0x43, 0x83, 0xff, 0x03, 0x57, 0xe6, 0xdf,
|
||||
0xf0, 0x61, 0x9a, 0x80, 0xb9, 0x08, 0x82, 0x57, 0xef, 0x54, 0x08, 0x63, 0xc9, 0x4c, 0x5b, 0x00,
|
||||
0xe3, 0xbb, 0x99, 0x1e, 0xfe, 0x88, 0x5f, 0x9c, 0xb2, 0x82, 0x8d, 0x54, 0x16, 0xef, 0x8b, 0x15,
|
||||
0x40, 0xaf, 0xab, 0xb9, 0xc9, 0xe8, 0x3d, 0x4e, 0x2b, 0xe7, 0x7b, 0xc3, 0x5c, 0x87, 0xbe, 0x95,
|
||||
0x00, 0xf7, 0xfa, 0x96, 0x57, 0x13, 0x6c, 0xd6, 0x46, 0x02, 0x43, 0x17, 0x8f, 0xd2, 0x78, 0x81,
|
||||
0x41, 0x71, 0x57, 0x47, 0x10, 0xb8, 0x8f, 0x0b, 0xd0, 0xe5, 0xd7, 0x6e, 0xb9, 0x2f, 0x63, 0x33,
|
||||
0x35, 0x8c, 0x25, 0x59, 0xde, 0x6d, 0xa4, 0x2d, 0x4f, 0x0c, 0x99, 0x3f, 0x35, 0xbc, 0xcb, 0xc9,
|
||||
0x59, 0x1b, 0x89, 0x49, 0x83, 0xc5, 0xbc, 0x38, 0x8a, 0x1b, 0xe8, 0x2d, 0x28, 0x7c, 0xb7, 0xf8,
|
||||
0xfa, 0xe8, 0x96, 0x84, 0x17, 0xbb, 0xd4, 0x9d, 0x58, 0x7f, 0x8d, 0x20, 0x32, 0xc3, 0xeb, 0x74,
|
||||
0xb4, 0x3c, 0xbf, 0xbb, 0x93, 0xa5, 0xce, 0x2e, 0xb6, 0x9d, 0xbf, 0x88, 0x5e, 0xde, 0x62, 0xb0,
|
||||
0x10, 0xa7, 0x75, 0xa6, 0x7e, 0xdd, 0x0f, 0x2e, 0xc3, 0xc8, 0x50, 0xcd, 0x1c, 0x39, 0x51, 0xac,
|
||||
0xf9, 0x0a, 0x13, 0x3d, 0xe7, 0x9b, 0xa6, 0x2f, 0x82, 0x48, 0xe2, 0x95, 0x74, 0x08, 0x04, 0x67,
|
||||
0x87, 0xde, 0xfd, 0x93, 0x44, 0x35, 0x8b, 0x3d, 0xb1, 0x4b, 0x99, 0xb8, 0x70, 0xf8, 0xf7, 0x88,
|
||||
0xbd, 0x3f, 0x62, 0xa9, 0x77, 0xaf, 0x58, 0xab, 0xb2, 0x3e, 0xb2, 0x93, 0x6b, 0x37, 0xbc, 0x56,
|
||||
0x73, 0xc2, 0x06, 0x24, 0xcb, 0x5d, 0xb0, 0x78, 0xcf, 0xff, 0x6a, 0xad, 0xb9, 0x19, 0x76, 0xf9,
|
||||
0xa6, 0x5d, 0x5e, 0xb8, 0x68, 0x64, 0x69, 0x34, 0xe8, 0x44, 0xd0, 0x68, 0x5f, 0x1a, 0xa2, 0x30,
|
||||
0x15, 0x99, 0xa3, 0x9d, 0xf9, 0x31, 0xba, 0xf4, 0x0a, 0x6e, 0x74, 0x3b, 0x45, 0x18, 0xf4, 0xc8,
|
||||
0x60, 0x5b, 0x13, 0x41, 0x40, 0x44, 0x9a, 0x1d, 0xda, 0x51, 0x6f, 0xe8, 0x45, 0x47, 0xce, 0x8f,
|
||||
0x78, 0xc2, 0x4f, 0xf1, 0x57, 0x2d, 0x74, 0x2c, 0x64, 0x20, 0x39, 0xc7, 0xb6, 0x49, 0x83, 0xe0,
|
||||
0xe8, 0xa1, 0xf5, 0x48, 0x78, 0x11, 0x59, 0xd9, 0xa9, 0x65, 0xc1, 0x1a, 0xcb, 0x93, 0x98, 0x50,
|
||||
0x17, 0xd0, 0xe9, 0x6d, 0x5e, 0x8b, 0x0b, 0x7f, 0x17, 0x3b, 0xcc, 0xa7, 0x95, 0x97, 0x64, 0x28,
|
||||
0x4a, 0xd0, 0x0b, 0x64, 0x0b, 0x0c, 0x47, 0x7a, 0xcc, 0x35, 0x12, 0xdd, 0xe6, 0xdf, 0xd8, 0x1c,
|
||||
0x14, 0x81, 0x59, 0xf6, 0x30, 0xe5, 0x24, 0x83, 0xd3, 0x49, 0xfc, 0x9f, 0x3f, 0xe1, 0xae, 0xbb,
|
||||
0xb1, 0xdf, 0x26, 0x5e, 0x80, 0x07, 0x08, 0xf4, 0xd1, 0x03, 0xd0, 0x50, 0x9b, 0x7f, 0x08, 0x90,
|
||||
0xe9, 0x45, 0xa1, 0x85, 0x5e, 0x6a, 0xcc, 0xff, 0x64, 0x98, 0xff, 0xe5, 0x39, 0x8e, 0x6e, 0x4c,
|
||||
0x4b, 0xf8, 0xaf, 0xd6, 0xba, 0xd0, 0x39, 0xcf, 0x7b, 0xf4, 0x25, 0xe9, 0xcf, 0x87, 0xc8, 0x87,
|
||||
0x49, 0x8a, 0xda, 0xc9, 0xcc, 0x08, 0x65, 0x05, 0xfc, 0xd1, 0xaf, 0x74, 0xc6, 0x6c, 0xb8, 0x3b,
|
||||
0x53, 0xd1, 0xbf, 0x2b, 0x88, 0xb2, 0x28, 0x13, 0xef, 0x06, 0x4a, 0x25, 0x9d, 0x7f, 0x99, 0x99,
|
||||
0xc9, 0xf2, 0x5c, 0x66, 0x8e, 0xaf, 0x8b, 0x5f, 0xf0, 0x26, 0xb4, 0x24, 0xeb, 0xe3, 0xae, 0x08,
|
||||
0xcc, 0xf0, 0xbb, 0xc8, 0x07, 0x09, 0xdf, 0x31, 0x61, 0x17, 0x13, 0x8c, 0xdd, 0x74, 0x36, 0xb7,
|
||||
0xbd, 0xfd, 0xa9, 0xf1, 0x35, 0x1a, 0x1e, 0x3a, 0x00, 0x0e, 0x0c, 0x75, 0xf5, 0x8e, 0x6c, 0x6e,
|
||||
0x67, 0x47, 0xe3, 0x3c, 0x8a, 0xdc, 0x69, 0x38, 0xd8, 0xb7, 0xec, 0x8e, 0xe1, 0xc7, 0x36, 0x49,
|
||||
0xb8, 0x08, 0x5f, 0x1c, 0xaf, 0x0b, 0x20, 0x61, 0x36, 0xc1, 0xe8, 0xe1, 0x61, 0xd1, 0xcf, 0x22,
|
||||
0x13, 0xb7, 0xd4, 0x3c, 0xd2, 0x0f, 0x31, 0x0a, 0x76, 0xb3, 0x58, 0x58, 0xf5, 0xc0, 0xb7, 0xd5,
|
||||
0xfb, 0xa8, 0x3c, 0x22, 0x18, 0xfb, 0x5b, 0x0f, 0x6e, 0x37, 0xc6, 0xa3, 0xb7, 0x29, 0x2e, 0x7a,
|
||||
0xe3, 0xb1, 0x05, 0x69, 0x3b, 0xc9, 0x98, 0x1e, 0xeb, 0xbf, 0x74, 0x3c, 0xa6, 0xc8, 0xfe, 0x10,
|
||||
0x6b, 0xb1, 0x6c, 0xd6, 0x0e, 0xe0, 0x8c, 0x8f, 0xc1, 0xa5, 0x37, 0x7f, 0xe2, 0x15, 0xcb, 0x61,
|
||||
0x0a, 0x08, 0xee, 0x3b, 0x24, 0x42, 0x3a, 0x9d, 0x76, 0x99, 0xf2, 0xe4, 0x7b, 0x57, 0x7c, 0x8d,
|
||||
0x81, 0xd4, 0x19, 0x6f, 0xc0, 0xb8, 0x19, 0xff, 0xe4, 0x02, 0x94, 0xf3, 0x2f, 0xfd, 0xde, 0xde,
|
||||
0x66, 0x4f, 0x26, 0xbf, 0x3c, 0x63, 0x9d, 0xc0, 0x03, 0x3f, 0x09, 0x93, 0xf7, 0x72, 0x60, 0x35,
|
||||
0xf2, 0x3f, 0xe8, 0xa2, 0xfc, 0xf3, 0x27, 0x2a, 0xe9, 0x40, 0x0a, 0x43, 0x6a, 0x6d, 0x8e, 0x1a,
|
||||
0x71, 0xa8, 0x37, 0x90, 0x26, 0xd0, 0x5a, 0x7c, 0x6d, 0x6d, 0x79, 0xcc, 0x5b, 0x04, 0xaa, 0xdc,
|
||||
0xca, 0x30, 0x16, 0xde, 0xfd, 0x6e, 0x9e, 0x8e, 0xb6, 0x7a, 0xbb, 0x1a, 0x68, 0x69, 0x50, 0x82,
|
||||
0xa3, 0xf7, 0xc0, 0xd1, 0x0b, 0xe1, 0x60, 0xce, 0x57, 0x4b, 0x0d, 0x4d, 0x3c, 0x65, 0x8a, 0x4e,
|
||||
0x5a, 0xca, 0xd1, 0x36, 0x17, 0x0c, 0x5f, 0xed, 0xf6, 0x7e, 0x49, 0x0a, 0x12, 0x84, 0x37, 0x27,
|
||||
0xe0, 0xea, 0xfb, 0xa0, 0xdc, 0xc8, 0xfa, 0xa8, 0xd8, 0xf2, 0x96, 0x38, 0xbf, 0xdc, 0xd6, 0xf7,
|
||||
0x8c, 0xf7, 0xd6, 0x87, 0xc4, 0xf7, 0x0c, 0xee, 0xb1, 0xe2, 0xf7, 0xc0, 0x1d, 0xea, 0xbb, 0x89,
|
||||
0xff, 0x07, 0x67, 0xc7, 0x83, 0x20, 0xcd, 0xc3, 0x00, 0x00
|
||||
0x1c, 0x83, 0x15, 0x69, 0x13, 0xf4, 0x56, 0xcd, 0xcb, 0x5e, 0x92, 0xbb, 0xee, 0xde, 0xed, 0x73,
|
||||
0xfc, 0x77, 0xd1, 0x5f, 0xf6, 0x6b, 0x8a, 0xfc, 0x1b, 0x3d, 0xaf, 0x38, 0x60, 0x73, 0x57, 0xfc,
|
||||
0xe1, 0x84, 0x4a, 0x38, 0x23, 0x19, 0x74, 0xda, 0xa4, 0xc9, 0xd7, 0xcc, 0x46, 0xb5, 0x5a, 0x45,
|
||||
0x4d, 0xa0, 0x8f, 0xdb, 0x69, 0x80, 0x36, 0xa4, 0x77, 0x74, 0x97, 0x1e, 0xb9, 0x43, 0x3d, 0xc9,
|
||||
0xf5, 0xa6, 0x40, 0x86, 0x58, 0x4d, 0x53, 0x85, 0x95, 0xea, 0x22, 0x28, 0xf7, 0x02, 0xca, 0x12,
|
||||
0x86, 0x6a, 0xdc, 0x69, 0xc1, 0xff, 0x41, 0x41, 0xa4, 0x44, 0xea, 0x1f, 0xbf, 0x7b, 0x5f, 0xc7,
|
||||
0x5a, 0xba, 0xe1, 0x7c, 0xab, 0x10, 0xe7, 0xe9, 0xff, 0x93, 0x29, 0xf2, 0x76, 0xe4, 0x71, 0x7e,
|
||||
0x02, 0xfd, 0xcf, 0xef, 0x0f, 0xd3, 0xdf, 0x48, 0x78, 0xdb, 0x7d, 0x23, 0x1a, 0x3d, 0x5f, 0x27,
|
||||
0xe2, 0xd2, 0xf4, 0x70, 0x69, 0x32, 0x5c, 0x0a, 0xa1, 0x83, 0x5f, 0x9c, 0xf0, 0xed, 0xbd, 0xb3,
|
||||
0x5e, 0xc0, 0xf4, 0x98, 0x2d, 0xee, 0x1f, 0x96, 0x5b, 0x8f, 0xd8, 0xc8, 0x06, 0x72, 0x92, 0x05,
|
||||
0x1c, 0x91, 0xb5, 0x11, 0xb2, 0x5f, 0x3d, 0x48, 0x09, 0x7a, 0xd7, 0x2f, 0xf7, 0x2e, 0xaa, 0xe7,
|
||||
0x6c, 0xc8, 0x88, 0xdb, 0x34, 0xba, 0xc1, 0xa0, 0xd7, 0x38, 0x0e, 0x87, 0xa5, 0xc4, 0x43, 0x64,
|
||||
0x83, 0xae, 0xf3, 0x75, 0xdc, 0x9c, 0x72, 0xd8, 0x2e, 0x27, 0x22, 0xc7, 0xeb, 0x57, 0xcb, 0x71,
|
||||
0x80, 0xfa, 0xf8, 0x45, 0x78, 0x63, 0x2e, 0x9c, 0xc7, 0x76, 0x58, 0xc2, 0x47, 0x2f, 0x96, 0x3b,
|
||||
0x75, 0xcb, 0xb4, 0x9f, 0x84, 0x0a, 0x9c, 0x2f, 0xae, 0xbf, 0xf3, 0xe2, 0xdf, 0x4f, 0x90, 0x60,
|
||||
0xe1, 0xbb, 0xd9, 0x06, 0x88, 0x26, 0x36, 0x08, 0xf4, 0x10, 0x00, 0x51, 0x34, 0xd0, 0x5b, 0x25,
|
||||
0x44, 0xa3, 0x39, 0x30, 0x9d, 0xf7, 0xf2, 0x21, 0xb7, 0x01, 0xaa, 0x0e, 0xcf, 0x47, 0x5d, 0x47,
|
||||
0x0c, 0x87, 0x62, 0x9d, 0x7c, 0xf7, 0xe1, 0xd5, 0x09, 0x22, 0x85, 0xda, 0xc9, 0xa0, 0xac, 0xbb,
|
||||
0xd8, 0x13, 0xba, 0x7a, 0x05, 0x5d, 0x90, 0x04, 0xbb, 0xf1, 0x25, 0x8b, 0x1d, 0x8b, 0xb6, 0xe3,
|
||||
0xf0, 0xbc, 0xdd, 0x40, 0x27, 0x52, 0x06, 0x5a, 0xf8, 0x17, 0x18, 0x39, 0x02, 0xf3, 0x23, 0x09,
|
||||
0x3a, 0x7c, 0xe5, 0x7e, 0x09, 0x12, 0x7c, 0xe5, 0x7f, 0xd5, 0xa9, 0xfb, 0x04, 0x2a, 0x73, 0x36,
|
||||
0x28, 0x00, 0x0e, 0x6f, 0x60, 0x7f, 0x3c, 0xeb, 0x9d, 0xde, 0x78, 0x84, 0xae, 0xed, 0x35, 0x69,
|
||||
0xd2, 0x6a, 0x5a, 0x00, 0x2a, 0x38, 0xcc, 0xe2, 0x53, 0x03, 0x36, 0xbb, 0x93, 0xad, 0x43, 0xfb,
|
||||
0x7e, 0x0e, 0x0c, 0x00, 0x31, 0xa3, 0x47, 0x53, 0xb2, 0xb4, 0x57, 0xe1, 0x94, 0xdc, 0xaf, 0xc5,
|
||||
0x17, 0x40, 0x6b, 0xc3, 0x06, 0x84, 0xd9, 0x0d, 0x92, 0xf1, 0xf1, 0x81, 0xe3, 0x09, 0x5c, 0x5e,
|
||||
0xbf, 0x31, 0xa2, 0x02, 0x15, 0x29, 0x01, 0x8d, 0x6d, 0x01, 0xed, 0x70, 0x1e, 0x64, 0x9d, 0xbd,
|
||||
0xf8, 0xe7, 0x6f, 0xde, 0xd3, 0x7e, 0x7e, 0x87, 0xae, 0x6b, 0x4a, 0x6c, 0xbc, 0xaf, 0x09, 0xa3,
|
||||
0xcb, 0x9e, 0x4d, 0x8d, 0x06, 0x34, 0xd4, 0x7f, 0x47, 0xa9, 0x85, 0x2e, 0xb3, 0x4b, 0xfa, 0x6e,
|
||||
0x93, 0x60, 0xa1, 0x51, 0x2d, 0xc8, 0xdf, 0x99, 0x64, 0xef, 0x3d, 0x59, 0xea, 0xa7, 0x64, 0xc1,
|
||||
0x76, 0x1f, 0x41, 0x99, 0xa4, 0x39, 0xe1, 0x8d, 0xc7, 0xb5, 0xcb, 0x96, 0x6e, 0x76, 0x0a, 0x0e,
|
||||
0xfa, 0x61, 0x38, 0x01, 0x5d, 0x24, 0x80, 0x8c, 0xf0, 0xd6, 0x67, 0xdc, 0xa3, 0x87, 0x83, 0x0d,
|
||||
0x9d, 0x01, 0xc5, 0xb6, 0xbc, 0x9f, 0xd0, 0x60, 0x83, 0xb9, 0x23, 0x40, 0xc5, 0x69, 0x31, 0x15,
|
||||
0x07, 0x55, 0x00, 0xdf, 0xbb, 0x17, 0x33, 0x47, 0x42, 0x37, 0x7f, 0x73, 0xab, 0xd6, 0xcd, 0xd2,
|
||||
0x77, 0x47, 0xf5, 0x6c, 0xdc, 0x4c, 0x65, 0xaa, 0xf4, 0xd2, 0xc8, 0xf1, 0x94, 0x6a, 0x9c, 0x82,
|
||||
0xa5, 0xa2, 0x1c, 0x0c, 0x36, 0xac, 0xf6, 0xb2, 0x85, 0x86, 0x7e, 0xfa, 0x2f, 0x8d, 0xc0, 0xca,
|
||||
0x25, 0xe9, 0x81, 0xe4, 0x34, 0x5d, 0xd7, 0xd6, 0x40, 0xad, 0x22, 0x49, 0x0e, 0x2c, 0x00, 0x8e,
|
||||
0x07, 0x2d, 0x54, 0xf2, 0x93, 0xa8, 0x47, 0x8c, 0x5d, 0x71, 0x52, 0x03, 0xb2, 0x13, 0xcc, 0x06,
|
||||
0xb3, 0xd9, 0x69, 0x4a, 0xc6, 0xad, 0x27, 0xcd, 0xa5, 0xc1, 0x0a, 0xcb, 0xfc, 0x7b, 0x51, 0x64,
|
||||
0xfa, 0x52, 0xce, 0xf7, 0x72, 0xfd, 0x5e, 0xff, 0x62, 0xc0, 0xd0, 0xf5, 0xfb, 0x74, 0x5c, 0xff,
|
||||
0x14, 0x42, 0xb7, 0x2f, 0xb3, 0x14, 0xfe, 0x37, 0xf0, 0x75, 0xf6, 0x1e, 0x3a, 0xd4, 0x1d, 0x36,
|
||||
0x1d, 0xd5, 0x88, 0x99, 0x1c, 0x18, 0x44, 0xb8, 0x12, 0xe4, 0xd1, 0x70, 0x3c, 0x6f, 0x6e, 0x04,
|
||||
0xe0, 0x26, 0xd8, 0x41, 0x54, 0x22, 0x33, 0x45, 0x28, 0x48, 0xf4, 0xff, 0x26, 0x8d, 0xb0, 0x57,
|
||||
0xd4, 0xbb, 0xf7, 0x25, 0x44, 0xaa, 0xe1, 0xb0, 0x14, 0x1a, 0xa8, 0x9e, 0x66, 0x47, 0xfc, 0xfe,
|
||||
0x6e, 0x9b, 0xa1, 0x00, 0x10, 0x06, 0x3a, 0xc9, 0xc5, 0xdf, 0x1b, 0x18, 0xde, 0x4e, 0x5d, 0x7a,
|
||||
0x69, 0xfd, 0x4d, 0x5d, 0x7a, 0xda, 0x85, 0xa3, 0xce, 0xe7, 0x0f, 0xa5, 0xeb, 0xba, 0x68, 0x13,
|
||||
0xef, 0xfc, 0x19, 0x6e, 0x0a, 0x07, 0xc0, 0x70, 0x1f, 0xe1, 0x3f, 0x04, 0x06, 0x64, 0x18, 0x39,
|
||||
0xc5, 0xb6, 0x2b, 0xfa, 0xe4, 0x48, 0x4d, 0x33, 0xeb, 0x1f, 0xf3, 0x48, 0xf6, 0xc2, 0xfc, 0xcd,
|
||||
0xd7, 0xc1, 0x96, 0x73, 0x43, 0x50, 0x25, 0x55, 0x0d, 0x83, 0x14, 0x92, 0x9b, 0xea, 0xbe, 0xea,
|
||||
0x32, 0x18, 0x78, 0xef, 0x56, 0x5e, 0xc4, 0x51, 0x88, 0xfb, 0x38, 0x2c, 0x12, 0x25, 0x7c, 0x5b,
|
||||
0x6e, 0x38, 0x1e, 0x05, 0x0f, 0xfc, 0x51, 0xaf, 0x80, 0x36, 0x26, 0x34, 0x94, 0x83, 0x21, 0x9c,
|
||||
0x5a, 0x61, 0x3a, 0xdb, 0x8d, 0xa7, 0x5f, 0x1e, 0x5e, 0xf8, 0x20, 0x9c, 0x8f, 0xe1, 0x2b, 0x9c,
|
||||
0x47, 0x71, 0xe6, 0x57, 0x43, 0xd4, 0x01, 0x43, 0x69, 0x84, 0x4e, 0xfe, 0x01, 0x19, 0x81, 0x7d,
|
||||
0x2b, 0xdb, 0x44, 0x7a, 0x59, 0xf8, 0x4a, 0x01, 0x5e, 0xd3, 0x10, 0xd6, 0x09, 0xbe, 0x6d, 0xbc,
|
||||
0xb2, 0x81, 0x9e, 0x72, 0xff, 0x96, 0xd2, 0x83, 0x58, 0x09, 0x34, 0x2c, 0x51, 0xcb, 0x6c, 0x88,
|
||||
0x6c, 0xc3, 0x70, 0x7b, 0x9b, 0xac, 0x74, 0xd4, 0x9b, 0xd4, 0x35, 0x9d, 0x24, 0xeb, 0x3a, 0xd9,
|
||||
0x9e, 0x86, 0xfb, 0xe8, 0xa9, 0xa8, 0xe1, 0x06, 0x23, 0x6a, 0x2a, 0x68, 0x52, 0x0d, 0xca, 0x23,
|
||||
0x1a, 0x34, 0x88, 0xc0, 0xd3, 0x1f, 0x3f, 0x37, 0xa2, 0xe0, 0xa6, 0x8b, 0x6f, 0xa9, 0x68, 0x03,
|
||||
0x21, 0x35, 0x75, 0x11, 0x37, 0xf5, 0x43, 0x17, 0xbe, 0xf2, 0xfe, 0x4e, 0xdd, 0x4a, 0x2e, 0xbb,
|
||||
0xc7, 0x65, 0x73, 0xfe, 0xf2, 0x6a, 0x12, 0xde, 0xeb, 0x33, 0xbb, 0x58, 0x2b, 0x7e, 0x3a, 0x88,
|
||||
0xed, 0x42, 0xc4, 0x8f, 0x08, 0xb1, 0x0a, 0x78, 0x3d, 0x55, 0xbc, 0xbc, 0xa2, 0xb8, 0x6b, 0x0b,
|
||||
0xbf, 0xac, 0x85, 0x4e, 0x4b, 0xd3, 0x52, 0x35, 0xaf, 0x52, 0x78, 0x6b, 0x26, 0xa6, 0x0e, 0xfa,
|
||||
0x59, 0x5d, 0x3a, 0x00, 0xd0, 0xba, 0x3d, 0x86, 0x1c, 0x3f, 0x6c, 0x63, 0x7c, 0x7c, 0xa6, 0x8a,
|
||||
0x11, 0x44, 0x84, 0x18, 0x28, 0x15, 0x44, 0x7b, 0xe7, 0xc4, 0x46, 0x12, 0x8a, 0x35, 0x19, 0x5a,
|
||||
0x9d, 0xb0, 0xc4, 0x4e, 0x10, 0xdc, 0x54, 0x33, 0x7e, 0x80, 0xc2, 0x8e, 0x0f, 0x7e, 0x04, 0xce,
|
||||
0x0f, 0xee, 0xff, 0x42, 0xdd, 0x04, 0x18, 0xac, 0x2c, 0x9f, 0x8f, 0xa9, 0xf0, 0x54, 0x6f, 0x5b,
|
||||
0x53, 0x9a, 0x26, 0x1b, 0x2c, 0x9a, 0x43, 0x14, 0xe6, 0xc6, 0x68, 0x48, 0x6c, 0x4d, 0xa9, 0x7d,
|
||||
0x11, 0x17, 0x7c, 0x2d, 0xd8, 0x29, 0x5d, 0xf6, 0xc6, 0x0f, 0x5a, 0x9e, 0x4f, 0x9c, 0x3f, 0x7f,
|
||||
0x92, 0x49, 0x8c, 0x74, 0x23, 0x93, 0x44, 0x10, 0x0c, 0x07, 0x33, 0xe5, 0x50, 0xfb, 0x99, 0x9a,
|
||||
0xd3, 0xcc, 0x88, 0x5e, 0xb9, 0xc9, 0xd9, 0x74, 0x5c, 0x6a, 0x4e, 0x80, 0x69, 0x3d, 0x71, 0xf0,
|
||||
0x90, 0x18, 0xba, 0xa7, 0x1d, 0x07, 0x83, 0xe5, 0xfd, 0x80, 0x7c, 0x37, 0x1c, 0xa6, 0x42, 0xa8,
|
||||
0x2a, 0xcd, 0x33, 0x1d, 0x96, 0xfa, 0xd7, 0xf9, 0x79, 0x24, 0x4e, 0x30, 0xb4, 0x61, 0xcc, 0x0b,
|
||||
0xa1, 0x1f, 0xcb, 0x28, 0x3c, 0xef, 0x8c, 0x6f, 0x10, 0x0e, 0xbc, 0x6a, 0x69, 0xff, 0xb5, 0x48,
|
||||
0x47, 0x9d, 0xe7, 0x3c, 0xd5, 0x17, 0xf4, 0x7b, 0xb0, 0xc8, 0xeb, 0xe6, 0x8f, 0xc0, 0x3a, 0x6f,
|
||||
0x98, 0x42, 0x68, 0x13, 0xcf, 0x3b, 0xd7, 0xbc, 0xbd, 0x1d, 0xd9, 0xf0, 0x02, 0x69, 0x0f, 0x36,
|
||||
0x65, 0x60, 0xcf, 0x63, 0x64, 0x21, 0x0d, 0x2c, 0x4c, 0xe2, 0x29, 0x02, 0xf8, 0xfe, 0xe1, 0x7d,
|
||||
0xd7, 0x5c, 0xe0, 0xb0, 0xc2, 0x04, 0x9d, 0xd7, 0x34, 0xb8, 0x90, 0x22, 0xe8, 0x2f, 0x07, 0x65,
|
||||
0xfe, 0xc5, 0x80, 0x44, 0xaf, 0x41, 0xd3, 0x22, 0x06, 0x6d, 0x6f, 0x82, 0xde, 0x64, 0x8c, 0x52,
|
||||
0x9a, 0x7f, 0x1b, 0x7f, 0xab, 0xb9, 0xf6, 0x08, 0x54, 0x44, 0x5c, 0x31, 0xaf, 0xce, 0x19, 0xe9,
|
||||
0x4b, 0x3a, 0xc6, 0xe6, 0xaf, 0xe0, 0x33, 0x1c, 0xeb, 0xb0, 0x1c, 0x9d, 0x1f, 0x5a, 0x8a, 0x33,
|
||||
0x49, 0x3c, 0x6b, 0x04, 0x6d, 0x00, 0x3c, 0x02, 0x4e, 0xd0, 0x41, 0x1f, 0xe7, 0x39, 0x4c, 0x4f,
|
||||
0x80, 0x3c, 0xd9, 0xd6, 0x04, 0x43, 0x6f, 0xa2, 0xab, 0x4f, 0xa7, 0x9e, 0x7c, 0x7d, 0x7f, 0x64,
|
||||
0xb3, 0x5f, 0xea, 0xc8, 0x86, 0x9f, 0x37, 0x92, 0xf7, 0xd3, 0x65, 0x45, 0xdb, 0x92, 0x4a, 0x58,
|
||||
0x02, 0xbe, 0x78, 0x9c, 0x6e, 0x5d, 0x76, 0x61, 0x10, 0x90, 0x34, 0x52, 0x2d, 0x83, 0x0e, 0x28,
|
||||
0x76, 0x1c, 0x1c, 0xf4, 0x0b, 0xfd, 0xbb, 0xf8, 0x03, 0x77, 0x88, 0x6a, 0xf8, 0x8c, 0x47, 0xbb,
|
||||
0x41, 0x0b, 0x09, 0x5e, 0xdb, 0x93, 0xc9, 0x8a, 0xde, 0x9c, 0x8b, 0x34, 0x74, 0x7a, 0xcd, 0xf6,
|
||||
0x47, 0x4c, 0xb4, 0xaf, 0xee, 0x7b, 0x30, 0x23, 0x91, 0x6e, 0x21, 0xe2, 0xbe, 0x05, 0xb2, 0x01,
|
||||
0x02, 0x52, 0xca, 0x04, 0x1d, 0x8b, 0x49, 0x00, 0x27, 0x95, 0x5a, 0xf8, 0xda, 0x96, 0xb7, 0xb3,
|
||||
0x81, 0xc8, 0x32, 0xfc, 0x18, 0xae, 0x90, 0x83, 0xe9, 0xc2, 0x4c, 0xf8, 0x4d, 0x7b, 0x3e, 0x25,
|
||||
0xba, 0x88, 0x97, 0x62, 0xb8, 0x1e, 0x98, 0x24, 0x0d, 0x03, 0x8f, 0xaa, 0x7a, 0x7b, 0x98, 0x6b,
|
||||
0x42, 0xc1, 0x43, 0xd6, 0x9b, 0x1f, 0x20, 0x0f, 0x76, 0x0f, 0xd9, 0x45, 0x5b, 0x6e, 0x67, 0xc7,
|
||||
0xf3, 0x5f, 0x0a, 0xb6, 0xa0, 0x09, 0x4a, 0x5d, 0x62, 0xc0, 0x3c, 0x4b, 0xc8, 0x5e, 0xfe, 0x02,
|
||||
0x2b, 0x48, 0x5b, 0xfe, 0x02, 0x4b, 0x8d, 0xf1, 0x73, 0x3c, 0x0b, 0xb1, 0x4c, 0xc6, 0xb8, 0x77,
|
||||
0x7c, 0x78, 0x2f, 0xc8, 0x9c, 0x4b, 0x49, 0x29, 0x4e, 0xe0, 0x52, 0x36, 0xfd, 0xd4, 0x70, 0x5f,
|
||||
0x6a, 0x09, 0x8b, 0x5d, 0x00, 0x00, 0x10, 0x96, 0xaa, 0xb3, 0x82, 0x21, 0xb4, 0xcb, 0x70, 0x74,
|
||||
0x3c, 0xeb, 0xcf, 0xa3, 0x9c, 0x0e, 0x11, 0xd3, 0x7d, 0x40, 0x4a, 0x5e, 0x7d, 0x2c, 0xf4, 0x4b,
|
||||
0x30, 0x70, 0x4f, 0x7a, 0x7b, 0x9b, 0x7e, 0xed, 0x52, 0xc9, 0x1a, 0xaa, 0xd3, 0x0c, 0xea, 0xd0,
|
||||
0x7c, 0x5e, 0x58, 0x15, 0x79, 0x41, 0xbe, 0x33, 0x15, 0xd6, 0x0b, 0xbc, 0xa0, 0x84, 0x36, 0x15,
|
||||
0x48, 0x9a, 0x86, 0xda, 0x6e, 0x6f, 0x8b, 0x60, 0x44, 0xb0, 0x67, 0x86, 0x5a, 0x15, 0x1d, 0x26,
|
||||
0xbe, 0xd3, 0xdc, 0xcf, 0x60, 0xde, 0x71, 0xb1, 0x46, 0x2f, 0xc2, 0xf5, 0x5d, 0x89, 0x43, 0xf4,
|
||||
0xcc, 0x27, 0x7a, 0xc1, 0x56, 0xe1, 0x17, 0x8e, 0xd1, 0x8d, 0xe7, 0x4b, 0xcf, 0x62, 0x69, 0xdc,
|
||||
0x0c, 0x27, 0x86, 0x39, 0xea, 0x0f, 0x12, 0xf4, 0xcd, 0x45, 0x18, 0x43, 0xe8, 0x48, 0x63, 0x92,
|
||||
0x60, 0x71, 0x76, 0xb1, 0x2a, 0xb9, 0x5a, 0x70, 0x25, 0x1f, 0x6d, 0xc1, 0xf3, 0xcb, 0x46, 0xca,
|
||||
0xe4, 0xb1, 0xcc, 0xb9, 0xe6, 0x38, 0xf8, 0x9e, 0x87, 0xe3, 0x6b, 0xea, 0xb9, 0x8c, 0x15, 0xa9,
|
||||
0x62, 0x91, 0x66, 0xa8, 0x67, 0x09, 0x3a, 0x8c, 0x04, 0x58, 0x48, 0x09, 0x53, 0x81, 0x85, 0x86,
|
||||
0x2e, 0xe1, 0x45, 0x88, 0x7a, 0x29, 0xb3, 0xa0, 0xfb, 0x90, 0xb4, 0x60, 0x8a, 0xab, 0xc1, 0x0f,
|
||||
0x95, 0xc6, 0x09, 0x85, 0xaf, 0x6e, 0x30, 0x40, 0x06, 0xe8, 0xe1, 0x9b, 0x1d, 0x8c, 0x74, 0x6f,
|
||||
0x1a, 0x0e, 0x19, 0x42, 0xfc, 0x85, 0x58, 0x51, 0xb6, 0x1e, 0x62, 0x3b, 0xcb, 0x48, 0xff, 0x50,
|
||||
0x84, 0xe4, 0x5f, 0xe7, 0x9e, 0x5f, 0xc8, 0x9f, 0x3f, 0x41, 0x13, 0xfc, 0x3c, 0x24, 0x60, 0x40,
|
||||
0x04, 0x86, 0xc5, 0x4d, 0x88, 0x9d, 0x46, 0xe3, 0xaf, 0x84, 0x3c, 0xc9, 0xf3, 0xbe, 0x73, 0x8c,
|
||||
0x72, 0x62, 0xb3, 0xf1, 0x91, 0xc3, 0xd9, 0xd1, 0x70, 0x83, 0xe2, 0xe3, 0xd0, 0x73, 0xd0, 0x41,
|
||||
0xc8, 0x0f, 0xce, 0x02, 0xa1, 0xca, 0x31, 0xaf, 0x34, 0x9e, 0x5b, 0x4f, 0x7e, 0x81, 0x7a, 0xc8,
|
||||
0xc9, 0xa0, 0x87, 0x60, 0x6c, 0x35, 0x98, 0xc7, 0x19, 0xb7, 0xd1, 0xc3, 0x01, 0xd8, 0x28, 0x0a,
|
||||
0xd3, 0x86, 0x39, 0x49, 0xf2, 0x18, 0x68, 0x41, 0x0d, 0x81, 0x58, 0xec, 0x2c, 0xe1, 0x7d, 0xce,
|
||||
0x85, 0x11, 0x15, 0xf4, 0xf4, 0x1b, 0xf0, 0x6f, 0x58, 0x6e, 0x3f, 0x7c, 0xa1, 0x00, 0x38, 0xf8,
|
||||
0x36, 0xe7, 0xc6, 0x1c, 0x93, 0x0b, 0xdf, 0xf8, 0x1a, 0x86, 0xa0, 0x62, 0xcb, 0x11, 0xe9, 0x12,
|
||||
0x9a, 0x0b, 0x21, 0x87, 0x2e, 0x10, 0xe6, 0x74, 0x37, 0x03, 0x7f, 0xba, 0x21, 0xe0, 0x29, 0x36,
|
||||
0x82, 0x17, 0x52, 0x60, 0x0c, 0x3c, 0xda, 0xf4, 0x3b, 0xb8, 0x31, 0x01, 0x63, 0xc2, 0xe3, 0x51,
|
||||
0x1a, 0xd3, 0x1d, 0x28, 0x66, 0xea, 0x78, 0xcd, 0xaa, 0x8d, 0x1c, 0xfb, 0xf6, 0xa6, 0xbd, 0x53,
|
||||
0xe1, 0x16, 0x02, 0xbe, 0xa5, 0xa4, 0xe6, 0xfe, 0xcd, 0x20, 0xb8, 0xe4, 0xff, 0xb2, 0x2a, 0xd1,
|
||||
0xe7, 0xf1, 0x66, 0x81, 0x1f, 0xa8, 0x87, 0x2b, 0x0a, 0xa8, 0x41, 0x74, 0xc6, 0x34, 0xaa, 0x32,
|
||||
0x2c, 0x55, 0x0a, 0x96, 0xf2, 0xb1, 0x5e, 0xe1, 0x57, 0xe0, 0xf9, 0x90, 0x4e, 0x41, 0x3c, 0x9d,
|
||||
0xc2, 0xfb, 0xae, 0x91, 0xa8, 0xf0, 0xe6, 0x6b, 0xe1, 0x65, 0x89, 0xb7, 0x35, 0xc0, 0xd2, 0x71,
|
||||
0x2c, 0x30, 0x1c, 0x08, 0x3b, 0x72, 0xf0, 0xf7, 0xb6, 0x1a, 0x56, 0x8d, 0x7b, 0xef, 0x15, 0x29,
|
||||
0x91, 0x23, 0x38, 0x73, 0xd3, 0xa8, 0xb1, 0x1b, 0x60, 0xf0, 0x33, 0xac, 0x35, 0x84, 0xaf, 0x47,
|
||||
0x9a, 0x7b, 0x57, 0xc2, 0x80, 0x29, 0x1a, 0xbe, 0x00, 0x47, 0x48, 0xfa, 0x97, 0xc6, 0xb0, 0x6f,
|
||||
0x3e, 0x76, 0x45, 0x86, 0x77, 0xf4, 0x14, 0xef, 0xd5, 0xf2, 0xa7, 0x21, 0xb8, 0xb7, 0xbc, 0xc1,
|
||||
0xaa, 0xfc, 0xe0, 0x42, 0xf7, 0x97, 0xe3, 0xeb, 0x7f, 0x80, 0xe0, 0x42, 0x29, 0xf8, 0xae, 0x2d,
|
||||
0xde, 0x33, 0x2b, 0xfc, 0xd7, 0xb0, 0x44, 0x6d, 0x59, 0x06, 0x64, 0x69, 0xcd, 0xc6, 0x07, 0xe0,
|
||||
0xef, 0x32, 0xf9, 0xd3, 0x15, 0x1e, 0x16, 0xf6, 0xdf, 0xbb, 0xea, 0xc6, 0x7b, 0xe0, 0xd9, 0xa1,
|
||||
0x2f, 0x7f, 0x7c, 0x2c, 0xd0, 0x8b, 0xee, 0x3c, 0xad, 0x1b, 0x00, 0x2d, 0xf6, 0x97, 0x47, 0x70,
|
||||
0xe1, 0xc1, 0x0b, 0x8f, 0xc2, 0x83, 0xb4, 0x76, 0x18, 0xec, 0x05, 0x28, 0x7e, 0xb0, 0xa5, 0x57,
|
||||
0x04, 0xd8, 0x50, 0x08, 0x64, 0xab, 0x13, 0x86, 0x57, 0xdf, 0x98, 0x83, 0x9c, 0x0a, 0x57, 0x34,
|
||||
0x83, 0xc1, 0x3a, 0xe5, 0x5d, 0x06, 0x1f, 0x37, 0xd7, 0x48, 0xdc, 0x58, 0xa3, 0x85, 0xc7, 0x6b,
|
||||
0x4d, 0xbb, 0xf5, 0x65, 0xfd, 0x5b, 0xc5, 0x3f, 0x2a, 0xed, 0xef, 0x59, 0xb0, 0x5f, 0xfe, 0xc0,
|
||||
0xd8, 0x15, 0xc1, 0xb1, 0xba, 0xf5, 0xcd, 0x59, 0x8d, 0xb8, 0x75, 0x19, 0xc5, 0x60, 0x28, 0x38,
|
||||
0xc6, 0xf7, 0xb5, 0x90, 0x85, 0xe2, 0x40, 0xd6, 0x6f, 0x3e, 0xed, 0x85, 0x69, 0xd4, 0x97, 0x39,
|
||||
0x66, 0xf6, 0xf7, 0x1a, 0xf8, 0xab, 0xb6, 0xae, 0x57, 0x3a, 0xf7, 0xfb, 0xf3, 0xbd, 0xf1, 0x42,
|
||||
0x45, 0x48, 0x6c, 0x1d, 0x82, 0xb2, 0x59, 0xa3, 0x7b, 0x44, 0x28, 0x6c, 0x6b, 0xcb, 0x6d, 0x7e,
|
||||
0x82, 0xe2, 0x78, 0xd9, 0xc7, 0xc5, 0x22, 0x7a, 0x2f, 0x45, 0xe4, 0x62, 0xcc, 0xf0, 0x79, 0x88,
|
||||
0xf0, 0x55, 0x89, 0x5e, 0xe7, 0xea, 0xcb, 0xee, 0x2d, 0x91, 0x1d, 0xa4, 0xad, 0x9d, 0xc3, 0xd0,
|
||||
0xcd, 0x98, 0xf1, 0x11, 0x7a, 0x58, 0x58, 0x03, 0x69, 0x7b, 0x7b, 0x5d, 0x0f, 0xe8, 0x1b, 0xd4,
|
||||
0x40, 0x33, 0x33, 0xef, 0x34, 0x32, 0x49, 0xce, 0x65, 0x32, 0x90, 0xc6, 0x9a, 0x69, 0xd7, 0x38,
|
||||
0x67, 0x68, 0x9a, 0x18, 0xb4, 0x46, 0x01, 0xd5, 0xfc, 0x0b, 0x73, 0x63, 0xe3, 0x0c, 0x5f, 0x32,
|
||||
0x1a, 0x1e, 0xe6, 0x6a, 0x07, 0xff, 0xc6, 0x28, 0xd7, 0xe0, 0xea, 0xf3, 0xc3, 0x8c, 0xf6, 0xe0,
|
||||
0x3f, 0x18, 0xe5, 0x32, 0x08, 0x67, 0x33, 0x6d, 0x00, 0xb7, 0xfe, 0xe2, 0xc7, 0xf6, 0x90, 0x5f,
|
||||
0x8b, 0xd5, 0xea, 0x18, 0x2c, 0xb3, 0xb9, 0x3a, 0x98, 0x66, 0xb5, 0x40, 0x6d, 0x0f, 0xd3, 0x18,
|
||||
0x0d, 0x25, 0x09, 0x9c, 0xc2, 0x51, 0xa8, 0x6c, 0xdb, 0x14, 0xbd, 0x6e, 0xfc, 0x3c, 0x36, 0x13,
|
||||
0xc2, 0x6a, 0x3b, 0xbd, 0x69, 0x2d, 0x74, 0x4a, 0x2d, 0x0e, 0xcb, 0xbf, 0x3b, 0xd2, 0xd7, 0x07,
|
||||
0xe3, 0x14, 0xbc, 0x06, 0x20, 0x4c, 0x4e, 0x8d, 0xc4, 0xe1, 0xd0, 0xf7, 0x1d, 0x45, 0x47, 0xb9,
|
||||
0x32, 0xb6, 0x55, 0x3b, 0x96, 0x8f, 0xe3, 0x8b, 0x5d, 0x76, 0xbc, 0x06, 0x5b, 0xce, 0x74, 0x2d,
|
||||
0xac, 0x88, 0xd9, 0xb1, 0x32, 0xb8, 0xd0, 0x55, 0xbf, 0xeb, 0x26, 0x60, 0x3d, 0xc8, 0x15, 0x5b,
|
||||
0x65, 0x05, 0x2c, 0x5e, 0x08, 0x17, 0x9f, 0x52, 0xbc, 0x4f, 0x8c, 0xc4, 0x71, 0xcb, 0x22, 0xb1,
|
||||
0x03, 0x3e, 0x37, 0x47, 0x3b, 0x7a, 0x51, 0x8f, 0x9c, 0x29, 0xc3, 0xfd, 0x43, 0x30, 0xdf, 0xa9,
|
||||
0x3e, 0x1a, 0xd2, 0x3a, 0xfc, 0x77, 0xc8, 0x59, 0xfe, 0x41, 0x36, 0xff, 0x84, 0x9b, 0x17, 0x9f,
|
||||
0x48, 0x43, 0x13, 0x23, 0x73, 0xe3, 0x46, 0xda, 0x0e, 0x6c, 0x3f, 0x0c, 0x39, 0xc2, 0xab, 0xde,
|
||||
0x48, 0x7d, 0xc9, 0x6b, 0x37, 0xdb, 0xba, 0x2b, 0x3b, 0x95, 0xb8, 0x41, 0xb9, 0xc6, 0xfd, 0x4e,
|
||||
0xdf, 0x89, 0xce, 0xf1, 0xf5, 0x58, 0x36, 0x75, 0x85, 0x7b, 0x79, 0x02, 0x22, 0x80, 0x4a, 0xb2,
|
||||
0xa4, 0xbb, 0xd1, 0xbc, 0x8d, 0x98, 0x90, 0x2b, 0x26, 0x29, 0xf9, 0xf5, 0xa1, 0x17, 0x92, 0x5a,
|
||||
0x3b, 0xa8, 0xe3, 0x0d, 0xa0, 0xef, 0xcb, 0x18, 0x81, 0x96, 0xb7, 0x3f, 0x45, 0xdf, 0xfd, 0xd2,
|
||||
0xc0, 0x0d, 0x2a, 0x20, 0xf0, 0xf9, 0xa0, 0x26, 0x0a, 0x0e, 0xfc, 0x8d, 0xf1, 0x8d, 0xa1, 0xa0,
|
||||
0xc4, 0x45, 0x8e, 0x66, 0x06, 0xa1, 0xce, 0xde, 0x26, 0x68, 0xaa, 0x28, 0xf2, 0x75, 0xd5, 0x9c,
|
||||
0x93, 0xf4, 0x20, 0x5c, 0x2c, 0x5f, 0x8a, 0x95, 0xe3, 0x17, 0xd0, 0x5b, 0x9d, 0x24, 0x69, 0xa2,
|
||||
0x24, 0x63, 0x9c, 0xf3, 0x80, 0xde, 0x53, 0x36, 0xc0, 0xed, 0x2b, 0xbe, 0xce, 0x3a, 0x07, 0x89,
|
||||
0x8b, 0x25, 0x42, 0x08, 0xc5, 0x8e, 0xff, 0x46, 0x83, 0x95, 0x3d, 0x97, 0x60, 0x74, 0x1e, 0x5f,
|
||||
0x65, 0x67, 0xc9, 0xd9, 0x2d, 0x5c, 0x20, 0xc3, 0xeb, 0x21, 0x9c, 0x5d, 0x87, 0x3c, 0x42, 0x76,
|
||||
0x18, 0x99, 0x87, 0xa1, 0x8c, 0x7e, 0xc4, 0x8b, 0x14, 0xf6, 0x21, 0xd5, 0xc3, 0xa0, 0x07, 0x64,
|
||||
0xda, 0xa5, 0x76, 0x8e, 0xe7, 0x00, 0x87, 0x27, 0x3f, 0xbc, 0xdc, 0x8d, 0x78, 0x09, 0xea, 0x2e,
|
||||
0x46, 0x88, 0xe3, 0x36, 0x52, 0xd7, 0x2b, 0x55, 0x8a, 0x9c, 0x72, 0xf6, 0x5f, 0x2a, 0x83, 0xe7,
|
||||
0x9c, 0x59, 0x53, 0xe1, 0x66, 0x68, 0x8a, 0xe7, 0x3d, 0x86, 0x29, 0x89, 0xf4, 0x60, 0x04, 0xc2,
|
||||
0x36, 0x92, 0xe2, 0x48, 0xee, 0xc8, 0xa6, 0x96, 0x8e, 0x37, 0x6b, 0x60, 0xdc, 0x69, 0xb6, 0x99,
|
||||
0x6e, 0xb1, 0xf2, 0xce, 0xf8, 0xc6, 0xc4, 0x77, 0x61, 0x38, 0xb8, 0xb7, 0xed, 0xb9, 0x4a, 0x8c,
|
||||
0x34, 0x73, 0x93, 0x18, 0xe9, 0xbe, 0xf7, 0x2d, 0xe3, 0x6a, 0x81, 0xbe, 0x18, 0x64, 0xea, 0xef,
|
||||
0x91, 0x75, 0x35, 0x59, 0xa7, 0x23, 0x5d, 0x7f, 0x43, 0xc9, 0x86, 0x5d, 0x46, 0xbc, 0x9d, 0x28,
|
||||
0x21, 0xfe, 0x53, 0xa0, 0x3b, 0xb6, 0xfc, 0xef, 0x30, 0x5a, 0x4f, 0x03, 0xb4, 0x86, 0xbb, 0xff,
|
||||
0x42, 0xf4, 0xb1, 0x66, 0x44, 0x99, 0x82, 0x4f, 0x02, 0x1e, 0x53, 0x40, 0xb3, 0x29, 0x18, 0x11,
|
||||
0x7a, 0xcc, 0x5c, 0x06, 0x67, 0x57, 0xfc, 0x11, 0x41, 0x04, 0xc1, 0x83, 0x1b, 0xb5, 0x58, 0x52,
|
||||
0x8b, 0xbd, 0x5e, 0x23, 0xc9, 0x01, 0x26, 0x60, 0xac, 0xf0, 0x17, 0x26, 0x27, 0xef, 0xd5, 0x3d,
|
||||
0xf3, 0x0f, 0x2b, 0xad, 0xdc, 0x72, 0xb7, 0x9c, 0x42, 0x9f, 0x05, 0x46, 0x80, 0x9e, 0xae, 0x02,
|
||||
0x4d, 0xce, 0xd9, 0x58, 0x6b, 0x9b, 0x60, 0x05, 0x08, 0x5a, 0xc4, 0x80, 0xd1, 0x77, 0x99, 0xcc,
|
||||
0x97, 0x98, 0xf1, 0x82, 0x00, 0xd6, 0x11, 0x39, 0x86, 0x04, 0xac, 0xa3, 0xf1, 0x58, 0xfa, 0xde,
|
||||
0xb2, 0xa9, 0xdf, 0x1b, 0x56, 0x5a, 0x90, 0x18, 0x51, 0x42, 0xe3, 0x8c, 0x31, 0x0b, 0xac, 0x63,
|
||||
0x7b, 0x3b, 0x7a, 0xcf, 0x43, 0xa3, 0xe1, 0xb2, 0x55, 0xb0, 0x9e, 0xa3, 0x6d, 0x6f, 0x7f, 0x88,
|
||||
0x6d, 0x1a, 0xf1, 0xf0, 0x2e, 0x90, 0xf8, 0x8a, 0x67, 0xcb, 0x4c, 0xc8, 0x7d, 0xc1, 0xee, 0x24,
|
||||
0xc3, 0x4b, 0xb1, 0xb1, 0x4e, 0x82, 0x05, 0x8c, 0x34, 0x08, 0x47, 0x89, 0xc1, 0x13, 0x60, 0xe5,
|
||||
0x51, 0x11, 0x08, 0x29, 0xb5, 0x9f, 0x3f, 0x4d, 0x60, 0x1d, 0x26, 0x70, 0x09, 0x33, 0x2d, 0x0b,
|
||||
0x61, 0xe0, 0xbf, 0x84, 0x9f, 0xf8, 0x3f, 0x68, 0x35, 0xf5, 0x2c, 0x6d, 0x3a, 0x66, 0x11, 0xac,
|
||||
0x37, 0x54, 0xc0, 0x5c, 0x47, 0x4f, 0x48, 0x3f, 0xdd, 0x9b, 0x82, 0x82, 0x22, 0x00, 0x0e, 0x11,
|
||||
0xd8, 0x8f, 0x68, 0x93, 0x00, 0xf7, 0xbd, 0x56, 0xa1, 0xc9, 0x5a, 0x8e, 0x55, 0xa4, 0x2e, 0x96,
|
||||
0x58, 0xd5, 0xf7, 0x6a, 0xa3, 0x0e, 0x16, 0x11, 0x8c, 0x4e, 0x4c, 0x51, 0xf1, 0x5e, 0xb6, 0xb2,
|
||||
0x56, 0x27, 0x53, 0x14, 0x37, 0xae, 0x2c, 0x21, 0x02, 0x07, 0x4a, 0x58, 0xba, 0xe0, 0x36, 0xc0,
|
||||
0xe1, 0x11, 0xee, 0xf8, 0xb0, 0x7d, 0x1c, 0xfc, 0x9d, 0x0c, 0x6e, 0xa4, 0xf1, 0x2e, 0xbc, 0xc4,
|
||||
0xcb, 0x39, 0x97, 0xd7, 0xf9, 0x66, 0x30, 0x2e, 0x37, 0x33, 0xd1, 0xf0, 0x80, 0xca, 0xc2, 0x53,
|
||||
0x4c, 0x6c, 0x98, 0x22, 0x76, 0xec, 0xcf, 0xb7, 0x84, 0x93, 0xc9, 0x81, 0x92, 0x6a, 0x64, 0x2b,
|
||||
0xfc, 0x6e, 0x9e, 0x9e, 0xac, 0xc7, 0x66, 0x79, 0x61, 0xa0, 0xec, 0xe6, 0xfc, 0x9f, 0x79, 0xb1,
|
||||
0x04, 0x18, 0x2d, 0x14, 0x1a, 0x8d, 0x81, 0x42, 0x53, 0x52, 0x8d, 0x3c, 0xa6, 0x88, 0x95, 0x50,
|
||||
0x0a, 0x00, 0x60, 0x9c, 0x89, 0x5d, 0x38, 0xec, 0x4f, 0x0f, 0x9d, 0xfd, 0xc6, 0xef, 0x81, 0x83,
|
||||
0x97, 0x2f, 0x0d, 0x94, 0x05, 0xde, 0x64, 0x85, 0xbc, 0xac, 0x08, 0xe6, 0xf0, 0x6f, 0x7e, 0x21,
|
||||
0x54, 0xb3, 0x22, 0x23, 0x17, 0xc5, 0xe8, 0xd9, 0x11, 0xbf, 0xe1, 0xf2, 0x16, 0x64, 0xba, 0x4f,
|
||||
0x81, 0xf9, 0x11, 0x95, 0x3f, 0xb8, 0x38, 0x39, 0x38, 0x9f, 0x4e, 0x22, 0x6d, 0x72, 0x5f, 0xf1,
|
||||
0x65, 0x6d, 0x02, 0x09, 0xed, 0xc8, 0x72, 0xf4, 0xc5, 0xa3, 0xf6, 0x30, 0xc1, 0x6e, 0x55, 0xe6,
|
||||
0xa8, 0xa7, 0x3e, 0xc9, 0x5a, 0x86, 0x75, 0xba, 0xe1, 0x5d, 0xa7, 0xb4, 0x21, 0x6e, 0xfd, 0x29,
|
||||
0xe2, 0xc8, 0xc9, 0xd1, 0x78, 0x0c, 0x18, 0xeb, 0x96, 0x27, 0xca, 0xde, 0x39, 0xe4, 0x2d, 0xe9,
|
||||
0x53, 0x16, 0x51, 0xe0, 0xf2, 0xae, 0x3d, 0x43, 0x30, 0xc9, 0xc8, 0xc6, 0x9b, 0xcb, 0x36, 0xff,
|
||||
0xc7, 0xb8, 0x61, 0x1d, 0x6c, 0x1d, 0xe1, 0xf1, 0x1f, 0xff, 0x40, 0x79, 0xa8, 0xd1, 0x06, 0x9e,
|
||||
0xc2, 0xa7, 0xc3, 0x62, 0xc7, 0x3a, 0xf9, 0x85, 0x77, 0xe1, 0x0f, 0x3f, 0x5f, 0x44, 0xca, 0xcd,
|
||||
0x17, 0x78, 0xc0, 0x27, 0x32, 0x0e, 0x51, 0xf0, 0x2e, 0x6e, 0xd9, 0x74, 0xf7, 0x22, 0xed, 0x69,
|
||||
0xfc, 0x5c, 0xff, 0xdc, 0xaa, 0x45, 0x2e, 0x1d, 0x86, 0x8e, 0xd5, 0xc2, 0xbd, 0x5c, 0x60, 0xbc,
|
||||
0xe2, 0xba, 0x83, 0xd9, 0x91, 0x6b, 0x2e, 0xa2, 0x08, 0xc5, 0x6d, 0xd6, 0x4f, 0x9f, 0xcb, 0x9e,
|
||||
0xfe, 0xb0, 0x50, 0x7c, 0x82, 0x7e, 0x1a, 0x0d, 0x0b, 0xfe, 0x0f, 0x5c, 0x99, 0x7f, 0xc3, 0x87,
|
||||
0x69, 0x02, 0xe6, 0x22, 0x08, 0x5e, 0xbd, 0x4f, 0x21, 0x8c, 0x25, 0x33, 0x6d, 0x01, 0x8c, 0xef,
|
||||
0x66, 0x7a, 0xf8, 0x23, 0x7e, 0x69, 0xca, 0x0a, 0x36, 0x52, 0x59, 0xbc, 0x2b, 0x56, 0x00, 0xbd,
|
||||
0xae, 0xe6, 0x26, 0xa3, 0x77, 0x38, 0xad, 0x9c, 0xed, 0x0d, 0x73, 0x1d, 0xfa, 0x46, 0x02, 0xdc,
|
||||
0xeb, 0x5b, 0x5e, 0x4b, 0xb0, 0x59, 0x1b, 0x09, 0x0c, 0x5d, 0x3c, 0x46, 0xe3, 0x05, 0x06, 0xc5,
|
||||
0x5d, 0x1d, 0x41, 0xd0, 0x3e, 0x2e, 0x40, 0x97, 0x5f, 0xbb, 0xe5, 0xbe, 0x8c, 0xcd, 0xd4, 0x30,
|
||||
0x96, 0x64, 0x79, 0xaf, 0x91, 0xb6, 0x3c, 0x2d, 0x64, 0xfe, 0xd4, 0xf0, 0x1e, 0x27, 0x67, 0x6d,
|
||||
0x24, 0x26, 0x0d, 0x16, 0xf3, 0xe2, 0x28, 0x6e, 0xa0, 0xb7, 0xa0, 0xf0, 0xdd, 0xe2, 0xab, 0xa3,
|
||||
0x5b, 0x12, 0x5e, 0xea, 0x52, 0x77, 0x62, 0xfd, 0x35, 0x82, 0xc8, 0x0c, 0xaf, 0xd3, 0xd1, 0xf2,
|
||||
0xfc, 0xee, 0x4e, 0x96, 0x3a, 0xbb, 0xd8, 0x76, 0xfe, 0x22, 0x7a, 0x71, 0x8b, 0xc1, 0x42, 0x9c,
|
||||
0xd6, 0x99, 0xfa, 0x75, 0x3f, 0xb8, 0x0c, 0x23, 0x43, 0x35, 0x73, 0xe4, 0x44, 0xb1, 0xe6, 0x2b,
|
||||
0x4c, 0xf4, 0x8c, 0x6f, 0x9a, 0xbe, 0x04, 0x22, 0x89, 0xd7, 0xd1, 0x21, 0x10, 0x9c, 0x1d, 0x7a,
|
||||
0xef, 0x4f, 0x12, 0xd5, 0x2c, 0xf6, 0xc4, 0x2e, 0x64, 0xe2, 0xc2, 0xa1, 0xdf, 0x23, 0xf6, 0xee,
|
||||
0x88, 0xa5, 0xde, 0xbd, 0x62, 0xad, 0xca, 0xfa, 0xc8, 0x4e, 0xae, 0xdd, 0xf0, 0x5a, 0xcd, 0x09,
|
||||
0x1b, 0x90, 0x2c, 0x77, 0xc1, 0xe2, 0x3d, 0xff, 0xab, 0xb5, 0xe6, 0x56, 0xd8, 0xe5, 0x5b, 0x76,
|
||||
0x79, 0xe1, 0xa2, 0x91, 0xa5, 0xd1, 0xa0, 0x13, 0x41, 0xa3, 0x7d, 0x69, 0x88, 0xc2, 0x54, 0x64,
|
||||
0x8e, 0x76, 0xe6, 0xc7, 0xe8, 0xd2, 0xeb, 0xb7, 0xd1, 0xed, 0x14, 0x61, 0xd0, 0x23, 0x83, 0x6d,
|
||||
0x4d, 0x04, 0x01, 0x11, 0x69, 0x76, 0x60, 0x47, 0xbd, 0xa1, 0x97, 0x1c, 0x39, 0x3f, 0xe2, 0x09,
|
||||
0x3f, 0xc5, 0x5f, 0xb5, 0xd0, 0x91, 0x90, 0x81, 0xe4, 0x1c, 0xdb, 0x26, 0x0d, 0x82, 0xa3, 0x07,
|
||||
0xd6, 0x23, 0xe1, 0x45, 0x64, 0x65, 0xa7, 0x96, 0x05, 0x6b, 0x2c, 0x4f, 0x61, 0x42, 0x5d, 0x40,
|
||||
0xa7, 0xb7, 0x79, 0x2d, 0x2e, 0xfc, 0x5d, 0xec, 0x30, 0x9f, 0x56, 0x5e, 0x92, 0xa1, 0x28, 0x41,
|
||||
0x2f, 0x90, 0x2d, 0x30, 0x1c, 0xe9, 0x11, 0xd7, 0x48, 0x74, 0x9b, 0x7f, 0x5b, 0x73, 0x50, 0x04,
|
||||
0x66, 0xd9, 0xc3, 0x94, 0x93, 0x0c, 0x4e, 0x26, 0xf1, 0x7f, 0xfe, 0x84, 0xbb, 0xee, 0xc6, 0x7e,
|
||||
0x9b, 0x78, 0xf9, 0x1d, 0x20, 0xd0, 0x47, 0x0f, 0x40, 0x43, 0x6d, 0xfe, 0x21, 0x40, 0xa6, 0x17,
|
||||
0x85, 0x16, 0x7a, 0xa1, 0x31, 0xff, 0x93, 0x61, 0xfe, 0x97, 0xe7, 0x38, 0xba, 0x31, 0x2d, 0xe1,
|
||||
0xbf, 0x5a, 0xeb, 0x42, 0xe7, 0x3c, 0xef, 0xd1, 0x97, 0xa4, 0x3f, 0x1f, 0x22, 0x1f, 0x26, 0x29,
|
||||
0x6a, 0x27, 0x33, 0x23, 0x94, 0x15, 0xf0, 0x47, 0xbf, 0xd2, 0x19, 0xb3, 0xe1, 0xee, 0x4c, 0x45,
|
||||
0xff, 0x9e, 0x20, 0xca, 0xa2, 0x4c, 0xbc, 0x17, 0x28, 0x95, 0x74, 0xfe, 0x65, 0x66, 0x26, 0xcb,
|
||||
0x33, 0x99, 0x39, 0xbe, 0x2e, 0x7e, 0xc1, 0x5b, 0xd0, 0x92, 0xac, 0x8f, 0xbb, 0x22, 0x30, 0xc3,
|
||||
0xef, 0x22, 0x1f, 0x24, 0x7c, 0xc7, 0x84, 0x5d, 0x4c, 0x30, 0x76, 0xd3, 0xd9, 0xdc, 0xf6, 0xf6,
|
||||
0xa7, 0xc6, 0xd7, 0x68, 0x78, 0xe8, 0x00, 0x38, 0x30, 0xd4, 0xd5, 0xfb, 0xb1, 0xb9, 0x9d, 0x1d,
|
||||
0x8d, 0xf3, 0x28, 0x72, 0xa7, 0xe1, 0x60, 0xdf, 0xb2, 0x3b, 0x86, 0x1f, 0xdb, 0x24, 0xe1, 0x22,
|
||||
0x7c, 0x71, 0xbc, 0x2e, 0x80, 0x84, 0xd9, 0x04, 0xa3, 0x87, 0x07, 0x45, 0x3f, 0x8b, 0x4c, 0xdc,
|
||||
0x52, 0xf3, 0x48, 0x3f, 0xc4, 0x28, 0xd8, 0xad, 0x62, 0x61, 0xd5, 0x03, 0xdf, 0x54, 0xef, 0xa3,
|
||||
0xf2, 0x88, 0x60, 0xec, 0x6f, 0x3d, 0xb8, 0xd9, 0x18, 0x8f, 0xdd, 0xa6, 0xb8, 0xe8, 0x6d, 0xc7,
|
||||
0x16, 0xa4, 0xed, 0x24, 0x63, 0x7a, 0xac, 0xff, 0xc2, 0xf1, 0x98, 0x22, 0xfb, 0x43, 0xac, 0xc5,
|
||||
0xb2, 0x59, 0x3b, 0x80, 0x33, 0x3e, 0x06, 0x97, 0xde, 0xfa, 0x89, 0xd7, 0x2b, 0x87, 0x29, 0x20,
|
||||
0xb8, 0xeb, 0x90, 0x08, 0xe9, 0x74, 0xda, 0x65, 0xca, 0x93, 0xef, 0x5d, 0xf1, 0x35, 0x06, 0x52,
|
||||
0x67, 0xbc, 0x01, 0xe3, 0x66, 0xfc, 0x93, 0x0b, 0x50, 0xce, 0xbf, 0xf0, 0x7b, 0x7b, 0x9b, 0x3d,
|
||||
0x99, 0xfc, 0xf2, 0x7c, 0x75, 0x02, 0x0f, 0xfb, 0x24, 0x4c, 0xde, 0xcb, 0x81, 0xd5, 0xc8, 0xff,
|
||||
0xa0, 0x8b, 0xf2, 0xcf, 0x9f, 0xa8, 0xa4, 0x03, 0x29, 0x0c, 0xa9, 0xb5, 0x39, 0x6a, 0xc4, 0xa1,
|
||||
0xde, 0x40, 0x9a, 0x40, 0x6b, 0xf1, 0xb5, 0xb5, 0xe5, 0x31, 0x6f, 0x11, 0xa8, 0x72, 0x2b, 0xc3,
|
||||
0x58, 0x78, 0x77, 0xbb, 0x79, 0x3a, 0xda, 0xea, 0xcd, 0x6a, 0xa0, 0xa5, 0x41, 0x09, 0x8e, 0xde,
|
||||
0x01, 0x47, 0x2f, 0x83, 0x83, 0x39, 0x5f, 0x2d, 0x35, 0x34, 0xf1, 0x84, 0x29, 0x3a, 0x69, 0x29,
|
||||
0x47, 0xdb, 0x5c, 0x30, 0x7c, 0xad, 0xdb, 0xfb, 0x25, 0x29, 0x48, 0x10, 0xde, 0x9c, 0x80, 0xab,
|
||||
0xef, 0x83, 0x72, 0x23, 0xeb, 0xa3, 0x62, 0xcb, 0x1b, 0xe2, 0xfc, 0x72, 0x5b, 0xdf, 0x33, 0xde,
|
||||
0x1b, 0x1f, 0x12, 0xdf, 0x33, 0xb8, 0xc7, 0x8a, 0xdf, 0x03, 0x77, 0xa8, 0xef, 0x26, 0xfe, 0x1f,
|
||||
0x3d, 0xed, 0xd5, 0xb1, 0xc9, 0xc3, 0x00, 0x00
|
||||
};
|
||||
|
3683
wled00/html_ui.h
3683
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,7 @@
|
||||
#include "wled.h"
|
||||
|
||||
#include "ir_codes.h"
|
||||
|
||||
/*
|
||||
* Infrared sensor support for generic 24/40/44 key RGB remotes
|
||||
*/
|
||||
|
@ -175,8 +175,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
||||
if (getVal(elem["fx"], &fx, 0, strip.getModeCount())) { //load effect ('r' random, '~' inc/dec, 0-255 exact value)
|
||||
if (!presetId && currentPlaylist>=0) unloadPlaylist();
|
||||
if (fx != seg.mode) {
|
||||
//seg.startTransition(strip.getTransition()); // set effect transitions
|
||||
seg.markForReset();
|
||||
seg.startTransition(strip.getTransition()); // set effect transitions
|
||||
//seg.markForReset();
|
||||
seg.mode = fx;
|
||||
// load default values from effect string if effect is selected without
|
||||
// any other effect parameter (i.e. effect clicked in UI)
|
||||
@ -187,34 +187,25 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
||||
&& elem[F("c2")].isNull()
|
||||
&& elem[F("c3")].isNull() )
|
||||
{
|
||||
// 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, &seg.palette);
|
||||
//end compatibility mode
|
||||
int16_t 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("c1")); if (sOpt >= 0) seg.custom1 = sOpt;
|
||||
sOpt = extractModeDefaults(fx, SET_F("c2")); if (sOpt >= 0) seg.custom2 = sOpt;
|
||||
sOpt = extractModeDefaults(fx, SET_F("c3")); if (sOpt >= 0) seg.custom3 = sOpt;
|
||||
sOpt = extractModeDefaults(fx, "pal"); if (sOpt >= 0 && sOpt < strip.getPaletteCount()) seg.palette = sOpt;
|
||||
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, "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, 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("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("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, "rev"); if (sOpt >= 0) seg.reverse = (bool)sOpt;
|
||||
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;
|
||||
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");
|
||||
if (sOpt >= 0 && sOpt < strip.getPaletteCount() + strip.customPalettes.size()) {
|
||||
if (sOpt != seg.palette) {
|
||||
if (strip.paletteFade && !seg.transitional) seg.startTransition(strip.getTransition());
|
||||
seg.palette = sOpt;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -225,7 +216,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
||||
uint8_t pal = seg.palette;
|
||||
if (getVal(elem["pal"], &pal, 1, strip.getPaletteCount())) {
|
||||
if (pal != seg.palette) {
|
||||
if (strip.paletteBlend) seg.startTransition(strip.getTransition());
|
||||
if (strip.paletteFade && !seg.transitional) seg.startTransition(strip.getTransition());
|
||||
seg.palette = pal;
|
||||
}
|
||||
}
|
||||
@ -235,8 +226,6 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
||||
|
||||
JsonArray iarr = elem[F("i")]; //set individual LEDs
|
||||
if (!iarr.isNull()) {
|
||||
//uint8_t oldSegId = strip.setPixelSegment(id);
|
||||
|
||||
// set brightness immediately and disable transition
|
||||
transitionDelayTemp = 0;
|
||||
jsonTransitionOnce = true;
|
||||
@ -277,7 +266,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
||||
if (set < 2) stop = start + 1;
|
||||
for (int i = start; i < stop; i++) {
|
||||
if (strip.gammaCorrectCol) {
|
||||
seg.setPixelColor(i, strip.gamma8(rgbw[0]), strip.gamma8(rgbw[1]), strip.gamma8(rgbw[2]), strip.gamma8(rgbw[3]));
|
||||
seg.setPixelColor(i, gamma8(rgbw[0]), gamma8(rgbw[1]), gamma8(rgbw[2]), gamma8(rgbw[3]));
|
||||
} else {
|
||||
seg.setPixelColor(i, rgbw[0], rgbw[1], rgbw[2], rgbw[3]);
|
||||
}
|
||||
@ -286,7 +275,6 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
||||
set = 0;
|
||||
}
|
||||
}
|
||||
//strip.setPixelSegment(oldSegId);
|
||||
strip.trigger();
|
||||
}
|
||||
// send UDP if not in preset and something changed that is not just selection
|
||||
@ -301,12 +289,23 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
||||
bool stateResponse = root[F("v")] | false;
|
||||
|
||||
bool onBefore = bri;
|
||||
getVal(root["bri"], &bri);
|
||||
uint8_t tmpBri = bri;
|
||||
getVal(root["bri"], &tmpBri);
|
||||
|
||||
bool on = root["on"] | (bri > 0);
|
||||
if (!on != !bri) toggleOnOff();
|
||||
|
||||
if (root["on"].is<const char*>() && root["on"].as<const char*>()[0] == 't') toggleOnOff();
|
||||
if (root["on"].isNull()) {
|
||||
if ((onBefore && tmpBri==0) || (!onBefore && tmpBri>0)) toggleOnOff();
|
||||
bri = tmpBri;
|
||||
} else {
|
||||
bool on = root["on"] | onBefore;
|
||||
if (on != onBefore || (root["on"].is<const char*>() && root["on"].as<const char*>()[0] == 't')) {
|
||||
toggleOnOff();
|
||||
// a hack is needed after toggleOnOf()
|
||||
if (!root["bri"].isNull()) {
|
||||
if (bri==0) briLast = tmpBri;
|
||||
else bri = tmpBri;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bri && !onBefore) { // unfreeze all segments when turning on
|
||||
for (size_t s=0; s < strip.getSegmentsNum(); s++) {
|
||||
@ -588,7 +587,7 @@ void serializeInfo(JsonObject root)
|
||||
leds[F("maxseg")] = strip.getMaxSegments();
|
||||
//leds[F("actseg")] = strip.getActiveSegmentsNum();
|
||||
//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
|
||||
if (strip.isMatrix) {
|
||||
@ -614,6 +613,10 @@ void serializeInfo(JsonObject root)
|
||||
leds[F("wv")] = totalLC & 0x02; // deprecated, true if white slider should be displayed for any segment
|
||||
leds["cct"] = totalLC & 0x04; // deprecated, use info.leds.lc
|
||||
|
||||
#ifdef WLED_DISABLE_AUDIO
|
||||
root[F("noaudio")] = true;
|
||||
#endif
|
||||
|
||||
root[F("str")] = syncToggleReceive;
|
||||
|
||||
root[F("name")] = serverDescription;
|
||||
@ -651,12 +654,7 @@ void serializeInfo(JsonObject root)
|
||||
|
||||
JsonArray ledmaps = root.createNestedArray(F("maps"));
|
||||
for (size_t i=0; i<10; i++) {
|
||||
char fileName[16];
|
||||
strcpy_P(fileName, PSTR("/ledmap"));
|
||||
if (i) sprintf(fileName +7, "%d", i);
|
||||
strcat_P(fileName, PSTR(".json"));
|
||||
bool isFile = WLED_FS.exists(fileName);
|
||||
if (isFile || i==0) ledmaps.add(i);
|
||||
if ((ledMaps>>i) & 0x0001) ledmaps.add(i);
|
||||
}
|
||||
|
||||
JsonObject wifi_info = root.createNestedObject("wifi");
|
||||
@ -910,8 +908,7 @@ void serializeNodes(JsonObject root)
|
||||
void serializeModeData(JsonArray fxdata)
|
||||
{
|
||||
for (size_t i = 0; i < strip.getModeCount(); i++) {
|
||||
//String lineBuffer = (const char*)pgm_read_dword(&(WS2812FX::_modeData[i]));
|
||||
String lineBuffer = strip.getModeData(i);
|
||||
String lineBuffer = FPSTR(strip.getModeData(i));
|
||||
if (lineBuffer.length() > 0) {
|
||||
uint8_t endPos = lineBuffer.indexOf('@');
|
||||
if (endPos>0) fxdata.add(lineBuffer.substring(endPos));
|
||||
@ -924,8 +921,7 @@ void serializeModeData(JsonArray fxdata)
|
||||
// also removes WLED-SR extensions (@...) from deserialised names
|
||||
void serializeModeNames(JsonArray arr) {
|
||||
for (size_t i = 0; i < strip.getModeCount(); i++) {
|
||||
//String lineBuffer = (const char*)pgm_read_dword(&(WS2812FX::_modeData[i]));
|
||||
String lineBuffer = strip.getModeData(i);
|
||||
String lineBuffer = FPSTR(strip.getModeData(i));
|
||||
if (lineBuffer.length() > 0) {
|
||||
uint8_t endPos = lineBuffer.indexOf('@');
|
||||
if (endPos>0) arr.add(lineBuffer.substring(0, endPos));
|
||||
@ -951,7 +947,7 @@ void serveJson(AsyncWebServerRequest* request)
|
||||
}
|
||||
#endif
|
||||
else if (url.indexOf(F("eff")) > 0) {
|
||||
// this is going to serve raw effect names which will include WLED-SR extensions in names
|
||||
// this serves just effect names without FX data extensions in names
|
||||
if (requestJSONBufferLock(19)) {
|
||||
AsyncJsonResponse* response = new AsyncJsonResponse(&doc, true); // array document
|
||||
JsonArray lDoc = response->getRoot();
|
||||
@ -960,7 +956,8 @@ void serveJson(AsyncWebServerRequest* request)
|
||||
request->send(response);
|
||||
releaseJSONBufferLock();
|
||||
} else {
|
||||
request->send_P(200, "application/json", JSON_mode_names);
|
||||
//request->send_P(200, "application/json", JSON_mode_names);
|
||||
request->send(503, "application/json", F("{\"error\":3}"));
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -972,11 +969,14 @@ void serveJson(AsyncWebServerRequest* request)
|
||||
return;
|
||||
}
|
||||
else if (url.length() > 6) { //not just /json
|
||||
request->send( 501, "application/json", F("{\"error\":\"Not implemented\"}"));
|
||||
request->send(501, "application/json", F("{\"error\":\"Not implemented\"}"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!requestJSONBufferLock(17)) return;
|
||||
if (!requestJSONBufferLock(17)) {
|
||||
request->send(503, "application/json", F("{\"error\":3}"));
|
||||
return;
|
||||
}
|
||||
AsyncJsonResponse *response = new AsyncJsonResponse(&doc, subJson==6);
|
||||
|
||||
JsonVariant lDoc = response->getRoot();
|
||||
|
@ -34,8 +34,7 @@ enum struct PinOwner : uint8_t {
|
||||
DebugOut = 0x89, // 'Dbg' == debug output always IO1
|
||||
DMX = 0x8A, // 'DMX' == hard-coded to IO2
|
||||
HW_I2C = 0x8B, // 'I2C' == hardware I2C pins (4&5 on ESP8266, 21&22 on ESP32)
|
||||
AnalogMic = 0x8C, // WLEDSR
|
||||
DigitalMic = 0x8D, // WLEDSR
|
||||
HW_SPI = 0x8C, // 'SPI' == hardware SPI pins (13,14&15 on ESP8266, 5,18&23 on ESP32)
|
||||
// Use UserMod IDs from const.h here
|
||||
UM_Unspecified = USERMOD_ID_UNSPECIFIED, // 0x01
|
||||
UM_Example = USERMOD_ID_EXAMPLE, // 0x02 // Usermod "usermod_v2_example.h"
|
||||
|
@ -85,6 +85,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
||||
Bus::setCCTBlend(strip.cctBlending);
|
||||
Bus::setAutoWhiteMode(request->arg(F("AW")).toInt());
|
||||
strip.setTargetFps(request->arg(F("FR")).toInt());
|
||||
strip.useLedsArray = request->hasArg(F("LD"));
|
||||
|
||||
bool busesChanged = false;
|
||||
for (uint8_t s = 0; s < WLED_MAX_BUSSES; s++) {
|
||||
@ -398,7 +399,9 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
||||
if (request->hasArg(F("RS"))) //complete factory reset
|
||||
{
|
||||
WLED_FS.format();
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
clearEEPROM();
|
||||
#endif
|
||||
serveMessage(request, 200, F("All Settings erased."), F("Connect to WLED-AP to setup again"),255);
|
||||
doReboot = true;
|
||||
}
|
||||
@ -474,6 +477,57 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
||||
{
|
||||
if (!requestJSONBufferLock(5)) return;
|
||||
|
||||
// global I2C & SPI pins
|
||||
uint8_t oldpins[3];
|
||||
int8_t hw_sda_pin = max(-1,min(33,(int)request->arg(F("SDA")).toInt()));
|
||||
int8_t hw_scl_pin = max(-1,min(33,(int)request->arg(F("SCL")).toInt()));
|
||||
oldpins[0] = i2c_sda;
|
||||
oldpins[1] = i2c_scl;
|
||||
pinManager.deallocateMultiplePins(oldpins, 2, PinOwner::HW_I2C);
|
||||
#ifdef ESP8266
|
||||
// cannot change pins on ESP8266
|
||||
if (hw_sda_pin != HW_PIN_SDA) hw_sda_pin = -1;
|
||||
if (hw_scl_pin != HW_PIN_SCL) hw_scl_pin = -1;
|
||||
#endif
|
||||
PinManagerPinType i2c[2] = { { hw_sda_pin, true }, { hw_scl_pin, true } };
|
||||
if (pinManager.allocateMultiplePins(i2c, 2, PinOwner::HW_I2C)) {
|
||||
i2c_sda = hw_sda_pin;
|
||||
i2c_scl = hw_scl_pin;
|
||||
#ifdef ESP32
|
||||
Wire.setPins(i2c_sda, i2c_scl); // this will fail if Wire is initilised (Wire.begin() called)
|
||||
uint8_t i2c[2] = {i2c_sda, i2c_scl};
|
||||
pinManager.deallocateMultiplePins(i2c, 2, PinOwner::HW_I2C);
|
||||
#endif
|
||||
} else {
|
||||
i2c_sda = -1;
|
||||
i2c_scl = -1;
|
||||
}
|
||||
int8_t hw_mosi_pin = max(-1,min(33,(int)request->arg(F("MOSI")).toInt()));
|
||||
int8_t hw_sclk_pin = max(-1,min(33,(int)request->arg(F("SCLK")).toInt()));
|
||||
int8_t hw_cs_pin = max(-1,min(33,(int)request->arg(F("CS")).toInt()));
|
||||
oldpins[0] = spi_mosi;
|
||||
oldpins[1] = spi_sclk;
|
||||
oldpins[2] = spi_cs;
|
||||
pinManager.deallocateMultiplePins(oldpins, 3, PinOwner::HW_SPI);
|
||||
#ifdef ESP8266
|
||||
// cannot change pins on ESP8266
|
||||
if (hw_mosi_pin != HW_PIN_DATASPI) hw_mosi_pin = -1;
|
||||
if (hw_sclk_pin != HW_PIN_CLOCKSPI) hw_sclk_pin = -1;
|
||||
if (hw_cs_pin != HW_PIN_CSSPI) hw_cs_pin = -1;
|
||||
#endif
|
||||
PinManagerPinType spi[3] = { { hw_mosi_pin, true }, { hw_sclk_pin, true }, { hw_cs_pin, true } };
|
||||
if (pinManager.allocateMultiplePins(spi, 3, PinOwner::HW_SPI)) {
|
||||
spi_mosi = hw_mosi_pin;
|
||||
spi_sclk = hw_sclk_pin;
|
||||
spi_cs = hw_cs_pin;
|
||||
uint8_t spi[3] = { hw_mosi_pin, hw_sclk_pin, hw_cs_pin };
|
||||
pinManager.deallocateMultiplePins(spi, 3, PinOwner::HW_SPI);
|
||||
} else {
|
||||
spi_mosi = -1;
|
||||
spi_sclk = -1;
|
||||
spi_cs = -1;
|
||||
}
|
||||
|
||||
JsonObject um = doc.createNestedObject("um");
|
||||
|
||||
size_t args = request->args();
|
||||
@ -826,7 +880,11 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
|
||||
for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) {
|
||||
Segment& seg = strip.getSegment(i);
|
||||
if (i != selectedSeg && (singleSegment || !seg.isActive() || !seg.isSelected())) continue; // skip non main segments if not applying to all
|
||||
if (fxModeChanged) { seg.mode = effectIn; seg.markForReset(); }
|
||||
if (fxModeChanged) {
|
||||
seg.startTransition(strip.getTransition());
|
||||
seg.mode = effectIn;
|
||||
// TODO: we should load defaults here as well
|
||||
}
|
||||
if (speedChanged) seg.speed = speedIn;
|
||||
if (intensityChanged) seg.intensity = intensityIn;
|
||||
if (paletteChanged) {
|
||||
|
@ -33,11 +33,6 @@
|
||||
|
||||
#define DS1307_CTRL_ID 0x68
|
||||
|
||||
DS1307RTC::DS1307RTC()
|
||||
{
|
||||
Wire.begin();
|
||||
}
|
||||
|
||||
// PUBLIC FUNCTIONS
|
||||
time_t DS1307RTC::get() // Aquire data from buffer and convert to time_t
|
||||
{
|
||||
|
@ -13,7 +13,8 @@ class DS1307RTC
|
||||
{
|
||||
// user-accessible "public" interface
|
||||
public:
|
||||
DS1307RTC();
|
||||
DS1307RTC() {}
|
||||
static void begin() { Wire.begin(); }
|
||||
static time_t get();
|
||||
static bool set(time_t t);
|
||||
static bool read(tmElements_t &tm);
|
||||
|
@ -155,7 +155,7 @@ void realtimeLock(uint32_t timeoutMs, byte md)
|
||||
stop = strip.getLengthTotal();
|
||||
}
|
||||
// clear strip/segment
|
||||
for (size_t i = start; i < stop; i++) strip.setPixelColor(i,0,0,0,0);
|
||||
for (size_t i = start; i < stop; i++) strip.setPixelColor(i,BLACK);
|
||||
// if WLED was off and using main segment only, freeze non-main segments so they stay off
|
||||
if (useMainSegmentOnly && bri == 0) {
|
||||
for (size_t s=0; s < strip.getSegmentsNum(); s++) {
|
||||
@ -563,11 +563,16 @@ void handleNotifications()
|
||||
void setRealtimePixel(uint16_t i, byte r, byte g, byte b, byte w)
|
||||
{
|
||||
uint16_t pix = i + arlsOffset;
|
||||
if (pix < strip.getLengthTotal())
|
||||
{
|
||||
if (!arlsDisableGammaCorrection && strip.gammaCorrectCol)
|
||||
{
|
||||
strip.setPixelColor(pix, strip.gamma8(r), strip.gamma8(g), strip.gamma8(b), strip.gamma8(w));
|
||||
if (pix < strip.getLengthTotal()) {
|
||||
if (!arlsDisableGammaCorrection && strip.gammaCorrectCol) {
|
||||
r = gamma8(r);
|
||||
g = gamma8(g);
|
||||
b = gamma8(b);
|
||||
w = gamma8(w);
|
||||
}
|
||||
if (useMainSegmentOnly) {
|
||||
Segment &seg = strip.getMainSegment();
|
||||
if (pix<seg.length()) seg.setPixelColor(pix, r, g, b, w);
|
||||
} else {
|
||||
strip.setPixelColor(pix, r, g, b, w);
|
||||
}
|
||||
|
@ -133,6 +133,9 @@
|
||||
#endif
|
||||
|
||||
#ifdef USERMOD_AUDIOREACTIVE
|
||||
#ifdef WLED_DISABLE_AUDIO
|
||||
#error Incompatible options: WLED_DISABLE_AUDIO and USERMOD_AUDIOREACTIVE
|
||||
#endif
|
||||
#include "../usermods/audioreactive/audio_reactive.h"
|
||||
#endif
|
||||
|
||||
@ -257,6 +260,9 @@ void registerUsermods()
|
||||
#endif
|
||||
|
||||
#ifdef USERMOD_AUDIOREACTIVE
|
||||
#ifdef WLED_DISABLE_AUDIO
|
||||
#error Incompatible options: WLED_DISABLE_AUDIO and USERMOD_AUDIOREACTIVE
|
||||
#endif
|
||||
usermods.add(new AudioReactive());
|
||||
#endif
|
||||
}
|
||||
|
@ -286,7 +286,7 @@ uint8_t extractModeSlider(uint8_t mode, uint8_t slider, char *dest, uint8_t maxL
|
||||
dest[0] = '\0'; // start by clearing buffer
|
||||
|
||||
if (mode < strip.getModeCount()) {
|
||||
String lineBuffer = strip.getModeData(mode);
|
||||
String lineBuffer = FPSTR(strip.getModeData(mode));
|
||||
if (lineBuffer.length() > 0) {
|
||||
int16_t start = lineBuffer.indexOf('@');
|
||||
int16_t stop = lineBuffer.indexOf(';', start);
|
||||
@ -313,12 +313,14 @@ uint8_t extractModeSlider(uint8_t mode, uint8_t slider, char *dest, uint8_t maxL
|
||||
case 4: tmpstr = PSTR("FX Custom 3"); break;
|
||||
default: tmpstr = PSTR("FX Custom"); break;
|
||||
}
|
||||
strncpy_P(dest, tmpstr, maxLen); // copy the name into buffer (replacing previous)
|
||||
dest[maxLen-1] = '\0';
|
||||
} else {
|
||||
if (nameEnd<0) tmpstr = names.substring(nameBegin).c_str(); // did not find ",", last name?
|
||||
else tmpstr = names.substring(nameBegin, nameEnd).c_str();
|
||||
}
|
||||
strlcpy(dest, tmpstr, maxLen); // copy the name into buffer (replacing previous)
|
||||
}
|
||||
}
|
||||
nameBegin = nameEnd+1; // next name (if "," is not found it will be 0)
|
||||
} // next slider
|
||||
} else if (slider == 255) {
|
||||
@ -356,7 +358,7 @@ uint8_t extractModeSlider(uint8_t mode, uint8_t slider, char *dest, uint8_t maxL
|
||||
int16_t extractModeDefaults(uint8_t mode, const char *segVar)
|
||||
{
|
||||
if (mode < strip.getModeCount()) {
|
||||
String lineBuffer = strip.getModeData(mode);
|
||||
String lineBuffer = FPSTR(strip.getModeData(mode));
|
||||
if (lineBuffer.length() > 0) {
|
||||
int16_t start = lineBuffer.lastIndexOf(';');
|
||||
if (start<0) return -1;
|
||||
@ -383,6 +385,7 @@ uint16_t crc16(const unsigned char* data_p, size_t length) {
|
||||
}
|
||||
|
||||
|
||||
#ifndef WLED_DISABLE_AUDIO
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Begin simulateSound (to enable audio enhanced effects to display something)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -499,3 +502,15 @@ um_data_t* simulateSound(uint8_t simulationId)
|
||||
|
||||
return um_data;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void enumerateLedmaps() {
|
||||
ledMaps = 1;
|
||||
for (size_t i=1; i<10; i++) {
|
||||
char fileName[16];
|
||||
sprintf_P(fileName, PSTR("/ledmap%d.json"), i);
|
||||
bool isFile = WLED_FS.exists(fileName);
|
||||
if (isFile) ledMaps |= 1 << i;
|
||||
}
|
||||
}
|
@ -205,6 +205,7 @@ void WLED::loop()
|
||||
DEBUG_PRINT(F("Loops/sec: ")); DEBUG_PRINTLN(loops / 30);
|
||||
DEBUG_PRINT(F("UM time[ms]: ")); DEBUG_PRINT(avgUsermodMillis/loops); DEBUG_PRINT("/");DEBUG_PRINTLN(maxUsermodMillis);
|
||||
DEBUG_PRINT(F("Strip time[ms]: ")); DEBUG_PRINT(avgStripMillis/loops); DEBUG_PRINT("/"); DEBUG_PRINTLN(maxStripMillis);
|
||||
strip.printSize();
|
||||
loops = 0;
|
||||
maxUsermodMillis = 0;
|
||||
maxStripMillis = 0;
|
||||
@ -314,7 +315,10 @@ void WLED::setup()
|
||||
if (!fsinit) {
|
||||
DEBUGFS_PRINTLN(F("FS failed!"));
|
||||
errorFlag = ERR_FS_BEGIN;
|
||||
} else deEEP();
|
||||
}
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
else deEEP();
|
||||
#endif
|
||||
updateFSInfo();
|
||||
|
||||
DEBUG_PRINTLN(F("Reading config"));
|
||||
@ -694,7 +698,7 @@ void WLED::handleConnection()
|
||||
DEBUG_PRINT(F("Heap too low! "));
|
||||
DEBUG_PRINTLN(heap);
|
||||
forceReconnect = true;
|
||||
strip.purgeSegments(); // remove inactive segments from memory
|
||||
strip.purgeSegments(true); // remove all but one segments from memory
|
||||
}
|
||||
lastHeap = heap;
|
||||
heapTime = now;
|
||||
|
@ -8,7 +8,7 @@
|
||||
*/
|
||||
|
||||
// version code in format yymmddb (b = daily build)
|
||||
#define VERSION 2207293
|
||||
#define VERSION 2208111
|
||||
|
||||
//uncomment this if you have a "my_config.h" file you'd like to use
|
||||
//#define WLED_USE_MY_CONFIG
|
||||
@ -86,6 +86,8 @@
|
||||
#endif
|
||||
#include "esp_task_wdt.h"
|
||||
#endif
|
||||
#include <Wire.h>
|
||||
#include <SPI.h>
|
||||
|
||||
#include "src/dependencies/network/Network.h"
|
||||
|
||||
@ -94,7 +96,9 @@
|
||||
#endif
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <EEPROM.h>
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
#include <EEPROM.h>
|
||||
#endif
|
||||
#include <WiFiUdp.h>
|
||||
#include <DNSServer.h>
|
||||
#ifndef WLED_DISABLE_OTA
|
||||
@ -154,13 +158,6 @@ using PSRAMDynamicJsonDocument = BasicJsonDocument<PSRAM_Allocator>;
|
||||
|
||||
#include "const.h"
|
||||
#include "fcn_declare.h"
|
||||
#include "html_ui.h"
|
||||
#ifdef WLED_ENABLE_SIMPLE_UI
|
||||
#include "html_simple.h"
|
||||
#endif
|
||||
#include "html_settings.h"
|
||||
#include "html_other.h"
|
||||
#include "ir_codes.h"
|
||||
#include "NodeStruct.h"
|
||||
#include "pin_manager.h"
|
||||
#include "bus_manager.h"
|
||||
@ -642,10 +639,17 @@ WLED_GLOBAL WS2812FX strip _INIT(WS2812FX());
|
||||
WLED_GLOBAL BusConfig* busConfigs[WLED_MAX_BUSSES] _INIT({nullptr}); //temporary, to remember values from network callback until after
|
||||
WLED_GLOBAL bool doInitBusses _INIT(false);
|
||||
WLED_GLOBAL int8_t loadLedmap _INIT(-1);
|
||||
WLED_GLOBAL uint16_t ledMaps _INIT(0); // bitfield representation of available ledmaps
|
||||
|
||||
// Usermod manager
|
||||
WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager());
|
||||
|
||||
WLED_GLOBAL int8_t i2c_sda _INIT(HW_PIN_SDA); // global I2C SDA pin (used for usermods)
|
||||
WLED_GLOBAL int8_t i2c_scl _INIT(HW_PIN_SCL); // global I2C SDA pin (used for usermods)
|
||||
WLED_GLOBAL int8_t spi_mosi _INIT(HW_PIN_DATASPI); // global I2C SDA pin (used for usermods)
|
||||
WLED_GLOBAL int8_t spi_sclk _INIT(HW_PIN_CLOCKSPI); // global I2C SDA pin (used for usermods)
|
||||
WLED_GLOBAL int8_t spi_cs _INIT(HW_PIN_CSSPI); // global I2C SDA pin (used for usermods)
|
||||
|
||||
// global ArduinoJson buffer
|
||||
WLED_GLOBAL StaticJsonDocument<JSON_BUFFER_SIZE> doc;
|
||||
WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
|
||||
|
@ -1,3 +1,4 @@
|
||||
#ifdef WLED_ADD_EEPROM_SUPPORT
|
||||
#include <EEPROM.h>
|
||||
#include "wled.h"
|
||||
|
||||
@ -473,3 +474,4 @@ void deEEPSettings() {
|
||||
|
||||
serializeConfig();
|
||||
}
|
||||
#endif
|
||||
|
@ -1,5 +1,12 @@
|
||||
#include "wled.h"
|
||||
|
||||
#include "html_ui.h"
|
||||
#ifdef WLED_ENABLE_SIMPLE_UI
|
||||
#include "html_simple.h"
|
||||
#endif
|
||||
#include "html_settings.h"
|
||||
#include "html_other.h"
|
||||
|
||||
/*
|
||||
* Integrated HTTP web server page declarations
|
||||
*/
|
||||
@ -103,6 +110,7 @@ void initServer()
|
||||
request->send(response);
|
||||
//request->send_P(200, "text/html", PAGE_liveviewws);
|
||||
});
|
||||
#ifndef WLED_DISABLE_2D
|
||||
server.on("/liveview2D", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
if (handleIfNoneMatchCacheHeader(request)) return;
|
||||
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_liveviewws2D, PAGE_liveviewws2D_length);
|
||||
@ -111,6 +119,7 @@ void initServer()
|
||||
request->send(response);
|
||||
//request->send_P(200, "text/html", PAGE_liveviewws);
|
||||
});
|
||||
#endif
|
||||
#else
|
||||
server.on("/liveview", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
if (handleIfNoneMatchCacheHeader(request)) return;
|
||||
|
@ -138,26 +138,30 @@ void sendDataWs(AsyncWebSocketClient * client)
|
||||
releaseJSONBufferLock();
|
||||
}
|
||||
|
||||
#define MAX_LIVE_LEDS_WS 1024
|
||||
|
||||
bool sendLiveLedsWs(uint32_t wsClient)
|
||||
{
|
||||
AsyncWebSocketClient * wsc = ws.client(wsClient);
|
||||
if (!wsc || wsc->queueLength() > 0) return false; //only send if queue free
|
||||
|
||||
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 bufSize = 2 + (used/n)*3;
|
||||
uint16_t pos = (strip.isMatrix ? 4 : 2);
|
||||
uint16_t bufSize = pos + (used/n)*3;
|
||||
AsyncWebSocketMessageBuffer * wsBuf = ws.makeBuffer(bufSize);
|
||||
if (!wsBuf) return false; //out of memory
|
||||
uint8_t* buffer = wsBuf->get();
|
||||
buffer[0] = 'L';
|
||||
buffer[1] = 1; //version
|
||||
#ifndef WLED_DISABLE_2D
|
||||
if (strip.isMatrix) {
|
||||
buffer[1] = 2; //version
|
||||
buffer[2] = strip.matrixWidth;
|
||||
buffer[3] = strip.matrixHeight;
|
||||
}
|
||||
#endif
|
||||
|
||||
uint16_t pos = 4;
|
||||
for (uint16_t i= 0; pos < bufSize -2; i += n)
|
||||
for (uint16_t i = 0; pos < bufSize -2; i += n)
|
||||
{
|
||||
uint32_t c = strip.getPixelColor(i);
|
||||
buffer[pos++] = qadd8(W(c), R(c)); //R, add white channel to RGB channels as a simple RGBW -> RGB map
|
||||
|
@ -261,6 +261,16 @@ void getSettingsJS(byte subPage, char* dest)
|
||||
// add reserved and usermod pins as d.um_p array
|
||||
oappend(SET_F("d.um_p=[6,7,8,9,10,11"));
|
||||
|
||||
if (i2c_sda > -1 && i2c_scl > -1) {
|
||||
oappend(","); oappend(itoa(i2c_sda,nS,10));
|
||||
oappend(","); oappend(itoa(i2c_scl,nS,10));
|
||||
}
|
||||
if (spi_mosi > -1 && spi_sclk > -1 && spi_cs > -1) {
|
||||
oappend(","); oappend(itoa(spi_mosi,nS,10));
|
||||
oappend(","); oappend(itoa(spi_sclk,nS,10));
|
||||
oappend(","); oappend(itoa(spi_cs,nS,10));
|
||||
}
|
||||
|
||||
if (requestJSONBufferLock(6)) {
|
||||
// if we can't allocate JSON buffer ignore usermod pins
|
||||
JsonObject mods = doc.createNestedObject(F("um"));
|
||||
@ -308,13 +318,12 @@ void getSettingsJS(byte subPage, char* dest)
|
||||
|
||||
// set limits
|
||||
oappend(SET_F("bLimits("));
|
||||
#ifdef ESP32
|
||||
#if defined(ESP32) && defined(USERMOD_AUDIOREACTIVE)
|
||||
// requested by @softhack007 https://github.com/blazoncek/WLED/issues/33
|
||||
if (usermods.lookup(USERMOD_ID_AUDIOREACTIVE))
|
||||
oappend(itoa(WLED_MAX_BUSSES-2,nS,10)); // prevent use of I2S buses if audio installed
|
||||
else
|
||||
#endif
|
||||
oappend(itoa(WLED_MAX_BUSSES-2,nS,10)); oappend(","); // prevent use of I2S buses if audio installed
|
||||
#else
|
||||
oappend(itoa(WLED_MAX_BUSSES,nS,10)); oappend(",");
|
||||
#endif
|
||||
oappend(itoa(MAX_LEDS_PER_BUS,nS,10)); oappend(",");
|
||||
oappend(itoa(MAX_LED_MEMORY,nS,10)); oappend(",");
|
||||
oappend(itoa(MAX_LEDS,nS,10));
|
||||
@ -326,6 +335,7 @@ void getSettingsJS(byte subPage, char* dest)
|
||||
sappend('v',SET_F("CB"),strip.cctBlending);
|
||||
sappend('v',SET_F("FR"),strip.getTargetFps());
|
||||
sappend('v',SET_F("AW"),Bus::getAutoWhiteMode());
|
||||
sappend('v',SET_F("LD"),strip.useLedsArray);
|
||||
|
||||
for (uint8_t s=0; s < busses.getNumBusses(); s++) {
|
||||
Bus* bus = busses.getBus(s);
|
||||
@ -586,6 +596,9 @@ void getSettingsJS(byte subPage, char* dest)
|
||||
oappend(SET_F(" (build "));
|
||||
oappendi(VERSION);
|
||||
oappend(SET_F(")\";"));
|
||||
oappend(SET_F("sd=\""));
|
||||
oappend(serverDescription);
|
||||
oappend(SET_F("\";"));
|
||||
}
|
||||
|
||||
#ifdef WLED_ENABLE_DMX // include only if DMX is enabled
|
||||
@ -621,6 +634,11 @@ void getSettingsJS(byte subPage, char* dest)
|
||||
oappend(SET_F("numM="));
|
||||
oappendi(usermods.getModCount());
|
||||
oappend(";");
|
||||
sappend('v',SET_F("SDA"),i2c_sda);
|
||||
sappend('v',SET_F("SCL"),i2c_scl);
|
||||
sappend('v',SET_F("MOSI"),spi_mosi);
|
||||
sappend('v',SET_F("SCLK"),spi_sclk);
|
||||
sappend('v',SET_F("CS"),spi_cs);
|
||||
usermods.appendConfigData();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user