Fixed API

Fixed gulp build
Added mDNS responder
This commit is contained in:
Mark van Renswoude 2020-09-20 11:08:20 +02:00
parent 0ad50a20b6
commit 33cae63985
28 changed files with 3132 additions and 2923 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
node_modules
bin
.pio

12
gitversion.yml Normal file
View File

@ -0,0 +1,12 @@
mode: ContinuousDeployment
branches:
master:
mode: ContinuousDelivery
develop:
tag: develop
release:
tag: release
hotfix:
tag: hotfix
ignore:
sha: []

View File

@ -26,7 +26,7 @@ const config = {
distPath: 'web/dist/',
outputPath: 'src/assets/',
firmwareArtifact: '.pioenvs/esp12e/firmware.bin',
firmwareArtifact: '.pio/build/esp12e/firmware.bin',
firmwareOutputPath: 'bin/'
};
@ -232,7 +232,11 @@ gulp.task('embedVersion', () =>
});
gulp.task('copyBinary', () =>
gulp.task('embedAssets', gulp.series('embedHTML', 'embedJS', 'embedCSS', 'embedVersion'));
function copyBinary()
{
if (!fs.existsSync(config.firmwareOutputPath))
fs.mkdirSync(config.firmwareOutputPath, '0777', true);
@ -249,18 +253,14 @@ gulp.task('copyBinary', () =>
reader.on('end', resolve);
});
});
});
gulp.task('embedAssets', gulp.series('embedHTML', 'embedJS', 'embedCSS', 'embedVersion'));
}
// PlatformIO
const spawn = require('child_process').spawn;
const argv = require('yargs').argv;
var platformio = function(target)
function platformio(target)
{
var args = ['run'];
if ("e" in argv)
@ -281,24 +281,34 @@ var platformio = function(target)
args.push(target);
}
const cmd = spawn('platformio', args);
cmd.stdout.on('data', data =>
return new Promise((resolve, reject) =>
{
console.log(data.toString().trim());
});
const cmd = spawn('platformio', args);
cmd.stdout.on('data', data =>
{
console.log(data.toString().trim());
});
cmd.stderr.on('data', data =>
{
console.log(data.toString().trim());
});
cmd.stderr.on('data', data =>
{
console.log(data.toString().trim());
});
cmd.on('exit', code =>
{
if (code != 0) return;
gulp.start('copyBinary');
cmd.on('exit', code =>
{
if (code != 0)
{
reject(code);
return;
}
return Promise.resolve(copyBinary())
.then(resolve)
.catch(reject);
});
});
}
gulp.task('upload', gulp.series('embedAssets', () => { platformio('upload'); }));
gulp.task('build', gulp.series('embedAssets', () => { platformio(false); }));
gulp.task('upload', gulp.series('embedAssets', () => { return platformio('upload'); }));
gulp.task('build', gulp.series('embedAssets', () => { return platformio(false); }));
gulp.task('default', gulp.series('embedAssets'));

View File

@ -13,6 +13,7 @@ platform = https://github.com/platformio/platform-espressif8266.git
board = esp12e
framework = arduino
upload_speed = 115200
build_flags = -D DEBUG_ESP_MDNS_RESPONDER -D DEBUG_ESP_MDNS_INFO
lib_deps =
ArduinoJson
ESP Async WebServer

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -5,9 +5,9 @@ const uint8_t VersionMajor = 0;
const uint8_t VersionMinor = 1;
const uint8_t VersionPatch = 0;
const uint8_t VersionMetadata = 0;
const char VersionBranch[] = "master";
const char VersionSemVer[] = "0.1.0";
const char VersionFullSemVer[] = "0.1.0+0";
const char VersionBranch[] = "develop";
const char VersionSemVer[] = "0.1.0-develop.1";
const char VersionFullSemVer[] = "0.1.0-develop.1";
const char VersionCommitDate[] = "2020-09-19";
#endif

View File

@ -12,6 +12,8 @@ bool connectionSettingsChanged = false;
SystemSettings* systemSettings = new SystemSettings();
bool systemSettingsChanged = false;
EspSaveCrash SaveCrash;
Strip* strip;
bool shouldReboot = false;

View File

@ -10,8 +10,10 @@
#include <stdint.h>
#include <stdbool.h>
#include <IPAddress.h>
#include <EspSaveCrash.h>
#include "./settings/connection.h"
#include "./settings/system.h"
#include "./strip.h"
extern ConnectionSettings* connectionSettings;
extern bool connectionSettingsChanged;
@ -19,6 +21,9 @@ extern bool connectionSettingsChanged;
extern SystemSettings* systemSettings;
extern bool systemSettingsChanged;
extern EspSaveCrash SaveCrash;
extern Strip* strip;
extern bool shouldReboot;
extern uint32_t currentTime;

View File

@ -6,9 +6,9 @@
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ESPAsyncWebServer.h>
#include <ESPAsyncTCP.h>
#include <NeoPixelBus.h>
#include <LittleFS.h>
#include "./config.h"
@ -30,49 +30,50 @@ void handleNotFound(AsyncWebServerRequest* request);
AsyncWebServer server(80);
NeoPixelBus<NeoGrbwFeature, Neo800KbpsMethod>* strip = NULL;
#define colorSaturation 128
RgbwColor red(colorSaturation, 0, 0, 0);
RgbwColor green(0, colorSaturation, 0, 0);
RgbwColor blue(0, 0, colorSaturation, 0);
RgbwColor white(colorSaturation);
RgbwColor black(0);
void setup()
{
_dinit();
_dln("Initializing LED strip");
strip = new NeoPixelBus<NeoGrbwFeature, Neo800KbpsMethod>(5);
strip->Begin();
strip->Show();
strip = new Strip();
strip->init(5); // TODO ledCount
currentTime = millis();
_dln("Starting LittleFS");
if (!LittleFS.begin())
_dln("Setup :: failed to mount file system");
_dln("Reading settings");
connectionSettings->read();
systemSettings->read();
/*
stepsSettings->read();
timeTriggerSettings->read();
motionTriggerSettings->read();
*/
_dln("Setting pin modes");
pinMode(systemSettings->pinAPButton(), INPUT_PULLUP);
pinMode(systemSettings->pinLEDAP(), OUTPUT);
pinMode(systemSettings->pinLEDSTA(), OUTPUT);
_dln("Setup :: starting initialization sequence");
for (uint8_t blink = 0; blink <= 1; blink++)
{
digitalWrite(systemSettings->pinLEDAP(), HIGH);
delay(100);
digitalWrite(systemSettings->pinLEDAP(), LOW);
delay(100);
}
for (uint8_t blink = 0; blink <= 1; blink++)
{
digitalWrite(systemSettings->pinLEDSTA(), HIGH);
delay(100);
digitalWrite(systemSettings->pinLEDSTA(), LOW);
delay(100);
}
/*
uint8_t bottomStep = stepsSettings->count() - 1;

View File

@ -3,16 +3,23 @@ bool stationMode = false;
uint32_t stationModeStart = 0;
uint32_t apButtonStart = 0;
bool mDNSActive = false;
void startAccessPoint();
void startStationMode();
void startmDNS();
void initWiFi()
{
WiFi.disconnect();
WiFi.softAPdisconnect();
if (mDNSActive)
{
MDNS.close();
mDNSActive = false;
}
accessPoint = connectionSettings->flag(AccessPoint);
stationMode = connectionSettings->flag(StationMode) && connectionSettings->ssid() != nullptr;
@ -42,6 +49,7 @@ void updateWiFi()
_dln(WiFi.localIP());
stationModeStart = 0;
startmDNS();
}
else if (stationMode && accessPoint &&
currentTime - stationModeStart >= StationModeTimeout)
@ -80,6 +88,9 @@ void updateWiFi()
else if (apButtonStart > 0)
apButtonStart = 0;
}
if (mDNSActive)
MDNS.update();
}
@ -94,6 +105,8 @@ void startAccessPoint()
}
else
_d("WiFi :: failed to start soft access point");
startmDNS();
}
@ -119,3 +132,19 @@ void startStationMode()
else
_d("WiFi :: failed to start station mode");
}
void startmDNS()
{
char* hostname = connectionSettings->hostname();
if (hostname == nullptr)
return;
if (!MDNS.begin(hostname))
_dln("WiFi :: mDNS setup failed");
else
{
mDNSActive = true;
_d("WiFi :: mDNS responder started for hostname "); _d(hostname); _dln(".local");
}
}

View File

@ -5,188 +5,39 @@
* https://git.x2software.net/pub/RGBWifi
*/
#include "./api.h"
#include <ArduinoJson.h>
#include <IPAddress.h>
#include <ESP8266WiFi.h>
#include "./shared.h"
#include "../assets/version.h"
#include "../debug.h"
#include "../global.h"
#include "../settings/connection.h"
/*
void handleSet(AsyncWebServerRequest *request)
void handleSetStatic(AsyncWebServerRequest *request)
{
_dln("API :: set");
_dln("API :: set/static");
AsyncWebParameter* param;
uint8_t value = 0;
AsyncWebParameter* rParam;
AsyncWebParameter* gParam;
AsyncWebParameter* bParam;
AsyncWebParameter* wParam;
param = request->getParam("value");
if (param != nullptr)
{
value = param->value().toInt();
}
else
{
param = request->getParam("percent");
if (param != nullptr)
{
value = map(param->value().toInt(), 0, 100, 0, 255);
}
else
{
request->send(400);
return;
}
}
rParam = request->getParam("r");
gParam = request->getParam("g");
bParam = request->getParam("b");
wParam = request->getParam("w");
uint16_t time = 0;
uint8_t from = 0;
param = request->getParam("time");
if (param != nullptr)
time = param->value().toInt();
param = request->getParam("from");
if (param != nullptr)
{
if (param->value() == "top")
from = 1;
else if (param->value() == "bottom")
from = 2;
}
if (from == 0 || time == 0)
stairs->setAll(value, time, 0);
else
stairs->sweep(value, time, from == 1);
request->send(200);
}
void handleGetStepValues(AsyncWebServerRequest *request)
{
_dln("API :: get steps");
DynamicJsonBuffer jsonBuffer(JSON_ARRAY_SIZE(17));
bool target = !request->hasParam("current");
JsonArray& root = jsonBuffer.createArray();
for (uint8_t step = 0; step < stepsSettings->count(); step++)
root.add(stairs->get(step, target));
AsyncResponseStream *response = request->beginResponseStream("application/json");
root.printTo(*response);
request->send(response);
}
void handlePostStepValues(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
_dln("API :: post steps");
DynamicJsonBuffer jsonBuffer(2*JSON_ARRAY_SIZE(17) + JSON_OBJECT_SIZE(3) + 130);
JsonObject& root = jsonBuffer.parseObject((char*)data);
if (!root.success())
if (rParam == nullptr || gParam == nullptr || bParam == nullptr || wParam == nullptr)
{
request->send(400);
return;
}
uint16_t transitionTime = root["transitionTime"];
JsonArray& values = root["values"];
JsonArray& startTime = root["startTime"];
size_t startTimeCount = startTime.size();
size_t valueCount = values.size();
if (valueCount > stepsSettings->count())
valueCount = stepsSettings->count();
for (uint8_t step = 0; step < valueCount; step++)
stairs->set(step, values[step], transitionTime, step < startTimeCount ? startTime[step] : 0);
RgbwColor* color = new RgbwColor(rParam->value().toInt(), gParam->value().toInt(), bParam->value().toInt(), wParam->value().toInt());
strip->setStatic(*color);
delete color;
request->send(200);
}
void handleGetTimeTriggers(AsyncWebServerRequest *request)
{
_dln("API :: get time triggers");
AsyncResponseStream *response = request->beginResponseStream("application/json");
timeTriggerSettings->toJson(*response);
request->send(response);
}
void handlePostTimeTriggers(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
_dln("API :: post time triggers");
bool changed;
if (timeTriggerSettings->fromJson((char*)data, &changed))
{
timeTriggerSettings->write();
if (changed)
timeTriggerSettingsChanged = true;
request->send(200);
}
else
request->send(400);
}
void handleGetMotionTriggers(AsyncWebServerRequest *request)
{
_dln("API :: get motion triggers");
AsyncResponseStream *response = request->beginResponseStream("application/json");
motionTriggerSettings->toJson(*response);
request->send(response);
}
void handlePostMotionTriggers(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
_dln("API :: post motion triggers");
bool changed;
if (motionTriggerSettings->fromJson((char*)data, &changed))
{
motionTriggerSettings->write();
if (changed)
motionTriggerSettingsChanged = true;
request->send(200);
}
else
request->send(400);
}
*/
void registerAPIRoutes(AsyncWebServer* server)
{
/*
server->on("/api/set", HTTP_GET, handleSet);
server->on("/api/steps/values", HTTP_GET, handleGetStepValues);
server->on("/api/steps/values", HTTP_POST, devNullRequest, devNullFileUpload, handlePostStepValues);
server->on("/api/triggers/time", HTTP_GET, handleGetTimeTriggers);
server->on("/api/triggers/time", HTTP_POST, devNullRequest, devNullFileUpload, handlePostTimeTriggers);
server->on("/api/triggers/motion", HTTP_GET, handleGetMotionTriggers);
server->on("/api/triggers/motion", HTTP_POST, devNullRequest, devNullFileUpload, handlePostMotionTriggers);
*/
server->on("/api/set/static", HTTP_GET, handleSetStatic);
}

View File

@ -6,6 +6,7 @@
*/
#include "./settings.h"
#include <ArduinoJson.h>
#include <AsyncJson.h>
#include <IPAddress.h>
#include <ESP8266WiFi.h>
#include <EspSaveCrash.h>
@ -24,33 +25,20 @@ extern "C" {
bool clearedResetReason = false;
/*
void handleStatus(AsyncWebServerRequest *request)
{
_dln("API :: status");
DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(6));
DynamicJsonDocument jsonDocument(1024);
JsonObject& root = jsonBuffer.createObject();
root["systemID"] = String(ESP.getChipId(), HEX);
root["version"] = String(VersionFullSemVer);
jsonDocument["systemID"] = String(ESP.getChipId(), HEX);
jsonDocument["version"] = String(VersionFullSemVer);
if (ntpClient != nullptr && hasTimezone)
{
root["time"] = ntpClient->getEpochTime();
root["timeOffset"] = timezoneOffset;
}
else
{
root["time"] = false;
root["timeOffset"] = 0;
}
root["resetReason"] = clearedResetReason ? 0 : ESP.getResetInfoPtr()->reason;
root["stackTrace"] = SaveCrash.count() > 0;
jsonDocument["resetReason"] = clearedResetReason ? 0 : ESP.getResetInfoPtr()->reason;
jsonDocument["stackTrace"] = SaveCrash.count() > 0;
AsyncResponseStream *response = request->beginResponseStream("application/json");
root.printTo(*response);
serializeJson(jsonDocument, *response);
request->send(response);
}
@ -63,20 +51,19 @@ void handleConnectionStatus(AsyncWebServerRequest *request)
WiFiMode_t mode = WiFi.getMode();
DynamicJsonBuffer jsonBuffer((2 * JSON_OBJECT_SIZE(2)) + JSON_OBJECT_SIZE(3));
DynamicJsonDocument jsonDocument(1024);
JsonObject& root = jsonBuffer.createObject();
JsonObject& ap = root.createNestedObject("ap");
JsonObject ap = jsonDocument.createNestedObject("ap");
ap["enabled"] = (mode == WIFI_AP || mode == WIFI_AP_STA);
ap["ip"] = WiFi.softAPIP().toString();
JsonObject& station = root.createNestedObject("station");
JsonObject station = jsonDocument.createNestedObject("station");
station["enabled"] = (mode == WIFI_STA || mode == WIFI_AP_STA);
station["status"] = (uint8_t)WiFi.status();
station["ip"] = WiFi.localIP().toString();
AsyncResponseStream *response = request->beginResponseStream("application/json");
root.printTo(*response);
serializeJson(jsonDocument, *response);
request->send(response);
}
@ -92,12 +79,12 @@ void handleGetConnection(AsyncWebServerRequest *request)
}
void handlePostConnection(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
void handlePostConnection(AsyncWebServerRequest *request, JsonVariant &json)
{
_dln("API :: post connection");
bool changed;
if (connectionSettings->fromJson((char*)data, &changed))
if (connectionSettings->fromJson(json, &changed))
{
connectionSettings->write();
@ -121,12 +108,12 @@ void handleGetSystem(AsyncWebServerRequest *request)
}
void handlePostSystem(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
void handlePostSystem(AsyncWebServerRequest *request, JsonVariant &json)
{
_dln("API :: post system");
bool changed;
if (systemSettings->fromJson((char*)data, &changed))
if (systemSettings->fromJson(json, &changed))
{
systemSettings->write();
@ -140,35 +127,6 @@ void handlePostSystem(AsyncWebServerRequest *request, uint8_t *data, size_t len,
}
void handleGetSteps(AsyncWebServerRequest *request)
{
_dln("API :: get steps");
AsyncResponseStream *response = request->beginResponseStream("application/json");
stepsSettings->toJson(*response);
request->send(response);
}
void handlePostSteps(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
_dln("API :: post steps");
bool changed;
if (stepsSettings->fromJson((char*)data, &changed))
{
stepsSettings->write();
if (changed)
stepsSettingsChanged = true;
request->send(200);
}
else
request->send(400);
}
void handleGetStackTrace(AsyncWebServerRequest *request)
{
_dln("API :: get stack trace");
@ -222,23 +180,24 @@ void handleCrashWDT(AsyncWebServerRequest *request)
while (true);
}
#endif
*/
void registerSettingsRoutes(AsyncWebServer* server)
{
/*
server->on("/api/status", HTTP_GET, handleStatus);
server->on("/api/connection/status", HTTP_GET, handleConnectionStatus);
server->on("/api/connection", HTTP_GET, handleGetConnection);
server->on("/api/connection", HTTP_POST, devNullRequest, devNullFileUpload, handlePostConnection);
AsyncCallbackJsonWebHandler* connectionPostHandler = new AsyncCallbackJsonWebHandler("/api/connection", handlePostConnection);
connectionPostHandler->setMethod(HTTP_POST);
server->addHandler(connectionPostHandler);
server->on("/api/system", HTTP_GET, handleGetSystem);
server->on("/api/system", HTTP_POST, devNullRequest, devNullFileUpload, handlePostSystem);
server->on("/api/steps", HTTP_GET, handleGetSteps);
server->on("/api/steps", HTTP_POST, devNullRequest, devNullFileUpload, handlePostSteps);
AsyncCallbackJsonWebHandler* systemPostHandler = new AsyncCallbackJsonWebHandler("/api/system", handlePostSystem);
systemPostHandler->setMethod(HTTP_POST);
server->addHandler(systemPostHandler);
server->on("/api/stacktrace/get", HTTP_GET, handleGetStackTrace);
server->on("/api/stacktrace/delete", HTTP_GET, handleDeleteStackTrace);
@ -248,5 +207,4 @@ void registerSettingsRoutes(AsyncWebServer* server)
server->on("/api/crash/softwdt", HTTP_GET, handleCrashSoftWDT);
server->on("/api/crash/wdt", HTTP_GET, handleCrashWDT);
#endif
*/
}

View File

@ -66,6 +66,22 @@ void AbstractJsonSettings::write()
}
bool AbstractJsonSettings::fromJson(char* data, bool* changed)
{
DynamicJsonDocument jsonDocument(1024);
auto error = deserializeJson(jsonDocument, data);
if (error)
{
_d("JSON deserialization failed: "); _dln(error.c_str());
return false;
}
JsonVariant jsonVariant = jsonDocument.as<JsonVariant>();
return fromJson(jsonVariant, changed);
}
bool AbstractJsonSettings::fromJson(char* data)
{
return fromJson(data, nullptr);

View File

@ -7,6 +7,7 @@
#ifndef __settingsjson
#define __settingsjson
#include <ArduinoJson.h>
#include "../debug.h"
class AbstractJsonSettings
@ -20,8 +21,9 @@ class AbstractJsonSettings
void write();
virtual void toJson(Print &print) = 0;
virtual bool fromJson(char* data, bool* changed) = 0;
virtual bool fromJson(JsonVariant &jsonDocument, bool* changed) = 0;
bool fromJson(char* data, bool* changed);
bool fromJson(char* data);
};

View File

@ -15,50 +15,40 @@
void ConnectionSettings::toJson(Print &print)
{
/*
DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(9));
DynamicJsonDocument jsonDocument(1024);
JsonObject& root = jsonBuffer.createObject();
root["hostname"] = hostname();
root["accesspoint"] = flag(AccessPoint);
root["station"] = flag(StationMode);
root["ssid"] = ssid();
root["password"] = password();
root["dhcp"] = flag(DHCP);
root["ip"] = ip() != 0 ? ip().toString() : "";
root["subnetmask"] = subnetMask() != 0 ? subnetMask().toString() : "";
root["gateway"] = gateway() != 0 ? gateway().toString() : "";
jsonDocument["hostname"] = hostname();
jsonDocument["accesspoint"] = flag(AccessPoint);
jsonDocument["station"] = flag(StationMode);
jsonDocument["ssid"] = ssid();
jsonDocument["password"] = password();
jsonDocument["dhcp"] = flag(DHCP);
jsonDocument["ip"] = ip() != emptyIP ? ip().toString() : "";
jsonDocument["subnetmask"] = subnetMask() != emptyIP ? subnetMask().toString() : "";
jsonDocument["gateway"] = gateway() != emptyIP ? gateway().toString() : "";
root.printTo(print);
*/
serializeJson(jsonDocument, print);
}
bool ConnectionSettings::fromJson(char* data, bool* changed)
bool ConnectionSettings::fromJson(JsonVariant &jsonDocument, bool* changed)
{
/*
if (changed != nullptr)
*changed = false;
DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(9) + 250);
JsonObject& root = jsonBuffer.parseObject(data);
if (!root.success())
return false;
IPAddress jsonIP;
IPAddress jsonSubnetMask;
IPAddress jsonGateway;
const char* jsonHostname = root["hostname"];
bool jsonAccessPoint = root["accesspoint"];
bool jsonStation = root["station"];
const char* jsonSSID = root["ssid"];
const char* jsonPassword = root["password"];
bool jsonDHCP = root["dhcp"];
const char* jsonIPText = root["ip"];
const char* jsonSubnetMaskText = root["subnetmask"];
const char* jsonGatewayText = root["gateway"];
const char* jsonHostname = jsonDocument["hostname"];
bool jsonAccessPoint = jsonDocument["accesspoint"];
bool jsonStation = jsonDocument["station"];
const char* jsonSSID = jsonDocument["ssid"];
const char* jsonPassword = jsonDocument["password"];
bool jsonDHCP = jsonDocument["dhcp"];
const char* jsonIPText = jsonDocument["ip"];
const char* jsonSubnetMaskText = jsonDocument["subnetmask"];
const char* jsonGatewayText = jsonDocument["gateway"];
if (jsonIPText == nullptr || !jsonIP.fromString(jsonIPText)) jsonIP = emptyIP;
if (jsonSubnetMaskText == nullptr || !jsonSubnetMask.fromString(jsonSubnetMaskText)) jsonSubnetMask = emptyIP;
@ -93,5 +83,4 @@ bool ConnectionSettings::fromJson(char* data, bool* changed)
}
return true;
*/
}

View File

@ -40,7 +40,7 @@ class ConnectionSettings : public AbstractJsonSettings
public:
void toJson(Print &print);
bool fromJson(char* data, bool* changed);
bool fromJson(JsonVariant &jsonDocument, bool* changed);
char* hostname() { return mHostname; }

View File

@ -15,99 +15,42 @@
void SystemSettings::toJson(Print &print)
{
/*
DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(5));
DynamicJsonDocument jsonDocument(1024);
JsonObject& root = jsonBuffer.createObject();
JsonObject& pins = root.createNestedObject("pins");
JsonObject pins = jsonDocument.createNestedObject("pins");
pins["ledAP"] = pinLEDAP();
pins["ledSTA"] = pinLEDSTA();
pins["apButton"] = pinAPButton();
pins["pwmSDA"] = pinPWMDriverSDA();
pins["pwmSCL"] = pinPWMDriverSCL();
root["pwmAddress"] = pwmDriverAddress();
root["pwmFrequency"] = pwmDriverFrequency();
root["mapsAPIKey"] = mapsAPIKey();
root.printTo(print);
*/
serializeJson(jsonDocument, print);
}
bool SystemSettings::fromJson(char* data, bool* changed)
bool SystemSettings::fromJson(JsonVariant &jsonDocument, bool* changed)
{
/*
if (changed != nullptr)
*changed = false;
DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(5) + 500);
JsonObject& root = jsonBuffer.parseObject(data);
if (!root.success())
return false;
const char* jsonNTPServer = root["ntpServer"];
uint32_t jsonNTPInterval = root["ntpInterval"];
double jsonLat = root["lat"];
double jsonLng = root["lng"];
JsonObject& pins = root["pins"];
JsonObject pins = jsonDocument["pins"];
uint8_t jsonPinLEDAP = pins["ledAP"];
uint8_t jsonPinLEDSTA = pins["ledSTA"];
uint8_t jsonPinAPButton = pins["apButton"];
uint8_t jsonPinPWMDriverSDA = pins["pwmSDA"];
uint8_t jsonPinPWMDriverSCL = pins["pwmSCL"];
uint8_t jsonPWMDriverAddress = root["pwmAddress"];
uint16_t jsonPWMDriverFrequency = root["pwmFrequency"];
const char* jsonMapAPIKey = root["mapsAPIKey"];
if (jsonNTPServer == nullptr) jsonNTPServer = DefaultNTPServer;
if (jsonNTPInterval == 0) jsonNTPInterval = 5;
if (jsonPinLEDAP == 0) jsonPinLEDAP = pinLEDAP();
if (jsonPinLEDSTA == 0) jsonPinLEDSTA = pinLEDSTA();
if (jsonPinAPButton == 0) jsonPinAPButton = pinAPButton();
if (jsonPinPWMDriverSDA == 0) jsonPinPWMDriverSDA = pinPWMDriverSDA();
if (jsonPinPWMDriverSCL == 0) jsonPinPWMDriverSCL = pinPWMDriverSCL();
if (jsonPWMDriverAddress == 0) jsonPWMDriverAddress = pwmDriverAddress();
if (jsonPWMDriverFrequency == 0) jsonPWMDriverFrequency = pwmDriverFrequency();
if ((jsonPinLEDAP != pinLEDAP()) ||
(jsonPinLEDSTA != pinLEDSTA()) ||
(jsonPinAPButton != pinAPButton()) ||
(jsonPinPWMDriverSDA != pinPWMDriverSDA()) ||
(jsonPinPWMDriverSCL != pinPWMDriverSCL()) ||
(jsonPWMDriverAddress != pwmDriverAddress()) ||
(jsonPWMDriverFrequency != pwmDriverFrequency()) ||
(!sameStr(jsonMapAPIKey, mapsAPIKey())) ||
(jsonLat != latitude()) ||
(jsonLng != longitude()) ||
(!sameStr(jsonNTPServer, ntpServer())) ||
(jsonNTPInterval != ntpInterval()))
(jsonPinAPButton != pinAPButton()))
{
latitude(jsonLat);
longitude(jsonLng);
pinLEDAP(jsonPinLEDAP);
pinLEDSTA(jsonPinLEDSTA);
pinAPButton(jsonPinAPButton);
pinPWMDriverSDA(jsonPinPWMDriverSDA);
pinPWMDriverSCL(jsonPinPWMDriverSCL);
pwmDriverAddress(jsonPWMDriverAddress);
pwmDriverFrequency(jsonPWMDriverFrequency);
mapsAPIKey(jsonMapAPIKey);
ntpServer(jsonNTPServer);
ntpInterval(jsonNTPInterval);
if (changed != nullptr)
*changed = true;
}
return true;
*/
}

View File

@ -32,7 +32,7 @@ class SystemSettings : public AbstractJsonSettings
void toJson(Print &print);
bool fromJson(char* data, bool* changed);
bool fromJson(JsonVariant &jsonDocument, bool* changed);
uint8_t pinLEDAP() { return mPinLEDAP; }
void pinLEDAP(uint8_t value) { mPinLEDAP = value; }

32
src/strip.cpp Normal file
View File

@ -0,0 +1,32 @@
/*
* ESP8266 RGBW controller
* Copyright 2020 (c) Mark van Renswoude
*
* https://git.x2software.net/pub/RGBWifi
*/
#include "./strip.h"
#include <Math.h>
#include <FS.h>
#include "./debug.h"
#include "./global.h"
NeoGamma<NeoGammaTableMethod> colorGamma;
RgbwColor clearColor(0);
void Strip::init(uint16_t ledCount)
{
mBus = new NeoPixelBus<NeoGrbwFeature, Neo800KbpsMethod>(ledCount);
mBus->Begin();
setStatic(clearColor);
}
void Strip::setStatic(const RgbwColor color)
{
mBus->ClearTo(colorGamma.Correct(color));
mBus->Show();
}

23
src/strip.h Normal file
View File

@ -0,0 +1,23 @@
/*
* ESP8266 RGBW controller
* Copyright 2020 (c) Mark van Renswoude
*
* https://git.x2software.net/pub/RGBWifi
*/
#ifndef __Strip
#define __Strip
#include <NeoPixelBus.h>
#include "./config.h"
class Strip
{
private:
NeoPixelBus<NeoGrbwFeature, Neo800KbpsMethod>* mBus;
public:
void init(uint16_t ledCount);
void setStatic(const RgbwColor color);
};
#endif

View File

@ -352,7 +352,7 @@ function startApp()
ip: self.connection.ip,
subnetmask: self.connection.subnetmask,
gateway: self.connection.gateway,
}, { retry: 10, retryDelay: 1000 })
}, { retry: 10, retryDelay: 1000, headers: { 'Content-Type': 'application/json' } })
.then(function(response)
{
})
@ -370,7 +370,7 @@ function startApp()
self.saving = true;
axios.post('/api/system', self.system, { retry: 10, retryDelay: 1000 })
axios.post('/api/system', self.system, { retry: 10, retryDelay: 1000, headers: { 'Content-Type': 'application/json' } })
.then(function(response)
{
self.showNotification(i18n.t('rebootPending'));

2
web/dist/bundle.js vendored

File diff suppressed because one or more lines are too long

View File

@ -19,7 +19,7 @@
<div id="container">
<div class="header">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXBJREFUeNrsWdENgjAQLcYBcAPcACdQN4AN2MC4gRsYJ9ENdAPYADaADepdUhM1qFjurgp9ScMHgd713V3ftUp5eHgMF1rrGEau6VHD2HMbH5qJOLHra+fkzbsYRshM8pLTgUIgSgvuMMoYw+iMYTr6QhNYMrNiNywILlyVKdcyyPsmcRsyU50kgHtQQu2AdNJFpDkAK4I/LIWMb2AsIBcq0iRGeQGPTZfV6QE0+gDGF2rosGEgMQxIAhnZAiPN84upRf0/OlpsLCBp3yq0chgtCUUZrRw6QDO3EWHSqF9tarZaSKJXeJDdbQlsE0KD6JN/KoRsGhxXKClCKHJIfkThwMWhA6dBSolRijkJOd1ZUv9yQ9OpqbHpiaUVaEbZE7tIIjoBKXysos1c4V8ebLEdbv2bcMsE7gjuBdvXRSJ4F+/wqIXXrIGwmX3zwacLDheNO91OjLQKd14VMDCnYgCxVjI3NTe1mSoPD49x4SrAAG9qPn4eovCMAAAAAElFTkSuQmCC" />
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0E2MTY4NzJGQjFBMTFFQThERTJFM0JGMzk3MjRDRDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0E2MTY4NzNGQjFBMTFFQThERTJFM0JGMzk3MjRDRDUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3QTYxNjg3MEZCMUExMUVBOERFMkUzQkYzOTcyNENENSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3QTYxNjg3MUZCMUExMUVBOERFMkUzQkYzOTcyNENENSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgI/6YAAAAfkSURBVHjazFpbbBRVGP5nZnd7odttt/SKbQELpqUhQK0oRAWDBoIYEy/RiCEiUV8QDA9iffBF44sh0QeJPhlvqBETEokaQUXwTirB2MZyKWCFXqD03r3Mzvj9p7N1O3um3Xs85etlzj87/3fOfz2DYpomZWAUAS3AWqABqAGqres8JoBe4DJwDvgRaAcG032wkiaB+4CHgU2AP8l7x4AvgYPAp4CekgZMIEm4gd1Ap5m5cQFoA3zJ6pOs8g9ZD8vWGAB2ZIOAF/gwWW0ikYhACuMwUJOIbon4wErgEFA7m9Dk5CQNDw/T2NgYBYNBCoVCFA6Hxc+mpiby+y0XCV4mM9BPim/FXM8dAh4AvplNyDXHh9wDfOU0aRgGXbt2jXp7e4XyrDgviKqqpGmakAkEAoLItM+NtFPo2BZSq24ltXY7abWPE6n5so8vAY4CjwEfpkJgw2zK87h48SJ1dnZSXl6eQGFhYVyAYJJM6L8nFpMCbkbvzwKRrpdIa9hL2qJnnR7zAX8UcEA2qTrc1AR8Pdce88q63W6heHTFE4h7RBBVkCEUL/4av0L6b7so/MOdMK3zTjfxDqxLlIAb+E4mbDcHVnrG6iYVv0UaIqUQ8GFH/vmewkeXkTnouOm8oGWJEPgEKLdfHBwcpPb2dspQ5o4nUqqQGQpQ6NuNMK0PnMz987kIbAbul0WYkydPCnv2eDyUlWGAxjwQgZrhE1vJuH5EJnUr8LQTAf79PfsdiON06tQpoXxBQUHmd8C+GwWKWOvwiXvgE3/LpN4EfDICzwCldumuri4aHR2lefPmZVf5GBK8ExQwST+5yclvn5cRaLNLcozv6emhoqKi3Cgfa07FCkV6/qTIhddkEruAvFgCG4EFdqnu7m5yuVypR5q06mT8K4AJ/4XFNkL2WU44W2MJbLdL9Pf309WrVwUBDp26rgt/yNlgU4I/mMMGduItmcSTUQKcx++VEeCIw4kqCiaT02FOZSVDbka3AZWsUSv7vn22oaGBli5dOqMsYFNSFCW3loTlNa5fEjWUUrzKPr2eCdwhuzE/P5/+F0PFgoVQU/UfIi2ewO1MoDHlHcausF9wjnCqVnk+7QimcBX7u2xmMROosl/t6+uj8fHxGTbPyrAfLFiwQNqOSp+bKXNzc9HXJZsRPlAhC58cgWLNiCMRJ7Oampppxerq6qiqqsoxzLIck+NSO60NQPVqBi+h7R8R5Xhsz8AEiu3bzlVmcXGxWPHo4M6KE1rsqkb7gFzkBDLQLIGAMpNAnupk23G+hFXmcjqnuSCuajWlJeqYXVFeea5AYxiRC+bD+fAPmFcVdkc1Od+rVKigmcEeo32nCXOCDDwjH5vidrODG/Alg3w+P5qegvSUV91Yfa99JsQE+oFlsVc5gc2ILGzjExOUj2vDqI8GOR+oGj7XIN3U8R1tI77cqIVREFNY5yrWFE/W9QDdfHNLWgSwNqTm3YDlLrFPDbusI78Zg+162lSgrFlaSp79+8l1+DB5/H4K7tlDnuW30OS1Hto3to869A5qcjVRm/cFqiktpLffDdORIxqVlZm0bZtKfr+WnvnoXKHeJJvpYwJx8YmjTUwoYXsg5coV0s6cIZMdGb6geQqEc52NnKXucDd5FI8QzfdoKEMi1NGhIkKZcH6F0q5ARHW6XDZzgT/6uP0qn+HwLogTBdYKChs33kj66tVklpQwQ4oExoXsKvcq8qI7X+JaIv4eD+pUX2/Q2rUKlZaaaII4gnFmTzlbijyglG+Rzf7IB1tF1imxO3bm9OnTNDAwMHVUIj7EzV18NKZyvBW74yHPdLwP4YtFecVZlK+NjQWpqamZKiqm2mzz+jEKH1839TR17kRnTqIGK6kg97o+2XStakWhuKOA6urq+HAqy6yKaMmnYnWMWMZqPqyVWrdLNsPH8z3RPPCOfba8vJy8Xq84bVM4CqEfYFPChakdsTQMmSF0fwHxM6o8i7IYb1SMaPLWgyKOz4/Uup2y6XdiG5rPuIO0SyxcuFBk4Jy2k7EFHNxMW9Imi/+6nQBrGNc1VFZWilqHD2xz2geoXH3C9itvAIFXZBLcoo3am/rX+QjILtnY2CiKOs7MOSGhTDkuHz+6W79wknpZdirByj8VV8ki+qxYsUKEVOEP2SShCKeCr+G5aw7A/ptlUm2xyddezL0PHLPfwc7MJDg7c0GXFRL8kQH0FhMIw6v3wXwekUl1Aq/OdTbKR4tB+8WysjJqaWkRpTb7RGaVN4XNc33ovv090uqfc5LcnMjhLr8Z2SC72+fzUWtrqyDDp3UcodJWHCZjXsevZY3kuesXUqu3Okk/yL1WIgR4nAAedWr2V65cKZyb/YNbTzarxEOtImKeCY8zh7jbKiBt+V7yrO9AvXOL002cyQ46HVk7jY8sgtKz7traWtFeXkGRxz007wgffrF/sJkxmBRfm0FOHxLKK+WLSat9gtT6HaTkVc3GeDfwhvMmzr1yd1uJrmg2oZGRERoaGpreETavaORqbm6m+fPnW7XNeTJHz5FacXci28We/PGcRyMJoA44ksx70nA4bEJ5E2RSedX6G7AsGy+6dwKjWXzRrQMvZvNNPaMKeNl6q56pwYuyD1icrD7p/GcPrxWpHrT8JJVx3PIvDhQDqUXizFSa9TT1/moNsMg67fNbJ99kJcYhqwTgWP4r8BNwJt0H/yvAACQI4YPfCFCLAAAAAElFTkSuQmCC" />
<h1>{{ $t('title') }}</h1>
<h2>{{ status.systemID !== null ? $t('systemID') + ': ' + status.systemID : '' }}</h2>
@ -108,6 +108,7 @@
<label for="hostname">{{ $t('connection.hostname') }}</label>
<input type="text" :placeholder="$t('connection.hostnamePlaceholder')" id="hostname" v-model="connection.hostname" :disabled="!connection.station">
<span class="hint">{{ $t('connection.hostnameHint') }}</span>
<div class="buttons">
<input type="submit" :disabled="saving" :value="saving ? $t('applyButtonSaving') : $t('applyButton')">

View File

@ -54,6 +54,7 @@ var messages = {
subnetmask: 'Subnet mask',
gateway: 'Gateway',
hostname: 'Hostname',
hostnameHint: 'If specified, this module is available at <hostname>.local if your device supports mDNS (at the time of writing, Android does not).',
hostnamePlaceholder: 'Default: mac address'
},
@ -149,6 +150,7 @@ var messages = {
subnetmask: 'Subnet masker',
gateway: 'Gateway',
hostname: 'Hostnaam',
hostnameHint: 'Indien ingevuld is deze module te bereiken op <hostnaam>.local als je apparaat mDNS ondersteund mDNS (op het moment van schrijven ondersteund Android dit niet).',
hostnamePlaceholder: 'Standaard: mac adres'
},

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 2.9 KiB