mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-06 12:41:37 +02:00
ePaper und Nokia über HSPI, erster Test
This commit is contained in:
parent
71ea7155ca
commit
f1b722fd5d
11 changed files with 3068 additions and 2033 deletions
|
@ -7,44 +7,43 @@
|
||||||
#define __SETTINGS_H__
|
#define __SETTINGS_H__
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <LittleFS.h>
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
#include <LittleFS.h>
|
||||||
|
|
||||||
|
#include "../defines.h"
|
||||||
#include "../utils/dbg.h"
|
#include "../utils/dbg.h"
|
||||||
#include "../utils/helper.h"
|
#include "../utils/helper.h"
|
||||||
#include "../defines.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* More info:
|
* More info:
|
||||||
* https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html#flash-layout
|
* https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html#flash-layout
|
||||||
* */
|
* */
|
||||||
#define DEF_PIN_OFF 255
|
#define DEF_PIN_OFF 255
|
||||||
|
|
||||||
|
#define PROT_MASK_INDEX 0x0001
|
||||||
|
#define PROT_MASK_LIVE 0x0002
|
||||||
|
#define PROT_MASK_SERIAL 0x0004
|
||||||
|
#define PROT_MASK_SETUP 0x0008
|
||||||
|
#define PROT_MASK_UPDATE 0x0010
|
||||||
|
#define PROT_MASK_SYSTEM 0x0020
|
||||||
|
#define PROT_MASK_API 0x0040
|
||||||
|
#define PROT_MASK_MQTT 0x0080
|
||||||
|
|
||||||
#define PROT_MASK_INDEX 0x0001
|
#define DEF_PROT_INDEX 0x0001
|
||||||
#define PROT_MASK_LIVE 0x0002
|
#define DEF_PROT_LIVE 0x0000
|
||||||
#define PROT_MASK_SERIAL 0x0004
|
#define DEF_PROT_SERIAL 0x0004
|
||||||
#define PROT_MASK_SETUP 0x0008
|
#define DEF_PROT_SETUP 0x0008
|
||||||
#define PROT_MASK_UPDATE 0x0010
|
#define DEF_PROT_UPDATE 0x0010
|
||||||
#define PROT_MASK_SYSTEM 0x0020
|
#define DEF_PROT_SYSTEM 0x0020
|
||||||
#define PROT_MASK_API 0x0040
|
#define DEF_PROT_API 0x0000
|
||||||
#define PROT_MASK_MQTT 0x0080
|
#define DEF_PROT_MQTT 0x0000
|
||||||
|
|
||||||
#define DEF_PROT_INDEX 0x0001
|
|
||||||
#define DEF_PROT_LIVE 0x0000
|
|
||||||
#define DEF_PROT_SERIAL 0x0004
|
|
||||||
#define DEF_PROT_SETUP 0x0008
|
|
||||||
#define DEF_PROT_UPDATE 0x0010
|
|
||||||
#define DEF_PROT_SYSTEM 0x0020
|
|
||||||
#define DEF_PROT_API 0x0000
|
|
||||||
#define DEF_PROT_MQTT 0x0000
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t ip[4]; // ip address
|
uint8_t ip[4]; // ip address
|
||||||
uint8_t mask[4]; // sub mask
|
uint8_t mask[4]; // sub mask
|
||||||
uint8_t dns1[4]; // dns 1
|
uint8_t dns1[4]; // dns 1
|
||||||
uint8_t dns2[4]; // dns 2
|
uint8_t dns2[4]; // dns 2
|
||||||
uint8_t gateway[4]; // standard gateway
|
uint8_t gateway[4]; // standard gateway
|
||||||
} cfgIp_t;
|
} cfgIp_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -77,7 +76,7 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
float lat;
|
float lat;
|
||||||
float lon;
|
float lon;
|
||||||
bool disNightCom; // disable night communication
|
bool disNightCom; // disable night communication
|
||||||
uint16_t offsetSec;
|
uint16_t offsetSec;
|
||||||
} cfgSun_t;
|
} cfgSun_t;
|
||||||
|
|
||||||
|
@ -88,8 +87,8 @@ typedef struct {
|
||||||
} cfgSerial_t;
|
} cfgSerial_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t led0; // first LED pin
|
uint8_t led0; // first LED pin
|
||||||
uint8_t led1; // second LED pin
|
uint8_t led1; // second LED pin
|
||||||
} cfgLed_t;
|
} cfgLed_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -106,7 +105,7 @@ typedef struct {
|
||||||
char name[MAX_NAME_LENGTH];
|
char name[MAX_NAME_LENGTH];
|
||||||
serial_u serial;
|
serial_u serial;
|
||||||
uint16_t chMaxPwr[4];
|
uint16_t chMaxPwr[4];
|
||||||
int32_t yieldCor[4]; // signed YieldTotal correction value
|
int32_t yieldCor[4]; // signed YieldTotal correction value
|
||||||
char chName[4][MAX_NAME_LENGTH];
|
char chName[4][MAX_NAME_LENGTH];
|
||||||
} cfgIv_t;
|
} cfgIv_t;
|
||||||
|
|
||||||
|
@ -124,12 +123,16 @@ typedef struct {
|
||||||
bool pwrSaveAtIvOffline;
|
bool pwrSaveAtIvOffline;
|
||||||
bool logoEn;
|
bool logoEn;
|
||||||
bool pxShift;
|
bool pxShift;
|
||||||
bool rot180;
|
uint8_t rot;
|
||||||
uint16_t wakeUp;
|
uint16_t wakeUp;
|
||||||
uint16_t sleepAt;
|
uint16_t sleepAt;
|
||||||
uint8_t contrast;
|
uint8_t contrast;
|
||||||
uint8_t pin0;
|
uint8_t disp_data;
|
||||||
uint8_t pin1;
|
uint8_t disp_clk;
|
||||||
|
uint8_t disp_cs;
|
||||||
|
uint8_t disp_reset;
|
||||||
|
uint8_t disp_busy;
|
||||||
|
uint8_t disp_dc;
|
||||||
} display_t;
|
} display_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -137,409 +140,421 @@ typedef struct {
|
||||||
} plugins_t;
|
} plugins_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
cfgSys_t sys;
|
cfgSys_t sys;
|
||||||
cfgNrf24_t nrf;
|
cfgNrf24_t nrf;
|
||||||
cfgNtp_t ntp;
|
cfgNtp_t ntp;
|
||||||
cfgSun_t sun;
|
cfgSun_t sun;
|
||||||
cfgSerial_t serial;
|
cfgSerial_t serial;
|
||||||
cfgMqtt_t mqtt;
|
cfgMqtt_t mqtt;
|
||||||
cfgLed_t led;
|
cfgLed_t led;
|
||||||
cfgInst_t inst;
|
cfgInst_t inst;
|
||||||
plugins_t plugin;
|
plugins_t plugin;
|
||||||
bool valid;
|
bool valid;
|
||||||
} settings_t;
|
} settings_t;
|
||||||
|
|
||||||
class settings {
|
class settings {
|
||||||
public:
|
public:
|
||||||
settings() {}
|
settings() {}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
DPRINTLN(DBG_INFO, F("Initializing FS .."));
|
DPRINTLN(DBG_INFO, F("Initializing FS .."));
|
||||||
|
|
||||||
mCfg.valid = false;
|
mCfg.valid = false;
|
||||||
#if !defined(ESP32)
|
#if !defined(ESP32)
|
||||||
LittleFSConfig cfg;
|
LittleFSConfig cfg;
|
||||||
cfg.setAutoFormat(false);
|
cfg.setAutoFormat(false);
|
||||||
LittleFS.setConfig(cfg);
|
LittleFS.setConfig(cfg);
|
||||||
#define LITTLFS_TRUE
|
#define LITTLFS_TRUE
|
||||||
#define LITTLFS_FALSE
|
#define LITTLFS_FALSE
|
||||||
#else
|
#else
|
||||||
#define LITTLFS_TRUE true
|
#define LITTLFS_TRUE true
|
||||||
#define LITTLFS_FALSE false
|
#define LITTLFS_FALSE false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(!LittleFS.begin(LITTLFS_FALSE)) {
|
if (!LittleFS.begin(LITTLFS_FALSE)) {
|
||||||
DPRINTLN(DBG_INFO, F(".. format .."));
|
DPRINTLN(DBG_INFO, F(".. format .."));
|
||||||
LittleFS.format();
|
LittleFS.format();
|
||||||
if(LittleFS.begin(LITTLFS_TRUE)) {
|
if (LittleFS.begin(LITTLFS_TRUE)) {
|
||||||
DPRINTLN(DBG_INFO, F(".. success"));
|
DPRINTLN(DBG_INFO, F(".. success"));
|
||||||
} else {
|
} else {
|
||||||
DPRINTLN(DBG_INFO, F(".. failed"));
|
DPRINTLN(DBG_INFO, F(".. failed"));
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
DPRINTLN(DBG_INFO, F(" .. done"));
|
|
||||||
|
|
||||||
readSettings("/settings.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
// should be used before OTA
|
|
||||||
void stop() {
|
|
||||||
LittleFS.end();
|
|
||||||
DPRINTLN(DBG_INFO, F("FS stopped"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void getPtr(settings_t *&cfg) {
|
|
||||||
cfg = &mCfg;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool getValid(void) {
|
|
||||||
return mCfg.valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
void getInfo(uint32_t *used, uint32_t *size) {
|
|
||||||
#if !defined(ESP32)
|
|
||||||
FSInfo info;
|
|
||||||
LittleFS.info(info);
|
|
||||||
*used = info.usedBytes;
|
|
||||||
*size = info.totalBytes;
|
|
||||||
|
|
||||||
DPRINTLN(DBG_INFO, F("-- FILESYSTEM INFO --"));
|
|
||||||
DPRINTLN(DBG_INFO, String(info.usedBytes) + F(" of ") + String(info.totalBytes) + F(" used"));
|
|
||||||
#else
|
|
||||||
DPRINTLN(DBG_WARN, F("not supported by ESP32"));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool readSettings(const char* path) {
|
|
||||||
loadDefaults();
|
|
||||||
File fp = LittleFS.open(path, "r");
|
|
||||||
if(!fp)
|
|
||||||
DPRINTLN(DBG_WARN, F("failed to load json, using default config"));
|
|
||||||
else {
|
|
||||||
//DPRINTLN(DBG_INFO, fp.readString());
|
|
||||||
//fp.seek(0, SeekSet);
|
|
||||||
DynamicJsonDocument root(4500);
|
|
||||||
DeserializationError err = deserializeJson(root, fp);
|
|
||||||
if(!err && (root.size() > 0)) {
|
|
||||||
mCfg.valid = true;
|
|
||||||
jsonWifi(root[F("wifi")]);
|
|
||||||
jsonNrf(root[F("nrf")]);
|
|
||||||
jsonNtp(root[F("ntp")]);
|
|
||||||
jsonSun(root[F("sun")]);
|
|
||||||
jsonSerial(root[F("serial")]);
|
|
||||||
jsonMqtt(root[F("mqtt")]);
|
|
||||||
jsonLed(root[F("led")]);
|
|
||||||
jsonPlugin(root[F("plugin")]);
|
|
||||||
jsonInst(root[F("inst")]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Serial.println(F("failed to parse json, using default config"));
|
|
||||||
}
|
|
||||||
|
|
||||||
fp.close();
|
|
||||||
}
|
|
||||||
return mCfg.valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool saveSettings(void) {
|
|
||||||
DPRINTLN(DBG_DEBUG, F("save settings"));
|
|
||||||
File fp = LittleFS.open("/settings.json", "w");
|
|
||||||
if(!fp) {
|
|
||||||
DPRINTLN(DBG_ERROR, F("can't open settings file!"));
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicJsonDocument json(5500);
|
} else
|
||||||
JsonObject root = json.to<JsonObject>();
|
DPRINTLN(DBG_INFO, F(" .. done"));
|
||||||
jsonWifi(root.createNestedObject(F("wifi")), true);
|
|
||||||
jsonNrf(root.createNestedObject(F("nrf")), true);
|
|
||||||
jsonNtp(root.createNestedObject(F("ntp")), true);
|
|
||||||
jsonSun(root.createNestedObject(F("sun")), true);
|
|
||||||
jsonSerial(root.createNestedObject(F("serial")), true);
|
|
||||||
jsonMqtt(root.createNestedObject(F("mqtt")), true);
|
|
||||||
jsonLed(root.createNestedObject(F("led")), true);
|
|
||||||
jsonPlugin(root.createNestedObject(F("plugin")), true);
|
|
||||||
jsonInst(root.createNestedObject(F("inst")), true);
|
|
||||||
|
|
||||||
if(0 == serializeJson(root, fp)) {
|
readSettings("/settings.json");
|
||||||
DPRINTLN(DBG_ERROR, F("can't write settings file!"));
|
}
|
||||||
return false;
|
|
||||||
|
// should be used before OTA
|
||||||
|
void stop() {
|
||||||
|
LittleFS.end();
|
||||||
|
DPRINTLN(DBG_INFO, F("FS stopped"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void getPtr(settings_t *&cfg) {
|
||||||
|
cfg = &mCfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getValid(void) {
|
||||||
|
return mCfg.valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
void getInfo(uint32_t *used, uint32_t *size) {
|
||||||
|
#if !defined(ESP32)
|
||||||
|
FSInfo info;
|
||||||
|
LittleFS.info(info);
|
||||||
|
*used = info.usedBytes;
|
||||||
|
*size = info.totalBytes;
|
||||||
|
|
||||||
|
DPRINTLN(DBG_INFO, F("-- FILESYSTEM INFO --"));
|
||||||
|
DPRINTLN(DBG_INFO, String(info.usedBytes) + F(" of ") + String(info.totalBytes) + F(" used"));
|
||||||
|
#else
|
||||||
|
DPRINTLN(DBG_WARN, F("not supported by ESP32"));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool readSettings(const char *path) {
|
||||||
|
loadDefaults();
|
||||||
|
File fp = LittleFS.open(path, "r");
|
||||||
|
if (!fp)
|
||||||
|
DPRINTLN(DBG_WARN, F("failed to load json, using default config"));
|
||||||
|
else {
|
||||||
|
// DPRINTLN(DBG_INFO, fp.readString());
|
||||||
|
// fp.seek(0, SeekSet);
|
||||||
|
DynamicJsonDocument root(4500);
|
||||||
|
DeserializationError err = deserializeJson(root, fp);
|
||||||
|
if (!err && (root.size() > 0)) {
|
||||||
|
mCfg.valid = true;
|
||||||
|
jsonWifi(root[F("wifi")]);
|
||||||
|
jsonNrf(root[F("nrf")]);
|
||||||
|
jsonNtp(root[F("ntp")]);
|
||||||
|
jsonSun(root[F("sun")]);
|
||||||
|
jsonSerial(root[F("serial")]);
|
||||||
|
jsonMqtt(root[F("mqtt")]);
|
||||||
|
jsonLed(root[F("led")]);
|
||||||
|
jsonPlugin(root[F("plugin")]);
|
||||||
|
jsonInst(root[F("inst")]);
|
||||||
|
} else {
|
||||||
|
Serial.println(F("failed to parse json, using default config"));
|
||||||
}
|
}
|
||||||
|
|
||||||
fp.close();
|
fp.close();
|
||||||
|
}
|
||||||
|
return mCfg.valid;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
bool saveSettings(void) {
|
||||||
|
DPRINTLN(DBG_DEBUG, F("save settings"));
|
||||||
|
File fp = LittleFS.open("/settings.json", "w");
|
||||||
|
if (!fp) {
|
||||||
|
DPRINTLN(DBG_ERROR, F("can't open settings file!"));
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool eraseSettings(bool eraseWifi = false) {
|
DynamicJsonDocument json(5500);
|
||||||
if(true == eraseWifi)
|
JsonObject root = json.to<JsonObject>();
|
||||||
return LittleFS.format();
|
jsonWifi(root.createNestedObject(F("wifi")), true);
|
||||||
loadDefaults(!eraseWifi);
|
jsonNrf(root.createNestedObject(F("nrf")), true);
|
||||||
return saveSettings();
|
jsonNtp(root.createNestedObject(F("ntp")), true);
|
||||||
|
jsonSun(root.createNestedObject(F("sun")), true);
|
||||||
|
jsonSerial(root.createNestedObject(F("serial")), true);
|
||||||
|
jsonMqtt(root.createNestedObject(F("mqtt")), true);
|
||||||
|
jsonLed(root.createNestedObject(F("led")), true);
|
||||||
|
jsonPlugin(root.createNestedObject(F("plugin")), true);
|
||||||
|
jsonInst(root.createNestedObject(F("inst")), true);
|
||||||
|
|
||||||
|
if (0 == serializeJson(root, fp)) {
|
||||||
|
DPRINTLN(DBG_ERROR, F("can't write settings file!"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
fp.close();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool eraseSettings(bool eraseWifi = false) {
|
||||||
|
if (true == eraseWifi)
|
||||||
|
return LittleFS.format();
|
||||||
|
loadDefaults(!eraseWifi);
|
||||||
|
return saveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void loadDefaults(bool keepWifi = false) {
|
||||||
|
DPRINTLN(DBG_VERBOSE, F("loadDefaults"));
|
||||||
|
|
||||||
|
cfgSys_t tmp;
|
||||||
|
if (keepWifi) {
|
||||||
|
// copy contents which should not be deleted
|
||||||
|
memset(&tmp.adminPwd, 0, PWD_LEN);
|
||||||
|
memcpy(&tmp, &mCfg.sys, sizeof(cfgSys_t));
|
||||||
|
}
|
||||||
|
// erase all settings and reset to default
|
||||||
|
memset(&mCfg, 0, sizeof(settings_t));
|
||||||
|
mCfg.sys.protectionMask = DEF_PROT_INDEX | DEF_PROT_LIVE | DEF_PROT_SERIAL | DEF_PROT_SETUP | DEF_PROT_UPDATE | DEF_PROT_SYSTEM | DEF_PROT_API | DEF_PROT_MQTT;
|
||||||
|
mCfg.sys.darkMode = false;
|
||||||
|
// restore temp settings
|
||||||
|
if (keepWifi)
|
||||||
|
memcpy(&mCfg.sys, &tmp, sizeof(cfgSys_t));
|
||||||
|
else {
|
||||||
|
snprintf(mCfg.sys.stationSsid, SSID_LEN, FB_WIFI_SSID);
|
||||||
|
snprintf(mCfg.sys.stationPwd, PWD_LEN, FB_WIFI_PWD);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
snprintf(mCfg.sys.deviceName, DEVNAME_LEN, DEF_DEVICE_NAME);
|
||||||
void loadDefaults(bool keepWifi = false) {
|
|
||||||
DPRINTLN(DBG_VERBOSE, F("loadDefaults"));
|
|
||||||
|
|
||||||
cfgSys_t tmp;
|
mCfg.nrf.sendInterval = SEND_INTERVAL;
|
||||||
if(keepWifi) {
|
mCfg.nrf.maxRetransPerPyld = DEF_MAX_RETRANS_PER_PYLD;
|
||||||
// copy contents which should not be deleted
|
mCfg.nrf.pinCs = DEF_CS_PIN;
|
||||||
memset(&tmp.adminPwd, 0, PWD_LEN);
|
mCfg.nrf.pinCe = DEF_CE_PIN;
|
||||||
memcpy(&tmp, &mCfg.sys, sizeof(cfgSys_t));
|
mCfg.nrf.pinIrq = DEF_IRQ_PIN;
|
||||||
}
|
mCfg.nrf.amplifierPower = DEF_AMPLIFIERPOWER & 0x03;
|
||||||
// erase all settings and reset to default
|
|
||||||
memset(&mCfg, 0, sizeof(settings_t));
|
|
||||||
mCfg.sys.protectionMask = DEF_PROT_INDEX | DEF_PROT_LIVE | DEF_PROT_SERIAL | DEF_PROT_SETUP
|
|
||||||
| DEF_PROT_UPDATE | DEF_PROT_SYSTEM | DEF_PROT_API | DEF_PROT_MQTT;
|
|
||||||
mCfg.sys.darkMode = false;
|
|
||||||
// restore temp settings
|
|
||||||
if(keepWifi)
|
|
||||||
memcpy(&mCfg.sys, &tmp, sizeof(cfgSys_t));
|
|
||||||
else {
|
|
||||||
snprintf(mCfg.sys.stationSsid, SSID_LEN, FB_WIFI_SSID);
|
|
||||||
snprintf(mCfg.sys.stationPwd, PWD_LEN, FB_WIFI_PWD);
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(mCfg.sys.deviceName, DEVNAME_LEN, DEF_DEVICE_NAME);
|
snprintf(mCfg.ntp.addr, NTP_ADDR_LEN, "%s", DEF_NTP_SERVER_NAME);
|
||||||
|
mCfg.ntp.port = DEF_NTP_PORT;
|
||||||
|
|
||||||
mCfg.nrf.sendInterval = SEND_INTERVAL;
|
mCfg.sun.lat = 0.0;
|
||||||
mCfg.nrf.maxRetransPerPyld = DEF_MAX_RETRANS_PER_PYLD;
|
mCfg.sun.lon = 0.0;
|
||||||
mCfg.nrf.pinCs = DEF_CS_PIN;
|
mCfg.sun.disNightCom = false;
|
||||||
mCfg.nrf.pinCe = DEF_CE_PIN;
|
mCfg.sun.offsetSec = 0;
|
||||||
mCfg.nrf.pinIrq = DEF_IRQ_PIN;
|
|
||||||
mCfg.nrf.amplifierPower = DEF_AMPLIFIERPOWER & 0x03;
|
|
||||||
|
|
||||||
snprintf(mCfg.ntp.addr, NTP_ADDR_LEN, "%s", DEF_NTP_SERVER_NAME);
|
mCfg.serial.interval = SERIAL_INTERVAL;
|
||||||
mCfg.ntp.port = DEF_NTP_PORT;
|
mCfg.serial.showIv = false;
|
||||||
|
mCfg.serial.debug = false;
|
||||||
|
|
||||||
mCfg.sun.lat = 0.0;
|
mCfg.mqtt.port = DEF_MQTT_PORT;
|
||||||
mCfg.sun.lon = 0.0;
|
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", DEF_MQTT_BROKER);
|
||||||
mCfg.sun.disNightCom = false;
|
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", DEF_MQTT_USER);
|
||||||
mCfg.sun.offsetSec = 0;
|
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", DEF_MQTT_PWD);
|
||||||
|
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", DEF_MQTT_TOPIC);
|
||||||
|
mCfg.mqtt.interval = 0; // off
|
||||||
|
|
||||||
mCfg.serial.interval = SERIAL_INTERVAL;
|
mCfg.inst.rstYieldMidNight = false;
|
||||||
mCfg.serial.showIv = false;
|
mCfg.inst.rstValsNotAvail = false;
|
||||||
mCfg.serial.debug = false;
|
mCfg.inst.rstValsCommStop = false;
|
||||||
|
|
||||||
mCfg.mqtt.port = DEF_MQTT_PORT;
|
mCfg.led.led0 = DEF_PIN_OFF;
|
||||||
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", DEF_MQTT_BROKER);
|
mCfg.led.led1 = DEF_PIN_OFF;
|
||||||
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", DEF_MQTT_USER);
|
|
||||||
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", DEF_MQTT_PWD);
|
|
||||||
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", DEF_MQTT_TOPIC);
|
|
||||||
mCfg.mqtt.interval = 0; // off
|
|
||||||
|
|
||||||
mCfg.inst.rstYieldMidNight = false;
|
memset(&mCfg.inst, 0, sizeof(cfgInst_t));
|
||||||
mCfg.inst.rstValsNotAvail = false;
|
|
||||||
mCfg.inst.rstValsCommStop = false;
|
|
||||||
|
|
||||||
mCfg.led.led0 = DEF_PIN_OFF;
|
mCfg.plugin.display.pwrSaveAtIvOffline = false;
|
||||||
mCfg.led.led1 = DEF_PIN_OFF;
|
mCfg.plugin.display.contrast = 60;
|
||||||
|
mCfg.plugin.display.logoEn = true;
|
||||||
|
mCfg.plugin.display.pxShift = true;
|
||||||
|
mCfg.plugin.display.rot = 0;
|
||||||
|
mCfg.plugin.display.disp_data = DEF_PIN_OFF; // SDA
|
||||||
|
mCfg.plugin.display.disp_clk = DEF_PIN_OFF; // SCL
|
||||||
|
mCfg.plugin.display.disp_cs = DEF_PIN_OFF;
|
||||||
|
mCfg.plugin.display.disp_reset = DEF_PIN_OFF;
|
||||||
|
mCfg.plugin.display.disp_busy = DEF_PIN_OFF;
|
||||||
|
mCfg.plugin.display.disp_dc = DEF_PIN_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
memset(&mCfg.inst, 0, sizeof(cfgInst_t));
|
void jsonWifi(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
char buf[16];
|
||||||
|
obj[F("ssid")] = mCfg.sys.stationSsid;
|
||||||
|
obj[F("pwd")] = mCfg.sys.stationPwd;
|
||||||
|
obj[F("dev")] = mCfg.sys.deviceName;
|
||||||
|
obj[F("adm")] = mCfg.sys.adminPwd;
|
||||||
|
obj[F("prot_mask")] = mCfg.sys.protectionMask;
|
||||||
|
obj[F("dark")] = mCfg.sys.darkMode;
|
||||||
|
ah::ip2Char(mCfg.sys.ip.ip, buf);
|
||||||
|
obj[F("ip")] = String(buf);
|
||||||
|
ah::ip2Char(mCfg.sys.ip.mask, buf);
|
||||||
|
obj[F("mask")] = String(buf);
|
||||||
|
ah::ip2Char(mCfg.sys.ip.dns1, buf);
|
||||||
|
obj[F("dns1")] = String(buf);
|
||||||
|
ah::ip2Char(mCfg.sys.ip.dns2, buf);
|
||||||
|
obj[F("dns2")] = String(buf);
|
||||||
|
ah::ip2Char(mCfg.sys.ip.gateway, buf);
|
||||||
|
obj[F("gtwy")] = String(buf);
|
||||||
|
} else {
|
||||||
|
snprintf(mCfg.sys.stationSsid, SSID_LEN, "%s", obj[F("ssid")].as<const char *>());
|
||||||
|
snprintf(mCfg.sys.stationPwd, PWD_LEN, "%s", obj[F("pwd")].as<const char *>());
|
||||||
|
snprintf(mCfg.sys.deviceName, DEVNAME_LEN, "%s", obj[F("dev")].as<const char *>());
|
||||||
|
snprintf(mCfg.sys.adminPwd, PWD_LEN, "%s", obj[F("adm")].as<const char *>());
|
||||||
|
mCfg.sys.protectionMask = obj[F("prot_mask")];
|
||||||
|
mCfg.sys.darkMode = obj[F("dark")];
|
||||||
|
ah::ip2Arr(mCfg.sys.ip.ip, obj[F("ip")].as<const char *>());
|
||||||
|
ah::ip2Arr(mCfg.sys.ip.mask, obj[F("mask")].as<const char *>());
|
||||||
|
ah::ip2Arr(mCfg.sys.ip.dns1, obj[F("dns1")].as<const char *>());
|
||||||
|
ah::ip2Arr(mCfg.sys.ip.dns2, obj[F("dns2")].as<const char *>());
|
||||||
|
ah::ip2Arr(mCfg.sys.ip.gateway, obj[F("gtwy")].as<const char *>());
|
||||||
|
|
||||||
mCfg.plugin.display.pwrSaveAtIvOffline = false;
|
if (mCfg.sys.protectionMask == 0)
|
||||||
mCfg.plugin.display.contrast = 60;
|
mCfg.sys.protectionMask = DEF_PROT_INDEX | DEF_PROT_LIVE | DEF_PROT_SERIAL | DEF_PROT_SETUP | DEF_PROT_UPDATE | DEF_PROT_SYSTEM | DEF_PROT_API | DEF_PROT_MQTT;
|
||||||
mCfg.plugin.display.logoEn = true;
|
}
|
||||||
mCfg.plugin.display.pxShift = true;
|
}
|
||||||
mCfg.plugin.display.rot180 = false;
|
|
||||||
mCfg.plugin.display.pin0 = DEF_PIN_OFF; // SCL
|
void jsonNrf(JsonObject obj, bool set = false) {
|
||||||
mCfg.plugin.display.pin1 = DEF_PIN_OFF; // SDA
|
if (set) {
|
||||||
|
obj[F("intvl")] = mCfg.nrf.sendInterval;
|
||||||
|
obj[F("maxRetry")] = mCfg.nrf.maxRetransPerPyld;
|
||||||
|
obj[F("cs")] = mCfg.nrf.pinCs;
|
||||||
|
obj[F("ce")] = mCfg.nrf.pinCe;
|
||||||
|
obj[F("irq")] = mCfg.nrf.pinIrq;
|
||||||
|
obj[F("pwr")] = mCfg.nrf.amplifierPower;
|
||||||
|
} else {
|
||||||
|
mCfg.nrf.sendInterval = obj[F("intvl")];
|
||||||
|
mCfg.nrf.maxRetransPerPyld = obj[F("maxRetry")];
|
||||||
|
mCfg.nrf.pinCs = obj[F("cs")];
|
||||||
|
mCfg.nrf.pinCe = obj[F("ce")];
|
||||||
|
mCfg.nrf.pinIrq = obj[F("irq")];
|
||||||
|
mCfg.nrf.amplifierPower = obj[F("pwr")];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jsonNtp(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
obj[F("addr")] = mCfg.ntp.addr;
|
||||||
|
obj[F("port")] = mCfg.ntp.port;
|
||||||
|
} else {
|
||||||
|
snprintf(mCfg.ntp.addr, NTP_ADDR_LEN, "%s", obj[F("addr")].as<const char *>());
|
||||||
|
mCfg.ntp.port = obj[F("port")];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jsonSun(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
obj[F("lat")] = mCfg.sun.lat;
|
||||||
|
obj[F("lon")] = mCfg.sun.lon;
|
||||||
|
obj[F("dis")] = mCfg.sun.disNightCom;
|
||||||
|
obj[F("offs")] = mCfg.sun.offsetSec;
|
||||||
|
} else {
|
||||||
|
mCfg.sun.lat = obj[F("lat")];
|
||||||
|
mCfg.sun.lon = obj[F("lon")];
|
||||||
|
mCfg.sun.disNightCom = obj[F("dis")];
|
||||||
|
mCfg.sun.offsetSec = obj[F("offs")];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jsonSerial(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
obj[F("intvl")] = mCfg.serial.interval;
|
||||||
|
obj[F("show")] = mCfg.serial.showIv;
|
||||||
|
obj[F("debug")] = mCfg.serial.debug;
|
||||||
|
} else {
|
||||||
|
mCfg.serial.interval = obj[F("intvl")];
|
||||||
|
mCfg.serial.showIv = obj[F("show")];
|
||||||
|
mCfg.serial.debug = obj[F("debug")];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jsonMqtt(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
obj[F("broker")] = mCfg.mqtt.broker;
|
||||||
|
obj[F("port")] = mCfg.mqtt.port;
|
||||||
|
obj[F("user")] = mCfg.mqtt.user;
|
||||||
|
obj[F("pwd")] = mCfg.mqtt.pwd;
|
||||||
|
obj[F("topic")] = mCfg.mqtt.topic;
|
||||||
|
obj[F("intvl")] = mCfg.mqtt.interval;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
mCfg.mqtt.port = obj[F("port")];
|
||||||
|
mCfg.mqtt.interval = obj[F("intvl")];
|
||||||
|
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", obj[F("broker")].as<const char *>());
|
||||||
|
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", obj[F("user")].as<const char *>());
|
||||||
|
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", obj[F("pwd")].as<const char *>());
|
||||||
|
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", obj[F("topic")].as<const char *>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jsonLed(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
obj[F("0")] = mCfg.led.led0;
|
||||||
|
obj[F("1")] = mCfg.led.led1;
|
||||||
|
} else {
|
||||||
|
mCfg.led.led0 = obj[F("0")];
|
||||||
|
mCfg.led.led1 = obj[F("1")];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jsonPlugin(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
JsonObject disp = obj.createNestedObject("disp");
|
||||||
|
disp[F("type")] = mCfg.plugin.display.type;
|
||||||
|
disp[F("pwrSafe")] = (bool)mCfg.plugin.display.pwrSaveAtIvOffline;
|
||||||
|
disp[F("logo")] = (bool)mCfg.plugin.display.logoEn;
|
||||||
|
disp[F("pxShift")] = (bool)mCfg.plugin.display.pxShift;
|
||||||
|
disp[F("rotation")] = mCfg.plugin.display.rot;
|
||||||
|
disp[F("wake")] = mCfg.plugin.display.wakeUp;
|
||||||
|
disp[F("sleep")] = mCfg.plugin.display.sleepAt;
|
||||||
|
disp[F("contrast")] = mCfg.plugin.display.contrast;
|
||||||
|
disp[F("data")] = mCfg.plugin.display.disp_data;
|
||||||
|
disp[F("clock")] = mCfg.plugin.display.disp_clk;
|
||||||
|
disp[F("cs")] = mCfg.plugin.display.disp_cs;
|
||||||
|
disp[F("reset")] = mCfg.plugin.display.disp_reset;
|
||||||
|
disp[F("busy")] = mCfg.plugin.display.disp_busy;
|
||||||
|
disp[F("dc")] = mCfg.plugin.display.disp_dc;
|
||||||
|
} else {
|
||||||
|
JsonObject disp = obj["disp"];
|
||||||
|
mCfg.plugin.display.type = disp[F("type")];
|
||||||
|
mCfg.plugin.display.pwrSaveAtIvOffline = (bool)disp[F("pwrSafe")];
|
||||||
|
mCfg.plugin.display.logoEn = (bool)disp[F("logo")];
|
||||||
|
mCfg.plugin.display.pxShift = (bool)disp[F("pxShift")];
|
||||||
|
mCfg.plugin.display.rot = disp[F("rotation")];
|
||||||
|
mCfg.plugin.display.wakeUp = disp[F("wake")];
|
||||||
|
mCfg.plugin.display.sleepAt = disp[F("sleep")];
|
||||||
|
mCfg.plugin.display.contrast = disp[F("contrast")];
|
||||||
|
mCfg.plugin.display.disp_data = disp[F("data")];
|
||||||
|
mCfg.plugin.display.disp_clk = disp[F("clock")];
|
||||||
|
mCfg.plugin.display.disp_cs = disp[F("cs")];
|
||||||
|
mCfg.plugin.display.disp_reset = disp[F("reset")];
|
||||||
|
mCfg.plugin.display.disp_busy = disp[F("busy")];
|
||||||
|
mCfg.plugin.display.disp_dc = disp[F("dc")];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void jsonInst(JsonObject obj, bool set = false) {
|
||||||
|
if (set) {
|
||||||
|
obj[F("en")] = (bool)mCfg.inst.enabled;
|
||||||
|
obj[F("rstMidNight")] = (bool)mCfg.inst.rstYieldMidNight;
|
||||||
|
obj[F("rstNotAvail")] = (bool)mCfg.inst.rstValsNotAvail;
|
||||||
|
obj[F("rstComStop")] = (bool)mCfg.inst.rstValsCommStop;
|
||||||
|
} else {
|
||||||
|
mCfg.inst.enabled = (bool)obj[F("en")];
|
||||||
|
mCfg.inst.rstYieldMidNight = (bool)obj["rstMidNight"];
|
||||||
|
mCfg.inst.rstValsNotAvail = (bool)obj["rstNotAvail"];
|
||||||
|
mCfg.inst.rstValsCommStop = (bool)obj["rstComStop"];
|
||||||
}
|
}
|
||||||
|
|
||||||
void jsonWifi(JsonObject obj, bool set = false) {
|
JsonArray ivArr;
|
||||||
if(set) {
|
if (set)
|
||||||
char buf[16];
|
ivArr = obj.createNestedArray(F("iv"));
|
||||||
obj[F("ssid")] = mCfg.sys.stationSsid;
|
for (uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
|
||||||
obj[F("pwd")] = mCfg.sys.stationPwd;
|
if (set)
|
||||||
obj[F("dev")] = mCfg.sys.deviceName;
|
jsonIv(ivArr.createNestedObject(), &mCfg.inst.iv[i], true);
|
||||||
obj[F("adm")] = mCfg.sys.adminPwd;
|
else
|
||||||
obj[F("prot_mask")] = mCfg.sys.protectionMask;
|
jsonIv(obj[F("iv")][i], &mCfg.inst.iv[i]);
|
||||||
obj[F("dark")] = mCfg.sys.darkMode;
|
}
|
||||||
ah::ip2Char(mCfg.sys.ip.ip, buf); obj[F("ip")] = String(buf);
|
}
|
||||||
ah::ip2Char(mCfg.sys.ip.mask, buf); obj[F("mask")] = String(buf);
|
|
||||||
ah::ip2Char(mCfg.sys.ip.dns1, buf); obj[F("dns1")] = String(buf);
|
|
||||||
ah::ip2Char(mCfg.sys.ip.dns2, buf); obj[F("dns2")] = String(buf);
|
|
||||||
ah::ip2Char(mCfg.sys.ip.gateway, buf); obj[F("gtwy")] = String(buf);
|
|
||||||
} else {
|
|
||||||
snprintf(mCfg.sys.stationSsid, SSID_LEN, "%s", obj[F("ssid")].as<const char*>());
|
|
||||||
snprintf(mCfg.sys.stationPwd, PWD_LEN, "%s", obj[F("pwd")].as<const char*>());
|
|
||||||
snprintf(mCfg.sys.deviceName, DEVNAME_LEN, "%s", obj[F("dev")].as<const char*>());
|
|
||||||
snprintf(mCfg.sys.adminPwd, PWD_LEN, "%s", obj[F("adm")].as<const char*>());
|
|
||||||
mCfg.sys.protectionMask = obj[F("prot_mask")];
|
|
||||||
mCfg.sys.darkMode = obj[F("dark")];
|
|
||||||
ah::ip2Arr(mCfg.sys.ip.ip, obj[F("ip")].as<const char*>());
|
|
||||||
ah::ip2Arr(mCfg.sys.ip.mask, obj[F("mask")].as<const char*>());
|
|
||||||
ah::ip2Arr(mCfg.sys.ip.dns1, obj[F("dns1")].as<const char*>());
|
|
||||||
ah::ip2Arr(mCfg.sys.ip.dns2, obj[F("dns2")].as<const char*>());
|
|
||||||
ah::ip2Arr(mCfg.sys.ip.gateway, obj[F("gtwy")].as<const char*>());
|
|
||||||
|
|
||||||
if(mCfg.sys.protectionMask == 0)
|
void jsonIv(JsonObject obj, cfgIv_t *cfg, bool set = false) {
|
||||||
mCfg.sys.protectionMask = DEF_PROT_INDEX | DEF_PROT_LIVE | DEF_PROT_SERIAL | DEF_PROT_SETUP
|
if (set) {
|
||||||
| DEF_PROT_UPDATE | DEF_PROT_SYSTEM | DEF_PROT_API | DEF_PROT_MQTT;
|
obj[F("en")] = (bool)cfg->enabled;
|
||||||
|
obj[F("name")] = cfg->name;
|
||||||
|
obj[F("sn")] = cfg->serial.u64;
|
||||||
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
|
obj[F("yield")][i] = cfg->yieldCor[i];
|
||||||
|
obj[F("pwr")][i] = cfg->chMaxPwr[i];
|
||||||
|
obj[F("chName")][i] = cfg->chName[i];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cfg->enabled = (bool)obj[F("en")];
|
||||||
|
snprintf(cfg->name, MAX_NAME_LENGTH, "%s", obj[F("name")].as<const char *>());
|
||||||
|
cfg->serial.u64 = obj[F("sn")];
|
||||||
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
|
cfg->yieldCor[i] = obj[F("yield")][i];
|
||||||
|
cfg->chMaxPwr[i] = obj[F("pwr")][i];
|
||||||
|
snprintf(cfg->chName[i], MAX_NAME_LENGTH, "%s", obj[F("chName")][i].as<const char *>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void jsonNrf(JsonObject obj, bool set = false) {
|
settings_t mCfg;
|
||||||
if(set) {
|
|
||||||
obj[F("intvl")] = mCfg.nrf.sendInterval;
|
|
||||||
obj[F("maxRetry")] = mCfg.nrf.maxRetransPerPyld;
|
|
||||||
obj[F("cs")] = mCfg.nrf.pinCs;
|
|
||||||
obj[F("ce")] = mCfg.nrf.pinCe;
|
|
||||||
obj[F("irq")] = mCfg.nrf.pinIrq;
|
|
||||||
obj[F("pwr")] = mCfg.nrf.amplifierPower;
|
|
||||||
} else {
|
|
||||||
mCfg.nrf.sendInterval = obj[F("intvl")];
|
|
||||||
mCfg.nrf.maxRetransPerPyld = obj[F("maxRetry")];
|
|
||||||
mCfg.nrf.pinCs = obj[F("cs")];
|
|
||||||
mCfg.nrf.pinCe = obj[F("ce")];
|
|
||||||
mCfg.nrf.pinIrq = obj[F("irq")];
|
|
||||||
mCfg.nrf.amplifierPower = obj[F("pwr")];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonNtp(JsonObject obj, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
obj[F("addr")] = mCfg.ntp.addr;
|
|
||||||
obj[F("port")] = mCfg.ntp.port;
|
|
||||||
} else {
|
|
||||||
snprintf(mCfg.ntp.addr, NTP_ADDR_LEN, "%s", obj[F("addr")].as<const char*>());
|
|
||||||
mCfg.ntp.port = obj[F("port")];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonSun(JsonObject obj, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
obj[F("lat")] = mCfg.sun.lat;
|
|
||||||
obj[F("lon")] = mCfg.sun.lon;
|
|
||||||
obj[F("dis")] = mCfg.sun.disNightCom;
|
|
||||||
obj[F("offs")] = mCfg.sun.offsetSec;
|
|
||||||
} else {
|
|
||||||
mCfg.sun.lat = obj[F("lat")];
|
|
||||||
mCfg.sun.lon = obj[F("lon")];
|
|
||||||
mCfg.sun.disNightCom = obj[F("dis")];
|
|
||||||
mCfg.sun.offsetSec = obj[F("offs")];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonSerial(JsonObject obj, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
obj[F("intvl")] = mCfg.serial.interval;
|
|
||||||
obj[F("show")] = mCfg.serial.showIv;
|
|
||||||
obj[F("debug")] = mCfg.serial.debug;
|
|
||||||
} else {
|
|
||||||
mCfg.serial.interval = obj[F("intvl")];
|
|
||||||
mCfg.serial.showIv = obj[F("show")];
|
|
||||||
mCfg.serial.debug = obj[F("debug")];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonMqtt(JsonObject obj, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
obj[F("broker")] = mCfg.mqtt.broker;
|
|
||||||
obj[F("port")] = mCfg.mqtt.port;
|
|
||||||
obj[F("user")] = mCfg.mqtt.user;
|
|
||||||
obj[F("pwd")] = mCfg.mqtt.pwd;
|
|
||||||
obj[F("topic")] = mCfg.mqtt.topic;
|
|
||||||
obj[F("intvl")] = mCfg.mqtt.interval;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
mCfg.mqtt.port = obj[F("port")];
|
|
||||||
mCfg.mqtt.interval = obj[F("intvl")];
|
|
||||||
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", obj[F("broker")].as<const char*>());
|
|
||||||
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", obj[F("user")].as<const char*>());
|
|
||||||
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", obj[F("pwd")].as<const char*>());
|
|
||||||
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", obj[F("topic")].as<const char*>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonLed(JsonObject obj, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
obj[F("0")] = mCfg.led.led0;
|
|
||||||
obj[F("1")] = mCfg.led.led1;
|
|
||||||
} else {
|
|
||||||
mCfg.led.led0 = obj[F("0")];
|
|
||||||
mCfg.led.led1 = obj[F("1")];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonPlugin(JsonObject obj, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
JsonObject disp = obj.createNestedObject("disp");
|
|
||||||
disp[F("type")] = mCfg.plugin.display.type;
|
|
||||||
disp[F("pwrSafe")] = (bool)mCfg.plugin.display.pwrSaveAtIvOffline;
|
|
||||||
disp[F("logo")] = (bool)mCfg.plugin.display.logoEn;
|
|
||||||
disp[F("pxShift")] = (bool)mCfg.plugin.display.pxShift;
|
|
||||||
disp[F("rot180")] = (bool)mCfg.plugin.display.rot180;
|
|
||||||
disp[F("wake")] = mCfg.plugin.display.wakeUp;
|
|
||||||
disp[F("sleep")] = mCfg.plugin.display.sleepAt;
|
|
||||||
disp[F("contrast")] = mCfg.plugin.display.contrast;
|
|
||||||
disp[F("pin0")] = mCfg.plugin.display.pin0;
|
|
||||||
disp[F("pin1")] = mCfg.plugin.display.pin1;
|
|
||||||
} else {
|
|
||||||
JsonObject disp = obj["disp"];
|
|
||||||
mCfg.plugin.display.type = disp[F("type")];
|
|
||||||
mCfg.plugin.display.pwrSaveAtIvOffline = (bool) disp[F("pwrSafe")];
|
|
||||||
mCfg.plugin.display.logoEn = (bool) disp[F("logo")];
|
|
||||||
mCfg.plugin.display.pxShift = (bool) disp[F("pxShift")];
|
|
||||||
mCfg.plugin.display.rot180 = (bool) disp[F("rot180")];
|
|
||||||
mCfg.plugin.display.wakeUp = disp[F("wake")];
|
|
||||||
mCfg.plugin.display.sleepAt = disp[F("sleep")];
|
|
||||||
mCfg.plugin.display.contrast = disp[F("contrast")];
|
|
||||||
mCfg.plugin.display.pin0 = disp[F("pin0")];
|
|
||||||
mCfg.plugin.display.pin1 = disp[F("pin1")];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonInst(JsonObject obj, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
obj[F("en")] = (bool)mCfg.inst.enabled;
|
|
||||||
obj[F("rstMidNight")] = (bool)mCfg.inst.rstYieldMidNight;
|
|
||||||
obj[F("rstNotAvail")] = (bool)mCfg.inst.rstValsNotAvail;
|
|
||||||
obj[F("rstComStop")] = (bool)mCfg.inst.rstValsCommStop;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mCfg.inst.enabled = (bool)obj[F("en")];
|
|
||||||
mCfg.inst.rstYieldMidNight = (bool)obj["rstMidNight"];
|
|
||||||
mCfg.inst.rstValsNotAvail = (bool)obj["rstNotAvail"];
|
|
||||||
mCfg.inst.rstValsCommStop = (bool)obj["rstComStop"];
|
|
||||||
}
|
|
||||||
|
|
||||||
JsonArray ivArr;
|
|
||||||
if(set)
|
|
||||||
ivArr = obj.createNestedArray(F("iv"));
|
|
||||||
for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
|
|
||||||
if(set)
|
|
||||||
jsonIv(ivArr.createNestedObject(), &mCfg.inst.iv[i], true);
|
|
||||||
else
|
|
||||||
jsonIv(obj[F("iv")][i], &mCfg.inst.iv[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jsonIv(JsonObject obj, cfgIv_t *cfg, bool set = false) {
|
|
||||||
if(set) {
|
|
||||||
obj[F("en")] = (bool)cfg->enabled;
|
|
||||||
obj[F("name")] = cfg->name;
|
|
||||||
obj[F("sn")] = cfg->serial.u64;
|
|
||||||
for(uint8_t i = 0; i < 4; i++) {
|
|
||||||
obj[F("yield")][i] = cfg->yieldCor[i];
|
|
||||||
obj[F("pwr")][i] = cfg->chMaxPwr[i];
|
|
||||||
obj[F("chName")][i] = cfg->chName[i];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cfg->enabled = (bool)obj[F("en")];
|
|
||||||
snprintf(cfg->name, MAX_NAME_LENGTH, "%s", obj[F("name")].as<const char*>());
|
|
||||||
cfg->serial.u64 = obj[F("sn")];
|
|
||||||
for(uint8_t i = 0; i < 4; i++) {
|
|
||||||
cfg->yieldCor[i] = obj[F("yield")][i];
|
|
||||||
cfg->chMaxPwr[i] = obj[F("pwr")][i];
|
|
||||||
snprintf(cfg->chName[i], MAX_NAME_LENGTH, "%s", obj[F("chName")][i].as<const char*>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
settings_t mCfg;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*__SETTINGS_H__*/
|
#endif /*__SETTINGS_H__*/
|
||||||
|
|
|
@ -41,6 +41,7 @@ lib_deps =
|
||||||
bblanchon/ArduinoJson
|
bblanchon/ArduinoJson
|
||||||
https://github.com/JChristensen/Timezone
|
https://github.com/JChristensen/Timezone
|
||||||
olikraus/U8g2
|
olikraus/U8g2
|
||||||
|
zinggjm/GxEPD2@^1.5.0
|
||||||
;esp8266/DNSServer
|
;esp8266/DNSServer
|
||||||
;esp8266/EEPROM
|
;esp8266/EEPROM
|
||||||
;esp8266/ESP8266WiFi
|
;esp8266/ESP8266WiFi
|
||||||
|
|
142
src/plugins/MonochromeDisplay/Display_Mono.cpp
Normal file
142
src/plugins/MonochromeDisplay/Display_Mono.cpp
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#include "Display_Mono.h"
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include "WiFi.h"
|
||||||
|
#include "imagedata.h"
|
||||||
|
|
||||||
|
#ifdef U8X8_HAVE_HW_SPI
|
||||||
|
#include <SPI.h>
|
||||||
|
#endif
|
||||||
|
#ifdef U8X8_HAVE_HW_I2C
|
||||||
|
#include <Wire.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::map<uint8_t, std::function<U8G2*(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)>> mono_types = {
|
||||||
|
{1, [](uint8_t reset, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc) { return new U8G2_PCD8544_84X48_F_4W_SW_SPI(U8G2_R2, clock, data, cs, dc, reset); }},
|
||||||
|
{2, [](uint8_t reset, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc) { return new U8G2_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0, reset, clock, data); }},
|
||||||
|
{3, [](uint8_t reset, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc) { return new U8G2_SH1106_128X64_NONAME_F_HW_I2C(U8G2_R0, reset, clock, data); }},
|
||||||
|
};
|
||||||
|
|
||||||
|
DisplayMonoClass::DisplayMonoClass() {
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayMonoClass::~DisplayMonoClass() {
|
||||||
|
delete _display;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayMonoClass::calcLineHeights() {
|
||||||
|
uint8_t yOff = 0;
|
||||||
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
|
setFont(i);
|
||||||
|
yOff += (_display->getMaxCharHeight());
|
||||||
|
mLineOffsets[i] = yOff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void DisplayMonoClass::setFont(uint8_t line) {
|
||||||
|
switch (line) {
|
||||||
|
case 0:
|
||||||
|
_display->setFont((_mIsLarge) ? u8g2_font_ncenB14_tr : u8g2_font_logisoso16_tr);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
_display->setFont(u8g2_font_5x8_tr);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
_display->setFont((_mIsLarge) ? u8g2_font_ncenB10_tr : u8g2_font_5x8_tr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayMonoClass::printText(const char* text, uint8_t line, uint8_t dispX = 5) {
|
||||||
|
if (!_mIsLarge) {
|
||||||
|
dispX = (line == 0) ? 5 : 0;
|
||||||
|
} else {
|
||||||
|
dispX = (line == 0) ? 20 : 5;
|
||||||
|
}
|
||||||
|
setFont(line);
|
||||||
|
|
||||||
|
dispX += enableScreensaver ? (_mExtra % 7) : 0;
|
||||||
|
_display->drawStr(dispX, mLineOffsets[line], text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayMonoClass::init(uint8_t _type, uint8_t _CS, uint8_t _DC, uint8_t _RST, uint8_t _BUSY, uint8_t _SCK, uint8_t _MOSI) {
|
||||||
|
if (0 < _type < 4) {
|
||||||
|
auto constructor = mono_types[_type];
|
||||||
|
_display = constructor(_RST, _SCK, _MOSI, _CS, _DC);
|
||||||
|
_display->begin();
|
||||||
|
_display->setDisplayRotation(disp_rotation);
|
||||||
|
|
||||||
|
_mIsLarge = (_display->getWidth() > 100);
|
||||||
|
calcLineHeights();
|
||||||
|
|
||||||
|
_display->clearBuffer();
|
||||||
|
if (contrast < 255) {
|
||||||
|
_display->setContrast(contrast);
|
||||||
|
}
|
||||||
|
printText("OpenDTU!", 0);
|
||||||
|
_display->sendBuffer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayMonoClass::loop(float totalPower, float totalYieldDay, float totalYieldTotal, uint8_t isprod) {
|
||||||
|
_display->clearBuffer();
|
||||||
|
|
||||||
|
// set Contrast of the Display to raise the lifetime
|
||||||
|
if (contrast < 255) {
|
||||||
|
_display->setContrast(contrast);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=====> Actual Production ==========
|
||||||
|
if ((totalPower > 0) && (isprod > 0)) {
|
||||||
|
_display->setPowerSave(false);
|
||||||
|
if (totalPower > 999) {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "%2.2f kW", (totalPower / 1000));
|
||||||
|
} else {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "%3.0f W", totalPower);
|
||||||
|
}
|
||||||
|
printText(_fmtText, 0);
|
||||||
|
_previousMillis = millis();
|
||||||
|
}
|
||||||
|
//<=======================
|
||||||
|
|
||||||
|
//=====> Offline ===========
|
||||||
|
else {
|
||||||
|
printText("offline", 0);
|
||||||
|
// check if it's time to enter power saving mode
|
||||||
|
if (millis() - _previousMillis >= (_mTimeout * 2)) {
|
||||||
|
_display->setPowerSave(enablePowerSafe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//<=======================
|
||||||
|
|
||||||
|
//=====> Today & Total Production =======
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "today: %4.0f Wh", totalYieldDay);
|
||||||
|
printText(_fmtText, 1);
|
||||||
|
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "total: %.1f kWh", totalYieldTotal);
|
||||||
|
printText(_fmtText, 2);
|
||||||
|
//<=======================
|
||||||
|
|
||||||
|
//=====> IP or Date-Time ========
|
||||||
|
if (!(_mExtra % 10) && WiFi.localIP()) {
|
||||||
|
printText(WiFi.localIP().toString().c_str(), 3);
|
||||||
|
} else if (!(_mExtra % 5)) {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "#%d Inverter online", isprod);
|
||||||
|
printText(_fmtText, 3);
|
||||||
|
} else {
|
||||||
|
time_t now = time(nullptr);
|
||||||
|
strftime(_fmtText, sizeof(_fmtText), "%d.%m.%Y %H:%M", localtime(&now));
|
||||||
|
printText(_fmtText, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
_display->sendBuffer();
|
||||||
|
|
||||||
|
_dispY = 0;
|
||||||
|
_mExtra++;
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayMonoClass DisplayMono;
|
40
src/plugins/MonochromeDisplay/Display_Mono.h
Normal file
40
src/plugins/MonochromeDisplay/Display_Mono.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <U8g2lib.h>
|
||||||
|
|
||||||
|
class DisplayMonoClass {
|
||||||
|
public:
|
||||||
|
DisplayMonoClass();
|
||||||
|
~DisplayMonoClass();
|
||||||
|
|
||||||
|
void init(uint8_t type, uint8_t _CS, uint8_t _DC, uint8_t _RST, uint8_t _BUSY, uint8_t _SCK, uint8_t _MOSI);
|
||||||
|
|
||||||
|
void loop(float totalPower, float totalYieldDay, float totalYieldTotal, uint8_t isprod);
|
||||||
|
|
||||||
|
bool enablePowerSafe = true;
|
||||||
|
bool enableScreensaver = true;
|
||||||
|
const u8g2_cb_t* disp_rotation = U8G2_R2;
|
||||||
|
uint8_t contrast = 60;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void calcLineHeights();
|
||||||
|
void setFont(uint8_t line);
|
||||||
|
void printText(const char* text, uint8_t line, uint8_t dispX);
|
||||||
|
|
||||||
|
U8G2* _display;
|
||||||
|
|
||||||
|
bool _mIsLarge = false;
|
||||||
|
uint8_t mLoopCnt;
|
||||||
|
uint32_t* mUtcTs;
|
||||||
|
uint8_t mLineOffsets[5];
|
||||||
|
|
||||||
|
uint16_t _dispY = 0;
|
||||||
|
uint32_t _previousMillis = 0;
|
||||||
|
|
||||||
|
uint8_t _mExtra;
|
||||||
|
uint16_t _mTimeout; // interval at which to power save (milliseconds)
|
||||||
|
char _fmtText[32];
|
||||||
|
};
|
||||||
|
|
||||||
|
extern DisplayMonoClass DisplayMono;
|
191
src/plugins/MonochromeDisplay/Display_ePaper.cpp
Normal file
191
src/plugins/MonochromeDisplay/Display_ePaper.cpp
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
#include "Display_ePaper.h"
|
||||||
|
|
||||||
|
#include "WiFi.h"
|
||||||
|
#include "imagedata.h"
|
||||||
|
|
||||||
|
static const uint32_t spiClk = 4000000; // 4 MHz
|
||||||
|
|
||||||
|
#if defined(ESP32) && defined(USE_HSPI_FOR_EPD)
|
||||||
|
SPIClass hspi(HSPI);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::map<uint8_t, std::function<GxEPD2_GFX*(uint8_t, uint8_t, uint8_t, uint8_t)>> _ePaperTypes = {
|
||||||
|
// DEPG0150BN 200x200, SSD1681, TTGO T5 V2.4.1
|
||||||
|
{4, [](uint8_t _CS, uint8_t _DC, uint8_t _RST, uint8_t _BUSY) { return new GxEPD2_BW<GxEPD2_150_BN, GxEPD2_150_BN::HEIGHT>(GxEPD2_150_BN(_CS, _DC, _RST, _BUSY)); }},
|
||||||
|
// GDEW027C44 2.7 " b/w/r 176x264, IL91874
|
||||||
|
//{DisplayType_t::ePaper270, [](uint8_t _CS, uint8_t _DC, uint8_t _RST, uint8_t _BUSY)
|
||||||
|
// F { return new GxEPD2_3C<GxEPD2_270c, GxEPD2_270c::HEIGHT>(GxEPD2_270c(_CS, _DC, _RST, _BUSY)); }},
|
||||||
|
};
|
||||||
|
|
||||||
|
DisplayEPaperClass::DisplayEPaperClass() {
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayEPaperClass::~DisplayEPaperClass() {
|
||||||
|
delete _display;
|
||||||
|
}
|
||||||
|
//***************************************************************************
|
||||||
|
void DisplayEPaperClass::init(uint8_t type, uint8_t _CS, uint8_t _DC, uint8_t _RST, uint8_t _BUSY, uint8_t _SCK, uint8_t _MOSI) {
|
||||||
|
if (type > 3) {
|
||||||
|
Serial.begin(115200);
|
||||||
|
auto constructor = _ePaperTypes[type];
|
||||||
|
_display = constructor(_CS, _DC, _RST, _BUSY);
|
||||||
|
hspi.begin(_SCK, _BUSY, _MOSI, _CS);
|
||||||
|
|
||||||
|
#if defined(ESP32) && defined(USE_HSPI_FOR_EPD)
|
||||||
|
_display->epd2.selectSPI(hspi, SPISettings(spiClk, MSBFIRST, SPI_MODE0));
|
||||||
|
#endif
|
||||||
|
_display->init(115200, true, 2, false);
|
||||||
|
_display->setRotation(displayRotation);
|
||||||
|
_display->setFullWindow();
|
||||||
|
|
||||||
|
// Logo
|
||||||
|
_display->fillScreen(GxEPD_BLACK);
|
||||||
|
_display->drawBitmap(0, 0, AhoyLogo, 200, 200, GxEPD_WHITE);
|
||||||
|
//_display->drawBitmap(0, 0, OpenDTULogo, 200, 200, GxEPD_WHITE);
|
||||||
|
while (_display->nextPage())
|
||||||
|
;
|
||||||
|
|
||||||
|
// clean the screen
|
||||||
|
delay(2000);
|
||||||
|
_display->fillScreen(GxEPD_WHITE);
|
||||||
|
while (_display->nextPage())
|
||||||
|
;
|
||||||
|
|
||||||
|
headlineIP();
|
||||||
|
|
||||||
|
// call the PowerPage to change the PV Power Values
|
||||||
|
actualPowerPaged(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//***************************************************************************
|
||||||
|
void DisplayEPaperClass::fullRefresh() {
|
||||||
|
// screen complete black
|
||||||
|
_display->fillScreen(GxEPD_BLACK);
|
||||||
|
while (_display->nextPage())
|
||||||
|
;
|
||||||
|
delay(2000);
|
||||||
|
// screen complete white
|
||||||
|
_display->fillScreen(GxEPD_WHITE);
|
||||||
|
while (_display->nextPage());
|
||||||
|
}
|
||||||
|
//***************************************************************************
|
||||||
|
void DisplayEPaperClass::headlineIP() {
|
||||||
|
int16_t tbx, tby;
|
||||||
|
uint16_t tbw, tbh;
|
||||||
|
|
||||||
|
_display->setFont(&FreeSans9pt7b);
|
||||||
|
_display->setTextColor(GxEPD_WHITE);
|
||||||
|
|
||||||
|
_display->setPartialWindow(0, 0, _display->width(), headfootline);
|
||||||
|
_display->fillScreen(GxEPD_BLACK);
|
||||||
|
|
||||||
|
do {
|
||||||
|
if ((WiFi.isConnected() == true) && (WiFi.localIP() > 0)) {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "%s", WiFi.localIP().toString().c_str());
|
||||||
|
} else {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "WiFi not connected");
|
||||||
|
}
|
||||||
|
_display->getTextBounds(_fmtText, 0, 0, &tbx, &tby, &tbw, &tbh);
|
||||||
|
uint16_t x = ((_display->width() - tbw) / 2) - tbx;
|
||||||
|
|
||||||
|
_display->setCursor(x, (headfootline - 2));
|
||||||
|
_display->println(_fmtText);
|
||||||
|
} while (_display->nextPage());
|
||||||
|
}
|
||||||
|
//***************************************************************************
|
||||||
|
void DisplayEPaperClass::lastUpdatePaged() {
|
||||||
|
int16_t tbx, tby;
|
||||||
|
uint16_t tbw, tbh;
|
||||||
|
|
||||||
|
_display->setFont(&FreeSans9pt7b);
|
||||||
|
_display->setTextColor(GxEPD_WHITE);
|
||||||
|
|
||||||
|
_display->setPartialWindow(0, _display->height() - headfootline, _display->width(), headfootline);
|
||||||
|
_display->fillScreen(GxEPD_BLACK);
|
||||||
|
do {
|
||||||
|
time_t now = time(nullptr);
|
||||||
|
strftime(_fmtText, sizeof(_fmtText), "%d.%m.%Y %H:%M", localtime(&now));
|
||||||
|
|
||||||
|
_display->getTextBounds(_fmtText, 0, 0, &tbx, &tby, &tbw, &tbh);
|
||||||
|
uint16_t x = ((_display->width() - tbw) / 2) - tbx;
|
||||||
|
|
||||||
|
_display->setCursor(x, (_display->height() - 3));
|
||||||
|
_display->println(_fmtText);
|
||||||
|
} while (_display->nextPage());
|
||||||
|
}
|
||||||
|
//***************************************************************************
|
||||||
|
void DisplayEPaperClass::actualPowerPaged(float _totalPower, float _totalYieldDay, float _totalYieldTotal, uint8_t _isprod) {
|
||||||
|
int16_t tbx, tby;
|
||||||
|
uint16_t tbw, tbh, x, y;
|
||||||
|
|
||||||
|
_display->setFont(&FreeSans24pt7b);
|
||||||
|
_display->setTextColor(GxEPD_BLACK);
|
||||||
|
|
||||||
|
_display->setPartialWindow(0, headfootline, _display->width(), _display->height() - (headfootline * 2));
|
||||||
|
_display->fillScreen(GxEPD_WHITE);
|
||||||
|
do {
|
||||||
|
if (_totalPower > 9999) {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "%.1f kW", (_totalPower / 10000));
|
||||||
|
_changed = true;
|
||||||
|
} else if ((_totalPower > 0) && (_totalPower <= 9999)) {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "%.0f W", _totalPower);
|
||||||
|
_changed = true;
|
||||||
|
} else {
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "offline");
|
||||||
|
}
|
||||||
|
_display->getTextBounds(_fmtText, 0, 0, &tbx, &tby, &tbw, &tbh);
|
||||||
|
x = ((_display->width() - tbw) / 2) - tbx;
|
||||||
|
_display->setCursor(x, headfootline + tbh + 10);
|
||||||
|
_display->print(_fmtText);
|
||||||
|
|
||||||
|
_display->setFont(&FreeSans12pt7b);
|
||||||
|
y = _display->height() / 2;
|
||||||
|
_display->setCursor(0, y);
|
||||||
|
_display->print("today:");
|
||||||
|
snprintf(_fmtText, _display->width(), "%.0f", _totalYieldDay);
|
||||||
|
_display->getTextBounds(_fmtText, 0, 0, &tbx, &tby, &tbw, &tbh);
|
||||||
|
x = ((_display->width() - tbw) / 2) - tbx;
|
||||||
|
_display->setCursor(x, y);
|
||||||
|
_display->print(_fmtText);
|
||||||
|
_display->setCursor(_display->width() - 33, y);
|
||||||
|
_display->println("Wh");
|
||||||
|
|
||||||
|
y = y + tbh + 7;
|
||||||
|
_display->setCursor(0, y);
|
||||||
|
_display->print("total:");
|
||||||
|
snprintf(_fmtText, _display->width(), "%.1f", _totalYieldTotal);
|
||||||
|
_display->getTextBounds(_fmtText, 0, 0, &tbx, &tby, &tbw, &tbh);
|
||||||
|
x = ((_display->width() - tbw) / 2) - tbx;
|
||||||
|
_display->setCursor(x, y);
|
||||||
|
_display->print(_fmtText);
|
||||||
|
_display->setCursor(_display->width() - 45, y);
|
||||||
|
_display->println("kWh");
|
||||||
|
|
||||||
|
_display->setCursor(0, _display->height() - (headfootline + 10));
|
||||||
|
snprintf(_fmtText, sizeof(_fmtText), "#%d Inverter online", _isprod);
|
||||||
|
_display->println(_fmtText);
|
||||||
|
|
||||||
|
} while (_display->nextPage());
|
||||||
|
}
|
||||||
|
//***************************************************************************
|
||||||
|
void DisplayEPaperClass::loop(float totalPower, float totalYieldDay, float totalYieldTotal, uint8_t isprod) {
|
||||||
|
// check if the IP has changed
|
||||||
|
if (_settedIP != WiFi.localIP().toString().c_str()) {
|
||||||
|
// save the new IP and call the Headline Funktion to adapt the Headline
|
||||||
|
_settedIP = WiFi.localIP().toString().c_str();
|
||||||
|
headlineIP();
|
||||||
|
}
|
||||||
|
|
||||||
|
// call the PowerPage to change the PV Power Values
|
||||||
|
actualPowerPaged(totalPower, totalYieldDay, totalYieldTotal, isprod);
|
||||||
|
|
||||||
|
// if there was an change and the Inverter is producing set a new Timestam in the footline
|
||||||
|
if ((isprod > 0) && (_changed)) {
|
||||||
|
_changed = false;
|
||||||
|
lastUpdatePaged();
|
||||||
|
}
|
||||||
|
|
||||||
|
_display->powerOff();
|
||||||
|
}
|
||||||
|
//***************************************************************************
|
||||||
|
DisplayEPaperClass DisplayEPaper;
|
51
src/plugins/MonochromeDisplay/Display_ePaper.h
Normal file
51
src/plugins/MonochromeDisplay/Display_ePaper.h
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// uncomment next line to use HSPI for EPD (and VSPI for SD), e.g. with Waveshare ESP32 Driver Board
|
||||||
|
#define USE_HSPI_FOR_EPD
|
||||||
|
|
||||||
|
/// uncomment next line to use class GFX of library GFX_Root instead of Adafruit_GFX, to use less code and ram
|
||||||
|
// #include <GFX.h>
|
||||||
|
// base class GxEPD2_GFX can be used to pass references or pointers to the display instance as parameter, uses ~1.2k more code
|
||||||
|
// enable GxEPD2_GFX base class
|
||||||
|
#define ENABLE_GxEPD2_GFX 1
|
||||||
|
|
||||||
|
#include <GxEPD2_3C.h>
|
||||||
|
#include <GxEPD2_BW.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
// FreeFonts from Adafruit_GFX
|
||||||
|
#include <Fonts/FreeSans12pt7b.h>
|
||||||
|
#include <Fonts/FreeSans18pt7b.h>
|
||||||
|
#include <Fonts/FreeSans24pt7b.h>
|
||||||
|
#include <Fonts/FreeSans9pt7b.h>
|
||||||
|
|
||||||
|
#include "imagedata.h"
|
||||||
|
|
||||||
|
// GDEW027C44 2.7 " b/w/r 176x264, IL91874
|
||||||
|
// GDEH0154D67 1.54" b/w 200x200
|
||||||
|
|
||||||
|
class DisplayEPaperClass {
|
||||||
|
public:
|
||||||
|
DisplayEPaperClass();
|
||||||
|
~DisplayEPaperClass();
|
||||||
|
void fullRefresh();
|
||||||
|
void init(uint8_t type, uint8_t _CS, uint8_t _DC, uint8_t _RST, uint8_t _BUSY, uint8_t _SCK, uint8_t _MOSI);
|
||||||
|
void loop(float totalPower, float totalYieldDay, float totalYieldTotal, uint8_t isprod);
|
||||||
|
|
||||||
|
uint8_t displayRotation = 2;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void headlineIP();
|
||||||
|
void actualPowerPaged(float _totalPower, float _totalYieldDay, float _totalYieldTotal, uint8_t _isprod);
|
||||||
|
void lastUpdatePaged();
|
||||||
|
|
||||||
|
bool _changed = false;
|
||||||
|
char _fmtText[35];
|
||||||
|
const char* _settedIP;
|
||||||
|
uint8_t headfootline = 16;
|
||||||
|
GxEPD2_GFX* _display;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern DisplayEPaperClass DisplayEPaper;
|
|
@ -1,111 +1,85 @@
|
||||||
#ifndef __MONOCHROME_DISPLAY__
|
#ifndef __MONOCHROME_DISPLAY__
|
||||||
#define __MONOCHROME_DISPLAY__
|
#define __MONOCHROME_DISPLAY__
|
||||||
|
|
||||||
#include <U8g2lib.h>
|
|
||||||
#include <Timezone.h>
|
#include <Timezone.h>
|
||||||
|
#include <U8g2lib.h>
|
||||||
|
|
||||||
#include "../../utils/helper.h"
|
|
||||||
#include "../../hm/hmSystem.h"
|
#include "../../hm/hmSystem.h"
|
||||||
|
#include "../../utils/helper.h"
|
||||||
|
#include "Display_Mono.h"
|
||||||
|
#include "Display_ePaper.h"
|
||||||
|
#include "imagedata.h"
|
||||||
|
|
||||||
#define DISP_DEFAULT_TIMEOUT 60 // in seconds
|
#define DISP_DEFAULT_TIMEOUT 60 // in seconds
|
||||||
|
|
||||||
|
template <class HMSYSTEM>
|
||||||
static uint8_t bmp_logo[] PROGMEM = {
|
|
||||||
B00000000, B00000000, // ................
|
|
||||||
B11101100, B00110111, // ..##.######.##..
|
|
||||||
B11101100, B00110111, // ..##.######.##..
|
|
||||||
B11100000, B00000111, // .....######.....
|
|
||||||
B11010000, B00001011, // ....#.####.#....
|
|
||||||
B10011000, B00011001, // ...##..##..##...
|
|
||||||
B10000000, B00000001, // .......##.......
|
|
||||||
B00000000, B00000000, // ................
|
|
||||||
B01111000, B00011110, // ...####..####...
|
|
||||||
B11111100, B00111111, // ..############..
|
|
||||||
B01111100, B00111110, // ..#####..#####..
|
|
||||||
B00000000, B00000000, // ................
|
|
||||||
B11111100, B00111111, // ..############..
|
|
||||||
B11111110, B01111111, // .##############.
|
|
||||||
B01111110, B01111110, // .######..######.
|
|
||||||
B00000000, B00000000 // ................
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static uint8_t bmp_arrow[] PROGMEM = {
|
|
||||||
B00000000, B00011100, B00011100, B00001110, B00001110, B11111110, B01111111,
|
|
||||||
B01110000, B01110000, B00110000, B00111000, B00011000, B01111111, B00111111,
|
|
||||||
B00011110, B00001110, B00000110, B00000000, B00000000, B00000000, B00000000
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template<class HMSYSTEM>
|
|
||||||
class MonochromeDisplay {
|
class MonochromeDisplay {
|
||||||
public:
|
public:
|
||||||
MonochromeDisplay() {}
|
MonochromeDisplay() {}
|
||||||
|
|
||||||
void setup(display_t *cfg, HMSYSTEM *sys, uint32_t *utcTs, uint8_t disp_reset, const char *version) {
|
void setup(display_t *cfg, HMSYSTEM *sys, uint32_t *utcTs, uint8_t disp_reset, const char *version) {
|
||||||
mCfg = cfg;
|
mCfg = cfg;
|
||||||
mSys = sys;
|
mSys = sys;
|
||||||
mUtcTs = utcTs;
|
mUtcTs = utcTs;
|
||||||
|
mNewPayload = false;
|
||||||
|
mLoopCnt = 0;
|
||||||
|
|
||||||
|
if (mCfg->type == 0) {
|
||||||
|
return;
|
||||||
|
} else if (1 < mCfg->type < 4) {
|
||||||
|
switch (mCfg->rot) {
|
||||||
|
case 0:
|
||||||
|
DisplayMono.disp_rotation = U8G2_R0;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
DisplayMono.disp_rotation = U8G2_R1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
DisplayMono.disp_rotation = U8G2_R2;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
DisplayMono.disp_rotation = U8G2_R3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayMono.enablePowerSafe = mCfg->pwrSaveAtIvOffline;
|
||||||
|
DisplayMono.enableScreensaver = mCfg->pxShift;
|
||||||
|
DisplayMono.contrast = mCfg->contrast;
|
||||||
|
|
||||||
|
DisplayMono.init(mCfg->type, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_busy, mCfg->disp_clk, mCfg->disp_data);
|
||||||
|
} else if (mCfg->type == 4) {
|
||||||
|
DisplayEPaper.displayRotation = mCfg->rot;
|
||||||
|
counterEPaper = 0;
|
||||||
|
|
||||||
|
DisplayEPaper.init(mCfg->type, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_busy, mCfg->disp_clk, mCfg->disp_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void payloadEventListener(uint8_t cmd) {
|
||||||
|
mNewPayload = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tickerSecond() {
|
||||||
|
if (mNewPayload || ((++mLoopCnt % 10) == 0)) {
|
||||||
mNewPayload = false;
|
mNewPayload = false;
|
||||||
mLoopCnt = 0;
|
mLoopCnt = 0;
|
||||||
mTimeout = DISP_DEFAULT_TIMEOUT; // power off timeout (after inverters go offline)
|
DataScreen();
|
||||||
|
|
||||||
u8g2_cb_t *rot = (u8g2_cb_t *)((mCfg->rot180) ? U8G2_R2 : U8G2_R0);
|
|
||||||
|
|
||||||
if(mCfg->type) {
|
|
||||||
switch(mCfg->type) {
|
|
||||||
case 1:
|
|
||||||
mDisplay = new U8G2_PCD8544_84X48_F_4W_HW_SPI(rot, mCfg->pin0, mCfg->pin1, disp_reset);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
mDisplay = new U8G2_SSD1306_128X64_NONAME_F_HW_I2C(rot, disp_reset, mCfg->pin0, mCfg->pin1);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
mDisplay = new U8G2_SH1106_128X64_NONAME_F_HW_I2C(rot, disp_reset, mCfg->pin0, mCfg->pin1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
mDisplay->begin();
|
|
||||||
|
|
||||||
mIsLarge = ((mDisplay->getWidth() > 120) && (mDisplay->getHeight() > 60));
|
|
||||||
calcLineHeights();
|
|
||||||
|
|
||||||
mDisplay->clearBuffer();
|
|
||||||
mDisplay->setContrast(mCfg->contrast);
|
|
||||||
printText("Ahoy!", 0, 35);
|
|
||||||
printText("ahoydtu.de", 2, 20);
|
|
||||||
printText(version, 3, 46);
|
|
||||||
mDisplay->sendBuffer();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void payloadEventListener(uint8_t cmd) {
|
private:
|
||||||
mNewPayload = true;
|
void DataScreen() {
|
||||||
}
|
if (mCfg->type == 0)
|
||||||
|
return;
|
||||||
void tickerSecond() {
|
if (*mUtcTs == 0)
|
||||||
if(mCfg->pwrSaveAtIvOffline) {
|
return;
|
||||||
if(mTimeout != 0)
|
|
||||||
mTimeout--;
|
|
||||||
}
|
|
||||||
if(mNewPayload || ((++mLoopCnt % 10) == 0)) {
|
|
||||||
mNewPayload = false;
|
|
||||||
mLoopCnt = 0;
|
|
||||||
DataScreen();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void DataScreen() {
|
|
||||||
if (mCfg->type == 0)
|
|
||||||
return;
|
|
||||||
if(*mUtcTs == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
if ((millis() - _lastDisplayUpdate) > period) {
|
||||||
float totalPower = 0;
|
float totalPower = 0;
|
||||||
float totalYieldDay = 0;
|
float totalYieldDay = 0;
|
||||||
float totalYieldTotal = 0;
|
float totalYieldTotal = 0;
|
||||||
|
|
||||||
bool isprod = false;
|
uint8_t isprod = 0;
|
||||||
|
|
||||||
Inverter<> *iv;
|
Inverter<> *iv;
|
||||||
record_t<> *rec;
|
record_t<> *rec;
|
||||||
|
@ -116,102 +90,37 @@ class MonochromeDisplay {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (iv->isProducing(*mUtcTs))
|
if (iv->isProducing(*mUtcTs))
|
||||||
isprod = true;
|
uint8_t isprod = 0;
|
||||||
|
|
||||||
totalPower += iv->getChannelFieldValue(CH0, FLD_PAC, rec);
|
totalPower += iv->getChannelFieldValue(CH0, FLD_PAC, rec);
|
||||||
totalYieldDay += iv->getChannelFieldValue(CH0, FLD_YD, rec);
|
totalYieldDay += iv->getChannelFieldValue(CH0, FLD_YD, rec);
|
||||||
totalYieldTotal += iv->getChannelFieldValue(CH0, FLD_YT, rec);
|
totalYieldTotal += iv->getChannelFieldValue(CH0, FLD_YT, rec);
|
||||||
}
|
}
|
||||||
|
|
||||||
mDisplay->clearBuffer();
|
if (1 < mCfg->type < 4) {
|
||||||
|
DisplayMono.loop(totalPower, totalYieldDay, totalYieldTotal, isprod);
|
||||||
// Logos
|
} else if (mCfg->type == 4) {
|
||||||
// pxMovement +x (0 - 6 px)
|
DisplayEPaper.loop(totalPower, totalYieldDay, totalYieldTotal, isprod);
|
||||||
uint8_t ex = (_mExtra % 7);
|
counterEPaper++;
|
||||||
if (isprod) {
|
|
||||||
mDisplay->drawXBMP(5 + ex, 1, 8, 17, bmp_arrow);
|
|
||||||
if (mCfg->logoEn)
|
|
||||||
mDisplay->drawXBMP(mDisplay->getWidth() - 24 + ex, 2, 16, 16, bmp_logo);
|
|
||||||
}
|
}
|
||||||
|
_lastDisplayUpdate = millis();
|
||||||
if ((totalPower > 0) && isprod) {
|
|
||||||
mTimeout = DISP_DEFAULT_TIMEOUT;
|
|
||||||
mDisplay->setPowerSave(false);
|
|
||||||
mDisplay->setContrast(mCfg->contrast);
|
|
||||||
if (totalPower > 999)
|
|
||||||
snprintf(_fmtText, sizeof(_fmtText), "%2.1f kW", (totalPower / 1000));
|
|
||||||
else
|
|
||||||
snprintf(_fmtText, sizeof(_fmtText), "%3.0f W", totalPower);
|
|
||||||
printText(_fmtText, 0, 20);
|
|
||||||
} else {
|
|
||||||
printText("offline", 0, 25);
|
|
||||||
if(mCfg->pwrSaveAtIvOffline) {
|
|
||||||
if(mTimeout == 0)
|
|
||||||
mDisplay->setPowerSave(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(_fmtText, sizeof(_fmtText), "today: %4.0f Wh", totalYieldDay);
|
|
||||||
printText(_fmtText, 1);
|
|
||||||
|
|
||||||
snprintf(_fmtText, sizeof(_fmtText), "total: %.1f kWh", totalYieldTotal);
|
|
||||||
printText(_fmtText, 2);
|
|
||||||
|
|
||||||
IPAddress ip = WiFi.localIP();
|
|
||||||
if (!(_mExtra % 10) && (ip)) {
|
|
||||||
printText(ip.toString().c_str(), 3);
|
|
||||||
} else {
|
|
||||||
// Get current time
|
|
||||||
if(mIsLarge)
|
|
||||||
printText(ah::getDateTimeStr(gTimezone.toLocal(*mUtcTs)).c_str(), 3);
|
|
||||||
else
|
|
||||||
printText(ah::getTimeStr(gTimezone.toLocal(*mUtcTs)).c_str(), 3);
|
|
||||||
}
|
|
||||||
mDisplay->sendBuffer();
|
|
||||||
|
|
||||||
_mExtra++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void calcLineHeights() {
|
if (counterEPaper > 480) {
|
||||||
uint8_t yOff = 0;
|
DisplayEPaper.fullRefresh();
|
||||||
for(uint8_t i = 0; i < 4; i++) {
|
counterEPaper = 0;
|
||||||
setFont(i);
|
|
||||||
yOff += (mDisplay->getMaxCharHeight() + 1);
|
|
||||||
mLineOffsets[i] = yOff;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline void setFont(uint8_t line) {
|
// private member variables
|
||||||
switch (line) {
|
bool mNewPayload;
|
||||||
case 0: mDisplay->setFont((mIsLarge) ? u8g2_font_ncenB14_tr : u8g2_font_lubBI14_tr); break;
|
uint8_t mLoopCnt;
|
||||||
case 3: mDisplay->setFont(u8g2_font_5x8_tr); break;
|
uint32_t *mUtcTs;
|
||||||
default: mDisplay->setFont((mIsLarge) ? u8g2_font_ncenB10_tr : u8g2_font_5x8_tr); break;
|
display_t *mCfg;
|
||||||
}
|
HMSYSTEM *mSys;
|
||||||
}
|
uint16_t period = 10000; // Achtung, max 65535
|
||||||
|
uint16_t counterEPaper;
|
||||||
void printText(const char* text, uint8_t line, uint8_t dispX = 5) {
|
uint32_t _lastDisplayUpdate = 0;
|
||||||
if(!mIsLarge)
|
|
||||||
dispX = (line == 0) ? 10 : 5;
|
|
||||||
setFont(line);
|
|
||||||
if(mCfg->pxShift)
|
|
||||||
dispX += (_mExtra % 7); // add pixel movement
|
|
||||||
mDisplay->drawStr(dispX, mLineOffsets[line], text);
|
|
||||||
}
|
|
||||||
|
|
||||||
// private member variables
|
|
||||||
U8G2* mDisplay;
|
|
||||||
|
|
||||||
uint8_t _mExtra;
|
|
||||||
uint16_t mTimeout; // interval at which to power save (milliseconds)
|
|
||||||
char _fmtText[32];
|
|
||||||
|
|
||||||
bool mNewPayload;
|
|
||||||
bool mIsLarge;
|
|
||||||
uint8_t mLoopCnt;
|
|
||||||
uint32_t *mUtcTs;
|
|
||||||
uint8_t mLineOffsets[5];
|
|
||||||
display_t *mCfg;
|
|
||||||
HMSYSTEM *mSys;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*__MONOCHROME_DISPLAY__*/
|
#endif /*__MONOCHROME_DISPLAY__*/
|
||||||
|
|
642
src/plugins/MonochromeDisplay/imagedata.cpp
Normal file
642
src/plugins/MonochromeDisplay/imagedata.cpp
Normal file
|
@ -0,0 +1,642 @@
|
||||||
|
// GxEPD2_ESP32_ESP8266_WifiData_V1_und_V2
|
||||||
|
|
||||||
|
#include "imagedata.h"
|
||||||
|
#if defined(__AVR__) || defined(ARDUINO_ARCH_SAMD)
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
#elif defined(ESP8266) || defined(ESP32)
|
||||||
|
#include <pgmspace.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 'OpenDTU', 200x200px
|
||||||
|
const unsigned char OpenDTULogo[] PROGMEM = {
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
|
||||||
|
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xf0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xf0,
|
||||||
|
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
|
||||||
|
0x7f, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0x00, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0x01, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0x01, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0x07,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff,
|
||||||
|
0xfc, 0x7f, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xfc, 0x0f, 0xe0, 0x0f, 0xc0, 0xfe, 0x03, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81,
|
||||||
|
0xf8, 0x07, 0xc0, 0x0f, 0xc0, 0x3e, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x07, 0xc0, 0x0f, 0x80, 0x1e, 0x03,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0x01, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x0f, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xe0, 0x07, 0xc0, 0x0f, 0x80,
|
||||||
|
0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0x03, 0xe0, 0x07, 0xc0, 0x0f, 0xc0, 0x1f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xe0, 0x0f, 0xe0,
|
||||||
|
0x0f, 0xc0, 0x1f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xf0, 0x3f, 0xf8, 0x3f, 0xf0, 0x7f, 0x81, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x07, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
|
||||||
|
0x07, 0xf0, 0x7f, 0xfc, 0xff, 0xf0, 0x7f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x07, 0x80, 0x0f, 0xe0, 0x1f, 0xc0, 0x07,
|
||||||
|
0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xfc, 0x0f, 0x80, 0x07, 0xe0, 0x0f, 0xc0, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0x00, 0x0f, 0xc0, 0x0f,
|
||||||
|
0xc0, 0x03, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xf8, 0x0f, 0x00, 0x0f, 0xc0, 0x07, 0xc0, 0x03, 0xe0, 0x7f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0x00, 0x0f,
|
||||||
|
0xc0, 0x07, 0xe0, 0x03, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0x80, 0x0f, 0xc0, 0x0f, 0xe0, 0x03, 0xe0, 0x7f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1f,
|
||||||
|
0x80, 0x1f, 0xe0, 0x0f, 0xf0, 0x07, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xe0, 0x3f, 0xf8, 0x3f, 0xfc, 0x1f, 0xf0,
|
||||||
|
0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x03, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x1f,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xff, 0x80, 0x00,
|
||||||
|
0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x7f, 0x8f, 0xff,
|
||||||
|
0xf3, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0x07, 0xff, 0xe1, 0xfc, 0x00, 0x03, 0xff, 0xff, 0xff,
|
||||||
|
0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x1f,
|
||||||
|
0x03, 0xff, 0xc0, 0xf8, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x1f, 0x03, 0xff, 0xc0, 0xf0, 0x00, 0x00, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xf0, 0x00,
|
||||||
|
0x00, 0x1f, 0x03, 0xff, 0xc0, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x7f, 0x03, 0xff, 0xc0, 0xc0, 0x3f,
|
||||||
|
0x80, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0x0f,
|
||||||
|
0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0xc0, 0x7f, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfc, 0x07, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0,
|
||||||
|
0xc0, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
|
||||||
|
0xfe, 0x03, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x81, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0xff, 0xf0, 0x3f, 0xff, 0x03,
|
||||||
|
0xff, 0xc0, 0x81, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0x03, 0xff, 0x03, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x81, 0xff, 0xf8, 0x1f, 0xf0,
|
||||||
|
0x00, 0x7f, 0xff, 0xf0, 0x03, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0x03, 0xff, 0x81, 0xff, 0xf0, 0x3f,
|
||||||
|
0xff, 0x03, 0xff, 0xc0, 0x83, 0xff, 0xf8, 0x1f, 0xe0, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0xff, 0xe0,
|
||||||
|
0x00, 0x1f, 0xff, 0x03, 0xff, 0x81, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xf8,
|
||||||
|
0x1f, 0xe0, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x0f, 0xff, 0x03, 0xff, 0x81, 0xff,
|
||||||
|
0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xfc, 0x1f, 0xe0, 0x00, 0x07, 0xff, 0x00, 0x00,
|
||||||
|
0x3f, 0xe0, 0x00, 0x07, 0xff, 0x03, 0xff, 0x81, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03,
|
||||||
|
0xff, 0xfc, 0x1f, 0xe0, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x07, 0xff, 0x03, 0xff,
|
||||||
|
0xc0, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xfc, 0x1f, 0xe0, 0x3c, 0x01, 0xfe,
|
||||||
|
0x01, 0xe0, 0x1f, 0xe0, 0x1c, 0x03, 0xff, 0x03, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff,
|
||||||
|
0xc0, 0x03, 0xff, 0xfc, 0x1f, 0xe0, 0x7f, 0x01, 0xfc, 0x07, 0xf8, 0x1f, 0xe0, 0x7f, 0x03, 0xff,
|
||||||
|
0x03, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xfc, 0x1f, 0xe0, 0x7f,
|
||||||
|
0x80, 0xfc, 0x0f, 0xf8, 0x1f, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xff,
|
||||||
|
0x03, 0xff, 0xc0, 0x03, 0xff, 0xfc, 0x1f, 0xe0, 0x7f, 0xc0, 0xfc, 0x0f, 0xe0, 0x1f, 0xe0, 0x7f,
|
||||||
|
0x83, 0xff, 0x03, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xfc, 0x1f,
|
||||||
|
0xe0, 0x7f, 0xc0, 0xfc, 0x0c, 0x00, 0x1f, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xff, 0xc0, 0xff, 0xf0,
|
||||||
|
0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xfc, 0x1f, 0xe0, 0x7f, 0xc0, 0xfc, 0x00, 0x00, 0x1f,
|
||||||
|
0xe0, 0x7f, 0x83, 0xff, 0x03, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff,
|
||||||
|
0xfc, 0x1f, 0xe0, 0x7f, 0xc0, 0xfc, 0x00, 0x00, 0x1f, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xff, 0xc1,
|
||||||
|
0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xfc, 0x1f, 0xe0, 0x7f, 0xc0, 0xfc, 0x00,
|
||||||
|
0x00, 0x3f, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xff, 0x81, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0,
|
||||||
|
0x03, 0xff, 0xf8, 0x1f, 0xe0, 0x7f, 0xc0, 0xfc, 0x00, 0x03, 0xff, 0xe0, 0x7f, 0x83, 0xff, 0x03,
|
||||||
|
0xff, 0x81, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x83, 0xff, 0xf8, 0x1f, 0xe0, 0x7f, 0xc0,
|
||||||
|
0xfc, 0x00, 0x7f, 0xff, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xff, 0x81, 0xff, 0xf0, 0x3f, 0xff, 0x03,
|
||||||
|
0xff, 0xc0, 0x81, 0xff, 0xf8, 0x1f, 0xe0, 0x7f, 0xc0, 0xfc, 0x07, 0xff, 0xff, 0xe0, 0x7f, 0x83,
|
||||||
|
0xff, 0x03, 0xff, 0x81, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0x81, 0xff, 0xf8, 0x3f, 0xe0,
|
||||||
|
0x7f, 0xc0, 0xfc, 0x0f, 0xff, 0xff, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xff, 0x03, 0xff, 0xf0, 0x3f,
|
||||||
|
0xff, 0x03, 0xff, 0xc0, 0x81, 0xff, 0xf0, 0x3f, 0xe0, 0x7f, 0xc0, 0xfc, 0x0f, 0xff, 0xff, 0xe0,
|
||||||
|
0x7f, 0x83, 0xff, 0x03, 0xff, 0x03, 0xff, 0xf0, 0x3f, 0xff, 0x03, 0xff, 0xc0, 0xc0, 0xff, 0xf0,
|
||||||
|
0x3f, 0xe0, 0x7f, 0xc0, 0xfc, 0x0f, 0xff, 0xff, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xfe, 0x07, 0xff,
|
||||||
|
0xf0, 0x3f, 0xff, 0x03, 0xff, 0x80, 0xc0, 0x7f, 0xe0, 0x3f, 0xe0, 0x7f, 0x81, 0xfc, 0x0f, 0xff,
|
||||||
|
0xff, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xfc, 0x07, 0xff, 0xf0, 0x3f, 0xff, 0x01, 0xff, 0x81, 0xc0,
|
||||||
|
0x3f, 0x80, 0x7f, 0xe0, 0x7e, 0x01, 0xfe, 0x07, 0xf0, 0x7f, 0xe0, 0x7f, 0x83, 0xff, 0x03, 0xe0,
|
||||||
|
0x0f, 0xff, 0xf0, 0x3f, 0xff, 0x80, 0xfe, 0x01, 0xe0, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x03, 0xfe,
|
||||||
|
0x00, 0x00, 0x3f, 0xe0, 0x7f, 0x83, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x3f, 0xff, 0x80, 0x00,
|
||||||
|
0x03, 0xf0, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x03, 0xff, 0x00, 0x00, 0x3f, 0xe0, 0x7f, 0x83, 0xff,
|
||||||
|
0x00, 0x00, 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xc0, 0x00, 0x03, 0xf8, 0x00, 0x01, 0xff, 0xe0, 0x00,
|
||||||
|
0x07, 0xff, 0x00, 0x00, 0x7f, 0xe0, 0x7f, 0x83, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x3f, 0xff,
|
||||||
|
0xe0, 0x00, 0x07, 0xfc, 0x00, 0x03, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x7f, 0xe0, 0x7f,
|
||||||
|
0x83, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0x00, 0x0f, 0xff,
|
||||||
|
0xe0, 0x00, 0x3f, 0xff, 0xe0, 0x01, 0xff, 0xf0, 0xff, 0x83, 0xff, 0x00, 0x03, 0xff, 0xff, 0xf8,
|
||||||
|
0x7f, 0xff, 0xfc, 0x00, 0x3f, 0xff, 0xc0, 0x3f, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xf8, 0x07, 0xff,
|
||||||
|
0xf9, 0xff, 0xe7, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
|
||||||
|
0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
||||||
|
};
|
||||||
|
|
||||||
|
// 'Logo', 200x200px
|
||||||
|
const unsigned char AhoyLogo[] PROGMEM = {
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00,
|
||||||
|
0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x06,
|
||||||
|
0x0f, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7e, 0x0f, 0xff, 0xff, 0xfc, 0x03, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
|
||||||
|
0x03, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x19, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xfe,
|
||||||
|
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xe0, 0x70, 0x7f, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0x3f, 0x07, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xfc, 0x0f, 0xe0, 0x3f, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xe0, 0x1f, 0x83,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xe0, 0x1f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xe0,
|
||||||
|
0x0f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xe0, 0x0f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xfe,
|
||||||
|
0x07, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
|
||||||
|
0xff, 0xc1, 0x07, 0x80, 0x07, 0xfe, 0xff, 0xff, 0xfc, 0x07, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xe1, 0x07, 0xc0, 0x01, 0xe0, 0x0f,
|
||||||
|
0xff, 0xfc, 0x0f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xfc, 0xff, 0xe1, 0x83, 0xc0, 0x01, 0xc0, 0x07, 0xff, 0xf8, 0x0f, 0xfc, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xe1, 0x83, 0xc0, 0x00,
|
||||||
|
0xc0, 0x07, 0x8f, 0xf8, 0x1f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xfe, 0x7f, 0xe0, 0x01, 0xc0, 0x00, 0x81, 0x83, 0x07, 0xf0, 0x3f, 0xf9, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xe0, 0x01,
|
||||||
|
0xe0, 0xe0, 0x87, 0xe3, 0x0f, 0xf0, 0x3f, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0x00, 0xe0, 0xe0, 0x87, 0xe1, 0x0c, 0x60, 0x7f,
|
||||||
|
0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
|
||||||
|
0xe0, 0x00, 0xe1, 0xf0, 0x87, 0xe1, 0x08, 0x60, 0x7f, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xe0, 0xe0, 0xe0, 0xe0, 0x87, 0xc2, 0x00,
|
||||||
|
0x40, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0x8f, 0xc0, 0xe0, 0x60, 0xe0, 0xc0, 0x82, 0x00, 0xc0, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xc0, 0xe0, 0x60, 0xe0, 0xc0,
|
||||||
|
0x06, 0x01, 0x81, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xcf, 0xe0, 0xe0, 0x20, 0xe0, 0xe0, 0x0c, 0x03, 0x81, 0xff, 0x1f, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xc0, 0xf0, 0x30,
|
||||||
|
0xe1, 0xf8, 0x18, 0x07, 0xe1, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xc0, 0xf0, 0x7f, 0xff, 0xff, 0xf0, 0x1f, 0xf3, 0xfe, 0x01,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xc0,
|
||||||
|
0xfb, 0xff, 0xff, 0xff, 0xe0, 0x3e, 0x1f, 0xfc, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xfc, 0x0f,
|
||||||
|
0xf8, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
|
||||||
|
0x33, 0xef, 0xff, 0xff, 0xff, 0xff, 0x81, 0xfc, 0x0f, 0xf1, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf1, 0xff, 0xff, 0xa0, 0x00, 0x7f, 0xe3,
|
||||||
|
0xfc, 0x0f, 0xf3, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf1, 0xf9, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x0f, 0xe7, 0xff, 0xe0, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xf9, 0xff, 0x80, 0x3f, 0xff,
|
||||||
|
0xe0, 0x0f, 0xfe, 0x1f, 0xc7, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xcf, 0xf8, 0xf0, 0x07, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0x8f, 0xff, 0xfc,
|
||||||
|
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfc, 0x70, 0x3f,
|
||||||
|
0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0x1f, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfc, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x3f,
|
||||||
|
0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe,
|
||||||
|
0x23, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7e, 0x3f, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x23, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
|
||||||
|
0x0c, 0x7f, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
|
||||||
|
0x7f, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xfc, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xf8,
|
||||||
|
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x87, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xfc, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x55, 0x00, 0x3f, 0xf8, 0x00,
|
||||||
|
0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0x01, 0xff, 0xff, 0xf8, 0x0f, 0xfc, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0x9f, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0x03,
|
||||||
|
0xfc, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xe3, 0xf1, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xe0, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xe7, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf8, 0x7e, 0x06, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xcf,
|
||||||
|
0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0x03, 0x3f, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xfc, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x1f, 0x23, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
|
||||||
|
0xff, 0x9f, 0xfe, 0x7f, 0xff, 0xf3, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xf1, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x9f, 0xfe, 0x7f, 0xff, 0xe3, 0xf8,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xfe, 0x7f, 0xff, 0x9f, 0xff, 0x0f, 0xff, 0x8f, 0xf1, 0xff, 0xff, 0xff, 0xfe, 0xf5, 0x90, 0x07,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0x9f, 0xff, 0x03, 0xff,
|
||||||
|
0x1f, 0xe3, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xfe, 0x7f, 0xff, 0x3f, 0xfe, 0x31, 0xfe, 0x7f, 0xe7, 0xff, 0x80, 0x00, 0x40, 0x00,
|
||||||
|
0x07, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0x3f, 0x3c,
|
||||||
|
0xf9, 0xfc, 0xff, 0xe7, 0xfe, 0x3f, 0xc9, 0xff, 0xf1, 0x1f, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x3f, 0x3c, 0xf9, 0xf9, 0xff, 0xc7, 0xfc, 0xff, 0x90,
|
||||||
|
0x7f, 0xf3, 0x03, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
|
||||||
|
0x3f, 0x39, 0xfd, 0xf3, 0xff, 0xcf, 0xfc, 0xff, 0x90, 0x3f, 0xf3, 0x83, 0xf8, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x3f, 0x39, 0xf9, 0xc7, 0xff, 0xcf, 0xfc,
|
||||||
|
0xff, 0x32, 0x7f, 0xe4, 0x77, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
|
||||||
|
0xff, 0xff, 0x7f, 0x33, 0xf9, 0x8f, 0xff, 0xcf, 0xf9, 0xff, 0x00, 0x7f, 0xe0, 0x67, 0xfc, 0x7f,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x7f, 0xb3, 0xf3, 0xbf, 0xff,
|
||||||
|
0xcf, 0xf9, 0xff, 0x00, 0xff, 0xfe, 0x47, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf9, 0xff, 0xff, 0x7f, 0xf7, 0xf3, 0xff, 0xff, 0xcf, 0xf9, 0xff, 0xe0, 0xff, 0xfc, 0x0f,
|
||||||
|
0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x7f, 0xe7, 0xe7,
|
||||||
|
0xff, 0xff, 0xcf, 0xf9, 0xff, 0xe1, 0xff, 0xfc, 0x1f, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x3f, 0xef, 0xe7, 0xef, 0xff, 0xc7, 0xf9, 0xff, 0xc3, 0xff,
|
||||||
|
0xfc, 0x3f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x3f,
|
||||||
|
0xef, 0xef, 0xc0, 0xff, 0xe7, 0xf9, 0xff, 0xc3, 0xff, 0xf8, 0x3f, 0xff, 0x3f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x3f, 0xef, 0xcf, 0xf0, 0x01, 0xe7, 0xf1, 0xff,
|
||||||
|
0x87, 0xff, 0xf8, 0x7f, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff,
|
||||||
|
0xff, 0xbf, 0xcf, 0xe7, 0xff, 0xc1, 0xe3, 0xe1, 0xff, 0x8f, 0xff, 0xf0, 0xff, 0xff, 0x9f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x9f, 0xef, 0xe7, 0xff, 0xff, 0xf3,
|
||||||
|
0xc1, 0xff, 0x96, 0xaf, 0xf9, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xf9, 0xff, 0xff, 0x9f, 0xe7, 0xe3, 0xff, 0xff, 0xf1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff,
|
||||||
|
0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xcf, 0xe7, 0xf3, 0xff,
|
||||||
|
0xff, 0xf8, 0xc0, 0x00, 0x4a, 0x90, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xf9, 0xff, 0xff, 0xef, 0xf3, 0xf3, 0x9f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xe7, 0xf1,
|
||||||
|
0xe7, 0xc7, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf3, 0xf0, 0x07, 0xe3, 0xff, 0xff, 0x81, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
|
||||||
|
0xf8, 0x07, 0x1f, 0xf1, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xfc, 0x1f, 0x9f, 0xf8, 0xff, 0xff, 0xc3,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
|
||||||
|
0xff, 0xff, 0xf8, 0xff, 0x9f, 0xfe, 0x7f, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0x9f, 0xfe, 0x3f,
|
||||||
|
0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xfd, 0xff, 0xff, 0xf1, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xf3, 0xff, 0x3f, 0x3f, 0xff, 0xff,
|
||||||
|
0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xe1, 0xff, 0xcf,
|
||||||
|
0xff, 0xc7, 0xff, 0xf3, 0xff, 0x3f, 0x9f, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xe1, 0xff, 0x8f, 0xff, 0xe7, 0xff, 0xf3, 0xff, 0x3f, 0x9f,
|
||||||
|
0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xc1,
|
||||||
|
0xff, 0xcf, 0xff, 0xf3, 0xff, 0xf3, 0xff, 0x3f, 0x9f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x81, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xf3, 0xff,
|
||||||
|
0x3f, 0x9f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
|
||||||
|
0xff, 0x91, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x3f, 0x9f, 0xff, 0xff, 0xfe, 0x3f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x11, 0xff, 0x9f, 0xff, 0xff, 0xff,
|
||||||
|
0xf3, 0xff, 0x1f, 0x9f, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xfe, 0x7f, 0xff, 0x21, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xbf, 0x9f, 0xff, 0xff, 0xfe,
|
||||||
|
0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x20, 0xff, 0x9f, 0xff,
|
||||||
|
0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x60, 0x7f, 0x9f, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0x64, 0x3f,
|
||||||
|
0x1f, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xe7, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
|
||||||
|
0xff, 0x3f, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfc,
|
||||||
|
0xe7, 0x80, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xf1, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf8, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
|
||||||
|
0xff, 0xff, 0xfe, 0x7f, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x9f, 0xf9, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xe7, 0xff, 0xfe, 0x7f, 0xff, 0xc3, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf9, 0xe7, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf3, 0xf3, 0xff, 0xfc, 0x7f, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xcf, 0xf9, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3, 0xff, 0xf8, 0xff, 0xff,
|
||||||
|
0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xf9, 0xe7, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xf3, 0xf9, 0xff, 0xe1, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xe7, 0xf3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfc, 0x3f, 0x07,
|
||||||
|
0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xf3, 0xe7,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfe, 0x00, 0x1f, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff,
|
||||||
|
0xe0, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
|
||||||
|
0xf3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xe3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xf7, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf8, 0x83, 0xe7, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x13, 0xe7, 0xff, 0xfc, 0x03,
|
||||||
|
0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xfc, 0x31, 0xe7, 0xff, 0xfc, 0x00, 0x7f, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xfe,
|
||||||
|
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x39, 0xe3, 0xff,
|
||||||
|
0xfc, 0x00, 0x1f, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x31, 0xf3, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xc7, 0xff, 0xff,
|
||||||
|
0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19,
|
||||||
|
0xf3, 0xff, 0xfc, 0x00, 0x07, 0xff, 0x87, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xf3, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x07,
|
||||||
|
0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0x83, 0xf3, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xf3, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xf8, 0x07, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xe3, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xfe, 0x1f, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xe1, 0xff, 0xfe,
|
||||||
|
0x01, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xe1, 0xff, 0xf0, 0x00, 0x3f, 0x80, 0x07, 0xff, 0xff, 0xf0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x4c,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0c, 0xff, 0xf0, 0x00, 0x00, 0x0b, 0x87, 0xff,
|
||||||
|
0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0x0e, 0x7f, 0xf8, 0x00, 0x3f, 0xff, 0xc7, 0xff, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x86, 0x7f, 0xfe, 0x00, 0xff, 0xff,
|
||||||
|
0xc3, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0x80, 0x7f, 0xff, 0x87, 0xff, 0xff, 0xf3, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xf3, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfe, 0x07, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xf3, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xf3, 0xc0, 0x7f,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xe3, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff, 0xe0,
|
||||||
|
0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xff,
|
||||||
|
0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xf0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x17, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
||||||
|
};
|
5
src/plugins/MonochromeDisplay/imagedata.h
Normal file
5
src/plugins/MonochromeDisplay/imagedata.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
extern const unsigned char AhoyLogo[];
|
||||||
|
extern const unsigned char OpenDTULogo[];
|
1181
src/web/RestApi.h
1181
src/web/RestApi.h
File diff suppressed because it is too large
Load diff
1772
src/web/web.h
1772
src/web/web.h
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue