diff --git a/build/app.js b/build/app.js index fe45872..bc4a6e7 100644 --- a/build/app.js +++ b/build/app.js @@ -3207,6 +3207,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/settings */ "./src/lib/settings.js"); /* harmony import */ var _lib_loader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/loader */ "./src/lib/loader.js"); /* harmony import */ var _lib_plugins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/plugins */ "./src/lib/plugins.js"); +/* harmony import */ var _lib_menu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/menu */ "./src/lib/menu.js"); + @@ -3232,8 +3234,8 @@ class App extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { super(); this.state = { menuActive: false, - menu: menus[0], - page: menus[0], + menu: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus[0], + page: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus[0], changed: false }; @@ -3255,7 +3257,7 @@ class App extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { class: "menu-link", onClick: this.menuToggle }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", null)), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_menu__WEBPACK_IMPORTED_MODULE_2__["Menu"], { - menus: menus, + menus: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus, selected: state.menu }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_page__WEBPACK_IMPORTED_MODULE_3__["Page"], { page: state.page, @@ -3281,13 +3283,13 @@ class App extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { if (current !== newFragment) { current = newFragment; const parts = current.split('/'); - const menu = menus.find(menu => menu.href === parts[0]); - const page = parts.length > 1 ? routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : menu; + const m = _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus.find(menu => menu.href === parts[0]); + const page = parts.length > 1 ? _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m; if (page) { this.setState({ page, - menu, + menu: m, menuActive: false }); } @@ -3311,6 +3313,218 @@ load(); /***/ }), +/***/ "./src/components/form/index.js": +/*!**************************************!*\ + !*** ./src/components/form/index.js ***! + \**************************************/ +/*! exports provided: Form */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Form", function() { return Form; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/helpers */ "./src/lib/helpers.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/settings */ "./src/lib/settings.js"); + + + +class Form extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + + this.saveForm = () => { + const values = {}; + const groups = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(this.props.config.groups); + groups.map(groupKey => { + const group = this.props.config.groups[groupKey]; + const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(group.configs); + if (!values[groupKey]) values[groupKey] = {}; + keys.map(key => { + let val = this.form.elements[`${groupKey}.${key}`].value; + + if (group.configs[key].type === 'checkbox') { + val = val === 'on' ? 1 : 0; + } + + values[groupKey][key] = val; + }); + }); + this.props.config.onSave(values); + }; + + this.resetForm = () => { + this.form.reset(); + }; + + this.onChange = (id, prop, config = {}) => { + return e => { + let val = this.form.elements[id].value; + + if (config.type === 'checkbox') { + val = this.form.elements[id].checked ? 1 : 0; + } else if (config.type === 'number' || config.type === 'ip') { + val = parseFloat(val); + } else if (config.type === 'select') { + val = isNaN(val) ? val : parseInt(val); + } + + Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["set"])(this.props.selected, prop, val); + + if (config.onChange) { + config.onChange(e); + } + }; + }; + } + + renderConfig(id, config, value, varName) { + switch (config.type) { + case 'string': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "text", + value: value, + onChange: this.onChange(id, varName, config) + }); + + case 'number': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "number", + value: value, + onChange: this.onChange(id, varName, config) + }); + + case 'ip': + return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.0`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.0`, `${varName}.0`, config), + style: "width: 80px", + value: value ? value[0] : null + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.1`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.1`, `${varName}.1`, config), + style: "width: 80px", + value: value ? value[1] : null + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.2`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.2`, `${varName}.2`, config), + style: "width: 80px", + value: value ? value[2] : null + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.3`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.3`, `${varName}.3`, config), + style: "width: 80px", + value: value ? value[3] : null + })]; + + case 'password': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "password", + onChange: this.onChange(id, varName, config) + }); + + case 'checkbox': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "checkbox", + defaultChecked: value, + onChange: this.onChange(id, varName, config) + }); + + case 'select': + const options = typeof config.options === 'function' ? config.options() : config.options; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("select", { + id: id, + type: "password", + onChange: this.onChange(id, varName, config) + }, options.map(option => { + const name = option instanceof Object ? option.name : option; + const val = option instanceof Object ? option.value : option; + + if (val === value) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: val, + selected: true + }, name); + } else { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: val + }, name); + } + })); + + case 'file': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "file" + }); + + case 'button': + if (config.if != null && !config.if) return null; + + const clickEvent = () => { + if (!config.click) return; + config.click(this.props.selected); + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: clickEvent + }, "GET IT"); + } + } + + renderConfigGroup(id, configs, values) { + const configArray = Array.isArray(configs) ? configs : [configs]; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, configArray.map((conf, i) => { + const varId = configArray.length > 1 ? `${id}.${i}` : id; + const varName = conf.var ? conf.var : varId; + const val = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["get"])(values, varName, null); + return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: varId + }, conf.name), this.renderConfig(varId, conf, val, varName)]; + })); + } + + renderGroup(id, group, values) { + const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(group.configs); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("fieldset", { + name: id + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", null, group.name), keys.map(key => { + const conf = group.configs[key]; + return this.renderConfigGroup(`${id}.${key}`, conf, values); + })); + } + + render(props) { + const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(props.config.groups); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned", + ref: ref => this.form = ref + }, keys.map(key => this.renderGroup(key, props.config.groups[key], props.selected))); + } + +} + +/***/ }), + /***/ "./src/components/menu/index.js": /*!**************************************!*\ !*** ./src/components/menu/index.js ***! @@ -3991,695 +4205,8005 @@ const saveConfig = (save = true) => { /***/ }), -/***/ "./src/lib/espeasy.js": -/*!****************************!*\ - !*** ./src/lib/espeasy.js ***! - \****************************/ -/*! exports provided: getJsonStat, loadDevices, getConfigNodes, getVariables, getDashboardConfigNodes, storeFile, deleteFile, storeDashboardConfig, storeRuleConfig, loadRuleConfig, loadDashboardConfig, storeRule */ +/***/ "./src/devices/10_light_lux.js": +/*!*************************************!*\ + !*** ./src/devices/10_light_lux.js ***! + \*************************************/ +/*! exports provided: bh1750 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getJsonStat", function() { return getJsonStat; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDevices", function() { return loadDevices; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfigNodes", function() { return getConfigNodes; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariables", function() { return getVariables; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDashboardConfigNodes", function() { return getDashboardConfigNodes; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeFile", function() { return storeFile; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteFile", function() { return deleteFile; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeDashboardConfig", function() { return storeDashboardConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRuleConfig", function() { return storeRuleConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadRuleConfig", function() { return loadRuleConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDashboardConfig", function() { return loadDashboardConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRule", function() { return storeRule; }); -/* harmony import */ var mini_toastr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mini-toastr */ "./node_modules/mini-toastr/mini-toastr.js"); -/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js"); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bh1750", function() { return bh1750; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); - -const getJsonStat = async (url = '') => { - return await fetch(`${url}/json`).then(response => response.json()); +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const measurmentMode = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const bh1750 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + mode: { + name: 'Measurement mode', + type: 'select', + options: measurmentMode, + var: 'configs[1]' + }, + send_to_sleep: { + name: 'Send sensor to sleep', + type: 'checkbox', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } }; -const loadDevices = async url => { - return getJsonStat(url).then(response => response.Sensors); + +/***/ }), + +/***/ "./src/devices/11_pme.js": +/*!*******************************!*\ + !*** ./src/devices/11_pme.js ***! + \*******************************/ +/*! exports provided: pme */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pme", function() { return pme; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mode = [{ + value: 0, + name: 'Digital' +}, { + value: 1, + name: 'Analog' +}]; +const pme = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'Port', + type: 'number', + var: 'gpio4' + }, + mode: { + name: 'Port Type', + type: 'select', + options: mode, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } }; -const getConfigNodes = async () => { - const devices = await loadDevices(); - const vars = []; - const nodes = devices.map(device => { - const taskValues = device.TaskValues || []; - taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`)); - const result = [{ - group: 'TRIGGERS', - type: device.TaskName || `${device.TaskNumber}-${device.Type}`, - inputs: [], - outputs: [1], - config: [{ - name: 'variable', + +/***/ }), + +/***/ "./src/devices/12_lcd.js": +/*!*******************************!*\ + !*** ./src/devices/12_lcd.js ***! + \*******************************/ +/*! exports provided: lcd2004 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lcd2004", function() { return lcd2004; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const displaySize = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const lcdCommand = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const lcd2004 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', type: 'select', - values: taskValues.map(value => value.Name), - value: taskValues.length ? taskValues[0].Name : '' - }, { - name: 'euqality', + options: i2c_address, + var: 'configs[0]' + }, + size: { + name: 'Display Size', type: 'select', - values: ['', '=', '<', '>', '<=', '>=', '!='], - value: '' - }, { - name: 'value', - type: 'number' - }], - indent: true, - toString: function () { - const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`; - return `when ${this.type}.${this.config[0].value} ${comparison}`; + options: displaySize, + var: 'configs[1]' }, - toDsl: function () { - const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`; - return [`on ${this.type}#${this.config[0].value}${comparison} do\n%%output%%\nEndon\n`]; + line1: { + name: 'Line 1', + type: 'string', + var: 'configs[2]' + }, + line2: { + name: 'Line 2', + type: 'string', + var: 'configs[2]' + }, + line3: { + name: 'Line 3', + type: 'string', + var: 'configs[2]' + }, + line4: { + name: 'Line 4', + type: 'string', + var: 'configs[2]' + }, + button: { + name: 'Display Button', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + command: { + name: 'LCD Command Mode', + type: 'select', + options: lcdCommand, + var: 'configs[2]' } - }]; - let fnNames, fnName, name; + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; - switch (device.Type) { - // todo: need access to GPIO number - // case 'Switch input - Switch': - // result.push({ - // group: 'ACTIONS', - // type: `${device.TaskName} - switch`, - // inputs: [1], - // outputs: [1], - // config: [{ - // name: 'value', - // type: 'number', - // }], - // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; }, - // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; } - // }); - // break; - case 'Regulator - Level Control': - result.push({ - group: 'ACTIONS', - type: `${device.TaskName} - setlevel`, - inputs: [1], - outputs: [1], - config: [{ - name: 'value', - type: 'number' - }], - toString: function () { - return `${device.TaskName}.level = ${this.config[0].value}`; - }, - toDsl: function () { - return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; - } - }); - break; +/***/ }), - case 'Extra IO - PCA9685': - case 'Switch input - PCF8574': - case 'Switch input - MCP23017': - fnNames = { - 'Extra IO - PCA9685': 'PCF', - 'Switch input - PCF8574': 'PCF', - 'Switch input - MCP23017': 'MCP' - }; - fnName = fnNames[device.Type]; - result.push({ - group: 'ACTIONS', - type: `${device.TaskName} - GPIO`, - inputs: [1], - outputs: [1], - config: [{ - name: 'pin', - type: 'select', - values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] +/***/ "./src/devices/13_hcsr04.js": +/*!**********************************!*\ + !*** ./src/devices/13_hcsr04.js ***! + \**********************************/ +/*! exports provided: hcsr04 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hcsr04", function() { return hcsr04; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mode = [{ + value: 0, + name: 'Value' +}, { + value: 1, + name: 'State' +}]; +const units = [{ + value: 0, + name: 'Metric' +}, { + value: 1, + name: 'Imperial' +}]; +const filters = [{ + value: 0, + name: 'None' +}, { + value: 1, + name: 'Median' +}]; +const hcsr04 = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO Trigger', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO Echo, 5V', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + mode: { + name: 'Mode', + type: 'select', + options: mode, + var: 'configs[0]' + }, + treshold: { + name: 'Treshold', + type: 'number', + var: 'configs[1]' + }, + max_distance: { + name: 'Max Distance', + type: 'number', + var: 'configs[2]' + }, + unit: { + name: 'Unit', + type: 'select', + options: units, + var: 'configs[3]' + }, + filter: { + name: 'Filter', + type: 'select', + options: filters, + var: 'configs[4]' + }, + filter_size: { + name: 'Filter Size', + type: 'number', + var: 'configs[5]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/14_si7021.js": +/*!**********************************!*\ + !*** ./src/devices/14_si7021.js ***! + \**********************************/ +/*! exports provided: si7021 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "si7021", function() { return si7021; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const resolution = [{ + value: 0, + name: 'Temp 14 bits, RH 12 bits' +}, { + value: 128, + name: 'Temp 13 bits, RH 10 bits' +}, { + value: 1, + name: 'Temp 12 bits, RH 8 bits' +}, { + value: 129, + name: 'Temp 11 bits, RH 11 bits' +}]; +const si7021 = { + sensor: { + name: 'Sensor', + configs: { + resolution: { + name: 'Resolution', + type: 'select', + options: resolution, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/15_tls2561.js": +/*!***********************************!*\ + !*** ./src/devices/15_tls2561.js ***! + \***********************************/ +/*! exports provided: tls2561 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tls2561", function() { return tls2561; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 57, + name: '0x39 (57) - default' +}, { + value: 73, + name: '0x49 (73)' +}, { + value: 41, + name: '0x29 (41)' +}]; +const measurmentMode = [{ + value: 0, + name: '13 ms' +}, { + value: 1, + name: '101 ms' +}, { + value: 2, + name: '402 ms' +}]; +const tls2561 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + mode: { + name: 'Integration time', + type: 'select', + options: measurmentMode, + var: 'configs[1]' + }, + send_to_sleep: { + name: 'Send sensor to sleep', + type: 'checkbox', + var: 'configs[2]' + }, + gain: { + name: 'Enable 16x gain', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/17_pn532.js": +/*!*********************************!*\ + !*** ./src/devices/17_pn532.js ***! + \*********************************/ +/*! exports provided: pn532 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pn532", function() { return pn532; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const pn532 = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'Reset Pin', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/18_dust.js": +/*!********************************!*\ + !*** ./src/devices/18_dust.js ***! + \********************************/ +/*! exports provided: dust */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dust", function() { return dust; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const measurmentMode = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const dust = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO - LED', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/19_pcf8574.js": +/*!***********************************!*\ + !*** ./src/devices/19_pcf8574.js ***! + \***********************************/ +/*! exports provided: pcf8574 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pcf8574", function() { return pcf8574; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const pcf8574 = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'PORT', + type: 'number', + var: 'gpio4' + }, + inversed: { + name: 'Inversed logic', + type: 'checkbox', + var: 'pin1inversed' + }, + send_boot_state: { + name: 'Send Boot State', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + advanced: { + name: 'Advanced event management', + configs: { + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs_float[0]' + }, + dblclick: { + name: 'Doublclick Event', + type: 'select', + options: eventTypes, + var: 'configs[4]' + }, + dblclick_interval: { + name: 'Doubleclick Max interval (ms)', + type: 'number', + var: 'configs_float[1]' + }, + longpress: { + name: 'Longpress event', + type: 'select', + options: eventTypes, + var: 'configs[5]' + }, + longpress_interval: { + name: 'Longpress min interval (ms)', + type: 'number', + var: 'configs_float[2]' + }, + safe_button: { + name: 'Use safe button', + type: 'checkbox', + var: 'configs_float[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/1_input_switch.js": +/*!***************************************!*\ + !*** ./src/devices/1_input_switch.js ***! + \***************************************/ +/*! exports provided: inputSwitch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inputSwitch", function() { return inputSwitch; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const inputSwitch = { + sensor: { + name: 'Sensor', + configs: { + pullup: { + name: 'Internal PullUp', + type: 'checkbox', + var: 'pin1pullup' + }, + inversed: { + name: 'Inversed logic', + type: 'checkbox', + var: 'pin1inversed' + }, + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + switch_type: { + name: 'Switch Type', + type: 'select', + options: [{ + name: 'switch', + value: 0 + }, { + name: 'dimmer', + value: 3 + }], + var: 'configs[0]' + }, + switch_button_type: { + name: 'Switch Button Type', + type: 'select', + options: [{ + name: 'normal', + value: 0 + }, { + name: 'active low', + value: 1 + }, { + name: 'active high', + value: 2 + }], + var: 'configs[2]' + }, + send_boot_state: { + name: 'Send Boot State', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + advanced: { + name: 'Advanced event management', + configs: { + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs_float[0]' + }, + dblclick: { + name: 'Doublclick Event', + type: 'select', + options: eventTypes, + var: 'configs[4]' + }, + dblclick_interval: { + name: 'Doubleclick Max interval (ms)', + type: 'number', + var: 'configs_float[1]' + }, + longpress: { + name: 'Longpress event', + type: 'select', + options: eventTypes, + var: 'configs[5]' + }, + longpress_interval: { + name: 'Longpress min interval (ms)', + type: 'number', + var: 'configs_float[2]' + }, + safe_button: { + name: 'Use safe button', + type: 'checkbox', + var: 'configs_float[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/20_ser2net.js": +/*!***********************************!*\ + !*** ./src/devices/20_ser2net.js ***! + \***********************************/ +/*! exports provided: ser2net */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ser2net", function() { return ser2net; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const parity = [{ + value: 0, + name: 'No Parity' +}, { + value: 1, + name: 'Even' +}, { + value: 2, + name: 'Odd' +}]; +const eventProcessing = [{ + value: 0, + name: 'None' +}, { + value: 1, + name: 'Generic' +}, { + value: 2, + name: 'RFLink' +}]; +const ser2net = { + sensor: { + name: 'Settings', + configs: { + port: { + name: 'TCP Port', + type: 'number', + var: 'configs_float[0]' + }, + baudrate: { + name: 'Baudrate', + type: 'number', + var: 'configs_float[0]' + }, + data_bits: { + name: 'Data Bits', + type: 'number', + var: 'configs_float[0]' + }, + parity: { + name: 'Parity', + type: 'select', + options: parity, + var: 'configs[0]' + }, + stop_bits: { + name: 'Stop Bits', + type: 'number', + var: 'configs_float[0]' + }, + reset_after_boot: { + name: 'Reset target after boot', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'configs[1]' + }, + timeout: { + name: 'RX Receive Timeout', + type: 'number', + var: 'configs_float[0]' + }, + event_processing: { + name: 'Event Processing', + type: 'select', + options: eventProcessing, + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/21_level_control.js": +/*!*****************************************!*\ + !*** ./src/devices/21_level_control.js ***! + \*****************************************/ +/*! exports provided: levelControl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "levelControl", function() { return levelControl; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sensorModel = [{ + value: 11, + name: 'DHT11' +}, { + value: 22, + name: 'DHT22' +}, { + value: 12, + name: 'DHT12' +}, { + value: 23, + name: 'Sonoff am2301' +}, { + value: 70, + name: 'Sonoff si7021' +}]; +const levelControl = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO Level Low', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + check_task: { + name: 'Check Task', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["getTasks"], + var: 'configs[0]' + }, + check_value: { + name: 'Check Value', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["getTaskValues"], + var: 'configs[1]' + }, + level: { + name: 'Set Level', + type: 'number', + var: 'configs_float[0]' + }, + hysteresis: { + name: 'Hysteresis', + type: 'number', + var: 'configs_float[1]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/22_pca9685.js": +/*!***********************************!*\ + !*** ./src/devices/22_pca9685.js ***! + \***********************************/ +/*! exports provided: pca9685 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pca9685", function() { return pca9685; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mode = [...Array(32)].map((v, i) => ({ + value: i, + name: `0x${i.toString(16)} (${i})` +})); +const i2c_address = [...Array(32)].map((v, i) => ({ + value: i + 64, + name: `0x${(i + 64).toString(16)} (${i + 64})` +})); +const pca9685 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + mode: { + name: 'Mode 2', + type: 'select', + options: mode, + var: 'configs[1]' + }, + frequency: { + name: 'Frequency (23 - 1500)', + type: 'number', + var: 'configs_float[0]' + }, + range: { + name: 'Range (1-10000)', + type: 'number', + var: 'configs_float[1]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/23_oled1306.js": +/*!************************************!*\ + !*** ./src/devices/23_oled1306.js ***! + \************************************/ +/*! exports provided: oled1306 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "oled1306", function() { return oled1306; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const displaySize = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const oled1306 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + rotation: { + name: 'Rotation', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + size: { + name: 'Display Size', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + font: { + name: 'Font Width', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + line1: { + name: 'Line 1', + type: 'text', + var: 'configs[2]' + }, + line2: { + name: 'Line 2', + type: 'text', + var: 'configs[2]' + }, + line3: { + name: 'Line 3', + type: 'text', + var: 'configs[2]' + }, + line4: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line5: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line6: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line7: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line8: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + button: { + name: 'Display Button', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + timeout: { + name: 'Display Timeout', + type: 'number', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/24_mlx90614.js": +/*!************************************!*\ + !*** ./src/devices/24_mlx90614.js ***! + \************************************/ +/*! exports provided: mlx90614 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mlx90614", function() { return mlx90614; }); +const options = [{ + value: 0, + name: 'IR Object Temperature' +}, { + value: 1, + name: 'Ambient Temperature' +}]; +const mlx90614 = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'Port', + type: 'number', + var: 'gpio4' + }, + option: { + name: 'Option', + type: 'select', + options: options, + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/25_ads1115.js": +/*!***********************************!*\ + !*** ./src/devices/25_ads1115.js ***! + \***********************************/ +/*! exports provided: ads1115 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ads1115", function() { return ads1115; }); +const i2c_address = [{ + value: 72, + name: '0x48 (72)' +}, { + value: 73, + name: '0x49 (73)' +}, { + value: 74, + name: '0x4A (74)' +}, { + value: 75, + name: '0x4B (75)' +}]; +const gainOptions = [{ + value: 0, + name: '2/3x gain (FS=6.144V)' +}, { + value: 1, + name: '1x gain (FS=4.096V)' +}, { + value: 2, + name: '2x gain (FS=2.048V)' +}, { + value: 3, + name: '4x gain (FS=1.024V)' +}, { + value: 4, + name: '8x gain (FS=0.512V)' +}, { + value: 5, + name: '16x gain (FS=0.256V)' +}]; +const multiplexerOptions = [{ + value: 0, + name: 'AIN0 - AIN1 (Differential)' +}, { + value: 1, + name: 'AIN0 - AIN3 (Differential)' +}, { + value: 2, + name: 'AIN1 - AIN3 (Differential)' +}, { + value: 3, + name: 'AIN2 - AIN3 (Differential)' +}, { + value: 4, + name: 'AIN0 - GND (Single-Ended)' +}, { + value: 5, + name: 'AIN1 - GND (Single-Ended)' +}, { + value: 6, + name: 'AIN2 - GND (Single-Ended)' +}, { + value: 7, + name: 'AIN3 - GND (Single-Ended)' +}]; +const ads1115 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + gain: { + name: 'Gain', + type: 'select', + options: gainOptions, + var: 'configs[1]' + }, + multiplexer: { + name: 'Input Multiplexer', + type: 'select', + options: multiplexerOptions, + var: 'configs[2]' + } + } + }, + advanced: { + name: 'Two point calibration', + configs: { + enabled: { + name: 'Calibration Enabled', + type: 'number', + var: 'configs[3]' + }, + point1: [{ + name: 'Point 1', + type: 'number', + var: 'configs_long[0]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }], + point2: [{ + name: 'Point 2', + type: 'number', + var: 'configs_long[1]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }] + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/26_system_info.js": +/*!***************************************!*\ + !*** ./src/devices/26_system_info.js ***! + \***************************************/ +/*! exports provided: systemInfo */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "systemInfo", function() { return systemInfo; }); +const indicator = [{ + value: 0, + name: 'Uptime' +}, { + value: 1, + name: 'Free Ram' +}, { + value: 2, + name: 'WiFi RSSI' +}, { + value: 3, + name: 'Input VCC' +}, { + value: 4, + name: 'System load' +}, { + value: 5, + name: 'IP 1.Octet' +}, { + value: 6, + name: 'IP 2.Octet' +}, { + value: 7, + name: 'IP 3.Octet' +}, { + value: 8, + name: 'IP 4.Octet' +}, { + value: 9, + name: 'Web activity' +}, { + value: 10, + name: 'Free Stack' +}, { + value: 11, + name: 'None' +}]; +const systemInfo = { + sensor: { + name: 'Settings', + configs: { + indicator1: { + name: 'Indicator 1', + type: 'select', + options: indicator, + var: 'configs_long[0]' + }, + indicator1: { + name: 'Indicator 2', + type: 'select', + options: indicator, + var: 'configs_long[1]' + }, + indicator1: { + name: 'Indicator 3', + type: 'select', + options: indicator, + var: 'configs_long[2]' + }, + indicator1: { + name: 'Indicator 4', + type: 'select', + options: indicator, + var: 'configs_long[3]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/27_ina219.js": +/*!**********************************!*\ + !*** ./src/devices/27_ina219.js ***! + \**********************************/ +/*! exports provided: ina219 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ina219", function() { return ina219; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const measurmentRange = [{ + value: 0, + name: '32V, 2A' +}, { + value: 1, + name: '32V, 1A' +}, { + value: 2, + name: '16V, 0.4A' +}]; +const measurmentType = [{ + value: 0, + name: 'Voltage' +}, { + value: 1, + name: 'Current' +}, { + value: 2, + name: 'Power' +}, { + value: 3, + name: 'Voltage/Current/Power' +}]; +const i2c_address = [{ + value: 64, + name: '0x40 (64) - (default)' +}, { + value: 65, + name: '0x41 (65)' +}, { + value: 68, + name: '0x44 (68)' +}, { + value: 69, + name: '0x45 (69)' +}]; +const ina219 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + check_task: { + name: 'Measurment Range', + type: 'select', + options: measurmentRange, + var: 'configs[1]' + }, + check_value: { + name: 'Measurment Type', + type: 'select', + options: measurmentType, + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/28_bmx280.js": +/*!**********************************!*\ + !*** ./src/devices/28_bmx280.js ***! + \**********************************/ +/*! exports provided: bmx280 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmx280", function() { return bmx280; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 118, + name: '0x76 (118) - (default)' +}, { + value: 119, + name: '0x77 (119) - (default)' +}]; +const bmx280 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + }, + offset: { + name: 'Temperature Offset', + type: 'number', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/29_mqtt_domoticz.js": +/*!*****************************************!*\ + !*** ./src/devices/29_mqtt_domoticz.js ***! + \*****************************************/ +/*! exports provided: mqttDomoticz */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mqttDomoticz", function() { return mqttDomoticz; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mqttDomoticz = { + sensor: { + name: 'Actuator', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + idx: { + name: 'IDX', + type: 'number', + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/2_analog_input.js": +/*!***************************************!*\ + !*** ./src/devices/2_analog_input.js ***! + \***************************************/ +/*! exports provided: analogInput */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "analogInput", function() { return analogInput; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const analogInput = { + sensor: { + name: 'Sensor', + configs: { + oversampling: { + name: 'Oversampling', + type: 'checkbox', + var: 'configs[0]' + } + } + }, + advanced: { + name: 'Two point calibration', + configs: { + enabled: { + name: 'Calibration Enabled', + type: 'number', + var: 'configs[3]' + }, + point1: [{ + name: 'Point 1', + type: 'number', + var: 'configs_long[0]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }], + point2: [{ + name: 'Point 2', + type: 'number', + var: 'configs_long[1]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }] + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/30_bmp280.js": +/*!**********************************!*\ + !*** ./src/devices/30_bmp280.js ***! + \**********************************/ +/*! exports provided: bmp280 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmp280", function() { return bmp280; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 118, + name: '0x76 (118) - (default)' +}, { + value: 119, + name: '0x77 (119) - (default)' +}]; +const bmp280 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/31_sht1x.js": +/*!*********************************!*\ + !*** ./src/devices/31_sht1x.js ***! + \*********************************/ +/*! exports provided: sht1x */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sht1x", function() { return sht1x; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sht1x = { + sensor: { + name: 'Sensor', + configs: { + pullup: { + name: 'Internal PullUp', + type: 'checkbox', + var: 'pin1pullup' + }, + gpio1: { + name: 'GPIO Data', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO SCK', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/32_ms5611.js": +/*!**********************************!*\ + !*** ./src/devices/32_ms5611.js ***! + \**********************************/ +/*! exports provided: ms5611 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ms5611", function() { return ms5611; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 118, + name: '0x76 (118)' +}, { + value: 119, + name: '0x77 (119) - (default)' +}]; +const ms5611 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/33_dummy_device.js": +/*!****************************************!*\ + !*** ./src/devices/33_dummy_device.js ***! + \****************************************/ +/*! exports provided: dummyDevice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dummyDevice", function() { return dummyDevice; }); +const sensorModel = [{ + value: 1, + name: 'SENSOR_TYPE_SINGLE' +}, { + value: 2, + name: 'SENSOR_TYPE_TEMP_HUM' +}, { + value: 3, + name: 'SENSOR_TYPE_TEMP_BARO' +}, { + value: 4, + name: 'SENSOR_TYPE_TEMP_HUM_BARO' +}, { + value: 5, + name: 'SENSOR_TYPE_DUAL' +}, { + value: 5, + name: 'SENSOR_TYPE_TRIPLE' +}, { + value: 7, + name: 'SENSOR_TYPE_QUAD' +}, { + value: 10, + name: 'SENSOR_TYPE_SWITCH' +}, { + value: 11, + name: 'SENSOR_TYPE_DIMMER' +}, { + value: 20, + name: 'SENSOR_TYPE_LONG' +}, { + value: 21, + name: 'SENSOR_TYPE_WIND' +}]; +const dummyDevice = { + data: { + name: 'Data Acquisition', + configs: { + switch_type: { + name: 'Simulate Sensor Type', + type: 'select', + options: sensorModel, + var: 'configs[0]' + }, + interval: { + name: 'Interval', + type: 'number' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/34_dht12.js": +/*!*********************************!*\ + !*** ./src/devices/34_dht12.js ***! + \*********************************/ +/*! exports provided: dht12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dht12", function() { return dht12; }); +const sensorModel = [{ + value: 1, + name: 'SENSOR_TYPE_SINGLE' +}, { + value: 2, + name: 'SENSOR_TYPE_TEMP_HUM' +}, { + value: 3, + name: 'SENSOR_TYPE_TEMP_BARO' +}, { + value: 4, + name: 'SENSOR_TYPE_TEMP_HUM_BARO' +}, { + value: 5, + name: 'SENSOR_TYPE_DUAL' +}, { + value: 5, + name: 'SENSOR_TYPE_TRIPLE' +}, { + value: 7, + name: 'SENSOR_TYPE_QUAD' +}, { + value: 10, + name: 'SENSOR_TYPE_SWITCH' +}, { + value: 11, + name: 'SENSOR_TYPE_DIMMER' +}, { + value: 20, + name: 'SENSOR_TYPE_LONG' +}, { + value: 21, + name: 'SENSOR_TYPE_WIND' +}]; +const dht12 = { + data: { + name: 'Data Acquisition', + configs: { + interval: { + name: 'Interval', + type: 'number' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/36_sh1106.js": +/*!**********************************!*\ + !*** ./src/devices/36_sh1106.js ***! + \**********************************/ +/*! exports provided: sh1106 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sh1106", function() { return sh1106; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const displaySize = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const sh1106 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + rotation: { + name: 'Rotation', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + size: { + name: 'Display Size', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + font: { + name: 'Font Width', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + line1: { + name: 'Line 1', + type: 'text', + var: 'configs[2]' + }, + line2: { + name: 'Line 2', + type: 'text', + var: 'configs[2]' + }, + line3: { + name: 'Line 3', + type: 'text', + var: 'configs[2]' + }, + line4: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line5: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line6: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line7: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line8: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + button: { + name: 'Display Button', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + timeout: { + name: 'Display Timeout', + type: 'number', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/37_mqtt_import.js": +/*!***************************************!*\ + !*** ./src/devices/37_mqtt_import.js ***! + \***************************************/ +/*! exports provided: mqttImport */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mqttImport", function() { return mqttImport; }); +const mqttImport = { + data: { + name: 'Data Acquisition', + configs: { + switch_type: { + name: 'MQTT Topic 1', + type: 'text', + var: 'configs[0]' + }, + switch_type: { + name: 'MQTT Topic 2', + type: 'text', + var: 'configs[0]' + }, + switch_type: { + name: 'MQTT Topic 3', + type: 'text', + var: 'configs[0]' + }, + switch_type: { + name: 'MQTT Topic 4', + type: 'text', + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/38_neopixel_basic.js": +/*!******************************************!*\ + !*** ./src/devices/38_neopixel_basic.js ***! + \******************************************/ +/*! exports provided: neopixelBasic */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelBasic", function() { return neopixelBasic; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const type = [{ + value: 1, + name: 'GRB' +}, { + value: 2, + name: 'GRBW' +}]; +const neopixelBasic = { + sensor: { + name: 'Sensor', + configs: { + leds: { + name: 'LEd Count', + type: 'number', + var: 'configs[0]' + }, + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + type: { + name: 'Strip Type', + type: 'select', + options: type, + var: 'configs[1]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/39_thermocouple.js": +/*!****************************************!*\ + !*** ./src/devices/39_thermocouple.js ***! + \****************************************/ +/*! exports provided: thermocouple */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thermocouple", function() { return thermocouple; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const type = [{ + value: 1, + name: 'MAX 6675' +}, { + value: 2, + name: 'MAX 31855' +}]; +const thermocouple = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + type: { + name: 'Adapter IC', + type: 'select', + options: type, + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/3_generic_pulse.js": +/*!****************************************!*\ + !*** ./src/devices/3_generic_pulse.js ***! + \****************************************/ +/*! exports provided: genericPulse */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genericPulse", function() { return genericPulse; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const modeTypes = [{ + value: 0, + name: 'LOW' +}, { + value: 1, + name: 'CHANGE' +}, { + value: 2, + name: 'RISING' +}, { + value: 3, + name: 'FALLING' +}]; +const counterTypes = [{ + value: 0, + name: 'Delta' +}, { + value: 1, + name: 'Delta/Total/Time' +}, { + value: 2, + name: 'Total' +}, { + value: 3, + name: 'Delta/Total' +}]; +const genericPulse = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs[0]' + }, + counter_type: { + name: 'Counter Type', + type: 'select', + options: counterTypes, + var: 'configs[1]' + }, + mode_type: { + name: 'Switch Button Type', + type: 'select', + options: modeTypes, + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/41_neopixel_clock.js": +/*!******************************************!*\ + !*** ./src/devices/41_neopixel_clock.js ***! + \******************************************/ +/*! exports provided: neopixelClock */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelClock", function() { return neopixelClock; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const neopixelClock = { + sensor: { + name: 'Actuator', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + R: { + name: 'Red', + type: 'number', + min: 0, + max: 255, + var: 'configs[0]' + }, + G: { + name: 'Green', + type: 'number', + min: 0, + max: 255, + var: 'configs[1]' + }, + B: { + name: 'Blue', + type: 'number', + min: 0, + max: 255, + var: 'configs[2]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/42_neopixel_candle.js": +/*!*******************************************!*\ + !*** ./src/devices/42_neopixel_candle.js ***! + \*******************************************/ +/*! exports provided: neopixelCandle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelCandle", function() { return neopixelCandle; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const neopixelCandle = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/43_output_clock.js": +/*!****************************************!*\ + !*** ./src/devices/43_output_clock.js ***! + \****************************************/ +/*! exports provided: clock */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clock", function() { return clock; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const type = [{ + value: 0, + name: '' +}, { + value: 1, + name: 'Off' +}, { + value: 2, + name: 'On' +}]; +const clock = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO - Clock Event', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + event1: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event2: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event3: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event4: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event5: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event6: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event7: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event8: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }] + } + } +}; + +/***/ }), + +/***/ "./src/devices/44_wifi_gateway.js": +/*!****************************************!*\ + !*** ./src/devices/44_wifi_gateway.js ***! + \****************************************/ +/*! exports provided: wifiGateway */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wifiGateway", function() { return wifiGateway; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const parity = [{ + value: 0, + name: 'No Parity' +}, { + value: 1, + name: 'Even' +}, { + value: 2, + name: 'Odd' +}]; +const wifiGateway = { + sensor: { + name: 'Settings', + configs: { + port: { + name: 'TCP Port', + type: 'number', + var: 'configs_float[0]' + }, + baudrate: { + name: 'Baudrate', + type: 'number', + var: 'configs_float[0]' + }, + data_bits: { + name: 'Data Bits', + type: 'number', + var: 'configs_float[0]' + }, + parity: { + name: 'Parity', + type: 'select', + options: parity, + var: 'configs[0]' + }, + stop_bits: { + name: 'Stop Bits', + type: 'number', + var: 'configs_float[0]' + }, + reset_after_boot: { + name: 'Reset target after boot', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'configs[1]' + }, + timeout: { + name: 'RX Receive Timeout', + type: 'number', + var: 'configs_float[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/49_mhz19.js": +/*!*********************************!*\ + !*** ./src/devices/49_mhz19.js ***! + \*********************************/ +/*! exports provided: mhz19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mhz19", function() { return mhz19; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mhz19 = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO - TX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO - RX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/4_ds18b20.js": +/*!**********************************!*\ + !*** ./src/devices/4_ds18b20.js ***! + \**********************************/ +/*! exports provided: ds18b20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ds18b20", function() { return ds18b20; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const ds18b20 = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/52_senseair.js": +/*!************************************!*\ + !*** ./src/devices/52_senseair.js ***! + \************************************/ +/*! exports provided: senseAir */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "senseAir", function() { return senseAir; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const senseAir = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO - TX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO - RX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/56_sds011.js": +/*!**********************************!*\ + !*** ./src/devices/56_sds011.js ***! + \**********************************/ +/*! exports provided: sds011 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sds011", function() { return sds011; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sds011 = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO - TX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO - RX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/59_rotary_encoder.js": +/*!******************************************!*\ + !*** ./src/devices/59_rotary_encoder.js ***! + \******************************************/ +/*! exports provided: rotaryEncoder */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotaryEncoder", function() { return rotaryEncoder; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const rotaryEncoder = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO A - CLK', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO B - DT', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + gpio3: { + name: 'GPIO I - Z', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio3' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/5_dht.js": +/*!******************************!*\ + !*** ./src/devices/5_dht.js ***! + \******************************/ +/*! exports provided: dht */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dht", function() { return dht; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sensorModel = [{ + value: 11, + name: 'DHT11' +}, { + value: 22, + name: 'DHT22' +}, { + value: 12, + name: 'DHT12' +}, { + value: 23, + name: 'Sonoff am2301' +}, { + value: 70, + name: 'Sonoff si7021' +}]; +const dht = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO Data', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + switch_type: { + name: 'Sensor model', + type: 'select', + options: sensorModel, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + interval: { + name: 'Interval', + type: 'number' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/63_ttp229.js": +/*!**********************************!*\ + !*** ./src/devices/63_ttp229.js ***! + \**********************************/ +/*! exports provided: ttp229 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ttp229", function() { return ttp229; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const ttp229 = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO A - CLK', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO B - DT', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + scancode: { + name: 'ScanCode', + type: 'checkbox', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/6_bmp085.js": +/*!*********************************!*\ + !*** ./src/devices/6_bmp085.js ***! + \*********************************/ +/*! exports provided: bmp085 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmp085", function() { return bmp085; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const bmp085 = { + sensor: { + name: 'Sensor', + configs: { + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/7_pcf8591.js": +/*!**********************************!*\ + !*** ./src/devices/7_pcf8591.js ***! + \**********************************/ +/*! exports provided: pcf8591 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pcf8591", function() { return pcf8591; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const pcf8591 = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'PORT', + type: 'number', + var: 'gpio4' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/8_rfid.js": +/*!*******************************!*\ + !*** ./src/devices/8_rfid.js ***! + \*******************************/ +/*! exports provided: rfidWeigand */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rfidWeigand", function() { return rfidWeigand; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const weigandType = [{ + value: 26, + name: '26 Bits' +}, { + value: 34, + name: '34 Bits' +}]; +const rfidWeigand = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO D0 (green, 5V)', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO D1 (white, 5V)', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + type: { + name: 'Weigand Type', + type: 'select', + options: weigandType, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/9_io_mcp.js": +/*!*********************************!*\ + !*** ./src/devices/9_io_mcp.js ***! + \*********************************/ +/*! exports provided: inputMcp */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inputMcp", function() { return inputMcp; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const inputMcp = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'PORT', + type: 'number', + var: 'gpio4' + }, + inversed: { + name: 'Inversed logic', + type: 'checkbox', + var: 'pin1inversed' + }, + send_boot_state: { + name: 'Send Boot State', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + advanced: { + name: 'Advanced event management', + configs: { + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs_float[0]' + }, + dblclick: { + name: 'Doublclick Event', + type: 'select', + options: eventTypes, + var: 'configs[4]' + }, + dblclick_interval: { + name: 'Doubleclick Max interval (ms)', + type: 'number', + var: 'configs_float[1]' + }, + longpress: { + name: 'Longpress event', + type: 'select', + options: eventTypes, + var: 'configs[5]' + }, + longpress_interval: { + name: 'Longpress min interval (ms)', + type: 'number', + var: 'configs_float[2]' + }, + safe_button: { + name: 'Use safe button', + type: 'checkbox', + var: 'configs_float[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/_defs.js": +/*!******************************!*\ + !*** ./src/devices/_defs.js ***! + \******************************/ +/*! exports provided: pins, getTasks, getTaskValues */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTasks", function() { return getTasks; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTaskValues", function() { return getTaskValues; }); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _pages_config_hardware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pages/config.hardware */ "./src/pages/config.hardware.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return _pages_config_hardware__WEBPACK_IMPORTED_MODULE_1__["pins"]; }); + + + +const getTasks = () => { + return _lib_settings__WEBPACK_IMPORTED_MODULE_0__["settings"].get('tasks').filter(task => task.enabled).map(task => ({ + value: task.settings.index, + name: task.settings.name + })); +}; +const getTaskValues = () => { + return [1, 2, 3, 4]; +}; + +/***/ }), + +/***/ "./src/devices/index.js": +/*!******************************!*\ + !*** ./src/devices/index.js ***! + \******************************/ +/*! exports provided: devices */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "devices", function() { return devices; }); +/* harmony import */ var _1_input_switch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./1_input_switch */ "./src/devices/1_input_switch.js"); +/* harmony import */ var _2_analog_input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./2_analog_input */ "./src/devices/2_analog_input.js"); +/* harmony import */ var _3_generic_pulse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./3_generic_pulse */ "./src/devices/3_generic_pulse.js"); +/* harmony import */ var _4_ds18b20__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./4_ds18b20 */ "./src/devices/4_ds18b20.js"); +/* harmony import */ var _5_dht__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./5_dht */ "./src/devices/5_dht.js"); +/* harmony import */ var _6_bmp085__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./6_bmp085 */ "./src/devices/6_bmp085.js"); +/* harmony import */ var _7_pcf8591__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./7_pcf8591 */ "./src/devices/7_pcf8591.js"); +/* harmony import */ var _8_rfid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./8_rfid */ "./src/devices/8_rfid.js"); +/* harmony import */ var _9_io_mcp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./9_io_mcp */ "./src/devices/9_io_mcp.js"); +/* harmony import */ var _10_light_lux__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./10_light_lux */ "./src/devices/10_light_lux.js"); +/* harmony import */ var _11_pme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./11_pme */ "./src/devices/11_pme.js"); +/* harmony import */ var _12_lcd__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./12_lcd */ "./src/devices/12_lcd.js"); +/* harmony import */ var _13_hcsr04__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./13_hcsr04 */ "./src/devices/13_hcsr04.js"); +/* harmony import */ var _14_si7021__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./14_si7021 */ "./src/devices/14_si7021.js"); +/* harmony import */ var _15_tls2561__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./15_tls2561 */ "./src/devices/15_tls2561.js"); +/* harmony import */ var _17_pn532__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./17_pn532 */ "./src/devices/17_pn532.js"); +/* harmony import */ var _18_dust__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./18_dust */ "./src/devices/18_dust.js"); +/* harmony import */ var _19_pcf8574__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./19_pcf8574 */ "./src/devices/19_pcf8574.js"); +/* harmony import */ var _20_ser2net__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./20_ser2net */ "./src/devices/20_ser2net.js"); +/* harmony import */ var _21_level_control__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./21_level_control */ "./src/devices/21_level_control.js"); +/* harmony import */ var _22_pca9685__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./22_pca9685 */ "./src/devices/22_pca9685.js"); +/* harmony import */ var _23_oled1306__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./23_oled1306 */ "./src/devices/23_oled1306.js"); +/* harmony import */ var _24_mlx90614__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./24_mlx90614 */ "./src/devices/24_mlx90614.js"); +/* harmony import */ var _25_ads1115__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./25_ads1115 */ "./src/devices/25_ads1115.js"); +/* harmony import */ var _26_system_info__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./26_system_info */ "./src/devices/26_system_info.js"); +/* harmony import */ var _27_ina219__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./27_ina219 */ "./src/devices/27_ina219.js"); +/* harmony import */ var _28_bmx280__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./28_bmx280 */ "./src/devices/28_bmx280.js"); +/* harmony import */ var _29_mqtt_domoticz__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./29_mqtt_domoticz */ "./src/devices/29_mqtt_domoticz.js"); +/* harmony import */ var _30_bmp280__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./30_bmp280 */ "./src/devices/30_bmp280.js"); +/* harmony import */ var _31_sht1x__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./31_sht1x */ "./src/devices/31_sht1x.js"); +/* harmony import */ var _32_ms5611__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./32_ms5611 */ "./src/devices/32_ms5611.js"); +/* harmony import */ var _33_dummy_device__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./33_dummy_device */ "./src/devices/33_dummy_device.js"); +/* harmony import */ var _34_dht12__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./34_dht12 */ "./src/devices/34_dht12.js"); +/* harmony import */ var _36_sh1106__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./36_sh1106 */ "./src/devices/36_sh1106.js"); +/* harmony import */ var _37_mqtt_import__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./37_mqtt_import */ "./src/devices/37_mqtt_import.js"); +/* harmony import */ var _38_neopixel_basic__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./38_neopixel_basic */ "./src/devices/38_neopixel_basic.js"); +/* harmony import */ var _39_thermocouple__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./39_thermocouple */ "./src/devices/39_thermocouple.js"); +/* harmony import */ var _41_neopixel_clock__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./41_neopixel_clock */ "./src/devices/41_neopixel_clock.js"); +/* harmony import */ var _42_neopixel_candle__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./42_neopixel_candle */ "./src/devices/42_neopixel_candle.js"); +/* harmony import */ var _43_output_clock__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./43_output_clock */ "./src/devices/43_output_clock.js"); +/* harmony import */ var _44_wifi_gateway__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./44_wifi_gateway */ "./src/devices/44_wifi_gateway.js"); +/* harmony import */ var _49_mhz19__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./49_mhz19 */ "./src/devices/49_mhz19.js"); +/* harmony import */ var _52_senseair__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./52_senseair */ "./src/devices/52_senseair.js"); +/* harmony import */ var _56_sds011__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./56_sds011 */ "./src/devices/56_sds011.js"); +/* harmony import */ var _59_rotary_encoder__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./59_rotary_encoder */ "./src/devices/59_rotary_encoder.js"); +/* harmony import */ var _63_ttp229__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./63_ttp229 */ "./src/devices/63_ttp229.js"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +const devices = [{ + name: '- None -', + value: 0, + fields: [] +}, { + name: 'Switch input - Switch', + value: 1, + fields: _1_input_switch__WEBPACK_IMPORTED_MODULE_0__["inputSwitch"] +}, { + name: 'Analog input - internal', + value: 2, + fields: _2_analog_input__WEBPACK_IMPORTED_MODULE_1__["analogInput"] +}, { + name: 'Generic - Pulse counter', + value: 3, + fields: _3_generic_pulse__WEBPACK_IMPORTED_MODULE_2__["genericPulse"] +}, { + name: 'Environment - DS18b20', + value: 4, + fields: _4_ds18b20__WEBPACK_IMPORTED_MODULE_3__["ds18b20"] +}, { + name: 'Environment - DHT11/12/22 SONOFF2301/7021', + value: 5, + fields: _5_dht__WEBPACK_IMPORTED_MODULE_4__["dht"] +}, { + name: 'Environment - BMP085/180', + value: 6, + fields: _6_bmp085__WEBPACK_IMPORTED_MODULE_5__["bmp085"] +}, { + name: 'Analog input - PCF8591', + value: 7, + fields: _7_pcf8591__WEBPACK_IMPORTED_MODULE_6__["pcf8591"] +}, { + name: 'RFID - Wiegand', + value: 8, + fields: _8_rfid__WEBPACK_IMPORTED_MODULE_7__["rfidWeigand"] +}, { + name: 'Switch input - MCP23017', + value: 9, + fields: _9_io_mcp__WEBPACK_IMPORTED_MODULE_8__["inputMcp"] +}, { + name: 'Light/Lux - BH1750', + value: 10, + fields: _10_light_lux__WEBPACK_IMPORTED_MODULE_9__["bh1750"] +}, { + name: 'Extra IO - ProMini Extender', + value: 11, + fields: _11_pme__WEBPACK_IMPORTED_MODULE_10__["pme"] +}, { + name: 'Display - LCD2004', + value: 12, + fields: _12_lcd__WEBPACK_IMPORTED_MODULE_11__["lcd2004"] +}, { + name: 'Position - HC-SR04, RCW-0001, etc.', + value: 13, + fields: _13_hcsr04__WEBPACK_IMPORTED_MODULE_12__["hcsr04"] +}, { + name: 'Environment - SI7021/HTU21D', + value: 14, + fields: _14_si7021__WEBPACK_IMPORTED_MODULE_13__["si7021"] +}, { + name: 'Light/Lux - TSL2561', + value: 15, + fields: _15_tls2561__WEBPACK_IMPORTED_MODULE_14__["tls2561"] +}, //{ name: 'Communication - IR', value: 16, fields: bh1750 }, +{ + name: 'RFID - PN532', + value: 17, + fields: _17_pn532__WEBPACK_IMPORTED_MODULE_15__["pn532"] +}, { + name: 'Dust - Sharp GP2Y10', + value: 18, + fields: _18_dust__WEBPACK_IMPORTED_MODULE_16__["dust"] +}, { + name: 'Switch input - PCF8574', + value: 19, + fields: _19_pcf8574__WEBPACK_IMPORTED_MODULE_17__["pcf8574"] +}, { + name: 'Communication - Serial Server', + value: 20, + fields: _20_ser2net__WEBPACK_IMPORTED_MODULE_18__["ser2net"] +}, { + name: 'Regulator - Level Control', + value: 21, + fields: _21_level_control__WEBPACK_IMPORTED_MODULE_19__["levelControl"] +}, { + name: 'Extra IO - PCA9685', + value: 22, + fields: _22_pca9685__WEBPACK_IMPORTED_MODULE_20__["pca9685"] +}, { + name: 'Display - OLED SSD1306', + value: 23, + fields: _23_oled1306__WEBPACK_IMPORTED_MODULE_21__["oled1306"] +}, { + name: 'Environment - MLX90614', + value: 24, + fields: _24_mlx90614__WEBPACK_IMPORTED_MODULE_22__["mlx90614"] +}, { + name: 'Analog input - ADS1115', + value: 25, + fields: _25_ads1115__WEBPACK_IMPORTED_MODULE_23__["ads1115"] +}, { + name: 'Generic - System Info', + value: 26, + fields: _26_system_info__WEBPACK_IMPORTED_MODULE_24__["systemInfo"] +}, { + name: 'Energy (DC) - INA219', + value: 27, + fields: _27_ina219__WEBPACK_IMPORTED_MODULE_25__["ina219"] +}, { + name: 'Environment - BMx280', + value: 28, + fields: _28_bmx280__WEBPACK_IMPORTED_MODULE_26__["bmx280"] +}, { + name: 'Output - Domoticz MQTT Helper', + value: 29, + fields: _29_mqtt_domoticz__WEBPACK_IMPORTED_MODULE_27__["mqttDomoticz"] +}, { + name: 'Environment - BMP280', + value: 30, + fields: _30_bmp280__WEBPACK_IMPORTED_MODULE_28__["bmp280"] +}, { + name: 'Environment - SHT1X', + value: 31, + fields: _31_sht1x__WEBPACK_IMPORTED_MODULE_29__["sht1x"] +}, { + name: 'Environment - MS5611 (GY-63)', + value: 32, + fields: _32_ms5611__WEBPACK_IMPORTED_MODULE_30__["ms5611"] +}, { + name: 'Generic - Dummy Device', + value: 33, + fields: _33_dummy_device__WEBPACK_IMPORTED_MODULE_31__["dummyDevice"] +}, { + name: 'Environment - DHT12 (I2C)', + value: 34, + fields: _34_dht12__WEBPACK_IMPORTED_MODULE_32__["dht12"] +}, { + name: 'Display - OLED SSD1306/SH1106 Framed', + value: 36, + fields: _36_sh1106__WEBPACK_IMPORTED_MODULE_33__["sh1106"] +}, { + name: 'Generic - MQTT Import', + value: 37, + fields: _37_mqtt_import__WEBPACK_IMPORTED_MODULE_34__["mqttImport"] +}, { + name: 'Output - NeoPixel (Basic)', + value: 38, + fields: _38_neopixel_basic__WEBPACK_IMPORTED_MODULE_35__["neopixelBasic"] +}, { + name: 'Environment - Thermocouple', + value: 39, + fields: _39_thermocouple__WEBPACK_IMPORTED_MODULE_36__["thermocouple"] +}, { + name: 'Output - NeoPixel (Word Clock)', + value: 41, + fields: _41_neopixel_clock__WEBPACK_IMPORTED_MODULE_37__["neopixelClock"] +}, { + name: 'Output - NeoPixel (Candle)', + value: 42, + fields: _42_neopixel_candle__WEBPACK_IMPORTED_MODULE_38__["neopixelCandle"] +}, { + name: 'Output - Clock', + value: 43, + fields: _43_output_clock__WEBPACK_IMPORTED_MODULE_39__["clock"] +}, { + name: 'Communication - P1 Wifi Gateway', + value: 44, + fields: _44_wifi_gateway__WEBPACK_IMPORTED_MODULE_40__["wifiGateway"] +}, { + name: 'Gases - CO2 MH-Z19', + value: 49, + fields: _49_mhz19__WEBPACK_IMPORTED_MODULE_41__["mhz19"] +}, { + name: 'Gases - CO2 Senseair', + value: 52, + fields: _52_senseair__WEBPACK_IMPORTED_MODULE_42__["senseAir"] +}, { + name: 'Dust - SDS011/018/198', + value: 56, + fields: _56_sds011__WEBPACK_IMPORTED_MODULE_43__["sds011"] +}, { + name: 'Switch Input - Rotary Encoder', + value: 59, + fields: _59_rotary_encoder__WEBPACK_IMPORTED_MODULE_44__["rotaryEncoder"] +}, { + name: 'Keypad - TTP229 Touc', + value: 63, + fields: _63_ttp229__WEBPACK_IMPORTED_MODULE_45__["ttp229"] +}]; + +/***/ }), + +/***/ "./src/lib/espeasy.js": +/*!****************************!*\ + !*** ./src/lib/espeasy.js ***! + \****************************/ +/*! exports provided: getJsonStat, loadDevices, getConfigNodes, getVariables, getDashboardConfigNodes, storeFile, deleteFile, storeDashboardConfig, loadDashboardConfig, storeRuleConfig, loadRuleConfig, storeRule, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getJsonStat", function() { return getJsonStat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDevices", function() { return loadDevices; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfigNodes", function() { return getConfigNodes; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariables", function() { return getVariables; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDashboardConfigNodes", function() { return getDashboardConfigNodes; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeFile", function() { return storeFile; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteFile", function() { return deleteFile; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeDashboardConfig", function() { return storeDashboardConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDashboardConfig", function() { return loadDashboardConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRuleConfig", function() { return storeRuleConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadRuleConfig", function() { return loadRuleConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRule", function() { return storeRule; }); +/* harmony import */ var mini_toastr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mini-toastr */ "./node_modules/mini-toastr/mini-toastr.js"); +/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js"); + + +const getJsonStat = async (url = '') => { + return await fetch(`${url}/json`).then(response => response.json()); +}; +const loadDevices = async url => { + return getJsonStat(url).then(response => response.Sensors); +}; +const getConfigNodes = async () => { + const devices = await loadDevices(); + const vars = []; + const nodes = devices.map(device => { + const taskValues = device.TaskValues || []; + taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`)); + const result = [{ + group: 'TRIGGERS', + type: device.TaskName || `${device.TaskNumber}-${device.Type}`, + inputs: [], + outputs: [1], + config: [{ + name: 'variable', + type: 'select', + values: taskValues.map(value => value.Name), + value: taskValues.length ? taskValues[0].Name : '' + }, { + name: 'euqality', + type: 'select', + values: ['', '=', '<', '>', '<=', '>=', '!='], + value: '' + }, { + name: 'value', + type: 'number' + }], + indent: true, + toString: function () { + const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`; + return `when ${this.type}.${this.config[0].value} ${comparison}`; + }, + toDsl: function () { + const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`; + return [`on ${this.type}#${this.config[0].value}${comparison} do\n%%output%%\nEndon\n`]; + } + }]; + let fnNames, fnName, name; + + switch (device.Type) { + // todo: need access to GPIO number + // case 'Switch input - Switch': + // result.push({ + // group: 'ACTIONS', + // type: `${device.TaskName} - switch`, + // inputs: [1], + // outputs: [1], + // config: [{ + // name: 'value', + // type: 'number', + // }], + // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; }, + // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; } + // }); + // break; + case 'Regulator - Level Control': + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - setlevel`, + inputs: [1], + outputs: [1], + config: [{ + name: 'value', + type: 'number' + }], + toString: function () { + return `${device.TaskName}.level = ${this.config[0].value}`; + }, + toDsl: function () { + return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; + } + }); + break; + + case 'Extra IO - PCA9685': + case 'Switch input - PCF8574': + case 'Switch input - MCP23017': + fnNames = { + 'Extra IO - PCA9685': 'PCF', + 'Switch input - PCF8574': 'PCF', + 'Switch input - MCP23017': 'MCP' + }; + fnName = fnNames[device.Type]; + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - GPIO`, + inputs: [1], + outputs: [1], + config: [{ + name: 'pin', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }], + toString: function () { + return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; + } + }); + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - Pulse`, + inputs: [1], + outputs: [1], + config: [{ + name: 'pin', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }, { + name: 'unit', + type: 'select', + values: ['ms', 's'] + }, { + name: 'duration', + type: 'number' + }], + toString: function () { + return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; + }, + toDsl: function () { + if (this.config[2].value === 's') { + return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; + } else { + return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; + } + } + }); + break; + + case 'Extra IO - ProMini Extender': + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - GPIO`, + inputs: [1], + outputs: [1], + config: [{ + name: 'pin', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }], + toString: function () { + return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; + } + }); + break; + + case 'Display - OLED SSD1306': + case 'Display - LCD2004': + fnNames = { + 'Display - OLED SSD1306': 'OLED', + 'Display - LCD2004': 'LCD' + }; + fnName = fnNames[device.Type]; + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - Write`, + inputs: [1], + outputs: [1], + config: [{ + name: 'row', + type: 'select', + values: [1, 2, 3, 4] + }, { + name: 'column', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] + }, { + name: 'text', + type: 'text' + }], + toString: function () { + return `${device.TaskName}.text = ${this.config[2].value}`; + }, + toDsl: function () { + return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; + } + }); + break; + + case 'Generic - Dummy Device': + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - Write`, + inputs: [1], + outputs: [1], + config: [{ + name: 'variable', + type: 'select', + values: taskValues.map(value => value.Name) + }, { + name: 'value', + type: 'text' + }], + toString: function () { + return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; + } + }); + break; + } + + return result; + }).flat(); + return { + nodes, + vars + }; +}; +const getVariables = async () => { + const urls = ['']; //, 'http://192.168.1.130' + + const vars = {}; + await Promise.all(urls.map(async url => { + const stat = await getJsonStat(url); + stat.Sensors.map(device => { + device.TaskValues.map(value => { + vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value; + }); + }); + })); + return vars; +}; +const getDashboardConfigNodes = async url => { + const devices = await loadDevices(url); + const vars = []; + const nodes = devices.map(device => { + device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`)); + return []; + }).flat(); + return { + nodes, + vars + }; +}; +const storeFile = async (filename, data) => { + _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].show(); + const file = data ? new File([new Blob([data])], filename) : filename; + const formData = new FormData(); + formData.append('edit', 1); + formData.append('file', file); + return await fetch('/upload', { + method: 'post', + body: formData + }).then(() => { + _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide(); + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000); + }, e => { + _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide(); + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000); + }); +}; +const deleteFile = async filename => { + return await fetch('/filelist?delete=' + filename).then(() => { + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000); + }, e => { + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000); + }); +}; +const storeDashboardConfig = async config => { + storeFile('d1.txt', config); +}; +const loadDashboardConfig = async nodes => { + return await fetch('/d1.txt').then(response => response.json()); +}; +const storeRuleConfig = async config => { + storeFile('r1.txt', config); +}; +const loadRuleConfig = async () => { + return await fetch('/r1.txt').then(response => response.json()); +}; +const storeRule = async rule => { + const formData = new FormData(); + formData.append('set', 1); + formData.append('rules', rule); + return await fetch('/rules', { + method: 'post', + body: formData + }); +}; +/* harmony default export */ __webpack_exports__["default"] = ({ + getJsonStat, + loadDevices, + getConfigNodes, + getDashboardConfigNodes, + getVariables, + storeFile, + deleteFile, + storeDashboardConfig, + loadDashboardConfig, + storeRuleConfig, + loadRuleConfig, + storeRule +}); + +/***/ }), + +/***/ "./src/lib/floweditor.js": +/*!*******************************!*\ + !*** ./src/lib/floweditor.js ***! + \*******************************/ +/*! exports provided: FlowEditor */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FlowEditor", function() { return FlowEditor; }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); + // todo: +// improve relability of moving elements around +// global config + +const color = '#000000'; + +const saveChart = renderedNodes => { + // find initial nodes (triggers); + const triggers = renderedNodes.filter(node => node.inputs.length === 0); // for each initial node walk the tree and produce one 'rule' + + const result = triggers.map(trigger => { + const walkRule = rule => { + return { + t: rule.type, + v: rule.config.map(config => config.value), + o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))), + c: [rule.position.x, rule.position.y] + }; + }; + + return walkRule(trigger); + }); + return result; +}; + +const loadChart = (config, chart, from) => { + config.map(config => { + let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]); + + if (!node) { + const configNode = chart.nodes.find(n => config.t == n.type); + node = new NodeUI(chart.canvas, configNode, { + x: config.c[0], + y: config.c[1] + }); + node.config.map((cfg, i) => { + cfg.value = config.v[i]; + }); + node.render(); + chart.renderedNodes.push(node); + } + + if (from) { + const fromDimension = from.getBoundingClientRect(); + const toDimension = node.inputs[0].getBoundingClientRect(); + const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color); + chart.canvas.appendChild(lineSvg.element); + const x1 = fromDimension.x + fromDimension.width; + const y1 = fromDimension.y + fromDimension.height / 2; + const x2 = toDimension.x; + const y2 = toDimension.y + toDimension.height / 2; + lineSvg.setPath(x1, y1, x2, y2); + const connection = { + output: from, + input: node.inputs[0], + svg: lineSvg, + start: { + x: x1, + y: y1 + }, + end: { + x: x2, + y: y2 + } + }; + node.inputs[0].lines.push(connection); + from.lines.push(connection); + } + + config.o.map((output, outputI) => { + loadChart(output, chart, node.outputs[outputI]); + }); + }); +}; + +const exportChart = renderedNodes => { + // find initial nodes (triggers); + const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS'); + let result = ''; // for each initial node walk the tree and produce one 'rule' + + triggers.map(trigger => { + const walkRule = (r, i) => { + const rules = r.toDsl ? r.toDsl() : []; + let ruleset = ''; + let padding = r.indent ? ' ' : ''; + r.outputs.map((out, outI) => { + let rule = rules[outI] || r.type; + let subrule = ''; + + if (out.lines) { + out.lines.map(line => { + subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i); + }); + subrule = subrule.split('\n').map(line => padding + line).filter(line => line.trim() !== '').join('\n') + '\n'; + } + + if (rule.includes('%%output%%')) { + rule = rule.replace('%%output%%', subrule); + } else { + rule += subrule; + } + + ruleset += rule; + }); + return ruleset; + }; + + const rule = walkRule(trigger, 0); + result += rule + "\n\n"; + }); + return result; +}; // drag and drop helpers + + +const dNd = { + enableNativeDrag: (nodeElement, data) => { + nodeElement.draggable = true; + + nodeElement.ondragstart = ev => { + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(data).map(key => { + ev.dataTransfer.setData(key, data[key]); + }); + }; + }, + enableNativeDrop: (nodeElement, fn) => { + nodeElement.ondragover = ev => { + ev.preventDefault(); + }; + + nodeElement.ondrop = fn; + } // svg helpers + +}; + +class svgArrow { + constructor(width, height, fill, color) { + this.element = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px'); + this.element.setAttribute('width', width); + this.element.setAttribute('height', height); + this.element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + this.line = document.createElementNS("http://www.w3.org/2000/svg", "path"); + this.line.setAttributeNS(null, "fill", fill); + this.line.setAttributeNS(null, "stroke", color); + this.element.appendChild(this.line); + } + + setPath(x1, y1, x2, y2, tension = 0.5) { + const delta = (x2 - x1) * tension; + const hx1 = x1 + delta; + const hy1 = y1; + const hx2 = x2 - delta; + const hy2 = y2; + const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`; + this.line.setAttributeNS(null, "d", path); + } + +} // node configuration (each node in the left menu is represented by an instance of this object) + + +class Node { + constructor(conf) { + this.type = conf.type; + this.group = conf.group; + this.config = conf.config.map(config => Object.assign({}, config)); + this.inputs = conf.inputs.map(input => {}); + this.outputs = conf.outputs.map(output => {}); + this.toDsl = conf.toDsl; + this.toString = conf.toString; + this.toHtml = conf.toHtml; + this.indent = conf.indent; + } + +} // node UI (each node in your flow diagram is represented by an instance of this object) + + +class NodeUI extends Node { + constructor(canvas, conf, position) { + super(conf); + this.canvas = canvas; + this.position = position; + this.lines = []; + this.linesEnd = []; + this.toDsl = conf.toDsl; + this.toString = conf.toString; + this.toHtml = conf.toHtml; + this.indent = conf.indent; + } + + updateInputsOutputs(inputs, outputs) { + inputs.map(input => { + const rect = input.getBoundingClientRect(); + input.lines.map(line => { + line.end.x = rect.x; + line.end.y = rect.y + rect.height / 2; + line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y); + }); + }); + outputs.map(output => { + const rect = output.getBoundingClientRect(); + output.lines.map(line => { + line.start.x = rect.x + rect.width; + line.start.y = rect.y + rect.height / 2; + line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y); + }); + }); + } + + handleMoveEvent(ev) { + if (!this.canvas.canEdit) return; + const shiftX = ev.clientX - this.element.getBoundingClientRect().left; + const shiftY = ev.clientY - this.element.getBoundingClientRect().top; + + const onMouseMove = ev => { + const newy = ev.y - shiftY; + const newx = ev.x - shiftX; + this.position.y = newy - newy % this.canvas.gridSize; + this.position.x = newx - newx % this.canvas.gridSize; + this.element.style.top = `${this.position.y}px`; + this.element.style.left = `${this.position.x}px`; + this.updateInputsOutputs(this.inputs, this.outputs); + }; + + const onMouseUp = ev => { + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + }; + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + } + + handleDblClickEvent(ev) { + if (!this.canvas.canEdit) return; + if (this.config.length) showConfigBox(this.type, this.config, () => { + if (this.toHtml) { + this.text.innerHTML = this.toHtml(); + } else { + this.text.textContent = this.toString(); + } + }); + } + + handleRightClickEvent(ev) { + if (!this.canvas.canEdit) return; + this.inputs.map(input => { + input.lines.map(line => { + line.output.lines = []; + line.svg.element.parentNode.removeChild(line.svg.element); + }); + input.lines = []; + }); + this.outputs.map(output => { + output.lines.map(line => { + const index = line.input.lines.indexOf(line); + line.input.lines.splice(index, 1); + line.svg.element.parentNode.removeChild(line.svg.element); + }); + output.lines = []; + }); + this.element.parentNode.removeChild(this.element); + if (this.destroy) this.destroy(); + ev.preventDefault(); + ev.stopPropagation(); + return false; + } + + render() { + this.element = document.createElement('div'); + this.element.nodeObject = this; + this.element.className = `node node-chart group-${this.group}`; + this.text = document.createElement('span'); + + if (this.toHtml) { + this.text.innerHTML = this.toHtml(); + } else { + this.text.textContent = this.toString(); + } + + this.element.appendChild(this.text); + this.element.style.top = `${this.position.y}px`; + this.element.style.left = `${this.position.x}px`; + const inputs = document.createElement('div'); + inputs.className = 'node-inputs'; + this.element.appendChild(inputs); + this.inputs.map((val, index) => { + const input = this.inputs[index] = document.createElement('div'); + input.className = 'node-input'; + input.nodeObject = this; + input.lines = []; + + input.onmousedown = ev => { + ev.preventDefault(); + ev.stopPropagation(); + }; + + inputs.appendChild(input); + }); + const outputs = document.createElement('div'); + outputs.className = 'node-outputs'; + this.element.appendChild(outputs); + this.outputs.map((val, index) => { + const output = this.outputs[index] = document.createElement('div'); + output.className = 'node-output'; + output.nodeObject = this; + output.lines = []; + + output.oncontextmenu = ev => { + output.lines.map(line => { + line.svg.element.parentNode.removeChild(line.svg.element); + }); + output.lines = []; + ev.stopPropagation(); + ev.preventDefault(); + return false; + }; + + output.onmousedown = ev => { + ev.stopPropagation(); + if (output.lines.length) return; + const rects = output.getBoundingClientRect(); + const x1 = rects.x + rects.width; + const y1 = rects.y + rects.height / 2; + const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color); + this.canvas.appendChild(lineSvg.element); + + const onMouseMove = ev => { + lineSvg.setPath(x1, y1, ev.pageX, ev.pageY); + }; + + const onMouseUp = ev => { + const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY); + const input = elemBelow ? elemBelow.closest('.node-input') : null; + + if (!input) { + lineSvg.element.remove(); + } else { + const inputRect = input.getBoundingClientRect(); + const x2 = inputRect.x; + const y2 = inputRect.y + inputRect.height / 2; + lineSvg.setPath(x1, y1, x2, y2); + const connection = { + output, + input, + svg: lineSvg, + start: { + x: x1, + y: y1 + }, + end: { + x: x2, + y: y2 + } + }; + output.lines.push(connection); + input.lines.push(connection); + } + + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + }; + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + }; + + outputs.appendChild(output); + }); + this.element.ondblclick = this.handleDblClickEvent.bind(this); + this.element.onmousedown = this.handleMoveEvent.bind(this); + this.element.oncontextmenu = this.handleRightClickEvent.bind(this); + this.canvas.appendChild(this.element); + } + +} + +const getCfgUI = cfg => { + const template = document.createElement('template'); + + const getSelectOptions = val => { + const selected = val == cfg.value ? 'selected' : ''; + return ``; + }; + + switch (cfg.type) { + case 'text': + template.innerHTML = `
`; + break; + + case 'number': + template.innerHTML = `
`; + break; + + case 'select': + template.innerHTML = `
`; + break; + + case 'textselect': + template.innerHTML = `
+ + + +
`; + } + + return template.content.cloneNode(true); +}; + +const showConfigBox = (type, config, onclose) => { + const template = document.createElement('template'); + template.innerHTML = ` +
+
+
+ +
+
+
+ +
+ `; + document.body.appendChild(template.content.cloneNode(true)); + const configBox = document.body.querySelectorAll('.configbox')[0]; + const body = document.body.querySelectorAll('.configbox-body')[0]; + const okButton = document.getElementById('ob'); + const cancelButton = document.getElementById('cb'); + + cancelButton.onclick = () => { + configBox.remove(); + }; + + okButton.onclick = () => { + // set configuration to node + config.map(cfg => { + cfg.value = document.forms['configform'].elements[cfg.name].value; + }); + configBox.remove(); + onclose(); + }; + + config.map(cfg => { + const cfgUI = getCfgUI(cfg); + body.appendChild(cfgUI); + }); +}; + +class FlowEditor { + constructor(element, nodes, config) { + this.nodes = []; + this.renderedNodes = []; + this.onSave = config.onSave; + this.canEdit = !config.readOnly; + this.debug = config.debug != null ? config.debug : true; + this.gridSize = config.gridSize || 1; + this.element = element; + nodes.map(nodeConfig => { + const node = new Node(nodeConfig); + this.nodes.push(node); + }); + this.render(); + if (this.canEdit) dNd.enableNativeDrop(this.canvas, ev => { + const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type')); + let node = new NodeUI(this.canvas, configNode, { + x: ev.x, + y: ev.y + }); + node.render(); + + node.destroy = () => { + this.renderedNodes.splice(this.renderedNodes.indexOf(node), 1); + node = null; + }; + + this.renderedNodes.push(node); + }); + } + + loadConfig(config) { + loadChart(config, this); + } + + saveConfig() { + return saveChart(this.renderedNodes); + } + + renderContainers() { + if (this.canEdit) { + this.sidebar = document.createElement('div'); + this.sidebar.className = 'sidebar'; + this.element.appendChild(this.sidebar); + } + + this.canvas = document.createElement('div'); + this.canvas.className = 'canvas'; + this.canvas.canEdit = this.canEdit; + this.canvas.gridSize = this.gridSize; + this.element.appendChild(this.canvas); + + if (this.canEdit && this.debug) { + this.debug = document.createElement('div'); + this.debug.className = 'debug'; + const text = document.createElement('div'); + this.debug.appendChild(text); + const saveBtn = document.createElement('button'); + saveBtn.textContent = 'SAVE'; + + saveBtn.onclick = () => { + const config = JSON.stringify(saveChart(this.renderedNodes)); + const rules = exportChart(this.renderedNodes); + this.onSave(config, rules); + }; + + const loadBtn = document.createElement('button'); + loadBtn.textContent = 'LOAD'; + + loadBtn.onclick = () => { + const input = prompt('enter config'); + loadChart(JSON.parse(input), this); + }; + + const exportBtn = document.createElement('button'); + exportBtn.textContent = 'EXPORT'; + + exportBtn.onclick = () => { + const exported = exportChart(this.renderedNodes); + text.textContent = exported; + }; + + this.debug.appendChild(exportBtn); + this.debug.appendChild(saveBtn); + this.debug.appendChild(loadBtn); + this.debug.appendChild(text); + this.element.appendChild(this.debug); + } + } + + renderConfigNodes() { + const groups = {}; + this.nodes.map(node => { + if (!groups[node.group]) { + const group = document.createElement('div'); + group.className = 'group'; + group.textContent = node.group; + this.sidebar.appendChild(group); + groups[node.group] = group; + } + + const nodeElement = document.createElement('div'); + nodeElement.className = `node group-${node.group}`; + nodeElement.textContent = node.type; + groups[node.group].appendChild(nodeElement); + dNd.enableNativeDrag(nodeElement, { + type: node.type + }); + }); + } + + render() { + this.renderContainers(); + if (this.canEdit) this.renderConfigNodes(); + } + +} + +/***/ }), + +/***/ "./src/lib/helpers.js": +/*!****************************!*\ + !*** ./src/lib/helpers.js ***! + \****************************/ +/*! exports provided: get, set, getKeys */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getKeys", function() { return getKeys; }); +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js"); +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "get", function() { return lodash_get__WEBPACK_IMPORTED_MODULE_0___default.a; }); +/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/set */ "./node_modules/lodash/set.js"); +/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_set__WEBPACK_IMPORTED_MODULE_1__); +/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "set", function() { return lodash_set__WEBPACK_IMPORTED_MODULE_1___default.a; }); + + // const get = (obj, path, defaultValue) => path.replace(/\[/g, '.').replace(/\]/g, '').split(".") +// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj) +// const set = (obj, path, value) => { +// path.replace(/\[/g, '.').replace(/\]/g, '').split('.').reduce((a, c, i, src) => { +// if (!a[c]) a[c] = {}; +// if (i === src.length - 1) a[c] = value; +// }, obj) +// } + +const getKeys = object => { + const keys = []; + + for (let key in object) { + if (object.hasOwnProperty(key)) { + keys.push(key); + } + } + + return keys; +}; + + + +/***/ }), + +/***/ "./src/lib/loader.js": +/*!***************************!*\ + !*** ./src/lib/loader.js ***! + \***************************/ +/*! exports provided: loader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loader", function() { return loader; }); +class Loader { + constructor() { + const loader = document.createElement('div'); + loader.className = 'loader'; + loader.innerHTML = 'loading'; + document.body.appendChild(loader); + this.loader = loader; + } + + show() { + this.loader.classList.add('show'); + } + + hide() { + this.loader.classList.add('hide'); + setTimeout(() => { + this.loader.classList.remove('hide'); + this.loader.classList.remove('show'); + }, 1000); + } + +} + +const loader = new Loader(); + +/***/ }), + +/***/ "./src/lib/menu.js": +/*!*************************!*\ + !*** ./src/lib/menu.js ***! + \*************************/ +/*! exports provided: menu */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "menu", function() { return menu; }); +/* harmony import */ var _pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pages */ "./src/pages/index.js"); +/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../conf/config.dat */ "./src/conf/config.dat.js"); + + + +class Menus { + constructor() { + this.menus = []; + this.routes = []; + + this.addMenu = menu => { + this.menus.push(menu); + this.addRoute(menu); + }; + + this.addRoute = route => { + this.routes.push(route); + + if (route.children) { + route.children.forEach(child => this.routes.push(child)); + } + }; + } + +} + +const menus = [{ + title: 'Devices', + href: 'devices', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DevicesPage"], + children: [] +}, { + title: 'Controllers', + href: 'controllers', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ControllersPage"], + children: [] +}, { + title: 'Automation', + href: 'rules', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["RulesEditorPage"], + class: 'full', + children: [] +}, { + title: 'Config', + href: 'config', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigPage"], + children: [{ + title: 'Hardware', + href: 'config/hardware', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigHardwarePage"] + }, { + title: 'Advanced', + href: 'config/advanced', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigAdvancedPage"] + }, { + title: 'Rules', + href: 'config/rules', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["RulesPage"] + }, { + title: 'Save', + href: 'config/save', + action: _conf_config_dat__WEBPACK_IMPORTED_MODULE_1__["saveConfig"] + }, { + title: 'Load', + href: 'config/load', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["LoadPage"] + }, { + title: 'Reboot', + href: 'config/reboot', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["RebootPage"] + }, { + title: 'Factory Reset', + href: 'config/factory', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["FactoryResetPage"] + }] +}, { + title: 'Tools', + href: 'tools', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ToolsPage"], + children: [{ + title: 'Discover', + href: 'tools/discover', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DiscoverPage"] + }, { + title: 'Update', + href: 'tools/update', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["UpdatePage"] + }, { + title: 'Filesystem', + href: 'tools/fs', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["FSPage"] + }] +}]; +const routes = [{ + title: 'Edit Controller', + href: 'controllers/edit', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ControllerEditPage"] +}, { + title: 'Edit Device', + href: 'devices/edit', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DevicesEditPage"] +}, { + title: 'Save to Flash', + href: 'tools/diff', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DiffPage"] +}]; +const menu = new Menus(); +routes.forEach(menu.addRoute); +menus.forEach(menu.addMenu); + + +/***/ }), + +/***/ "./src/lib/node_definitions.js": +/*!*************************************!*\ + !*** ./src/lib/node_definitions.js ***! + \*************************************/ +/*! exports provided: nodes */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nodes", function() { return nodes; }); +const nodes = [// TRIGGERS +{ + group: 'TRIGGERS', + type: 'timer', + inputs: [], + outputs: [1], + config: [{ + name: 'timer', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8] + }], + indent: true, + toString: function () { + return `timer ${this.config[0].value}`; + }, + toDsl: function () { + return [`on Rules#Timer=${this.config[0].value} do\n%%output%%\nEndon\n`]; + } +}, { + group: 'TRIGGERS', + type: 'event', + inputs: [], + outputs: [1], + config: [{ + name: 'name', + type: 'text' + }], + indent: true, + toString: function () { + return `event ${this.config[0].value}`; + }, + toDsl: function () { + return [`on ${this.config[0].value} do\n%%output%%\nEndon\n`]; + } +}, { + group: 'TRIGGERS', + type: 'clock', + inputs: [], + outputs: [1], + config: [], + indent: true, + toString: () => { + return 'clock'; + }, + toDsl: () => { + return ['on Clock#Time do\n%%output%%\nEndon\n']; + } +}, { + group: 'TRIGGERS', + type: 'system boot', + inputs: [], + outputs: [1], + config: [], + indent: true, + toString: function () { + return `on boot`; + }, + toDsl: function () { + return [`On System#Boot do\n%%output%%\nEndon\n`]; + } +}, { + group: 'TRIGGERS', + type: 'Device', + inputs: [], + outputs: [1], + config: [], + indent: true, + toString: function () { + return `on boot`; + }, + toDsl: function () { + return [`On Device#Value do\n%%output%%\nEndon\n`]; + } +}, // LOGIC +{ + group: 'LOGIC', + type: 'if/else', + inputs: [1], + outputs: [1, 2], + config: [{ + name: 'variable', + type: 'textselect', + values: ['Clock#Time'] + }, { + name: 'equality', + type: 'select', + values: ['=', '<', '>', '<=', '>=', '!='] + }, { + name: 'value', + type: 'text' + }], + indent: true, + toString: function () { + return `IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`; + }, + toDsl: function () { + return [`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\n%%output%%`, `Else\n%%output%%\nEndif`]; + } +}, { + group: 'LOGIC', + type: 'delay', + inputs: [1], + outputs: [1], + config: [{ + name: 'delay', + type: 'number' + }], + toString: function () { + return `delay: ${this.config[0].value}`; + }, + toDsl: function () { + return [`Delay ${this.config[0].value}\n`]; + } +}, // ACTIONS +{ + group: 'ACTIONS', + type: 'GPIO', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }], + toString: function () { + return `GPIO ${this.config[0].value}, ${this.config[1].value}`; + }, + toDsl: function () { + return [`GPIO,${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'Pulse', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + value: 0 + }, { + name: 'value', + type: 'select', + values: [0, 1], + value: 1 + }, { + name: 'unit', + type: 'select', + values: ['s', 'ms'], + value: 'ms' + }, { + name: 'duration', + type: 'number', + value: 1000 + }], + toString: function () { + return `Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; + }, + toDsl: function () { + const fn = this.config[2].value === 's' ? 'LongPulse' : 'Pulse'; + return [`${fn},${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'PWM', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + value: 0 + }, { + name: 'value', + type: 'number', + value: 1023 + }], + toString: function () { + return `PWM.GPIO${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`PWM,${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'SERVO', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + value: 0 + }, { + name: 'servo', + type: 'select', + values: [1, 2], + value: 0 + }, { + name: 'position', + type: 'number', + value: 90 + }], + toString: function () { + return `SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`; + }, + toDsl: function () { + return [`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'fire event', + inputs: [1], + outputs: [1], + config: [{ + name: 'name', + type: 'text' + }], + toString: function () { + return `event ${this.config[0].value}`; + }, + toDsl: function () { + return [`event,${this.config[0].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'settimer', + inputs: [1], + outputs: [1], + config: [{ + name: 'timer', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8] + }, { + name: 'value', + type: 'number' + }], + toString: function () { + return `timer${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`timerSet,${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'MQTT', + inputs: [1], + outputs: [1], + config: [{ + name: 'topic', + type: 'text' + }, { + name: 'command', + type: 'text' + }], + toString: function () { + return `mqtt ${this.config[1].value}`; + }, + toDsl: function () { + return [`Publish ${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'UDP', + inputs: [1], + outputs: [1], + config: [{ + name: 'ip', + type: 'text' + }, { + name: 'port', + type: 'number' + }, { + name: 'command', + type: 'text' + }], + toString: function () { + return `UDP ${this.config[1].value}`; + }, + toDsl: function () { + return [`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'HTTP', + inputs: [1], + outputs: [1], + config: [{ + name: 'host', + type: 'text' + }, { + name: 'port', + type: 'number', + value: 80 + }, { + name: 'url', + type: 'text' + }], + toString: function () { + return `HTTP ${this.config[2].value}`; + }, + toDsl: function () { + return [`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'ESPEASY', + inputs: [1], + outputs: [1], + config: [{ + name: 'device', + type: 'number' + }, { + name: 'command', + type: 'text' + }], + toString: function () { + return `mqtt ${this.config[1].value}`; + }, + toDsl: function () { + return [`SendTo ${this.config[0].value},${this.config[1].value}\n`]; + } +}]; + +/***/ }), + +/***/ "./src/lib/parser.js": +/*!***************************!*\ + !*** ./src/lib/parser.js ***! + \***************************/ +/*! exports provided: parseConfig, writeConfig */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseConfig", function() { return parseConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeConfig", function() { return writeConfig; }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); + + +class DataParser { + constructor(data) { + this.view = new DataView(data); + this.offset = 0; + this.bitbyte = 0; + this.bitbytepos = 7; + } + + pad(nr) { + while (this.offset % nr) { + this.offset++; + } + } + + bit(signed = false, write = false, val) { + if (this.bitbytepos === 7) { + if (!write) { + this.bitbyte = this.byte(); + this.bitbytepos = 0; + } else { + this.byte(signed, write, this.bitbyte); + } + } + + if (!write) { + return this.bitbyte >> this.bitbytepos++ & 1; + } else { + this.bitbyte = val ? this.bitbyte | 1 << this.bitbytepos++ : this.bitbyte & ~(1 << this.bitbytepos++); + } + } + + byte(signed = false, write = false, val) { + this.pad(1); + const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`; + const res = this.view[fn](this.offset, val); + this.offset += 1; + return res; + } + + int16(signed = false, write = false, val) { + this.pad(2); + let fn = signed ? 'Int16' : 'Uint16'; + const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true); + this.offset += 2; + return res; + } + + int32(signed = false, write = false, val) { + this.pad(4); + let fn = signed ? 'Int32' : 'Uint32'; + const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true); + this.offset += 4; + return res; + } + + float(signed = false, write = false, val) { + this.pad(4); + const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true); + this.offset += 4; + return res; + } + + bytes(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.byte(signed, write, vals ? vals[x] : null)); + } + + return res; + } + + ints(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.int16(signed, write, vals ? vals[x] : null)); + } + + return res; + } + + longs(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.int32(signed, write, vals ? vals[x] : null)); + } + + return res; + } + + floats(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.float(write, vals ? vals[x] : null)); + } + + return res; + } + + string(nr, signed = false, write = false, val) { + if (write) { + for (var i = 0; i < nr; ++i) { + var code = val.charCodeAt(i) || '\0'; + this.byte(false, true, code); + } + } else { + const res = this.bytes(nr); + return String.fromCharCode.apply(null, res).replace(/\x00/g, ''); + } + } + +} + +const parseConfig = (data, config, start) => { + const p = new DataParser(data); + if (start) p.offset = start; + const result = {}; + config.map(value => { + const prop = value.length ? value.length : value.signed; + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(result, value.prop, p[value.type](prop, value.signed)); + }); + return result; +}; +const writeConfig = (buffer, data, config, start) => { + const p = new DataParser(buffer); + if (start) p.offset = start; + config.map(value => { + const val = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(data, value.prop); + + if (value.length) { + p[value.type](value.length, value.signed, true, val); + } else { + p[value.type](value.signed, true, val); + } + }); +}; + +/***/ }), + +/***/ "./src/lib/plugins.js": +/*!****************************!*\ + !*** ./src/lib/plugins.js ***! + \****************************/ +/*! exports provided: loadPlugins */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadPlugins", function() { return loadPlugins; }); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./src/lib/settings.js"); +/* harmony import */ var _espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./espeasy */ "./src/lib/espeasy.js"); +/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js"); +/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./menu */ "./src/lib/menu.js"); + + + + +const PLUGINS = ['http://localhost:8080/build/dash.js', 'flow.js']; + +const dynamicallyLoadScript = url => { + return new Promise(resolve => { + var script = document.createElement("script"); // create a script DOM node + + script.src = url; // set its src to the provided URL + + script.onreadystatechange = resolve; + script.onload = resolve; + script.onerror = resolve; + document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead) + }); +}; + +const getPluginAPI = () => { + return { + settings: _settings__WEBPACK_IMPORTED_MODULE_0__["settings"], + loader: _loader__WEBPACK_IMPORTED_MODULE_2__["loader"], + menu: _menu__WEBPACK_IMPORTED_MODULE_3__["menu"], + espeasy: _espeasy__WEBPACK_IMPORTED_MODULE_1__["default"] + }; +}; + +window.getPluginAPI = getPluginAPI; +const loadPlugins = async () => { + return Promise.all(PLUGINS.map(async plugin => { + return dynamicallyLoadScript(plugin); + })); +}; + +/***/ }), + +/***/ "./src/lib/settings.js": +/*!*****************************!*\ + !*** ./src/lib/settings.js ***! + \*****************************/ +/*! exports provided: settings */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); + + +const diff = (obj1, obj2, path = '') => { + return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(obj1).map(key => { + const val1 = obj1[key]; + const val2 = obj2[key]; + if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);else if (val1 !== val2) { + return [{ + path: `${path}.${key}`, + val1, + val2 + }]; + } else return []; + }).flat(); +}; + +class Settings { + init(settings) { + this.settings = settings; + this.apply(); + } + + get(prop) { + return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop); + } + /** + * sets changes to the current version and sets changed flag + * @param {*} prop + * @param {*} value + */ + + + set(prop, value) { + const obj = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop); + + if (typeof obj === 'object') { + console.warn('settings an object!'); + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value); + } else { + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value); + } + + if (this.diff().length) this.changed = true; + } + /** + * returns diff between applied and current version + */ + + + diff() { + return diff(this.stored, this.settings); + } + /*** + * applys changes and creates new version in localStorage + */ + + + apply() { + this.stored = JSON.parse(JSON.stringify(this.settings)); + this.changed = false; + } + +} + +const settings = window.settings1 = new Settings(); + +/***/ }), + +/***/ "./src/pages/config.advanced.js": +/*!**************************************!*\ + !*** ./src/pages/config.advanced.js ***! + \**************************************/ +/*! exports provided: ConfigAdvancedPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigAdvancedPage", function() { return ConfigAdvancedPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const logLevelOptions = [{ + name: 'None', + value: 0 +}, { + name: 'Error', + value: 1 +}, { + name: 'Info', + value: 2 +}, { + name: 'Debug', + value: 3 +}, { + name: 'Debug More', + value: 4 +}, { + name: 'Debug Dev', + value: 9 +}]; +const formConfig = { + onSave: vals => { + console.log(vals); + }, + groups: { + rules: { + name: 'Rules Settings', + configs: { + enabled: { + name: 'Enabled', + type: 'checkbox' + }, + oldengine: { + name: 'Old Engine', + type: 'checkbox' + } + } + }, + mqtt: { + name: 'Controller Settings', + configs: { + retain_flag: { + name: 'MQTT Retain Msg', + type: 'checkbox' + }, + interval: { + name: 'Message Interval', + type: 'number' + }, + useunitname: { + name: 'MQTT use unit name as ClientId', + type: 'checkbox' + }, + changeclientid: { + name: 'MQTT change ClientId at reconnect', + type: 'checkbox' + } + } + }, + ntp: { + name: 'NTP Settings', + configs: { + enabled: { + name: 'Use NTP', + type: 'checkbox' + }, + host: { + name: 'NTP Hostname', + type: 'string' + } + } + }, + dst: { + name: 'DST Settings', + configs: { + enabled: { + name: 'Use DST', + type: 'checkbox' + } + } + }, + location: { + name: 'Location Settings', + configs: { + long: { + name: 'Longitude', + type: 'number' + }, + lat: { + name: 'Latitude', + type: 'number' + } + } + }, + log: { + name: 'Log Settings', + configs: { + syslog_ip: { + name: 'Syslog IP', + type: 'ip' + }, + syslog_level: { + name: 'Syslog Level', + type: 'select', + options: logLevelOptions + }, + syslog_facility: { + name: 'Syslog Level', + type: 'select', + options: [{ + name: 'Kernel', + value: 0 }, { - name: 'value', - type: 'select', - values: [0, 1] - }], - toString: function () { - return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; - }, - toDsl: function () { - return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; - } - }); - result.push({ - group: 'ACTIONS', - type: `${device.TaskName} - Pulse`, - inputs: [1], - outputs: [1], - config: [{ - name: 'pin', - type: 'select', - values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + name: 'User', + value: 1 }, { - name: 'value', - type: 'select', - values: [0, 1] + name: 'Daemon', + value: 3 }, { - name: 'unit', - type: 'select', - values: ['ms', 's'] + name: 'Message', + value: 5 }, { - name: 'duration', - type: 'number' - }], - toString: function () { - return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; - }, - toDsl: function () { - if (this.config[2].value === 's') { - return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; - } else { - return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; - } - } - }); - break; + name: 'Local0', + value: 16 + }, { + name: 'Local1', + value: 17 + }, { + name: 'Local2', + value: 18 + }, { + name: 'Local3', + value: 19 + }, { + name: 'Local4', + value: 20 + }, { + name: 'Local5', + value: 21 + }, { + name: 'Local6', + value: 22 + }, { + name: 'Local7', + value: 23 + }] + }, + serial_level: { + name: 'Serial Level', + type: 'select', + options: logLevelOptions + }, + web_level: { + name: 'Web Level', + type: 'select', + options: logLevelOptions + } + } + }, + serial: { + name: 'Serial Settings', + configs: { + enabled: { + name: 'Enable Serial', + type: 'checkbox' + }, + baudrate: { + name: 'Baud Rate', + type: 'number' + } + } + }, + espnetwork: { + name: 'Inter-ESPEasy Network', + configs: { + enabled: { + name: 'Enable', + type: 'checkbox' + }, + port: { + name: 'Port', + type: 'number' + } + } + }, + experimental: { + name: 'Experimental Settings', + configs: { + ip_octet: { + name: 'Fixed IP Octet', + type: 'number' + }, + WDI2CAddress: { + name: 'WD I2C Address', + type: 'number' + }, + ssdp: { + name: 'Use SSDP', + type: 'checkbox', + var: 'ssdp.enabled' + }, + ConnectionFailuresThreshold: { + name: 'Connection Failiure Treshold', + type: 'number' + }, + WireClockStretchLimit: { + name: 'I2C ClockStretchLimit', + type: 'number' + } + } + } + } +}; +class ConfigAdvancedPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set('config', values); + window.location.href = '#devices'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('config') + }); + } + +} + +/***/ }), + +/***/ "./src/pages/config.hardware.js": +/*!**************************************!*\ + !*** ./src/pages/config.hardware.js ***! + \**************************************/ +/*! exports provided: pins, ConfigHardwarePage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return pins; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigHardwarePage", function() { return ConfigHardwarePage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const pins = [{ + name: 'None', + value: 255 +}, { + name: 'GPIO-0', + value: 0 +}, { + name: 'GPIO-1', + value: 1 +}, { + name: 'GPIO-2', + value: 2 +}, { + name: 'GPIO-3', + value: 3 +}, { + name: 'GPIO-4', + value: 4 +}, { + name: 'GPIO-5', + value: 5 +}, { + name: 'GPIO-9', + value: 9 +}, { + name: 'GPIO-10', + value: 10 +}, { + name: 'GPIO-12', + value: 12 +}, { + name: 'GPIO-13', + value: 13 +}, { + name: 'GPIO-14', + value: 14 +}, { + name: 'GPIO-15', + value: 15 +}, { + name: 'GPIO-16', + value: 16 +}]; +const pinState = [{ + name: 'Default', + value: 0 +}, { + name: 'Low', + value: 1 +}, { + name: 'High', + value: 2 +}, { + name: 'Input', + value: 3 +}]; +const formConfig = { + groups: { + led: { + name: 'WiFi Status LED', + configs: { + gpio: { + name: 'GPIO --> LED', + type: 'select', + options: pins + }, + inverse: { + name: 'Inversed LED', + type: 'checkbox' + } + } + }, + reset: { + name: 'Reset Pin', + configs: { + pin: { + name: 'GPIO <-- Switch', + type: 'select', + options: pins + } + } + }, + i2c: { + name: 'I2C Settings', + configs: { + sda: { + name: 'GPIO - SDA', + type: 'select', + options: pins + }, + scl: { + name: 'GPIO - SCL', + type: 'select', + options: pins + } + } + }, + spi: { + name: 'SPI Settings', + configs: { + enabled: { + name: 'Init SPI', + type: 'checkbox' + } + } + }, + gpio: { + name: 'GPIO boot states', + configs: { + 0: { + name: 'Pin Mode GPIO-0', + type: 'select', + options: pinState + }, + 1: { + name: 'Pin Mode GPIO-1', + type: 'select', + options: pinState + }, + 2: { + name: 'Pin Mode GPIO-2', + type: 'select', + options: pinState + }, + 3: { + name: 'Pin Mode GPIO-3', + type: 'select', + options: pinState + }, + 4: { + name: 'Pin Mode GPIO-4', + type: 'select', + options: pinState + }, + 5: { + name: 'Pin Mode GPIO-5', + type: 'select', + options: pinState + }, + 9: { + name: 'Pin Mode GPIO-9', + type: 'select', + options: pinState + }, + 10: { + name: 'Pin Mode GPIO-10', + type: 'select', + options: pinState + }, + 12: { + name: 'Pin Mode GPIO-12', + type: 'select', + options: pinState + }, + 13: { + name: 'Pin Mode GPIO-13', + type: 'select', + options: pinState + }, + 14: { + name: 'Pin Mode GPIO-14', + type: 'select', + options: pinState + }, + 15: { + name: 'Pin Mode GPIO-15', + type: 'select', + options: pinState + } + } + } + } +}; +class ConfigHardwarePage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + const config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('hardware'); + + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set('hardware', values); + window.location.href = '#devices'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/config.js": +/*!*****************************!*\ + !*** ./src/pages/config.js ***! + \*****************************/ +/*! exports provided: ConfigPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigPage", function() { return ConfigPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const ipBlockLevel = [{ + name: 'Allow All', + value: 0 +}, { + name: 'Allow Local Subnet', + value: 1 +}, { + name: 'Allow IP Range', + value: 2 +}]; +const formConfig = { + groups: { + general: { + name: 'General', + configs: { + unitname: { + name: 'Unit Name', + type: 'string' + }, + unitnr: { + name: 'Unit Number', + type: 'number' + }, + appendunit: { + name: 'Append Unit Name to Hostname', + type: 'checkbox' + }, + password: { + name: 'Admin Password', + type: 'password', + var: 'security[0].password' + } + } + }, + wifi: { + name: 'WiFi', + configs: { + ssid: { + name: 'SSID', + type: 'string', + var: 'security[0].WifiSSID' + }, + passwd: { + name: 'Password', + type: 'password', + var: 'security[0].WifiKey' + }, + fallbackssid: { + name: 'Fallback SSID', + type: 'string', + var: 'security[0].WifiSSID2' + }, + fallbackpasswd: { + name: 'Fallback Password', + type: 'password', + var: 'security[0].WifiKey2' + }, + wpaapmode: { + name: 'WPA AP Mode Key:', + type: 'string', + var: 'security[0].WifiAPKey' + } + } + }, + clientIP: { + name: 'Client IP Filtering', + configs: { + blocklevel: { + name: 'IP Block Level', + type: 'select', + options: ipBlockLevel, + var: 'security[0].IPblockLevel' + }, + lowerrange: { + name: 'Access IP lower range', + type: 'ip', + var: 'security[0].AllowedIPrangeLow' + }, + upperrange: { + name: 'Access IP upper range', + type: 'ip', + var: 'security[0].AllowedIPrangeHigh' + } + } + }, + IP: { + name: 'IP Settings', + configs: { + ip: { + name: 'IP', + type: 'ip' + }, + gw: { + name: 'Gateway', + type: 'ip' + }, + subnet: { + name: 'Subnet', + type: 'ip' + }, + dns: { + name: 'DNS', + type: 'ip' + } + } + }, + sleep: { + name: 'Sleep Mode', + configs: { + awaketime: { + name: 'Sleep awake time', + type: 'number' + }, + sleeptime: { + name: 'Sleep time', + type: 'number' + }, + sleeponfailiure: { + name: 'Sleep on connection failure', + type: 'checkbox' + } + } + } + } +}; +class ConfigPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`config`, values); + window.location.href = '#devices'; + }; + + const config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('config'); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/controllers.edit.js": +/*!***************************************!*\ + !*** ./src/pages/controllers.edit.js ***! + \***************************************/ +/*! exports provided: protocols, ControllerEditPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "protocols", function() { return protocols; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllerEditPage", function() { return ControllerEditPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const protocols = [{ + name: '- Standalone -', + value: 0 +}, { + name: 'Domoticz HTTP', + value: 1 +}, { + name: 'Domoticz MQTT', + value: 2 +}, { + name: 'Nodo Telnet', + value: 3 +}, { + name: 'ThingSpeak', + value: 4 +}, { + name: 'OpenHAB MQTT', + value: 5 +}, { + name: 'PiDome MQTT', + value: 6 +}, { + name: 'Emoncms', + value: 7 +}, { + name: 'Generic HTTP', + value: 8 +}, { + name: 'FHEM HTTP', + value: 9 +}, { + name: 'Generic UDP', + value: 10 +}, { + name: 'ESPEasy P2P Networking', + value: 13 +}, { + name: 'Email', + value: 25 +}]; +const baseFields = { + dns: { + name: 'Locate Controller', + type: 'select', + options: [{ + value: 0, + name: 'Use IP Address' + }, { + value: 1, + name: 'Use Hostname' + }] + }, + IP: { + name: 'IP', + type: 'ip' + }, + hostname: { + name: 'Hostname', + type: 'string' + }, + port: { + name: 'Port', + type: 'number' + }, + minimal_time_between: { + name: 'Minimum Send Interval', + type: 'number' + }, + max_queue_depth: { + name: 'Max Queue Depth', + type: 'number' + }, + max_retry: { + name: 'Max Retries', + type: 'number' + }, + delete_oldest: { + name: 'Full Queue Action', + type: 'select', + options: [{ + value: 0, + name: 'Ignore New' + }, { + value: 1, + name: 'Delete Oldest' + }] + }, + must_check_reply: { + name: 'Check Reply', + type: 'select', + options: [{ + value: 0, + name: 'Ignore Acknowledgement' + }, { + value: 1, + name: 'Check Acknowledgement' + }] + }, + client_timeout: { + name: 'Client Timeout', + type: 'number' + } +}; +const user = { + name: 'Controller User', + type: 'string' +}; +const password = { + name: 'Controller Password', + type: 'password' +}; +const subscribe = { + name: 'Controller Subscribe', + type: 'string' +}; +const publish = { + name: 'Controller Publish', + type: 'string' +}; +const lwtTopicField = { + MQTT_lwt_topic: { + name: 'Controller LWT topic:', + type: 'string' + }, + lwt_message_connect: { + name: 'LWT Connect Message', + type: 'string' + }, + lwt_message_disconnect: { + name: 'LWT Disconnect Message', + type: 'string' + } +}; - case 'Extra IO - ProMini Extender': - result.push({ - group: 'ACTIONS', - type: `${device.TaskName} - GPIO`, - inputs: [1], - outputs: [1], - config: [{ - name: 'pin', - type: 'select', - values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] - }, { - name: 'value', - type: 'select', - values: [0, 1] - }], - toString: function () { - return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; - }, - toDsl: function () { - return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; - } - }); - break; +const getFormConfig = type => { + let additionalFields = {}; - case 'Display - OLED SSD1306': - case 'Display - LCD2004': - fnNames = { - 'Display - OLED SSD1306': 'OLED', - 'Display - LCD2004': 'LCD' - }; - fnName = fnNames[device.Type]; - result.push({ - group: 'ACTIONS', - type: `${device.TaskName} - Write`, - inputs: [1], - outputs: [1], - config: [{ - name: 'row', - type: 'select', - values: [1, 2, 3, 4] - }, { - name: 'column', - type: 'select', - values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - }, { - name: 'text', - type: 'text' - }], - toString: function () { - return `${device.TaskName}.text = ${this.config[2].value}`; - }, - toDsl: function () { - return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; - } - }); - break; + switch (Number(type)) { + case 2: // Domoticz MQTT - case 'Generic - Dummy Device': - result.push({ - group: 'ACTIONS', - type: `${device.TaskName} - Write`, - inputs: [1], - outputs: [1], - config: [{ - name: 'variable', + case 5: + // OpenHAB MQTT + additionalFields = { ...baseFields, + user, + password, + subscribe, + publish, + ...lwtTopicField + }; + break; + + case 6: + // 'PiDome MQTT' + additionalFields = { ...baseFields, + subscribe, + publish, + ...lwtTopicField + }; + break; + + case 3: //'Nodo Telnet' + + case 7: + //'Emoncms': + additionalFields = { ...baseFields, + password + }; + break; + + case 8: + // 'Generic HTTP' + additionalFields = { ...baseFields, + user, + password, + subscribe, + publish + }; + break; + + case 1: // Domoticz HTTP + + case 9: + // 'FHEM HTTP' + additionalFields = { ...baseFields, + user, + password + }; + break; + + case 10: + //'Generic UDP': + additionalFields = { ...baseFields, + subscribe, + publish + }; + break; + + case 0: + case 13: + //'ESPEasy P2P Networking': + break; + + default: + additionalFields = { ...baseFields + }; + } + + return { + groups: { + settings: { + name: 'Controller Settings', + configs: { + protocol: { + name: 'Protocol', type: 'select', - values: taskValues.map(value => value.Name) - }, { - name: 'value', - type: 'text' - }], - toString: function () { - return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; + var: 'protocol', + options: protocols }, - toDsl: function () { - return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; - } - }); - break; + enabled: { + name: 'Enabled', + type: 'checkbox', + var: 'enabled' + }, + ...additionalFields + } + } } - - return result; - }).flat(); - return { - nodes, - vars }; -}; -const getVariables = async () => { - const urls = ['']; //, 'http://192.168.1.130' +}; // todo: changing protocol needs to update: +// -- back to default (correct default) +// -- field list - const vars = {}; - await Promise.all(urls.map(async url => { - const stat = await getJsonStat(url); - stat.Sensors.map(device => { - device.TaskValues.map(value => { - vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value; + +class ControllerEditPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(`controllers[${props.params[0]}]`); + this.state = { + protocol: this.config.protocol + }; + } + + render(props) { + const formConfig = getFormConfig(this.state.protocol); + + formConfig.groups.settings.configs.protocol.onChange = e => { + this.setState({ + protocol: e.currentTarget.value }); + }; + + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`controllers[${props.params[0]}]`, values); + window.location.href = '#controllers'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: this.config }); - })); - return vars; + } + +} + +/***/ }), + +/***/ "./src/pages/controllers.js": +/*!**********************************!*\ + !*** ./src/pages/controllers.js ***! + \**********************************/ +/*! exports provided: ControllersPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllersPage", function() { return ControllersPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _controllers_edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./controllers.edit */ "./src/pages/controllers.edit.js"); + + + +class ControllersPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + const controllers = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('controllers'); + const notifications = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('notifications'); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, " ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("h3", null, "Controllers"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, controllers.map((c, i) => { + const editUrl = `#controllers/edit/${i}`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "info" + }, i + 1, ": ", c.enabled ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2713") : Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2717"), "\xA0\xA0[", _controllers_edit__WEBPACK_IMPORTED_MODULE_2__["protocols"].find(p => p.value === c.protocol).name, "] PORT:", c.settings.port, " HOST:", c.settings.host, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: editUrl + }, "edit"))); + })), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("h3", null, "Notifications"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, notifications.map((n, i) => { + const editUrl = `#notifications/edit/${i}`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "info" + }, i + 1, ": ", n.enabled ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2713") : Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2717"), "\xA0\xA0[", n.type, "] PORT:", n.settings.port, " HOST:", n.settings.host, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: editUrl + }, "edit"))); + }))); + } + +} + +/***/ }), + +/***/ "./src/pages/devices.edit.js": +/*!***********************************!*\ + !*** ./src/pages/devices.edit.js ***! + \***********************************/ +/*! exports provided: DevicesEditPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DevicesEditPage", function() { return DevicesEditPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../devices */ "./src/devices/index.js"); + + + + +const baseFields = { + enabled: { + name: 'Enabled', + type: 'checkbox', + var: 'enabled' + }, + name: { + name: 'Name', + type: 'string' + } }; -const getDashboardConfigNodes = async url => { - const devices = await loadDevices(url); - const vars = []; - const nodes = devices.map(device => { - device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`)); - return []; - }).flat(); + +const getFormConfig = type => { + const device = _devices__WEBPACK_IMPORTED_MODULE_3__["devices"].find(d => d.value === parseInt(type)); + if (!device) return null; return { - nodes, - vars + groups: { + settings: { + name: 'Device Settings', + configs: { + device: { + name: 'Device', + type: 'select', + var: 'device', + options: _devices__WEBPACK_IMPORTED_MODULE_3__["devices"] + }, + ...baseFields + } + }, + ...device.fields, + values: { + name: 'Values', + configs: { ...[...new Array(4)].reduce((acc, x, i) => { + acc[`value${i}`] = [{ + name: 'Name', + var: `settings.values[${i}].name`, + type: 'string' + }, { + name: 'Formula', + var: `settings.values[${i}].formula`, + type: 'string' + }]; + return acc; + }, {}) + } + } + } }; -}; -const storeFile = async (filename, data) => { - _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].show(); - const file = data ? new File([new Blob([data])], filename) : filename; - const formData = new FormData(); - formData.append('edit', 1); - formData.append('file', file); - return await fetch('/upload', { - method: 'post', - body: formData - }).then(() => { - _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide(); - mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000); - }, e => { - _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide(); - mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000); - }); -}; -const deleteFile = async filename => { - return await fetch('/filelist?delete=' + filename).then(() => { - mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000); - }, e => { - mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000); - }); -}; -const storeDashboardConfig = async config => { - storeFile('d1.txt', config); -}; -const storeRuleConfig = async config => { - storeFile('r1.txt', config); -}; -const loadRuleConfig = async () => { - return await fetch('/r1.txt').then(response => response.json()); -}; -const loadDashboardConfig = async nodes => { - return await fetch('/d1.txt').then(response => response.json()); -}; -const storeRule = async rule => { - const formData = new FormData(); - formData.append('set', 1); - formData.append('rules', rule); - return await fetch('/rules', { - method: 'post', - body: formData - }); -}; +}; // todo: changing protocol needs to update: +// -- back to default (correct default) +// -- field list + + +class DevicesEditPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(`tasks[${props.params[0]}]`); + this.state = { + device: this.config.device + }; + } + + render(props) { + const formConfig = getFormConfig(this.state.device); + + if (!formConfig) { + alert('something went wrong, cant edit device'); + window.location.href = '#devices'; + } + + formConfig.groups.settings.configs.device.onChange = e => { + this.setState({ + device: e.currentTarget.value + }); + }; + + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`tasks[${props.params[0]}]`, values); + window.location.href = '#devices'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: this.config + }); + } + +} /***/ }), -/***/ "./src/lib/helpers.js": -/*!****************************!*\ - !*** ./src/lib/helpers.js ***! - \****************************/ -/*! exports provided: get, set, getKeys */ +/***/ "./src/pages/devices.js": +/*!******************************!*\ + !*** ./src/pages/devices.js ***! + \******************************/ +/*! exports provided: DevicesPage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getKeys", function() { return getKeys; }); -/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js"); -/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__); -/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "get", function() { return lodash_get__WEBPACK_IMPORTED_MODULE_0___default.a; }); -/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/set */ "./node_modules/lodash/set.js"); -/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_set__WEBPACK_IMPORTED_MODULE_1__); -/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "set", function() { return lodash_set__WEBPACK_IMPORTED_MODULE_1___default.a; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DevicesPage", function() { return DevicesPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../devices */ "./src/devices/index.js"); - // const get = (obj, path, defaultValue) => path.replace(/\[/g, '.').replace(/\]/g, '').split(".") -// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj) -// const set = (obj, path, value) => { -// path.replace(/\[/g, '.').replace(/\]/g, '').split('.').reduce((a, c, i, src) => { -// if (!a[c]) a[c] = {}; -// if (i === src.length - 1) a[c] = value; -// }, obj) -// } -const getKeys = object => { - const keys = []; - for (let key in object) { - if (object.hasOwnProperty(key)) { - keys.push(key); - } - } +class DevicesPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); - return keys; -}; + this.handleEnableToggle = e => { + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].set(e.currentTarget.dataset.prop, e.currentTarget.checked ? 1 : 0); + }; + } + render(props) { + const tasks = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('tasks'); + if (!tasks) return; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, tasks.map((task, i) => { + const editUrl = `#devices/edit/${i}`; + const device = _devices__WEBPACK_IMPORTED_MODULE_2__["devices"].find(d => d.value === task.device); + const deviceType = device ? device.name : '--unknown--'; + const enabledProp = `tasks[${i}].enabled`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "info" + }, i + 1, ": ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + type: "checkbox", + defaultChecked: task.enabled, + "data-prop": enabledProp, + onChange: this.handleEnableToggle + }), "\xA0\xA0", task.settings.name, " [", deviceType, "] ", task.gpio1 !== 255 ? `GPIO:${task.gpio1}` : '', Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: editUrl + }, "edit")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "vars" + })); + })); + } +} /***/ }), -/***/ "./src/lib/loader.js": +/***/ "./src/pages/diff.js": /*!***************************!*\ - !*** ./src/lib/loader.js ***! + !*** ./src/pages/diff.js ***! \***************************/ -/*! exports provided: loader */ +/*! exports provided: DiffPage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loader", function() { return loader; }); -class Loader { - constructor() { - const loader = document.createElement('div'); - loader.className = 'loader'; - loader.innerHTML = 'loading'; - document.body.appendChild(loader); - this.loader = loader; - } +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiffPage", function() { return DiffPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conf/config.dat */ "./src/conf/config.dat.js"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); - show() { - this.loader.classList.add('show'); + + + +class DiffPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.diff = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].diff(); + this.stage = 0; + + this.applyChanges = () => { + if (this.stage === 0) { + this.diff.map(d => { + const input = this.form.elements[d.path]; + + if (!input.checked) { + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].set(input.name, d.val1); + } + }); + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].apply(); + this.diff = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].diff(); + this.data = Object(_conf_config_dat__WEBPACK_IMPORTED_MODULE_2__["saveConfig"])(false); + this.bytediff = Array.from(new Uint8Array(this.data)); + this.bytediff = this.bytediff.map((byte, i) => { + if (byte !== _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].binary[i]) { + return `${byte.toString(16)}`; + } else return `${byte.toString(16)}`; + }); + this.bytediff = this.bytediff.join(' '); + this.stage = 1; + return; + } + + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeFile"])('config.dat', this.data).then(() => { + this.stage = 0; + window.location.href = '#devices'; + }); + }; } - hide() { - this.loader.classList.add('hide'); - setTimeout(() => { - this.loader.classList.remove('hide'); - this.loader.classList.remove('show'); - }, 1000); + render(props) { + if (this.bytediff) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + dangerouslySetInnerHTML: { + __html: this.bytediff + } + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.applyChanges + }, "APPLY")); + } + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + ref: ref => this.form = ref + }, this.diff.map(change => { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, change.path), ": before: ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, JSON.stringify(change.val1)), " now:", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, JSON.stringify(change.val2)), " ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + name: change.path, + type: "checkbox", + defaultChecked: true + })); + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.applyChanges + }, "APPLY")); } } -const loader = new Loader(); - /***/ }), -/***/ "./src/lib/parser.js": -/*!***************************!*\ - !*** ./src/lib/parser.js ***! - \***************************/ -/*! exports provided: parseConfig, writeConfig */ +/***/ "./src/pages/discover.js": +/*!*******************************!*\ + !*** ./src/pages/discover.js ***! + \*******************************/ +/*! exports provided: DiscoverPage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseConfig", function() { return parseConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeConfig", function() { return writeConfig; }); -/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiscoverPage", function() { return DiscoverPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +const devices = [{ + nr: 1, + name: 'Senzor', + type: 'DH11', + vars: [{ + name: 'Temperature', + formula: '', + value: 21 + }, { + name: 'Humidity', + formula: '', + value: 65 + }] +}, { + nr: 1, + name: 'Humidity', + type: 'Linear Regulator', + vars: [{ + name: 'Output', + formula: '', + value: 1 + }] +}]; +class DiscoverPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.state = { + devices: [] + }; -class DataParser { - constructor(data) { - this.view = new DataView(data); - this.offset = 0; - this.bitbyte = 0; - this.bitbytepos = 7; + this.scani2c = () => { + fetch('/i2cscanner').then(r => r.json()).then(r => { + this.setState({ + devices: r + }); + }); + }; + + this.scanwifi = () => { + fetch('/wifiscanner').then(r => r.json()).then(r => { + this.setState({ + devices: r + }); + }); + }; } - pad(nr) { - while (this.offset % nr) { - this.offset++; - } + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.scani2c + }, "Scan I2C"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.scanwifi + }, "Scan WiFi")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("table", null, this.state.devices.map(device => { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", { + class: "info" + }, JSON.stringify(device))); + }))); } - bit(signed = false, write = false, val) { - if (this.bitbytepos === 7) { - if (!write) { - this.bitbyte = this.byte(); - this.bitbytepos = 0; - } else { - this.byte(signed, write, this.bitbyte); +} + +/***/ }), + +/***/ "./src/pages/factory_reset.js": +/*!************************************!*\ + !*** ./src/pages/factory_reset.js ***! + \************************************/ +/*! exports provided: FactoryResetPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FactoryResetPage", function() { return FactoryResetPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); + + +const formConfig = { + onSave: vals => { + console.log(vals); + }, + groups: { + keep: { + name: 'Settings to keep', + configs: { + unit: { + name: 'Keep Unit/Name', + type: 'checkbox' + }, + wifi: { + name: 'Keep WiFi config', + type: 'checkbox' + }, + network: { + name: 'Keep network config', + type: 'checkbox' + }, + ntp: { + name: 'Keep NTP/DST config', + type: 'checkbox' + }, + log: { + name: 'Keep log config', + type: 'checkbox' + } + } + }, + load: { + name: 'Pre-defined configurations', + configs: { + config: { + name: 'Pre-Defined config', + type: 'select', + options: [{ + name: 'default', + value: 0 + }, { + name: 'Sonoff Basic', + value: 1 + }, { + name: 'Sonoff TH1x', + value: 2 + }, { + name: 'Sonoff S2x', + value: 3 + }, { + name: 'Sonoff TouchT1', + value: 4 + }, { + name: 'Sonoff TouchT2', + value: 5 + }, { + name: 'Sonoff TouchT3', + value: 6 + }, { + name: 'Sonoff 4ch', + value: 7 + }, { + name: 'Sonoff POW', + value: 8 + }, { + name: 'Sonoff POW-r2', + value: 9 + }, { + name: 'Shelly1', + value: 10 + }] + } } } + } +}; +const config = {}; +class FactoryResetPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + formConfig.onSave = config => { + const data = new FormData(); + if (config.keep.unit) data.append('kun', 'on'); + if (config.keep.wifi) data.append('kw', 'on'); + if (config.keep.network) data.append('knet', 'on'); + if (config.keep.ntp) data.append('kntp', 'on'); + if (config.keep.log) data.append('klog', 'on'); + data.append('fdm', config.load.config); + data.append('savepref', 'Save Preferences'); + fetch('/factoryreset', { + method: 'POST', + body: data + }).then(() => { + data.delete('savepref'); + data.append('performfactoryreset', 'Factory Reset'); + fetch('/factoryreset', { + method: 'POST', + body: data + }).then(() => { + setTimeout(() => { + window.location.href = "#devices"; + }, 5000); + }, e => {}); + }, e => {}); + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/fs.js": +/*!*************************!*\ + !*** ./src/pages/fs.js ***! + \*************************/ +/*! exports provided: FSPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FSPage", function() { return FSPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); + + +class FSPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.state = { + files: [] + }; + + this.saveForm = () => { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["storeFile"])(this.file.files[0]); + }; + + this.deleteFile = e => { + const fileName = e.currentTarget.data.name; + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["deleteFile"])(fileName).then(() => this.fetch()); + }; + } + + fetch() { + fetch('/filelist').then(response => response.json()).then(fileList => { + this.setState({ + files: fileList + }); + }); + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: "file", + class: "pure-checkbox" + }, "File:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: "file", + type: "file", + ref: ref => this.file = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveForm + }, "upload"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("table", { + class: "pure-table" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("thead", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null, "File"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null, "Size"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tbody", null, this.state.files.map(file => { + const url = `/${file.fileName}`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: url + }, file.fileName)), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, file.size), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.deleteFile, + "data-name": file.fileName + }, "X"))); + })))); + } + + componentDidMount() { + this.fetch(); + } + +} + +/***/ }), + +/***/ "./src/pages/index.js": +/*!****************************!*\ + !*** ./src/pages/index.js ***! + \****************************/ +/*! exports provided: ControllersPage, DevicesPage, ConfigPage, ConfigAdvancedPage, pins, ConfigHardwarePage, RebootPage, LoadPage, UpdatePage, RulesPage, ToolsPage, FSPage, FactoryResetPage, DiscoverPage, protocols, ControllerEditPage, DevicesEditPage, DiffPage, RulesEditorPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _controllers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./controllers */ "./src/pages/controllers.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ControllersPage", function() { return _controllers__WEBPACK_IMPORTED_MODULE_0__["ControllersPage"]; }); + +/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./devices */ "./src/pages/devices.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicesPage", function() { return _devices__WEBPACK_IMPORTED_MODULE_1__["DevicesPage"]; }); + +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ "./src/pages/config.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigPage", function() { return _config__WEBPACK_IMPORTED_MODULE_2__["ConfigPage"]; }); + +/* harmony import */ var _config_advanced__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./config.advanced */ "./src/pages/config.advanced.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigAdvancedPage", function() { return _config_advanced__WEBPACK_IMPORTED_MODULE_3__["ConfigAdvancedPage"]; }); + +/* harmony import */ var _config_hardware__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config.hardware */ "./src/pages/config.hardware.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return _config_hardware__WEBPACK_IMPORTED_MODULE_4__["pins"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigHardwarePage", function() { return _config_hardware__WEBPACK_IMPORTED_MODULE_4__["ConfigHardwarePage"]; }); + +/* harmony import */ var _reboot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reboot */ "./src/pages/reboot.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RebootPage", function() { return _reboot__WEBPACK_IMPORTED_MODULE_5__["RebootPage"]; }); + +/* harmony import */ var _load__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./load */ "./src/pages/load.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LoadPage", function() { return _load__WEBPACK_IMPORTED_MODULE_6__["LoadPage"]; }); + +/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./update */ "./src/pages/update.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "UpdatePage", function() { return _update__WEBPACK_IMPORTED_MODULE_7__["UpdatePage"]; }); + +/* harmony import */ var _rules__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rules */ "./src/pages/rules.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RulesPage", function() { return _rules__WEBPACK_IMPORTED_MODULE_8__["RulesPage"]; }); + +/* harmony import */ var _tools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tools */ "./src/pages/tools.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ToolsPage", function() { return _tools__WEBPACK_IMPORTED_MODULE_9__["ToolsPage"]; }); + +/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./fs */ "./src/pages/fs.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FSPage", function() { return _fs__WEBPACK_IMPORTED_MODULE_10__["FSPage"]; }); + +/* harmony import */ var _factory_reset__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./factory_reset */ "./src/pages/factory_reset.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FactoryResetPage", function() { return _factory_reset__WEBPACK_IMPORTED_MODULE_11__["FactoryResetPage"]; }); + +/* harmony import */ var _discover__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./discover */ "./src/pages/discover.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DiscoverPage", function() { return _discover__WEBPACK_IMPORTED_MODULE_12__["DiscoverPage"]; }); + +/* harmony import */ var _controllers_edit__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./controllers.edit */ "./src/pages/controllers.edit.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "protocols", function() { return _controllers_edit__WEBPACK_IMPORTED_MODULE_13__["protocols"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ControllerEditPage", function() { return _controllers_edit__WEBPACK_IMPORTED_MODULE_13__["ControllerEditPage"]; }); + +/* harmony import */ var _devices_edit__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./devices.edit */ "./src/pages/devices.edit.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicesEditPage", function() { return _devices_edit__WEBPACK_IMPORTED_MODULE_14__["DevicesEditPage"]; }); + +/* harmony import */ var _diff__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diff */ "./src/pages/diff.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DiffPage", function() { return _diff__WEBPACK_IMPORTED_MODULE_15__["DiffPage"]; }); + +/* harmony import */ var _rules_editor__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./rules.editor */ "./src/pages/rules.editor.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RulesEditorPage", function() { return _rules_editor__WEBPACK_IMPORTED_MODULE_16__["RulesEditorPage"]; }); + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "./src/pages/load.js": +/*!***************************!*\ + !*** ./src/pages/load.js ***! + \***************************/ +/*! exports provided: LoadPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadPage", function() { return LoadPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); + - if (!write) { - return this.bitbyte >> this.bitbytepos++ & 1; - } else { - this.bitbyte = val ? this.bitbyte | 1 << this.bitbytepos++ : this.bitbyte & ~(1 << this.bitbytepos++); - } - } +class LoadPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); - byte(signed = false, write = false, val) { - this.pad(1); - const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`; - const res = this.view[fn](this.offset, val); - this.offset += 1; - return res; + this.saveForm = () => { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["storeFile"])(this.file.files[0]); + }; } - int16(signed = false, write = false, val) { - this.pad(2); - let fn = signed ? 'Int16' : 'Uint16'; - const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true); - this.offset += 2; - return res; + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: "file", + class: "pure-checkbox" + }, "File:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: "file", + type: "file", + ref: ref => this.file = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveForm + }, "upload"))); } - int32(signed = false, write = false, val) { - this.pad(4); - let fn = signed ? 'Int32' : 'Uint32'; - const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true); - this.offset += 4; - return res; - } +} - float(signed = false, write = false, val) { - this.pad(4); - const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true); - this.offset += 4; - return res; - } +/***/ }), - bytes(nr, signed = false, write = false, vals) { - const res = []; +/***/ "./src/pages/reboot.js": +/*!*****************************!*\ + !*** ./src/pages/reboot.js ***! + \*****************************/ +/*! exports provided: RebootPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - for (var x = 0; x < nr; x++) { - res.push(this.byte(signed, write, vals ? vals[x] : null)); - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RebootPage", function() { return RebootPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); - return res; +class RebootPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, "ESPEasy is rebooting ... please wait a while, this page will auto refresh."); } - ints(nr, signed = false, write = false, vals) { - const res = []; + componentDidMount() { + fetch('/reboot').then(() => { + setTimeout(() => { + window.location.hash = '#devices'; + }, 5000); + }); + } - for (var x = 0; x < nr; x++) { - res.push(this.int16(signed, write, vals ? vals[x] : null)); - } +} - return res; - } +/***/ }), - longs(nr, signed = false, write = false, vals) { - const res = []; +/***/ "./src/pages/rules.editor.js": +/*!***********************************!*\ + !*** ./src/pages/rules.editor.js ***! + \***********************************/ +/*! exports provided: RulesEditorPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - for (var x = 0; x < nr; x++) { - res.push(this.int32(signed, write, vals ? vals[x] : null)); - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RulesEditorPage", function() { return RulesEditorPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/floweditor */ "./src/lib/floweditor.js"); +/* harmony import */ var _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/node_definitions */ "./src/lib/node_definitions.js"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); - return res; - } - floats(nr, signed = false, write = false, vals) { - const res = []; - for (var x = 0; x < nr; x++) { - res.push(this.float(write, vals ? vals[x] : null)); - } - return res; +class RulesEditorPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.nodes = _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"]; } - string(nr, signed = false, write = false, val) { - if (write) { - for (var i = 0; i < nr; ++i) { - var code = val.charCodeAt(i) || '\0'; - this.byte(false, true, code); - } - } else { - const res = this.bytes(nr); - return String.fromCharCode.apply(null, res).replace(/\x00/g, ''); - } + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "editor", + ref: ref => this.element = ref + }); } -} + componentDidMount() { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["getConfigNodes"])().then(out => { + out.nodes.forEach(device => _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].unshift(device)); + const ifElseNode = _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'if/else'); -const parseConfig = (data, config, start) => { - const p = new DataParser(data); - if (start) p.offset = start; - const result = {}; - config.map(value => { - const prop = value.length ? value.length : value.signed; - Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(result, value.prop, p[value.type](prop, value.signed)); - }); - return result; -}; -const writeConfig = (buffer, data, config, start) => { - const p = new DataParser(buffer); - if (start) p.offset = start; - config.map(value => { - const val = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(data, value.prop); + if (!ifElseNode.config[0].loaded) { + out.vars.forEach(v => ifElseNode.config[0].values.push(v)); + ifElseNode.config[0].loaded = true; + } - if (value.length) { - p[value.type](value.length, value.signed, true, val); - } else { - p[value.type](value.signed, true, val); - } - }); -}; + this.chart = new _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__["FlowEditor"](this.element, _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"], { + onSave: (config, rules) => { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeRuleConfig"])(config); + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeRule"])(rules); + } + }); + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["loadRuleConfig"])().then(config => { + this.chart.loadConfig(config); + }); + }); + } + +} /***/ }), -/***/ "./src/lib/plugins.js": +/***/ "./src/pages/rules.js": /*!****************************!*\ - !*** ./src/lib/plugins.js ***! + !*** ./src/pages/rules.js ***! \****************************/ -/*! exports provided: loadPlugins */ +/*! exports provided: RulesPage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadPlugins", function() { return loadPlugins; }); -/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./src/lib/settings.js"); -/* harmony import */ var _espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./espeasy */ "./src/lib/espeasy.js"); -/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js"); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RulesPage", function() { return RulesPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +const rules = [{ + name: 'Rule 1', + file: 'rules1.txt', + index: 1 +}, { + name: 'Rule 2', + file: 'rules2.txt', + index: 2 +}, { + name: 'Rule 3', + file: 'rules3.txt', + index: 3 +}, { + name: 'Rule 4', + file: 'rules4.txt', + index: 4 +}]; +class RulesPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.state = { + selected: rules[0] + }; + this.selectionChanged = e => { + this.setState({ + selected: rules[e.currentTarget.value] + }); + }; -const PLUGINS = ['dash.js', 'flow.js']; + this.saveRule = () => { + const data = new FormData(); + data.append('set', this.state.selected.index); + data.append('rules', this.text.value); + fetch('/rules', { + method: 'POST', + body: data + }).then(res => { + console.log('succesfully saved'); + console.log(res.text()); + }); + }; -const dynamicallyLoadScript = url => { - return new Promise(resolve => { - var script = document.createElement("script"); // create a script DOM node + this.fetch(); + } - script.src = url; // set its src to the provided URL + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("select", { + onChange: this.selectionChanged + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "0" + }, "Rule 1"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "1" + }, "Rule 2"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "2" + }, "Rule 3"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "3" + }, "Rule 4"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("textarea", { + style: "width: 100%; height: 400px", + ref: ref => this.text = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveRule + }, "Save")))); + } - script.onreadystatechange = resolve; - script.onload = resolve; - script.onerror = resolve; - document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead) - }); -}; + async fetch() { + const text = await fetch(this.state.selected.file).then(response => response.text()); + this.text.value = text; + } -const getPluginAPI = () => { - return { - settings: _settings__WEBPACK_IMPORTED_MODULE_0__["settings"], - loader: _loader__WEBPACK_IMPORTED_MODULE_2__["loader"], - espeasy: _espeasy__WEBPACK_IMPORTED_MODULE_1__["default"] - }; -}; + async componentDidUpdate() { + this.fetch(); + } -window.getPluginAPI = getPluginAPI; -const loadPlugins = async () => { - return Promise.all(PLUGINS.map(async plugin => { - return dynamicallyLoadScript(plugin); - })); -}; +} /***/ }), -/***/ "./src/lib/settings.js": -/*!*****************************!*\ - !*** ./src/lib/settings.js ***! - \*****************************/ -/*! exports provided: settings */ +/***/ "./src/pages/tools.js": +/*!****************************!*\ + !*** ./src/pages/tools.js ***! + \****************************/ +/*! exports provided: ToolsPage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); -/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ToolsPage", function() { return ToolsPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +class ToolsPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.history = ''; -const diff = (obj1, obj2, path = '') => { - return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(obj1).map(key => { - const val1 = obj1[key]; - const val2 = obj2[key]; - if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);else if (val1 !== val2) { - return [{ - path: `${path}.${key}`, - val1, - val2 - }]; - } else return []; - }).flat(); -}; + this.sendCommand = e => { + fetch(`/control?cmd=${this.cmd.value}`).then(response => response.text()).then(response => { + this.cmdOutput.value = response; + }); + }; + } -class Settings { - init(settings) { - this.settings = settings; - this.apply(); + fetch() { + fetch('/logjson').then(response => response.json()).then(response => { + response.Log.Entries.map(log => { + this.history += `
${new Date(log.timestamp).toLocaleTimeString()}${log.text}
`; + this.log.innerHTML = this.history; + + if (true) { + this.log.scrollTop = this.log.scrollHeight; + } + }); + }); } - get(prop) { - return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop); + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + style: "width: 100%; height: 200px; overflow-y: scroll;", + ref: ref => this.log = ref + }, "loading logs ..."), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, "Command: ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + type: "text", + ref: ref => this.cmd = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.sendCommand + }, "send")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("textarea", { + style: "width: 100%; height: 200px", + ref: ref => this.cmdOutput = ref + })); } - /** - * sets changes to the current version and sets changed flag - * @param {*} prop - * @param {*} value - */ + componentDidMount() { + this.interval = setInterval(() => { + this.fetch(); + }, 1000); + } - set(prop, value) { - const obj = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop); + componentWillUnmount() { + if (this.interval) clearInterval(this.interval); + } - if (typeof obj === 'object') { - console.warn('settings an object!'); - Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value); - } else { - Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value); - } +} - if (this.diff().length) this.changed = true; - } - /** - * returns diff between applied and current version - */ +/***/ }), +/***/ "./src/pages/update.js": +/*!*****************************!*\ + !*** ./src/pages/update.js ***! + \*****************************/ +/*! exports provided: UpdatePage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - diff() { - return diff(this.stored, this.settings); - } - /*** - * applys changes and creates new version in localStorage - */ +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UpdatePage", function() { return UpdatePage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +class UpdatePage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + + this.saveForm = () => { + const data = new FormData(); + data.append('file', this.file.files[0]); + data.append('user', 'hubot'); + fetch('/update', { + method: 'POST', + body: data + }).then(() => {}); + }; + } - apply() { - this.stored = JSON.parse(JSON.stringify(this.settings)); - this.changed = false; + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: "file", + class: "pure-checkbox" + }, "Firmware:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: "file", + type: "file", + ref: ref => this.file = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveForm + }, "upload"))); } } -const settings = window.settings1 = new Settings(); - /***/ }) /******/ }); diff --git a/build/app.js.map b/build/app.js.map index 08442d7..528cc56 100644 --- a/build/app.js.map +++ b/build/app.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/mini-toastr/mini-toastr.js","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///(webpack)/buildin/global.js","webpack:///./src/app.js","webpack:///./src/components/menu/index.js","webpack:///./src/components/page/index.js","webpack:///./src/conf/config.dat.js","webpack:///./src/lib/espeasy.js","webpack:///./src/lib/helpers.js","webpack:///./src/lib/loader.js","webpack:///./src/lib/parser.js","webpack:///./src/lib/plugins.js","webpack:///./src/lib/settings.js"],"names":["miniToastr","init","clearSlashes","path","toString","replace","getFragment","match","window","location","href","fragment","App","Component","constructor","state","menuActive","menu","menus","page","changed","menuToggle","setState","render","props","params","split","slice","active","componentDidMount","loader","hide","current","fn","newFragment","diff","settings","length","parts","find","routes","route","interval","setInterval","componentWillUnmount","load","loadConfig","loadPlugins","document","body","Menu","renderMenuItem","action","title","selected","children","map","child","open","Page","PageComponent","component","pagetitle","class","TASKS_MAX","NOTIFICATION_MAX","CONTROLLER_MAX","PLUGIN_CONFIGVAR_MAX","PLUGIN_CONFIGFLOATVAR_MAX","PLUGIN_CONFIGLONGVAR_MAX","PLUGIN_EXTRACONFIGVAR_MAX","NAME_FORMULA_LENGTH_MAX","VARS_PER_TASK","configDatParseConfig","prop","type","signed","Array","x","i","flat","TaskSettings","ControllerSettings","NotificationSettings","SecuritySettings","fetch","then","response","arrayBuffer","parseConfig","tasks","extra","controllers","notificationResponse","notifications","securityResponse","config","security","console","log","conf","binary","Uint8Array","saveData","a","createElement","appendChild","style","data","fileName","blob","Blob","url","URL","createObjectURL","download","click","revokeObjectURL","ii","saveConfig","save","buffer","ArrayBuffer","writeConfig","bufferNotifications","bufferSecurity","getJsonStat","json","loadDevices","Sensors","getConfigNodes","devices","vars","nodes","device","taskValues","TaskValues","value","push","TaskName","Name","result","group","TaskNumber","Type","inputs","outputs","name","values","indent","comparison","toDsl","fnNames","fnName","findIndex","getVariables","urls","Promise","all","stat","System","Value","getDashboardConfigNodes","storeFile","filename","show","file","File","formData","FormData","append","method","success","e","error","message","deleteFile","storeDashboardConfig","storeRuleConfig","loadRuleConfig","loadDashboardConfig","storeRule","rule","getKeys","object","keys","key","hasOwnProperty","Loader","className","innerHTML","classList","add","setTimeout","remove","DataParser","view","DataView","offset","bitbyte","bitbytepos","pad","nr","bit","write","val","byte","res","int16","int32","float","setFloat32","getFloat32","bytes","vals","ints","longs","floats","string","code","charCodeAt","String","fromCharCode","apply","start","p","set","get","PLUGINS","dynamicallyLoadScript","resolve","script","src","onreadystatechange","onload","onerror","head","getPluginAPI","espeasy","plugin","obj1","obj2","val1","val2","Object","Settings","obj","warn","stored","JSON","parse","stringify","settings1"],"mappings":"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;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7BA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,cAAc,mBAAO,CAAC,mDAAW;AACjC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,WAAW,mBAAO,CAAC,+CAAS;AAC5B,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,UAAU,mBAAO,CAAC,6CAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,mDAAW;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACRA,oBAAoB,mBAAO,CAAC,iEAAkB;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;;;;;;;;;;;AC1BA,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxEA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEO;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,SAAS;AACvC,uBAAuB,SAAS;AAChC,sBAAsB,SAAS;AAC/B,yBAAyB,SAAS;AAClC,wBAAwB,MAAM;AAC9B,uBAAuB,KAAK;AAC5B,0BAA0B,QAAQ;AAClC,uBAAuB,KAAK;AAC5B;;AAEP;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA,oDAAoD;AACpD,eAAe,OAAO;AACtB;;AAEA,wCAAwC;;AAExC;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEO;AACP,UAAU,2BAA2B;AACrC;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,mBAAmB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP,YAAY,cAAc;AAC1B;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,YAAY;AACrB;AACA,KAAK;AACL,SAAS,cAAc;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,mBAAmB,GAAG,mBAAmB;;AAE7E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA,+BAA+B;AAC/B;AACA;;AAEe,yE;;;;;;;;;;;;AC3Of;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA,GAAG;AACH;;AAEA;AACA,kCAAkC,0DAA0D;AAC5F;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;;AAEA;AACA,2CAA2C;AAC3C;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,EAAE;AACF;;AAEA;AACA,sFAAsF;AACtF,GAAG;AACH,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,UAAU;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/app.js\");\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","export function fadeOut (element, cb) {\n if (element.style.opacity && element.style.opacity > 0.05) {\n element.style.opacity = element.style.opacity - 0.05\n } else if (element.style.opacity && element.style.opacity <= 0.1) {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n if (cb) cb()\n }\n } else {\n element.style.opacity = 0.9\n }\n setTimeout(() => fadeOut.apply(this, [element, cb]), 1000 / 30\n )\n}\n\nexport const LIB_NAME = 'mini-toastr'\n\nexport const ERROR = 'error'\nexport const WARN = 'warn'\nexport const SUCCESS = 'success'\nexport const INFO = 'info'\nexport const CONTAINER_CLASS = LIB_NAME\nexport const NOTIFICATION_CLASS = `${LIB_NAME}__notification`\nexport const TITLE_CLASS = `${LIB_NAME}-notification__title`\nexport const ICON_CLASS = `${LIB_NAME}-notification__icon`\nexport const MESSAGE_CLASS = `${LIB_NAME}-notification__message`\nexport const ERROR_CLASS = `-${ERROR}`\nexport const WARN_CLASS = `-${WARN}`\nexport const SUCCESS_CLASS = `-${SUCCESS}`\nexport const INFO_CLASS = `-${INFO}`\nexport const DEFAULT_TIMEOUT = 3000\n\nconst EMPTY_STRING = ''\n\nexport function flatten (obj, into, prefix) {\n into = into || {}\n prefix = prefix || EMPTY_STRING\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n const prop = obj[k]\n if (prop && typeof prop === 'object' && !(prop instanceof Date || prop instanceof RegExp)) {\n flatten(prop, into, prefix + k + ' ')\n } else {\n if (into[prefix] && typeof into[prefix] === 'object') {\n into[prefix][k] = prop\n } else {\n into[prefix] = {}\n into[prefix][k] = prop\n }\n }\n }\n }\n\n return into\n}\n\nexport function makeCss (obj) {\n const flat = flatten(obj)\n let str = JSON.stringify(flat, null, 2)\n str = str.replace(/\"([^\"]*)\": {/g, '$1 {')\n .replace(/\"([^\"]*)\"/g, '$1')\n .replace(/(\\w*-?\\w*): ([\\w\\d .#]*),?/g, '$1: $2;')\n .replace(/},/g, '}\\n')\n .replace(/ &([.:])/g, '$1')\n\n str = str.substr(1, str.lastIndexOf('}') - 1)\n\n return str\n}\n\nexport function appendStyles (css) {\n let head = document.head || document.getElementsByTagName('head')[0]\n let styleElem = makeNode('style')\n styleElem.id = `${LIB_NAME}-styles`\n styleElem.type = 'text/css'\n\n if (styleElem.styleSheet) {\n styleElem.styleSheet.cssText = css\n } else {\n styleElem.appendChild(document.createTextNode(css))\n }\n\n head.appendChild(styleElem)\n}\n\nexport const config = {\n types: {ERROR, WARN, SUCCESS, INFO},\n animation: fadeOut,\n timeout: DEFAULT_TIMEOUT,\n icons: {},\n appendTarget: document.body,\n node: makeNode(),\n allowHtml: false,\n style: {\n [`.${CONTAINER_CLASS}`]: {\n position: 'fixed',\n 'z-index': 99999,\n right: '12px',\n top: '12px'\n },\n [`.${NOTIFICATION_CLASS}`]: {\n cursor: 'pointer',\n padding: '12px 18px',\n margin: '0 0 6px 0',\n 'background-color': '#000',\n opacity: 0.8,\n color: '#fff',\n 'border-radius': '3px',\n 'box-shadow': '#3c3b3b 0 0 12px',\n width: '300px',\n [`&.${ERROR_CLASS}`]: {\n 'background-color': '#D5122B'\n },\n [`&.${WARN_CLASS}`]: {\n 'background-color': '#F5AA1E'\n },\n [`&.${SUCCESS_CLASS}`]: {\n 'background-color': '#7AC13E'\n },\n [`&.${INFO_CLASS}`]: {\n 'background-color': '#4196E1'\n },\n '&:hover': {\n opacity: 1,\n 'box-shadow': '#000 0 0 12px'\n }\n },\n [`.${TITLE_CLASS}`]: {\n 'font-weight': '500'\n },\n [`.${MESSAGE_CLASS}`]: {\n display: 'inline-block',\n 'vertical-align': 'middle',\n width: '240px',\n padding: '0 12px'\n }\n }\n}\n\nexport function makeNode (type = 'div') {\n return document.createElement(type)\n}\n\nexport function createIcon (node, type, config) {\n const iconNode = makeNode(config.icons[type].nodeType)\n const attrs = config.icons[type].attrs\n\n for (const k in attrs) {\n if (attrs.hasOwnProperty(k)) {\n iconNode.setAttribute(k, attrs[k])\n }\n }\n\n node.appendChild(iconNode)\n}\n\nexport function addElem (node, text, className, config) {\n const elem = makeNode()\n elem.className = className\n if (config.allowHtml) {\n elem.innerHTML = text\n } else {\n elem.appendChild(document.createTextNode(text))\n }\n node.appendChild(elem)\n}\n\nexport function getTypeClass (type) {\n if (type === SUCCESS) return SUCCESS_CLASS\n if (type === WARN) return WARN_CLASS\n if (type === ERROR) return ERROR_CLASS\n if (type === INFO) return INFO_CLASS\n\n return EMPTY_STRING\n}\n\nconst miniToastr = {\n config,\n isInitialised: false,\n showMessage (message, title, type, timeout, cb, overrideConf) {\n const config = {}\n Object.assign(config, this.config)\n Object.assign(config, overrideConf)\n\n const notificationElem = makeNode()\n notificationElem.className = `${NOTIFICATION_CLASS} ${getTypeClass(type)}`\n\n notificationElem.onclick = function () {\n config.animation(notificationElem, null)\n }\n\n if (title) addElem(notificationElem, title, TITLE_CLASS, config)\n if (config.icons[type]) createIcon(notificationElem, type, config)\n if (message) addElem(notificationElem, message, MESSAGE_CLASS, config)\n\n config.node.insertBefore(notificationElem, config.node.firstChild)\n setTimeout(() => config.animation(notificationElem, cb), timeout || config.timeout\n )\n\n if (cb) cb()\n return this\n },\n init (aConfig) {\n const newConfig = {}\n Object.assign(newConfig, config)\n Object.assign(newConfig, aConfig)\n this.config = newConfig\n\n const cssStr = makeCss(newConfig.style)\n appendStyles(cssStr)\n\n newConfig.node.id = CONTAINER_CLASS\n newConfig.node.className = CONTAINER_CLASS\n newConfig.appendTarget.appendChild(newConfig.node)\n\n Object.keys(newConfig.types).forEach(v => {\n this[newConfig.types[v]] = function (message, title, timeout, cb, config) {\n this.showMessage(message, title, newConfig.types[v], timeout, cb, config)\n return this\n }.bind(this)\n }\n )\n\n this.isInitialised = true\n\n return this\n },\n setIcon (type, nodeType = 'i', attrs = []) {\n attrs.class = attrs.class ? attrs.class + ' ' + ICON_CLASS : ICON_CLASS\n\n this.config.icons[type] = {nodeType, attrs}\n }\n}\n\nexport default miniToastr","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { h, render, Component } from 'preact';\r\nimport miniToastr from 'mini-toastr';\r\nimport { Menu } from './components/menu';\r\nimport { Page } from './components/page';\r\nimport { loadConfig } from './conf/config.dat';\r\nimport { settings } from './lib/settings';\r\nimport { loader } from './lib/loader';\r\nimport { loadPlugins } from './lib/plugins';\r\n\r\nminiToastr.init({})\r\n\r\nconst clearSlashes = path => {\r\n return path.toString().replace(/\\/$/, '').replace(/^\\//, '');\r\n};\r\n\r\nconst getFragment = () => {\r\n const match = window.location.href.match(/#(.*)$/);\r\n const fragment = match ? match[1] : '';\r\n return clearSlashes(fragment);\r\n};\r\n\r\nclass App extends Component {\r\n constructor() {\r\n super();\r\n this.state = {\r\n menuActive: false,\r\n menu: menus[0],\r\n page: menus[0],\r\n changed: false,\r\n }\r\n\r\n this.menuToggle = () => {\r\n this.setState({ menuActive: !this.state.menuActive });\r\n }\r\n }\r\n\r\n render(props, state) {\r\n \r\n const params = getFragment().split('/').slice(2);\r\n const active = this.state.menuActive ? 'active' : '';\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n loader.hide();\r\n\r\n let current = '';\r\n const fn = () => {\r\n const newFragment = getFragment();\r\n const diff = settings.diff();\r\n if(this.state.changed !== !!diff.length) {\r\n this.setState({changed: !this.state.changed})\r\n }\r\n if(current !== newFragment) {\r\n current = newFragment;\r\n const parts = current.split('/');\r\n const menu = menus.find(menu => menu.href === parts[0]);\r\n const page = parts.length > 1 ? routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : menu;\r\n if (page) {\r\n this.setState({ page, menu, menuActive: false });\r\n }\r\n }\r\n }\r\n this.interval = setInterval(fn, 100);\r\n }\r\n\r\n componentWillUnmount() {}\r\n}\r\n\r\nconst load = async () => {\r\n await loadConfig();\r\n await loadPlugins();\r\n render(, document.body);\r\n}\r\n\r\nload();","import { h, Component } from 'preact';\r\n\r\nexport class Menu extends Component {\r\n renderMenuItem(menu) {\r\n if (menu.action) {\r\n return (\r\n
  • \r\n {menu.title}\r\n
  • \r\n )\r\n }\r\n if (menu.href === this.props.selected.href) {\r\n return [\r\n (
  • \r\n {menu.title}\r\n
  • ),\r\n ...menu.children.map(child => {\r\n if (child.action) {\r\n return (\r\n
  • \r\n {child.title}\r\n
  • \r\n )\r\n }\r\n return (
  • \r\n {child.title}\r\n
  • );\r\n })\r\n ]\r\n }\r\n return (
  • \r\n {menu.title}\r\n
  • );\r\n }\r\n\r\n render(props) {\r\n if (props.open === false) return;\r\n \r\n return (\r\n
    \r\n
    \r\n ESPEasy\r\n
      \r\n {props.menus.map(menu => (this.renderMenuItem(menu)))}\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nexport class Page extends Component {\r\n\r\n render(props) {\r\n const PageComponent = props.page.component;\r\n return (\r\n
    \r\n
    \r\n > {props.page.pagetitle == null ? props.page.title : props.page.pagetitle}\r\n { props.changed ? (\r\n CHANGED! Click here to SAVE\r\n ) : (null) }\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n}","import { parseConfig, writeConfig } from '../lib/parser';\r\nimport { settings } from '../lib/settings';\r\n\r\nconst TASKS_MAX = 12;\r\nconst NOTIFICATION_MAX = 3;\r\nconst CONTROLLER_MAX = 3;\r\nconst PLUGIN_CONFIGVAR_MAX = 8;\r\nconst PLUGIN_CONFIGFLOATVAR_MAX = 4;\r\nconst PLUGIN_CONFIGLONGVAR_MAX = 4;\r\nconst PLUGIN_EXTRACONFIGVAR_MAX = 16;\r\nconst NAME_FORMULA_LENGTH_MAX = 40;\r\nconst VARS_PER_TASK = 4;\r\n\r\nexport const configDatParseConfig = [\r\n { prop: 'status.PID', type: 'int32' },\r\n { prop: 'status.version', type: 'int32' },\r\n { prop: 'status.build', type: 'int16' },\r\n { prop: 'config.IP.ip', type: 'bytes', length: 4 },\r\n { prop: 'config.IP.gw', type: 'bytes', length: 4 }, \r\n { prop: 'config.IP.subnet', type: 'bytes', length: 4 },\r\n { prop: 'config.IP.dns', type: 'bytes', length: 4 },\r\n { prop: 'config.experimental.ip_octet', type: 'byte' },\r\n { prop: 'config.general.unitnr', type: 'byte' },\r\n { prop: 'config.general.unitname', type: 'string', length: 26 },\r\n { prop: 'config.ntp.host', type: 'string', length: 64 },\r\n { prop: 'config.sleep.sleeptime', type: 'int32' },\r\n { prop: 'hardware.i2c.sda', type: 'byte' },\r\n { prop: 'hardware.i2c.scl', type: 'byte' },\r\n { prop: 'hardware.led.gpio', type: 'byte' },\r\n { prop: 'Pin_sd_cs', type: 'byte' }, // TODO\r\n { prop: 'hardware.gpio', type: 'bytes', length: 17 },\r\n { prop: 'config.log.syslog_ip', type: 'bytes', length: 4 },\r\n { prop: 'config.espnetwork.port', type: 'int32' },\r\n { prop: 'config.log.syslog_level', type: 'byte' },\r\n { prop: 'config.log.serial_level', type: 'byte' },\r\n { prop: 'config.log.web_level', type: 'byte' },\r\n { prop: 'config.log.sd_level', type: 'byte' },\r\n { prop: 'config.serial.baudrate', type: 'int32' },\r\n { prop: 'config.mqtt.interval', type: 'int32' },\r\n { prop: 'config.sleep.awaketime', type: 'byte' },\r\n { prop: 'CustomCSS', type: 'byte' }, // TODO\r\n { prop: 'config.dst.enabled', type: 'byte' },\r\n { prop: 'config.experimental.WDI2CAddress', type: 'byte' },\r\n { prop: 'config.rules.enabled', type: 'byte' },\r\n { prop: 'config.serial.enabled', type: 'byte' },\r\n { prop: 'config.ssdp.enabled', type: 'byte' },\r\n { prop: 'config.ntp.enabled', type: 'byte' },\r\n { prop: 'config.experimental.WireClockStretchLimit', type: 'int32' },\r\n { prop: 'GlobalSync', type: 'byte' }, // TODO\r\n { prop: 'config.experimental.ConnectionFailuresThreshold', type: 'int32' },\r\n { prop: 'TimeZone', type: 'int16', signed: true},// TODO\r\n { prop: 'config.mqtt.retain_flag', type: 'byte' },\r\n { prop: 'hardware.spi.enabled', type: 'byte' },\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].protocol`, type:'byte' })),\r\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].type`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].device`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_TaskDeviceID`, type:'int32' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio1`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio2`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio3`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio4`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1pullup`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs`, type:'ints', length: PLUGIN_CONFIGVAR_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1inversed`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_float`, type:'floats', length: PLUGIN_CONFIGFLOATVAR_MAX })), \r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_long`, type:'longs', length: PLUGIN_CONFIGFLOATVAR_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_senddata`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].global_sync`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].data_feed`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].interval`, type:'int32' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].enabled`, type:'byte' })),\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].enabled`, type:'byte' })),\r\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].enabled`, type:'byte' })), \r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceID`, type:'longs', length: CONTROLLER_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceSendData`, type:'bytes', length: CONTROLLER_MAX })),\r\n { prop: 'hardware.led.inverse', type: 'byte' }, \r\n { prop: 'config.sleep.sleeponfailiure', type: 'byte' },\r\n { prop: 'UseValueLogger', type: 'byte' },// TODO\r\n { prop: 'ArduinoOTAEnable', type: 'byte' },// TODO\r\n { prop: 'config.dst.DST_Start', type: 'int16' },\r\n { prop: 'config.dst.DST_End', type: 'int16' },\r\n { prop: 'UseRTOSMultitasking', type: 'byte' },// TODO\r\n { prop: 'hardware.reset.pin', type: 'byte' }, \r\n { prop: 'config.log.syslog_facility', type: 'byte' }, \r\n { prop: 'StructSize', type: 'int32' },// TODO\r\n { prop: 'config.mqtt.useunitname', type: 'byte' },\r\n { prop: 'config.location.lat', type: 'float' },\r\n { prop: 'config.location.long', type: 'float' },\r\n { prop: 'config._emptyBit', type: 'bit' },\r\n { prop: 'config.general.appendunit', type: 'bit' },\r\n { prop: 'config.mqtt.changeclientid', type: 'bit' },\r\n { prop: 'config.rules.oldengine', type: 'bit' },\r\n { prop: 'config._bit4', type: 'bit' },\r\n { prop: 'config._bit5', type: 'bit' },\r\n { prop: 'config._bit6', type: 'bit' },\r\n { prop: 'config._bit7', type: 'bit' },\r\n { prop: 'config._bits1', type: 'byte' },\r\n { prop: 'config._bits2', type: 'byte' },\r\n { prop: 'config._bits3', type: 'byte' },\r\n { prop: 'ResetFactoryDefaultPreference', type: 'int32' },// TODO\r\n].flat();\r\n\r\nexport const TaskSettings = [\r\n { prop: 'index', type:'byte' },\r\n { prop: 'name', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\r\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].formula`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\r\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].name`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\r\n { prop: 'value_names', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\r\n { prop: 'plugin_config_long', type:'longs', length: PLUGIN_EXTRACONFIGVAR_MAX },\r\n { prop: 'decimals', type:'bytes', length: VARS_PER_TASK },\r\n { prop: 'plugin_config', type:'ints', length: PLUGIN_EXTRACONFIGVAR_MAX },\r\n].flat();\r\n\r\nexport const ControllerSettings = [\r\n { prop: 'dns', type:'byte' },\r\n { prop: 'IP', type:'bytes', length: 4 },\r\n { prop: 'port', type:'int32' },\r\n { prop: 'hostname', type:'string', length: 65 },\r\n { prop: 'publish', type:'string', length: 129 },\r\n { prop: 'subscribe', type:'string', length: 129 },\r\n { prop: 'MQTT_lwt_topic', type:'string', length: 129 },\r\n { prop: 'lwt_message_connect', type:'string', length: 129 },\r\n { prop: 'lwt_message_disconnect', type:'string', length: 129 },\r\n { prop: 'minimal_time_between', type:'int32' },\r\n { prop: 'max_queue_depth', type:'int32' },\r\n { prop: 'max_retry', type:'int32' },\r\n { prop: 'delete_oldest', type:'byte' },\r\n { prop: 'client_timeout', type:'int32' },\r\n { prop: 'must_check_reply', type:'byte' },\r\n];\r\n\r\nexport const NotificationSettings = [\r\n { prop: 'server', type:'string', length: 65 },\r\n { prop: 'port', type:'int16' },\r\n { prop: 'domain', type:'string', length: 65 },\r\n { prop: 'sender', type:'string', length: 65 },\r\n { prop: 'receiver', type:'string', length: 65 },\r\n { prop: 'subject', type:'string', length: 129 },\r\n { prop: 'body', type:'string', length: 513 },\r\n { prop: 'pin1', type:'byte' },\r\n { prop: 'pin2', type:'byte' },\r\n { prop: 'user', type:'string', length: 49 },\r\n { prop: 'pass', type:'string', length: 33 },\r\n];\r\n\r\nexport const SecuritySettings = [\r\n { prop: 'WifiSSID', type:'string', length: 32 },\r\n { prop: 'WifiKey', type:'string', length: 64 },\r\n { prop: 'WifiSSID2', type:'string', length: 32 },\r\n { prop: 'WifiKey2', type:'string', length: 64 },\r\n { prop: 'WifiAPKey', type:'string', length: 64 },\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].user`, type:'string', length: 26 })),\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].password`, type:'string', length: 64 })),\r\n { prop: 'password', type:'string', length: 26 },\r\n { prop: 'AllowedIPrangeLow', type:'bytes', length: 4 },\r\n { prop: 'AllowedIPrangeHigh', type:'bytes', length: 4 },\r\n { prop: 'IPblockLevel', type:'byte' },\r\n { prop: 'ProgmemMd5', type:'bytes', length: 16 },\r\n { prop: 'md5', type:'bytes', length: 16 },\r\n].flat();\r\n\r\nexport const loadConfig = () => {\r\n return fetch('config.dat').then(response => response.arrayBuffer()).then(async response => { \r\n const settings = parseConfig(response, configDatParseConfig);\r\n\r\n [...Array(12)].map((x, i) => {\r\n settings.tasks[i].settings = parseConfig(response, TaskSettings, 1024*4 + 1024 * 2 * i);\r\n settings.tasks[i].extra = parseConfig(response, TaskSettings, 1024*5 + 1024 * 2 * i);\r\n });\r\n \r\n [...Array(3)].map((x, i) => {\r\n settings.controllers[i].settings = parseConfig(response, ControllerSettings, 1024*27 + 1024 * 2 * i);\r\n settings.controllers[i].extra = parseConfig(response, ControllerSettings, 1024*28 + 1024 * 2 * i);\r\n });\r\n \r\n const notificationResponse = await fetch('notification.dat').then(response => response.arrayBuffer());\r\n [...Array(3)].map((x, i) => {\r\n settings.notifications[i].settings = parseConfig(notificationResponse, NotificationSettings, 1024 * i);\r\n });\r\n \r\n const securityResponse = await fetch('security.dat').then(response => response.arrayBuffer());\r\n settings.config.security = [...Array(3)].map((x, i) => {\r\n console.log(i);\r\n return parseConfig(securityResponse, SecuritySettings, 1024 * i);\r\n });\r\n \r\n return { response, settings };\r\n }).then(conf => {\r\n settings.init(conf.settings);\r\n settings.binary = new Uint8Array(conf.response);\r\n console.log(conf.settings);\r\n });\r\n}\r\n\r\nconst saveData = (function () {\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style = \"display: none\";\r\n return function (data, fileName) {\r\n const blob = new Blob([new Uint8Array(data)]);\r\n const url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n };\r\n}());\r\n\r\nlet ii = 0;\r\nexport const saveConfig = (save = true) => {\r\n if (ii === 0) {\r\n const buffer = new ArrayBuffer(65536);\r\n writeConfig(buffer, settings.settings, configDatParseConfig);\r\n [...Array(12)].map((x, i) => {\r\n return {\r\n settings: writeConfig(buffer, settings.settings.tasks[i].settings, TaskSettings, 1024*4 + 1024 * 2 * i),\r\n extra: writeConfig(buffer, settings.settings.tasks[i].extra, TaskSettings, 1024*5 + 1024 * 2 * i),\r\n };\r\n });\r\n\r\n [...Array(3)].map((x, i) => {\r\n return {\r\n settings: writeConfig(buffer, settings.settings.controllers[i].settings, ControllerSettings, 1024*28 + 1024 * 2 * i),\r\n extra: writeConfig(buffer, settings.settings.controllers[i].extra, ControllerSettings, 1024*29 + 1024 * 2 * i),\r\n };\r\n });\r\n if (save) saveData(buffer, 'config.dat');\r\n else return buffer;\r\n } else if (ii === 1) {\r\n const bufferNotifications = new ArrayBuffer(4096);\r\n [...Array(3)].map((x, i) => {\r\n return writeConfig(bufferNotifications, settings.settings.notifications[i], NotificationSettings, 1024 * i);\r\n });\r\n saveData(bufferNotifications, 'notification.dat');\r\n } else if (ii === 2) {\r\n const bufferSecurity = new ArrayBuffer(4096);\r\n [...Array(3)].map((x, i) => {\r\n return writeConfig(bufferSecurity, settings.settings.security[i], SecuritySettings, 1024 * i);\r\n });\r\n saveData(bufferSecurity, 'security.dat');\r\n }\r\n ii = (ii + 1) % 3;\r\n}\r\n\r\n","import miniToastr from 'mini-toastr';\nimport { loader } from './loader';\n\nexport const getJsonStat = async (url = '') => {\n return await fetch(`${url}/json`).then(response => response.json())\n}\n\nexport const loadDevices = async (url) => {\n return getJsonStat(url).then(response => response.Sensors);\n}\n\nexport const getConfigNodes = async () => {\n const devices = await loadDevices();\n const vars = [];\n const nodes = devices.map(device => {\n const taskValues = device.TaskValues || [];\n taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n const result = [{\n group: 'TRIGGERS',\n type: device.TaskName || `${device.TaskNumber}-${device.Type}`,\n inputs: [],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n value: taskValues.length ? taskValues[0].Name : '',\n }, {\n name: 'euqality',\n type: 'select',\n values: ['', '=', '<', '>', '<=', '>=', '!='],\n value: '',\n }, {\n name: 'value',\n type: 'number',\n }],\n indent: true,\n toString: function () { \n const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`;\n return `when ${this.type}.${this.config[0].value} ${comparison}`; \n },\n toDsl: function () { \n const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`;\n return [`on ${this.type}#${this.config[0].value}${comparison} do\\n%%output%%\\nEndon\\n`]; \n }\n }];\n\n let fnNames, fnName, name;\n switch (device.Type) {\n // todo: need access to GPIO number\n // case 'Switch input - Switch':\n // result.push({\n // group: 'ACTIONS',\n // type: `${device.TaskName} - switch`,\n // inputs: [1],\n // outputs: [1],\n // config: [{\n // name: 'value',\n // type: 'number',\n // }],\n // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n // });\n // break;\n case 'Regulator - Level Control':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - setlevel`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'value',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n });\n break;\n case 'Extra IO - PCA9685':\n case 'Switch input - PCF8574':\n case 'Switch input - MCP23017':\n fnNames = {\n 'Extra IO - PCA9685': 'PCF',\n 'Switch input - PCF8574': 'PCF',\n 'Switch input - MCP23017': 'MCP',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Pulse`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n },{\n name: 'unit',\n type: 'select',\n values: ['ms', 's'],\n },{\n name: 'duration',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; },\n toDsl: function () { \n if (this.config[2].value === 's') {\n return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n } else {\n return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n }\n }\n });\n break;\n case 'Extra IO - ProMini Extender':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n break;\n case 'Display - OLED SSD1306':\n case 'Display - LCD2004':\n fnNames = {\n 'Display - OLED SSD1306': 'OLED',\n 'Display - LCD2004': 'LCD',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'row',\n type: 'select',\n values: [1, 2, 3, 4],\n }, {\n name: 'column',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],\n }, {\n name: 'text',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.text = ${this.config[2].value}`; },\n toDsl: function () { return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; }\n });\n break;\n case 'Generic - Dummy Device':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n }, {\n name: 'value',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; }\n });\n break;\n }\n\n return result;\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const getVariables = async () => {\n const urls = ['']; //, 'http://192.168.1.130'\n const vars = {};\n await Promise.all(urls.map(async url => {\n const stat = await getJsonStat(url);\n stat.Sensors.map(device => {\n device.TaskValues.map(value => {\n vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value;\n });\n });\n }));\n return vars;\n}\n\nexport const getDashboardConfigNodes = async (url) => {\n const devices = await loadDevices(url);\n const vars = [];\n const nodes = devices.map(device => {\n device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n return [];\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const storeFile = async (filename, data) => {\n loader.show();\n const file = data ? new File([new Blob([data])], filename) : filename;\n const formData = new FormData();\n formData.append('edit', 1);\n formData.append('file', file);\n \n return await fetch('/upload', {\n method: 'post',\n body: formData,\n }).then(() => {\n loader.hide();\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n loader.hide();\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const deleteFile = async (filename,) => { \n return await fetch('/filelist?delete='+filename).then(() => {\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const storeDashboardConfig = async (config) => {\n storeFile('d1.txt', config);\n}\n\nexport const storeRuleConfig = async (config) => {\n storeFile('r1.txt', config);\n}\n\nexport const loadRuleConfig = async () => {\n return await fetch('/r1.txt').then(response => response.json());\n}\n\nexport const loadDashboardConfig = async (nodes) => {\n return await fetch('/d1.txt').then(response => response.json());\n}\n\nexport const storeRule = async (rule) => {\n const formData = new FormData();\n formData.append('set', 1);\n formData.append('rules', rule);\n \n return await fetch('/rules', {\n method: 'post',\n body: formData,\n });\n}","import get from 'lodash/get';\r\nimport set from 'lodash/set';\r\n\r\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\r\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\r\n\r\n// const set = (obj, path, value) => {\r\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\r\n// if (!a[c]) a[c] = {};\r\n// if (i === src.length - 1) a[c] = value;\r\n// }, obj)\r\n// }\r\n\r\nconst getKeys = object => {\r\n const keys = [];\r\n for (let key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n keys.push(key);\r\n }\r\n }\r\n return keys;\r\n}\r\n\r\nexport { get, set, getKeys }","class Loader {\r\n constructor() {\r\n const loader = document.createElement('div');\r\n loader.className = 'loader';\r\n loader.innerHTML = 'loading';\r\n document.body.appendChild(loader);\r\n this.loader = loader;\r\n }\r\n\r\n show() {\r\n this.loader.classList.add('show');\r\n }\r\n\r\n hide() {\r\n this.loader.classList.add('hide');\r\n setTimeout(() => {\r\n this.loader.classList.remove('hide');\r\n this.loader.classList.remove('show');\r\n }, 1000);\r\n }\r\n}\r\n\r\nexport const loader = new Loader();","import { get, set } from './helpers';\r\n\r\nclass DataParser {\r\n constructor(data) {\r\n this.view = new DataView(data);\r\n this.offset = 0;\r\n this.bitbyte = 0;\r\n this.bitbytepos = 7;\r\n }\r\n\r\n pad(nr) {\r\n while (this.offset % nr) {\r\n this.offset++;\r\n }\r\n }\r\n\r\n bit(signed = false, write = false, val) {\r\n if (this.bitbytepos === 7) {\r\n if (!write) {\r\n this.bitbyte = this.byte();\r\n this.bitbytepos = 0;\r\n } else {\r\n this.byte(signed, write, this.bitbyte);\r\n }\r\n }\r\n if (!write) {\r\n return (this.bitbyte >> this.bitbytepos++) & 1;\r\n } else {\r\n this.bitbyte = val ? (this.bitbyte | (1 << this.bitbytepos++)) : (this.bitbyte & ~(1 << this.bitbytepos++));\r\n }\r\n }\r\n\r\n byte(signed = false, write = false, val) {\r\n this.pad(1);\r\n const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`;\r\n const res = this.view[fn](this.offset, val);\r\n this.offset += 1;\r\n return res;\r\n }\r\n\r\n int16(signed = false, write = false, val) {\r\n this.pad(2);\r\n let fn = signed ? 'Int16' : 'Uint16';\r\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\r\n this.offset += 2;\r\n return res;\r\n }\r\n\r\n int32(signed = false, write = false, val) {\r\n this.pad(4);\r\n let fn = signed ? 'Int32' : 'Uint32';\r\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\r\n this.offset += 4;\r\n return res;\r\n }\r\n float(signed = false, write = false, val) {\r\n this.pad(4);\r\n const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true);\r\n this.offset += 4;\r\n return res;\r\n }\r\n bytes(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.byte(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n ints(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.int16(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n longs(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.int32(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n floats(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.float(write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n string(nr, signed = false, write = false, val) {\r\n if (write) {\r\n for (var i = 0; i < nr; ++i) {\r\n var code = val.charCodeAt(i) || '\\0';\r\n this.byte(false, true, code);\r\n }\r\n } else {\r\n const res = this.bytes(nr);\r\n return String.fromCharCode.apply(null, res).replace(/\\x00/g, '');\r\n }\r\n }\r\n}\r\n\r\nexport const parseConfig = (data, config, start) => {\r\n const p = new DataParser(data);\r\n if (start) p.offset = start;\r\n const result = {};\r\n config.map(value => {\r\n const prop = value.length ? value.length : value.signed;\r\n set(result, value.prop, p[value.type](prop, value.signed));\r\n });\r\n return result;\r\n}\r\n\r\nexport const writeConfig = (buffer, data, config, start) => {\r\n const p = new DataParser(buffer);\r\n if (start) p.offset = start;\r\n config.map(value => {\r\n const val = get(data, value.prop);\r\n if (value.length) {\r\n p[value.type](value.length, value.signed, true, val);\r\n } else {\r\n p[value.type](value.signed, true, val);\r\n }\r\n });\r\n}","import { settings } from './settings';\r\nimport espeasy from './espeasy';\r\nimport { loader } from './loader';\r\n\r\nconst PLUGINS = [\r\n 'dash.js', 'flow.js',\r\n];\r\n\r\nconst dynamicallyLoadScript = (url) => {\r\n return new Promise(resolve => {\r\n var script = document.createElement(\"script\"); // create a script DOM node\r\n script.src = url; // set its src to the provided URL\r\n script.onreadystatechange = resolve;\r\n script.onload = resolve;\r\n script.onerror = resolve;\r\n document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)\r\n });\r\n}\r\n\r\nconst getPluginAPI = () => {\r\n return {\r\n settings,\r\n loader,\r\n espeasy,\r\n }\r\n}\r\n\r\nwindow.getPluginAPI = getPluginAPI;\r\n\r\nexport const loadPlugins = async () => {\r\n return Promise.all(PLUGINS.map(async plugin => {\r\n return dynamicallyLoadScript(plugin);\r\n }));\r\n}","import { get, set, getKeys } from './helpers';\r\n\r\nconst diff = (obj1, obj2, path = '') => {\r\n return getKeys(obj1).map(key => {\r\n const val1 = obj1[key];\r\n const val2 = obj2[key];\r\n if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);\r\n else if (val1 !== val2) {\r\n return [{ path: `${path}.${key}`, val1, val2 }];\r\n } else return [];\r\n }).flat();\r\n}\r\n\r\nclass Settings {\r\n init(settings) {\r\n this.settings = settings;\r\n this.apply();\r\n }\r\n\r\n get(prop) {\r\n return get(this.settings, prop);\r\n }\r\n\r\n /**\r\n * sets changes to the current version and sets changed flag\r\n * @param {*} prop \r\n * @param {*} value \r\n */\r\n set(prop, value) {\r\n const obj = get(this.settings, prop);\r\n if (typeof obj === 'object') {\r\n console.warn('settings an object!');\r\n set(this.settings, prop, value);\r\n } else {\r\n set(this.settings, prop, value);\r\n }\r\n \r\n if (this.diff().length) this.changed = true;\r\n }\r\n\r\n /**\r\n * returns diff between applied and current version\r\n */\r\n diff() {\r\n return diff(this.stored, this.settings);\r\n }\r\n\r\n /***\r\n * applys changes and creates new version in localStorage\r\n */\r\n apply() {\r\n this.stored = JSON.parse(JSON.stringify(this.settings));\r\n this.changed = false;\r\n }\r\n}\r\n\r\nexport const settings = window.settings1 = new Settings();"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/mini-toastr/mini-toastr.js","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///(webpack)/buildin/global.js","webpack:///./src/app.js","webpack:///./src/components/form/index.js","webpack:///./src/components/menu/index.js","webpack:///./src/components/page/index.js","webpack:///./src/conf/config.dat.js","webpack:///./src/devices/10_light_lux.js","webpack:///./src/devices/11_pme.js","webpack:///./src/devices/12_lcd.js","webpack:///./src/devices/13_hcsr04.js","webpack:///./src/devices/14_si7021.js","webpack:///./src/devices/15_tls2561.js","webpack:///./src/devices/17_pn532.js","webpack:///./src/devices/18_dust.js","webpack:///./src/devices/19_pcf8574.js","webpack:///./src/devices/1_input_switch.js","webpack:///./src/devices/20_ser2net.js","webpack:///./src/devices/21_level_control.js","webpack:///./src/devices/22_pca9685.js","webpack:///./src/devices/23_oled1306.js","webpack:///./src/devices/24_mlx90614.js","webpack:///./src/devices/25_ads1115.js","webpack:///./src/devices/26_system_info.js","webpack:///./src/devices/27_ina219.js","webpack:///./src/devices/28_bmx280.js","webpack:///./src/devices/29_mqtt_domoticz.js","webpack:///./src/devices/2_analog_input.js","webpack:///./src/devices/30_bmp280.js","webpack:///./src/devices/31_sht1x.js","webpack:///./src/devices/32_ms5611.js","webpack:///./src/devices/33_dummy_device.js","webpack:///./src/devices/34_dht12.js","webpack:///./src/devices/36_sh1106.js","webpack:///./src/devices/37_mqtt_import.js","webpack:///./src/devices/38_neopixel_basic.js","webpack:///./src/devices/39_thermocouple.js","webpack:///./src/devices/3_generic_pulse.js","webpack:///./src/devices/41_neopixel_clock.js","webpack:///./src/devices/42_neopixel_candle.js","webpack:///./src/devices/43_output_clock.js","webpack:///./src/devices/44_wifi_gateway.js","webpack:///./src/devices/49_mhz19.js","webpack:///./src/devices/4_ds18b20.js","webpack:///./src/devices/52_senseair.js","webpack:///./src/devices/56_sds011.js","webpack:///./src/devices/59_rotary_encoder.js","webpack:///./src/devices/5_dht.js","webpack:///./src/devices/63_ttp229.js","webpack:///./src/devices/6_bmp085.js","webpack:///./src/devices/7_pcf8591.js","webpack:///./src/devices/8_rfid.js","webpack:///./src/devices/9_io_mcp.js","webpack:///./src/devices/_defs.js","webpack:///./src/devices/index.js","webpack:///./src/lib/espeasy.js","webpack:///./src/lib/floweditor.js","webpack:///./src/lib/helpers.js","webpack:///./src/lib/loader.js","webpack:///./src/lib/menu.js","webpack:///./src/lib/node_definitions.js","webpack:///./src/lib/parser.js","webpack:///./src/lib/plugins.js","webpack:///./src/lib/settings.js","webpack:///./src/pages/config.advanced.js","webpack:///./src/pages/config.hardware.js","webpack:///./src/pages/config.js","webpack:///./src/pages/controllers.edit.js","webpack:///./src/pages/controllers.js","webpack:///./src/pages/devices.edit.js","webpack:///./src/pages/devices.js","webpack:///./src/pages/diff.js","webpack:///./src/pages/discover.js","webpack:///./src/pages/factory_reset.js","webpack:///./src/pages/fs.js","webpack:///./src/pages/index.js","webpack:///./src/pages/load.js","webpack:///./src/pages/reboot.js","webpack:///./src/pages/rules.editor.js","webpack:///./src/pages/rules.js","webpack:///./src/pages/tools.js","webpack:///./src/pages/update.js"],"names":["miniToastr","init","clearSlashes","path","toString","replace","getFragment","match","window","location","href","fragment","App","Component","constructor","state","menuActive","menu","menus","page","changed","menuToggle","setState","render","props","params","split","slice","active","componentDidMount","loader","hide","current","fn","newFragment","diff","settings","length","parts","m","find","routes","route","interval","setInterval","componentWillUnmount","load","loadConfig","loadPlugins","document","body","Form","saveForm","values","groups","getKeys","config","map","groupKey","group","keys","configs","key","val","form","elements","value","type","onSave","resetForm","reset","onChange","id","prop","e","checked","parseFloat","isNaN","parseInt","set","selected","renderConfig","varName","options","option","name","Object","if","clickEvent","click","renderConfigGroup","configArray","Array","isArray","conf","i","varId","var","get","renderGroup","ref","Menu","renderMenuItem","action","title","children","child","open","Page","PageComponent","component","pagetitle","class","TASKS_MAX","NOTIFICATION_MAX","CONTROLLER_MAX","PLUGIN_CONFIGVAR_MAX","PLUGIN_CONFIGFLOATVAR_MAX","PLUGIN_CONFIGLONGVAR_MAX","PLUGIN_EXTRACONFIGVAR_MAX","NAME_FORMULA_LENGTH_MAX","VARS_PER_TASK","configDatParseConfig","signed","x","flat","TaskSettings","ControllerSettings","NotificationSettings","SecuritySettings","fetch","then","response","arrayBuffer","parseConfig","tasks","extra","controllers","notificationResponse","notifications","securityResponse","security","console","log","binary","Uint8Array","saveData","a","createElement","appendChild","style","data","fileName","blob","Blob","url","URL","createObjectURL","download","revokeObjectURL","ii","saveConfig","save","buffer","ArrayBuffer","writeConfig","bufferNotifications","bufferSecurity","i2c_address","measurmentMode","bh1750","sensor","mode","send_to_sleep","send1","send2","send3","idx1","idx2","idx3","pme","port","displaySize","lcdCommand","lcd2004","size","line1","line2","line3","line4","button","pins","command","units","filters","hcsr04","gpio1","gpio2","treshold","max_distance","unit","filter","filter_size","resolution","si7021","tls2561","gain","pn532","dust","eventTypes","pcf8574","inversed","send_boot_state","advanced","debounce","dblclick","dblclick_interval","longpress","longpress_interval","safe_button","inputSwitch","pullup","gpio","switch_type","switch_button_type","parity","eventProcessing","ser2net","baudrate","data_bits","stop_bits","reset_after_boot","timeout","event_processing","sensorModel","levelControl","check_task","getTasks","check_value","getTaskValues","level","hysteresis","v","pca9685","frequency","range","oled1306","rotation","font","line5","line6","line7","line8","mlx90614","gainOptions","multiplexerOptions","ads1115","multiplexer","enabled","point1","point2","indicator","systemInfo","indicator1","measurmentRange","measurmentType","ina219","bmx280","altitude","offset","mqttDomoticz","idx","analogInput","oversampling","bmp280","sht1x","ms5611","dummyDevice","dht12","sh1106","mqttImport","neopixelBasic","leds","thermocouple","modeTypes","counterTypes","genericPulse","counter_type","mode_type","neopixelClock","R","min","max","G","B","neopixelCandle","clock","event1","event2","event3","event4","event5","event6","event7","event8","wifiGateway","mhz19","ds18b20","senseAir","sds011","rotaryEncoder","gpio3","dht","ttp229","scancode","bmp085","pcf8591","weigandType","rfidWeigand","inputMcp","task","index","devices","fields","getJsonStat","json","loadDevices","Sensors","getConfigNodes","vars","nodes","device","taskValues","TaskValues","push","TaskName","Name","result","TaskNumber","Type","inputs","outputs","indent","comparison","toDsl","fnNames","fnName","findIndex","getVariables","urls","Promise","all","stat","System","Value","getDashboardConfigNodes","storeFile","filename","show","file","File","formData","FormData","append","method","success","error","message","deleteFile","storeDashboardConfig","loadDashboardConfig","storeRuleConfig","loadRuleConfig","storeRule","rule","color","saveChart","renderedNodes","triggers","node","trigger","walkRule","t","o","out","lines","line","input","nodeObject","c","position","y","loadChart","chart","from","n","configNode","NodeUI","canvas","cfg","fromDimension","getBoundingClientRect","toDimension","lineSvg","svgArrow","clientWidth","clientHeight","element","x1","width","y1","height","x2","y2","setPath","connection","output","svg","start","end","outputI","exportChart","r","rules","ruleset","padding","outI","subrule","trim","join","includes","dNd","enableNativeDrag","nodeElement","draggable","ondragstart","ev","dataTransfer","setData","enableNativeDrop","ondragover","preventDefault","ondrop","fill","createElementNS","setAttribute","setAttributeNS","tension","delta","hx1","hy1","hx2","hy2","Node","assign","toHtml","linesEnd","updateInputsOutputs","rect","handleMoveEvent","canEdit","shiftX","clientX","left","shiftY","clientY","top","onMouseMove","newy","newx","gridSize","onMouseUp","removeEventListener","addEventListener","handleDblClickEvent","showConfigBox","text","innerHTML","textContent","handleRightClickEvent","parentNode","removeChild","indexOf","splice","destroy","stopPropagation","className","onmousedown","oncontextmenu","rects","pageX","pageY","elemBelow","elementFromPoint","closest","remove","inputRect","ondblclick","bind","getCfgUI","template","getSelectOptions","content","cloneNode","onclose","configBox","querySelectorAll","okButton","getElementById","cancelButton","onclick","forms","cfgUI","FlowEditor","readOnly","debug","nodeConfig","getData","renderContainers","sidebar","saveBtn","JSON","stringify","loadBtn","prompt","parse","exportBtn","exported","renderConfigNodes","object","hasOwnProperty","Loader","classList","add","setTimeout","Menus","addMenu","addRoute","forEach","DevicesPage","ControllersPage","RulesEditorPage","ConfigPage","ConfigHardwarePage","ConfigAdvancedPage","RulesPage","LoadPage","RebootPage","FactoryResetPage","ToolsPage","DiscoverPage","UpdatePage","FSPage","ControllerEditPage","DevicesEditPage","DiffPage","DataParser","view","DataView","bitbyte","bitbytepos","pad","nr","bit","write","byte","res","int16","int32","float","setFloat32","getFloat32","bytes","vals","ints","longs","floats","string","code","charCodeAt","String","fromCharCode","apply","p","PLUGINS","dynamicallyLoadScript","resolve","script","src","onreadystatechange","onload","onerror","head","getPluginAPI","espeasy","plugin","obj1","obj2","val1","val2","Settings","obj","warn","stored","settings1","logLevelOptions","formConfig","oldengine","mqtt","retain_flag","useunitname","changeclientid","ntp","host","dst","long","lat","syslog_ip","syslog_level","syslog_facility","serial_level","web_level","serial","espnetwork","experimental","ip_octet","WDI2CAddress","ssdp","ConnectionFailuresThreshold","WireClockStretchLimit","pinState","led","inverse","pin","i2c","sda","scl","spi","ipBlockLevel","general","unitname","unitnr","appendunit","password","wifi","ssid","passwd","fallbackssid","fallbackpasswd","wpaapmode","clientIP","blocklevel","lowerrange","upperrange","IP","ip","gw","subnet","dns","sleep","awaketime","sleeptime","sleeponfailiure","protocols","baseFields","hostname","minimal_time_between","max_queue_depth","max_retry","delete_oldest","must_check_reply","client_timeout","user","subscribe","publish","lwtTopicField","MQTT_lwt_topic","lwt_message_connect","lwt_message_disconnect","getFormConfig","additionalFields","Number","protocol","currentTarget","editUrl","d","reduce","acc","alert","handleEnableToggle","dataset","deviceType","enabledProp","stage","applyChanges","bytediff","__html","change","formula","scani2c","scanwifi","keep","network","delete","files","fileList","hash","unshift","ifElseNode","loaded","selectionChanged","saveRule","componentDidUpdate","history","sendCommand","cmd","cmdOutput","Log","Entries","Date","timestamp","toLocaleTimeString","scrollTop","scrollHeight","clearInterval"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;AClFA,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,cAAc,mBAAO,CAAC,qDAAY;AAClC,cAAc,mBAAO,CAAC,qDAAY;AAClC,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC/BA,qBAAqB,mBAAO,CAAC,mEAAmB;AAChD,sBAAsB,mBAAO,CAAC,qEAAoB;AAClD,mBAAmB,mBAAO,CAAC,+DAAiB;AAC5C,mBAAmB,mBAAO,CAAC,+DAAiB;AAC5C,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC/BA,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;;AAEA;;;;;;;;;;;;ACNA,oBAAoB,mBAAO,CAAC,iEAAkB;AAC9C,qBAAqB,mBAAO,CAAC,mEAAmB;AAChD,kBAAkB,mBAAO,CAAC,6DAAgB;AAC1C,kBAAkB,mBAAO,CAAC,6DAAgB;AAC1C,kBAAkB,mBAAO,CAAC,6DAAgB;;AAE1C;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC/BA,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,sBAAsB,mBAAO,CAAC,qEAAoB;AAClD,SAAS,mBAAO,CAAC,yCAAM;;AAEvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC3BA,SAAS,mBAAO,CAAC,yCAAM;;AAEvB;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,qBAAqB,mBAAO,CAAC,mEAAmB;;AAEhD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,eAAe,mBAAO,CAAC,uDAAa;AACpC,YAAY,mBAAO,CAAC,iDAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,EAAE;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACvBA,aAAa,mBAAO,CAAC,mDAAW;AAChC,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,qBAAqB,mBAAO,CAAC,mEAAmB;;AAEhD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC3BA,iBAAiB,mBAAO,CAAC,yDAAc;AACvC,eAAe,mBAAO,CAAC,uDAAa;AACpC,eAAe,mBAAO,CAAC,qDAAY;AACnC,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9CA,kBAAkB,mBAAO,CAAC,6DAAgB;AAC1C,eAAe,mBAAO,CAAC,uDAAa;AACpC,cAAc,mBAAO,CAAC,qDAAY;AAClC,eAAe,mBAAO,CAAC,qDAAY;AACnC,YAAY,mBAAO,CAAC,iDAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9CA,aAAa,mBAAO,CAAC,mDAAW;AAChC,eAAe,mBAAO,CAAC,uDAAa;AACpC,cAAc,mBAAO,CAAC,mDAAW;AACjC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA,cAAc,mBAAO,CAAC,mDAAW;AACjC,YAAY,mBAAO,CAAC,iDAAU;AAC9B,mBAAmB,mBAAO,CAAC,+DAAiB;AAC5C,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;;AAEA;;;;;;;;;;;;ACLA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,GAAG;AACH,CAAC;;AAED;;;;;;;;;;;;ACVA;AACA;;AAEA;;;;;;;;;;;;;ACHA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA,mBAAmB,mBAAO,CAAC,+DAAiB;AAC5C,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChBA,aAAa,mBAAO,CAAC,mDAAW;;AAEhC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7BA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,cAAc,mBAAO,CAAC,mDAAW;AACjC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,WAAW,mBAAO,CAAC,+CAAS;AAC5B,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,UAAU,mBAAO,CAAC,6CAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,mDAAW;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACRA,oBAAoB,mBAAO,CAAC,iEAAkB;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;;;;;;;;;;;AC1BA,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxEA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEO;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,SAAS;AACvC,uBAAuB,SAAS;AAChC,sBAAsB,SAAS;AAC/B,yBAAyB,SAAS;AAClC,wBAAwB,MAAM;AAC9B,uBAAuB,KAAK;AAC5B,0BAA0B,QAAQ;AAClC,uBAAuB,KAAK;AAC5B;;AAEP;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA,oDAAoD;AACpD,eAAe,OAAO;AACtB;;AAEA,wCAAwC;;AAExC;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEO;AACP,UAAU,2BAA2B;AACrC;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,mBAAmB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP,YAAY,cAAc;AAC1B;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,YAAY;AACrB;AACA,KAAK;AACL,SAAS,cAAc;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,mBAAmB,GAAG,mBAAmB;;AAE7E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA,+BAA+B;AAC/B;AACA;;AAEe,yE;;;;;;;;;;;;AC3Of;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA,GAAG;AACH;;AAEA;AACA,kCAAkC,0DAA0D;AAC5F;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;;AAEA;AACA,2CAA2C;AAC3C;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,EAAE;AACF;;AAEA;AACA,sFAAsF;AACtF,GAAG;AACH,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,UAAU;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/app.js\");\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","export function fadeOut (element, cb) {\n if (element.style.opacity && element.style.opacity > 0.05) {\n element.style.opacity = element.style.opacity - 0.05\n } else if (element.style.opacity && element.style.opacity <= 0.1) {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n if (cb) cb()\n }\n } else {\n element.style.opacity = 0.9\n }\n setTimeout(() => fadeOut.apply(this, [element, cb]), 1000 / 30\n )\n}\n\nexport const LIB_NAME = 'mini-toastr'\n\nexport const ERROR = 'error'\nexport const WARN = 'warn'\nexport const SUCCESS = 'success'\nexport const INFO = 'info'\nexport const CONTAINER_CLASS = LIB_NAME\nexport const NOTIFICATION_CLASS = `${LIB_NAME}__notification`\nexport const TITLE_CLASS = `${LIB_NAME}-notification__title`\nexport const ICON_CLASS = `${LIB_NAME}-notification__icon`\nexport const MESSAGE_CLASS = `${LIB_NAME}-notification__message`\nexport const ERROR_CLASS = `-${ERROR}`\nexport const WARN_CLASS = `-${WARN}`\nexport const SUCCESS_CLASS = `-${SUCCESS}`\nexport const INFO_CLASS = `-${INFO}`\nexport const DEFAULT_TIMEOUT = 3000\n\nconst EMPTY_STRING = ''\n\nexport function flatten (obj, into, prefix) {\n into = into || {}\n prefix = prefix || EMPTY_STRING\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n const prop = obj[k]\n if (prop && typeof prop === 'object' && !(prop instanceof Date || prop instanceof RegExp)) {\n flatten(prop, into, prefix + k + ' ')\n } else {\n if (into[prefix] && typeof into[prefix] === 'object') {\n into[prefix][k] = prop\n } else {\n into[prefix] = {}\n into[prefix][k] = prop\n }\n }\n }\n }\n\n return into\n}\n\nexport function makeCss (obj) {\n const flat = flatten(obj)\n let str = JSON.stringify(flat, null, 2)\n str = str.replace(/\"([^\"]*)\": {/g, '$1 {')\n .replace(/\"([^\"]*)\"/g, '$1')\n .replace(/(\\w*-?\\w*): ([\\w\\d .#]*),?/g, '$1: $2;')\n .replace(/},/g, '}\\n')\n .replace(/ &([.:])/g, '$1')\n\n str = str.substr(1, str.lastIndexOf('}') - 1)\n\n return str\n}\n\nexport function appendStyles (css) {\n let head = document.head || document.getElementsByTagName('head')[0]\n let styleElem = makeNode('style')\n styleElem.id = `${LIB_NAME}-styles`\n styleElem.type = 'text/css'\n\n if (styleElem.styleSheet) {\n styleElem.styleSheet.cssText = css\n } else {\n styleElem.appendChild(document.createTextNode(css))\n }\n\n head.appendChild(styleElem)\n}\n\nexport const config = {\n types: {ERROR, WARN, SUCCESS, INFO},\n animation: fadeOut,\n timeout: DEFAULT_TIMEOUT,\n icons: {},\n appendTarget: document.body,\n node: makeNode(),\n allowHtml: false,\n style: {\n [`.${CONTAINER_CLASS}`]: {\n position: 'fixed',\n 'z-index': 99999,\n right: '12px',\n top: '12px'\n },\n [`.${NOTIFICATION_CLASS}`]: {\n cursor: 'pointer',\n padding: '12px 18px',\n margin: '0 0 6px 0',\n 'background-color': '#000',\n opacity: 0.8,\n color: '#fff',\n 'border-radius': '3px',\n 'box-shadow': '#3c3b3b 0 0 12px',\n width: '300px',\n [`&.${ERROR_CLASS}`]: {\n 'background-color': '#D5122B'\n },\n [`&.${WARN_CLASS}`]: {\n 'background-color': '#F5AA1E'\n },\n [`&.${SUCCESS_CLASS}`]: {\n 'background-color': '#7AC13E'\n },\n [`&.${INFO_CLASS}`]: {\n 'background-color': '#4196E1'\n },\n '&:hover': {\n opacity: 1,\n 'box-shadow': '#000 0 0 12px'\n }\n },\n [`.${TITLE_CLASS}`]: {\n 'font-weight': '500'\n },\n [`.${MESSAGE_CLASS}`]: {\n display: 'inline-block',\n 'vertical-align': 'middle',\n width: '240px',\n padding: '0 12px'\n }\n }\n}\n\nexport function makeNode (type = 'div') {\n return document.createElement(type)\n}\n\nexport function createIcon (node, type, config) {\n const iconNode = makeNode(config.icons[type].nodeType)\n const attrs = config.icons[type].attrs\n\n for (const k in attrs) {\n if (attrs.hasOwnProperty(k)) {\n iconNode.setAttribute(k, attrs[k])\n }\n }\n\n node.appendChild(iconNode)\n}\n\nexport function addElem (node, text, className, config) {\n const elem = makeNode()\n elem.className = className\n if (config.allowHtml) {\n elem.innerHTML = text\n } else {\n elem.appendChild(document.createTextNode(text))\n }\n node.appendChild(elem)\n}\n\nexport function getTypeClass (type) {\n if (type === SUCCESS) return SUCCESS_CLASS\n if (type === WARN) return WARN_CLASS\n if (type === ERROR) return ERROR_CLASS\n if (type === INFO) return INFO_CLASS\n\n return EMPTY_STRING\n}\n\nconst miniToastr = {\n config,\n isInitialised: false,\n showMessage (message, title, type, timeout, cb, overrideConf) {\n const config = {}\n Object.assign(config, this.config)\n Object.assign(config, overrideConf)\n\n const notificationElem = makeNode()\n notificationElem.className = `${NOTIFICATION_CLASS} ${getTypeClass(type)}`\n\n notificationElem.onclick = function () {\n config.animation(notificationElem, null)\n }\n\n if (title) addElem(notificationElem, title, TITLE_CLASS, config)\n if (config.icons[type]) createIcon(notificationElem, type, config)\n if (message) addElem(notificationElem, message, MESSAGE_CLASS, config)\n\n config.node.insertBefore(notificationElem, config.node.firstChild)\n setTimeout(() => config.animation(notificationElem, cb), timeout || config.timeout\n )\n\n if (cb) cb()\n return this\n },\n init (aConfig) {\n const newConfig = {}\n Object.assign(newConfig, config)\n Object.assign(newConfig, aConfig)\n this.config = newConfig\n\n const cssStr = makeCss(newConfig.style)\n appendStyles(cssStr)\n\n newConfig.node.id = CONTAINER_CLASS\n newConfig.node.className = CONTAINER_CLASS\n newConfig.appendTarget.appendChild(newConfig.node)\n\n Object.keys(newConfig.types).forEach(v => {\n this[newConfig.types[v]] = function (message, title, timeout, cb, config) {\n this.showMessage(message, title, newConfig.types[v], timeout, cb, config)\n return this\n }.bind(this)\n }\n )\n\n this.isInitialised = true\n\n return this\n },\n setIcon (type, nodeType = 'i', attrs = []) {\n attrs.class = attrs.class ? attrs.class + ' ' + ICON_CLASS : ICON_CLASS\n\n this.config.icons[type] = {nodeType, attrs}\n }\n}\n\nexport default miniToastr","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { h, render, Component } from 'preact';\nimport miniToastr from 'mini-toastr';\nimport { Menu } from './components/menu';\nimport { Page } from './components/page';\nimport { loadConfig } from './conf/config.dat';\nimport { settings } from './lib/settings';\nimport { loader } from './lib/loader';\nimport { loadPlugins } from './lib/plugins';\nimport { menu } from './lib/menu';\n\nminiToastr.init({})\n\nconst clearSlashes = path => {\n return path.toString().replace(/\\/$/, '').replace(/^\\//, '');\n};\n\nconst getFragment = () => {\n const match = window.location.href.match(/#(.*)$/);\n const fragment = match ? match[1] : '';\n return clearSlashes(fragment);\n};\n\nclass App extends Component {\n constructor() {\n super();\n this.state = {\n menuActive: false,\n menu: menu.menus[0],\n page: menu.menus[0],\n changed: false,\n }\n\n this.menuToggle = () => {\n this.setState({ menuActive: !this.state.menuActive });\n }\n }\n\n render(props, state) {\n \n const params = getFragment().split('/').slice(2);\n const active = this.state.menuActive ? 'active' : '';\n return (\n
    \n \n \n \n \n \n
    \n );\n }\n\n componentDidMount() {\n loader.hide();\n\n let current = '';\n const fn = () => {\n const newFragment = getFragment();\n const diff = settings.diff();\n if(this.state.changed !== !!diff.length) {\n this.setState({changed: !this.state.changed})\n }\n if(current !== newFragment) {\n current = newFragment;\n const parts = current.split('/');\n const m = menu.menus.find(menu => menu.href === parts[0]);\n const page = parts.length > 1 ? menu.routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m;\n if (page) {\n this.setState({ page, menu: m, menuActive: false });\n }\n }\n }\n this.interval = setInterval(fn, 100);\n }\n\n componentWillUnmount() {}\n}\n\nconst load = async () => {\n await loadConfig();\n await loadPlugins();\n render(, document.body);\n}\n\nload();","import { h, Component } from 'preact';\nimport { get, set, getKeys } from '../../lib/helpers';\nimport { settings } from '../../lib/settings';\n\nexport class Form extends Component {\n constructor(props) {\n super(props);\n\n this.saveForm = () => {\n const values = {};\n const groups = getKeys(this.props.config.groups);\n groups.map(groupKey => {\n const group = this.props.config.groups[groupKey];\n const keys = getKeys(group.configs);\n if (!values[groupKey]) values[groupKey] = {};\n keys.map(key => {\n let val = this.form.elements[`${groupKey}.${key}`].value;\n if (group.configs[key].type === 'checkbox') {\n val = val === 'on' ? 1 : 0;\n }\n values[groupKey][key] = val;\n });\n })\n this.props.config.onSave(values);\n };\n\n this.resetForm = () => {\n this.form.reset();\n }\n\n this.onChange = (id, prop, config = {}) => {\n return (e) => {\n let val = this.form.elements[id].value;\n if (config.type === 'checkbox') {\n val = this.form.elements[id].checked ? 1 : 0;\n } else if (config.type === 'number' || config.type === 'ip') {\n val = parseFloat(val);\n } else if (config.type === 'select') {\n val = isNaN(val) ? val : parseInt(val);\n }\n set(this.props.selected, prop, val);\n if (config.onChange) {\n config.onChange(e);\n }\n }\n }\n }\n\n renderConfig(id, config, value, varName) {\n switch (config.type) {\n case 'string':\n return (\n \n );\n case 'number':\n return (\n \n ) ;\n case 'ip':\n return [\n (),\n (),\n (),\n ()\n ]\n case 'password':\n return (\n \n ) ;\n case 'checkbox':\n return (\n \n ) ;\n case 'select':\n const options = (typeof config.options === 'function') ? config.options() : config.options;\n return (\n \n ) ;\n case 'file':\n return (\n \n )\n case 'button':\n if (config.if != null && !config.if) return (null);\n const clickEvent = () => {\n if (!config.click) return;\n config.click(this.props.selected);\n }\n return (\n \n );\n }\n }\n\n renderConfigGroup(id, configs, values) {\n const configArray = Array.isArray(configs) ? configs : [configs];\n\n return (\n
    \n {configArray.map((conf, i) => {\n const varId = configArray.length > 1 ? `${id}.${i}` : id;\n const varName = conf.var ? conf.var : varId;\n const val = get(values, varName, null);\n\n return [\n (),\n this.renderConfig(varId, conf, val, varName)\n ];\n })}\n
    \n )\n }\n\n renderGroup(id, group, values) {\n const keys = getKeys(group.configs);\n return (\n
    \n \n {keys.map(key => {\n const conf = group.configs[key];\n return this.renderConfigGroup(`${id}.${key}`, conf, values);\n })}\n
    \n )\n }\n\n render(props) {\n const keys = getKeys(props.config.groups);\n return (
    this.form = ref}>\n {keys.map(key => this.renderGroup(key, props.config.groups[key], props.selected))}\n {/*
    \n \n \n
    */}\n
    )\n }\n}","import { h, Component } from 'preact';\n\nexport class Menu extends Component {\n renderMenuItem(menu) {\n if (menu.action) {\n return (\n
  • \n {menu.title}\n
  • \n )\n }\n if (menu.href === this.props.selected.href) {\n return [\n (
  • \n {menu.title}\n
  • ),\n ...menu.children.map(child => {\n if (child.action) {\n return (\n
  • \n {child.title}\n
  • \n )\n }\n return (
  • \n {child.title}\n
  • );\n })\n ]\n }\n return (
  • \n {menu.title}\n
  • );\n }\n\n render(props) {\n if (props.open === false) return;\n \n return (\n
    \n
    \n ESPEasy\n
      \n {props.menus.map(menu => (this.renderMenuItem(menu)))}\n
    \n
    \n
    \n );\n }\n}","import { h, Component } from 'preact';\n\nexport class Page extends Component {\n\n render(props) {\n const PageComponent = props.page.component;\n return (\n
    \n
    \n > {props.page.pagetitle == null ? props.page.title : props.page.pagetitle}\n { props.changed ? (\n CHANGED! Click here to SAVE\n ) : (null) }\n
    \n\n
    \n \n
    \n
    \n );\n }\n}","import { parseConfig, writeConfig } from '../lib/parser';\nimport { settings } from '../lib/settings';\n\nconst TASKS_MAX = 12;\nconst NOTIFICATION_MAX = 3;\nconst CONTROLLER_MAX = 3;\nconst PLUGIN_CONFIGVAR_MAX = 8;\nconst PLUGIN_CONFIGFLOATVAR_MAX = 4;\nconst PLUGIN_CONFIGLONGVAR_MAX = 4;\nconst PLUGIN_EXTRACONFIGVAR_MAX = 16;\nconst NAME_FORMULA_LENGTH_MAX = 40;\nconst VARS_PER_TASK = 4;\n\nexport const configDatParseConfig = [\n { prop: 'status.PID', type: 'int32' },\n { prop: 'status.version', type: 'int32' },\n { prop: 'status.build', type: 'int16' },\n { prop: 'config.IP.ip', type: 'bytes', length: 4 },\n { prop: 'config.IP.gw', type: 'bytes', length: 4 }, \n { prop: 'config.IP.subnet', type: 'bytes', length: 4 },\n { prop: 'config.IP.dns', type: 'bytes', length: 4 },\n { prop: 'config.experimental.ip_octet', type: 'byte' },\n { prop: 'config.general.unitnr', type: 'byte' },\n { prop: 'config.general.unitname', type: 'string', length: 26 },\n { prop: 'config.ntp.host', type: 'string', length: 64 },\n { prop: 'config.sleep.sleeptime', type: 'int32' },\n { prop: 'hardware.i2c.sda', type: 'byte' },\n { prop: 'hardware.i2c.scl', type: 'byte' },\n { prop: 'hardware.led.gpio', type: 'byte' },\n { prop: 'Pin_sd_cs', type: 'byte' }, // TODO\n { prop: 'hardware.gpio', type: 'bytes', length: 17 },\n { prop: 'config.log.syslog_ip', type: 'bytes', length: 4 },\n { prop: 'config.espnetwork.port', type: 'int32' },\n { prop: 'config.log.syslog_level', type: 'byte' },\n { prop: 'config.log.serial_level', type: 'byte' },\n { prop: 'config.log.web_level', type: 'byte' },\n { prop: 'config.log.sd_level', type: 'byte' },\n { prop: 'config.serial.baudrate', type: 'int32' },\n { prop: 'config.mqtt.interval', type: 'int32' },\n { prop: 'config.sleep.awaketime', type: 'byte' },\n { prop: 'CustomCSS', type: 'byte' }, // TODO\n { prop: 'config.dst.enabled', type: 'byte' },\n { prop: 'config.experimental.WDI2CAddress', type: 'byte' },\n { prop: 'config.rules.enabled', type: 'byte' },\n { prop: 'config.serial.enabled', type: 'byte' },\n { prop: 'config.ssdp.enabled', type: 'byte' },\n { prop: 'config.ntp.enabled', type: 'byte' },\n { prop: 'config.experimental.WireClockStretchLimit', type: 'int32' },\n { prop: 'GlobalSync', type: 'byte' }, // TODO\n { prop: 'config.experimental.ConnectionFailuresThreshold', type: 'int32' },\n { prop: 'TimeZone', type: 'int16', signed: true},// TODO\n { prop: 'config.mqtt.retain_flag', type: 'byte' },\n { prop: 'hardware.spi.enabled', type: 'byte' },\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].protocol`, type:'byte' })),\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].type`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].device`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_TaskDeviceID`, type:'int32' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio1`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio2`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio3`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio4`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1pullup`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs`, type:'ints', length: PLUGIN_CONFIGVAR_MAX })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1inversed`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_float`, type:'floats', length: PLUGIN_CONFIGFLOATVAR_MAX })), \n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_long`, type:'longs', length: PLUGIN_CONFIGFLOATVAR_MAX })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_senddata`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].global_sync`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].data_feed`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].interval`, type:'int32' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].enabled`, type:'byte' })),\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].enabled`, type:'byte' })),\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].enabled`, type:'byte' })), \n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceID`, type:'longs', length: CONTROLLER_MAX })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceSendData`, type:'bytes', length: CONTROLLER_MAX })),\n { prop: 'hardware.led.inverse', type: 'byte' }, \n { prop: 'config.sleep.sleeponfailiure', type: 'byte' },\n { prop: 'UseValueLogger', type: 'byte' },// TODO\n { prop: 'ArduinoOTAEnable', type: 'byte' },// TODO\n { prop: 'config.dst.DST_Start', type: 'int16' },\n { prop: 'config.dst.DST_End', type: 'int16' },\n { prop: 'UseRTOSMultitasking', type: 'byte' },// TODO\n { prop: 'hardware.reset.pin', type: 'byte' }, \n { prop: 'config.log.syslog_facility', type: 'byte' }, \n { prop: 'StructSize', type: 'int32' },// TODO\n { prop: 'config.mqtt.useunitname', type: 'byte' },\n { prop: 'config.location.lat', type: 'float' },\n { prop: 'config.location.long', type: 'float' },\n { prop: 'config._emptyBit', type: 'bit' },\n { prop: 'config.general.appendunit', type: 'bit' },\n { prop: 'config.mqtt.changeclientid', type: 'bit' },\n { prop: 'config.rules.oldengine', type: 'bit' },\n { prop: 'config._bit4', type: 'bit' },\n { prop: 'config._bit5', type: 'bit' },\n { prop: 'config._bit6', type: 'bit' },\n { prop: 'config._bit7', type: 'bit' },\n { prop: 'config._bits1', type: 'byte' },\n { prop: 'config._bits2', type: 'byte' },\n { prop: 'config._bits3', type: 'byte' },\n { prop: 'ResetFactoryDefaultPreference', type: 'int32' },// TODO\n].flat();\n\nexport const TaskSettings = [\n { prop: 'index', type:'byte' },\n { prop: 'name', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].formula`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].name`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\n { prop: 'value_names', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\n { prop: 'plugin_config_long', type:'longs', length: PLUGIN_EXTRACONFIGVAR_MAX },\n { prop: 'decimals', type:'bytes', length: VARS_PER_TASK },\n { prop: 'plugin_config', type:'ints', length: PLUGIN_EXTRACONFIGVAR_MAX },\n].flat();\n\nexport const ControllerSettings = [\n { prop: 'dns', type:'byte' },\n { prop: 'IP', type:'bytes', length: 4 },\n { prop: 'port', type:'int32' },\n { prop: 'hostname', type:'string', length: 65 },\n { prop: 'publish', type:'string', length: 129 },\n { prop: 'subscribe', type:'string', length: 129 },\n { prop: 'MQTT_lwt_topic', type:'string', length: 129 },\n { prop: 'lwt_message_connect', type:'string', length: 129 },\n { prop: 'lwt_message_disconnect', type:'string', length: 129 },\n { prop: 'minimal_time_between', type:'int32' },\n { prop: 'max_queue_depth', type:'int32' },\n { prop: 'max_retry', type:'int32' },\n { prop: 'delete_oldest', type:'byte' },\n { prop: 'client_timeout', type:'int32' },\n { prop: 'must_check_reply', type:'byte' },\n];\n\nexport const NotificationSettings = [\n { prop: 'server', type:'string', length: 65 },\n { prop: 'port', type:'int16' },\n { prop: 'domain', type:'string', length: 65 },\n { prop: 'sender', type:'string', length: 65 },\n { prop: 'receiver', type:'string', length: 65 },\n { prop: 'subject', type:'string', length: 129 },\n { prop: 'body', type:'string', length: 513 },\n { prop: 'pin1', type:'byte' },\n { prop: 'pin2', type:'byte' },\n { prop: 'user', type:'string', length: 49 },\n { prop: 'pass', type:'string', length: 33 },\n];\n\nexport const SecuritySettings = [\n { prop: 'WifiSSID', type:'string', length: 32 },\n { prop: 'WifiKey', type:'string', length: 64 },\n { prop: 'WifiSSID2', type:'string', length: 32 },\n { prop: 'WifiKey2', type:'string', length: 64 },\n { prop: 'WifiAPKey', type:'string', length: 64 },\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].user`, type:'string', length: 26 })),\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].password`, type:'string', length: 64 })),\n { prop: 'password', type:'string', length: 26 },\n { prop: 'AllowedIPrangeLow', type:'bytes', length: 4 },\n { prop: 'AllowedIPrangeHigh', type:'bytes', length: 4 },\n { prop: 'IPblockLevel', type:'byte' },\n { prop: 'ProgmemMd5', type:'bytes', length: 16 },\n { prop: 'md5', type:'bytes', length: 16 },\n].flat();\n\nexport const loadConfig = () => {\n return fetch('config.dat').then(response => response.arrayBuffer()).then(async response => { \n const settings = parseConfig(response, configDatParseConfig);\n\n [...Array(12)].map((x, i) => {\n settings.tasks[i].settings = parseConfig(response, TaskSettings, 1024*4 + 1024 * 2 * i);\n settings.tasks[i].extra = parseConfig(response, TaskSettings, 1024*5 + 1024 * 2 * i);\n });\n \n [...Array(3)].map((x, i) => {\n settings.controllers[i].settings = parseConfig(response, ControllerSettings, 1024*27 + 1024 * 2 * i);\n settings.controllers[i].extra = parseConfig(response, ControllerSettings, 1024*28 + 1024 * 2 * i);\n });\n \n const notificationResponse = await fetch('notification.dat').then(response => response.arrayBuffer());\n [...Array(3)].map((x, i) => {\n settings.notifications[i].settings = parseConfig(notificationResponse, NotificationSettings, 1024 * i);\n });\n \n const securityResponse = await fetch('security.dat').then(response => response.arrayBuffer());\n settings.config.security = [...Array(3)].map((x, i) => {\n console.log(i);\n return parseConfig(securityResponse, SecuritySettings, 1024 * i);\n });\n \n return { response, settings };\n }).then(conf => {\n settings.init(conf.settings);\n settings.binary = new Uint8Array(conf.response);\n console.log(conf.settings);\n });\n}\n\nconst saveData = (function () {\n const a = document.createElement(\"a\");\n document.body.appendChild(a);\n a.style = \"display: none\";\n return function (data, fileName) {\n const blob = new Blob([new Uint8Array(data)]);\n const url = window.URL.createObjectURL(blob);\n a.href = url;\n a.download = fileName;\n a.click();\n window.URL.revokeObjectURL(url);\n };\n}());\n\nlet ii = 0;\nexport const saveConfig = (save = true) => {\n if (ii === 0) {\n const buffer = new ArrayBuffer(65536);\n writeConfig(buffer, settings.settings, configDatParseConfig);\n [...Array(12)].map((x, i) => {\n return {\n settings: writeConfig(buffer, settings.settings.tasks[i].settings, TaskSettings, 1024*4 + 1024 * 2 * i),\n extra: writeConfig(buffer, settings.settings.tasks[i].extra, TaskSettings, 1024*5 + 1024 * 2 * i),\n };\n });\n\n [...Array(3)].map((x, i) => {\n return {\n settings: writeConfig(buffer, settings.settings.controllers[i].settings, ControllerSettings, 1024*28 + 1024 * 2 * i),\n extra: writeConfig(buffer, settings.settings.controllers[i].extra, ControllerSettings, 1024*29 + 1024 * 2 * i),\n };\n });\n if (save) saveData(buffer, 'config.dat');\n else return buffer;\n } else if (ii === 1) {\n const bufferNotifications = new ArrayBuffer(4096);\n [...Array(3)].map((x, i) => {\n return writeConfig(bufferNotifications, settings.settings.notifications[i], NotificationSettings, 1024 * i);\n });\n saveData(bufferNotifications, 'notification.dat');\n } else if (ii === 2) {\n const bufferSecurity = new ArrayBuffer(4096);\n [...Array(3)].map((x, i) => {\n return writeConfig(bufferSecurity, settings.settings.security[i], SecuritySettings, 1024 * i);\n });\n saveData(bufferSecurity, 'security.dat');\n }\n ii = (ii + 1) % 3;\n}\n\n","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst measurmentMode = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const bh1750 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n mode: { name: 'Measurement mode', type: 'select', options: measurmentMode, var: 'configs[1]' },\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst mode = [\n { value: 0, name: 'Digital' }, \n { value: 1, name: 'Analog' }, \n]\n\nexport const pme = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'Port', type: 'number', var: 'gpio4' },\n mode: { name: 'Port Type', type: 'select', options: mode, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst displaySize = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nconst lcdCommand = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const lcd2004 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\n line1: { name: 'Line 1', type: 'string', var: 'configs[2]' },\n line2: { name: 'Line 2', type: 'string', var: 'configs[2]' },\n line3: { name: 'Line 3', type: 'string', var: 'configs[2]' },\n line4: { name: 'Line 4', type: 'string', var: 'configs[2]' },\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\n command: { name: 'LCD Command Mode', type: 'select', options: lcdCommand, var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst mode = [\n { value: 0, name: 'Value' }, \n { value: 1, name: 'State' }, \n]\n\nconst units = [\n { value: 0, name: 'Metric' }, \n { value: 1, name: 'Imperial' }, \n]\n\nconst filters = [\n { value: 0, name: 'None' }, \n { value: 1, name: 'Median' }, \n]\n\nexport const hcsr04 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO Trigger', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO Echo, 5V', type: 'select', options: pins, var: 'gpio2' },\n mode: { name: 'Mode', type: 'select', options: mode, var: 'configs[0]' },\n treshold: { name: 'Treshold', type: 'number', var: 'configs[1]' },\n max_distance: { name: 'Max Distance', type: 'number', var: 'configs[2]' },\n unit: { name: 'Unit', type: 'select', options: units, var: 'configs[3]' },\n filter: { name: 'Filter', type: 'select', options: filters, var: 'configs[4]' },\n filter_size: { name: 'Filter Size', type: 'number', var: 'configs[5]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\n\nconst resolution = [\n { value: 0, name: 'Temp 14 bits, RH 12 bits' }, \n { value: 128, name: 'Temp 13 bits, RH 10 bits' }, \n { value: 1, name: 'Temp 12 bits, RH 8 bits' }, \n { value: 129, name: 'Temp 11 bits, RH 11 bits' }, \n]\n\nexport const si7021 = {\n sensor: {\n name: 'Sensor',\n configs: {\n resolution: { name: 'Resolution', type: 'select', options: resolution, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 57, name: '0x39 (57) - default' }, \n { value: 73, name: '0x49 (73)' }, \n { value: 41, name: '0x29 (41)' }, \n]\n\nconst measurmentMode = [\n { value: 0, name: '13 ms' }, \n { value: 1, name: '101 ms' }, \n { value: 2, name: '402 ms' }, \n]\n\nexport const tls2561 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n mode: { name: 'Integration time', type: 'select', options: measurmentMode, var: 'configs[1]' },\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\n gain: { name: 'Enable 16x gain', type: 'checkbox', var: 'configs[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}\n","import { pins } from './_defs';\n\nexport const pn532 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'Reset Pin', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst measurmentMode = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const dust = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO - LED', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const pcf8574 = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\n }\n },\n advanced: {\n name: 'Advanced event management',\n configs: {\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const inputSwitch = {\n sensor: {\n name: 'Sensor',\n configs: {\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n switch_type: { name: 'Switch Type', type: 'select', options: [{ name: 'switch', value: 0}, { name: 'dimmer', value: 3 }], var: 'configs[0]' },\n switch_button_type: { name: 'Switch Button Type', type: 'select', options: [\n { name: 'normal', value: 0}, { name: 'active low', value: 1 }, { name: 'active high', value: 2 }\n ], var: 'configs[2]' },\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\n }\n },\n advanced: {\n name: 'Advanced event management',\n configs: {\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst parity = [\n { value: 0, name: 'No Parity' }, \n { value: 1, name: 'Even' }, \n { value: 2, name: 'Odd' }, \n]\n\nconst eventProcessing = [\n { value: 0, name: 'None' }, \n { value: 1, name: 'Generic' }, \n { value: 2, name: 'RFLink' }, \n]\n\nexport const ser2net = {\n sensor: {\n name: 'Settings',\n configs: {\n port: { name: 'TCP Port', type: 'number', var: 'configs_float[0]' },\n baudrate: { name: 'Baudrate', type: 'number', var: 'configs_float[0]' },\n data_bits: { name: 'Data Bits', type: 'number', var: 'configs_float[0]' },\n parity: { name: 'Parity', type: 'select', options: parity, var: 'configs[0]' },\n stop_bits: { name: 'Stop Bits', type: 'number', var: 'configs_float[0]' },\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'configs[1]' },\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs_float[0]' },\n event_processing: { name: 'Event Processing', type: 'select', options: eventProcessing, var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst sensorModel = [\n { value: 11, name: 'DHT11' }, \n { value: 22, name: 'DHT22' }, \n { value: 12, name: 'DHT12' }, \n { value: 23, name: 'Sonoff am2301' }, \n { value: 70, name: 'Sonoff si7021' },\n]\n\nexport const levelControl = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO Level Low', type: 'select', options: pins, var: 'gpio1' },\n check_task: { name: 'Check Task', type: 'select', options: getTasks, var: 'configs[0]' },\n check_value: { name: 'Check Value', type: 'select', options: getTaskValues, var: 'configs[1]' },\n level: { name: 'Set Level', type: 'number', var: 'configs_float[0]' },\n hysteresis: { name: 'Hysteresis', type: 'number', var: 'configs_float[1]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst mode = [...Array(32)].map((v, i) => ({ value: i, name: `0x${i.toString(16)} (${i})` }));\nconst i2c_address = [...Array(32)].map((v, i) => ({ value: i+64, name: `0x${(i+64).toString(16)} (${i+64})` }));\n\nexport const pca9685 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n mode: { name: 'Mode 2', type: 'select', options: mode, var: 'configs[1]' },\n frequency: { name: 'Frequency (23 - 1500)', type: 'number', var: 'configs_float[0]' },\n range: { name: 'Range (1-10000)', type: 'number', var: 'configs_float[1]' },\n }\n },\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst displaySize = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const oled1306 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","const options = [\n { value: 0, name: 'IR Object Temperature' }, \n { value: 1, name: 'Ambient Temperature' }, \n]\n\nexport const mlx90614 = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'Port', type: 'number', var: 'gpio4' },\n option: { name: 'Option', type: 'select', options: options, var: 'configs[0]' },\n }\n },\n}","\nconst i2c_address = [\n { value: 72, name: '0x48 (72)' }, \n { value: 73, name: '0x49 (73)' }, \n { value: 74, name: '0x4A (74)' }, \n { value: 75, name: '0x4B (75)' }, \n];\n\nconst gainOptions = [\n { value: 0, name: '2/3x gain (FS=6.144V)' }, \n { value: 1, name: '1x gain (FS=4.096V)' }, \n { value: 2, name: '2x gain (FS=2.048V)' }, \n { value: 3, name: '4x gain (FS=1.024V)' }, \n { value: 4, name: '8x gain (FS=0.512V)' },\n { value: 5, name: '16x gain (FS=0.256V)' },\n];\n\nconst multiplexerOptions = [\n { value: 0, name: 'AIN0 - AIN1 (Differential)' }, \n { value: 1, name: 'AIN0 - AIN3 (Differential)' }, \n { value: 2, name: 'AIN1 - AIN3 (Differential)' }, \n { value: 3, name: 'AIN2 - AIN3 (Differential)' }, \n { value: 4, name: 'AIN0 - GND (Single-Ended)' }, \n { value: 5, name: 'AIN1 - GND (Single-Ended)' }, \n { value: 6, name: 'AIN2 - GND (Single-Ended)' }, \n { value: 7, name: 'AIN3 - GND (Single-Ended)' }, \n];\n\n\nexport const ads1115 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n gain: { name: 'Gain', type: 'select', options: gainOptions, var: 'configs[1]' },\n multiplexer: { name: 'Input Multiplexer', type: 'select', options: multiplexerOptions, var: 'configs[2]' },\n }\n },\n advanced: {\n name: 'Two point calibration',\n configs: {\n enabled: { name: 'Calibration Enabled', type: 'number', var: 'configs[3]' },\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","const indicator = [\n { value: 0, name: 'Uptime' }, \n { value: 1, name: 'Free Ram' }, \n { value: 2, name: 'WiFi RSSI' }, \n { value: 3, name: 'Input VCC' }, \n { value: 4, name: 'System load' }, \n { value: 5, name: 'IP 1.Octet' }, \n { value: 6, name: 'IP 2.Octet' }, \n { value: 7, name: 'IP 3.Octet' }, \n { value: 8, name: 'IP 4.Octet' }, \n { value: 9, name: 'Web activity' }, \n { value: 10, name: 'Free Stack' }, \n { value: 11, name: 'None' }, \n]\n\nexport const systemInfo = {\n sensor: {\n name: 'Settings',\n configs: {\n indicator1: { name: 'Indicator 1', type: 'select', options: indicator, var: 'configs_long[0]' },\n indicator1: { name: 'Indicator 2', type: 'select', options: indicator, var: 'configs_long[1]' },\n indicator1: { name: 'Indicator 3', type: 'select', options: indicator, var: 'configs_long[2]' },\n indicator1: { name: 'Indicator 4', type: 'select', options: indicator, var: 'configs_long[3]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst measurmentRange = [\n { value: 0, name: '32V, 2A' }, \n { value: 1, name: '32V, 1A' }, \n { value: 2, name: '16V, 0.4A' }, \n]\n\nconst measurmentType = [\n { value: 0, name: 'Voltage' }, \n { value: 1, name: 'Current' }, \n { value: 2, name: 'Power' }, \n { value: 3, name: 'Voltage/Current/Power' }, \n]\n\nconst i2c_address = [\n { value: 64, name: '0x40 (64) - (default)' }, \n { value: 65, name: '0x41 (65)' }, \n { value: 68, name: '0x44 (68)' }, \n { value: 69, name: '0x45 (69)' }, \n]\n\nexport const ina219 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n check_task: { name: 'Measurment Range', type: 'select', options: measurmentRange, var: 'configs[1]' },\n check_value: { name: 'Measurment Type', type: 'select', options: measurmentType, var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst i2c_address = [\n { value: 118, name: '0x76 (118) - (default)' }, \n { value: 119, name: '0x77 (119) - (default)' }, \n]\n\nexport const bmx280 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n offset: { name: 'Temperature Offset', type: 'number', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const mqttDomoticz = {\n sensor: {\n name: 'Actuator',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n idx: { name: 'IDX', type: 'number', var: 'configs[0]' },\n }\n },\n}","import { pins } from './_defs';\n\nexport const analogInput = {\n sensor: {\n name: 'Sensor',\n configs: {\n oversampling: { name: 'Oversampling', type: 'checkbox', var: 'configs[0]' },\n }\n },\n advanced: {\n name: 'Two point calibration',\n configs: {\n enabled: { name: 'Calibration Enabled', type: 'number', var: 'configs[3]' },\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst i2c_address = [\n { value: 118, name: '0x76 (118) - (default)' }, \n { value: 119, name: '0x77 (119) - (default)' }, \n]\n\nexport const bmp280 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const sht1x = {\n sensor: {\n name: 'Sensor',\n configs: {\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\n gpio1: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO SCK', type: 'select', options: pins, var: 'gpio2' },\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst i2c_address = [\n { value: 118, name: '0x76 (118)' }, \n { value: 119, name: '0x77 (119) - (default)' }, \n]\n\n\nexport const ms5611 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nconst sensorModel = [\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \n { value: 5, name: 'SENSOR_TYPE_DUAL' },\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\n { value: 20, name: 'SENSOR_TYPE_LONG' },\n { value: 21, name: 'SENSOR_TYPE_WIND' },\n]\n\nexport const dummyDevice = {\n data: {\n name: 'Data Acquisition',\n configs: {\n switch_type: { name: 'Simulate Sensor Type', type: 'select', options: sensorModel, var: 'configs[0]' },\n interval: { name: 'Interval', type: 'number' },\n }\n }\n}","\nconst sensorModel = [\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \n { value: 5, name: 'SENSOR_TYPE_DUAL' },\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\n { value: 20, name: 'SENSOR_TYPE_LONG' },\n { value: 21, name: 'SENSOR_TYPE_WIND' },\n]\n\nexport const dht12 = {\n data: {\n name: 'Data Acquisition',\n configs: {\n interval: { name: 'Interval', type: 'number' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst displaySize = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const sh1106 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\n\nexport const mqttImport = {\n data: {\n name: 'Data Acquisition',\n configs: {\n switch_type: { name: 'MQTT Topic 1', type: 'text', var: 'configs[0]' },\n switch_type: { name: 'MQTT Topic 2', type: 'text', var: 'configs[0]' },\n switch_type: { name: 'MQTT Topic 3', type: 'text', var: 'configs[0]' },\n switch_type: { name: 'MQTT Topic 4', type: 'text', var: 'configs[0]' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst type = [\n { value: 1, name: 'GRB' }, \n { value: 2, name: 'GRBW' }, \n]\n\nexport const neopixelBasic = {\n sensor: {\n name: 'Sensor',\n configs: {\n leds: { name: 'LEd Count', type: 'number', var: 'configs[0]' },\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n type: { name: 'Strip Type', type: 'select', options: type, var: 'configs[1]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst type = [\n { value: 1, name: 'MAX 6675' }, \n { value: 2, name: 'MAX 31855' }, \n]\n\nexport const thermocouple = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n type: { name: 'Adapter IC', type: 'select', options: type, var: 'configs[0]' },\n }\n },\n}","import { pins } from './_defs';\n\nconst modeTypes = [\n { value: 0, name: 'LOW' }, \n { value: 1, name: 'CHANGE' }, \n { value: 2, name: 'RISING' }, \n { value: 3, name: 'FALLING' }, \n]\n\nconst counterTypes = [\n { value: 0, name: 'Delta' }, \n { value: 1, name: 'Delta/Total/Time' }, \n { value: 2, name: 'Total' }, \n { value: 3, name: 'Delta/Total' }, \n]\n\nexport const genericPulse = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs[0]' },\n counter_type: { name: 'Counter Type', type: 'select', options: counterTypes, var: 'configs[1]' },\n mode_type: { name: 'Switch Button Type', type: 'select', options: modeTypes, var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const neopixelClock = {\n sensor: {\n name: 'Actuator',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n R: { name: 'Red', type: 'number', min: 0, max: 255, var: 'configs[0]' },\n G: { name: 'Green', type: 'number', min: 0, max: 255, var: 'configs[1]' },\n B: { name: 'Blue', type: 'number', min: 0, max: 255, var: 'configs[2]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const neopixelCandle = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst type = [\n { value: 0, name: '' },\n { value: 1, name: 'Off' }, \n { value: 2, name: 'On' }, \n]\n\nexport const clock = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO - Clock Event', type: 'select', options: pins, var: 'gpio1' },\n event1: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event2: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event3: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event4: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event5: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event6: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event7: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event8: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n }\n },\n}","import { pins } from './_defs';\n\nconst parity = [\n { value: 0, name: 'No Parity' }, \n { value: 1, name: 'Even' }, \n { value: 2, name: 'Odd' }, \n]\n\nexport const wifiGateway = {\n sensor: {\n name: 'Settings',\n configs: {\n port: { name: 'TCP Port', type: 'number', var: 'configs_float[0]' },\n baudrate: { name: 'Baudrate', type: 'number', var: 'configs_float[0]' },\n data_bits: { name: 'Data Bits', type: 'number', var: 'configs_float[0]' },\n parity: { name: 'Parity', type: 'select', options: parity, var: 'configs[0]' },\n stop_bits: { name: 'Stop Bits', type: 'number', var: 'configs_float[0]' },\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'configs[1]' },\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs_float[0]' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const mhz19 = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nexport const ds18b20 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const senseAir = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const sds011 = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const rotaryEncoder = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\n gpio3: { name: 'GPIO I - Z', type: 'select', options: pins, var: 'gpio3' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst sensorModel = [\n { value: 11, name: 'DHT11' }, \n { value: 22, name: 'DHT22' }, \n { value: 12, name: 'DHT12' }, \n { value: 23, name: 'Sonoff am2301' }, \n { value: 70, name: 'Sonoff si7021' },\n]\n\nexport const dht = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\n switch_type: { name: 'Sensor model', type: 'select', options: sensorModel, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n interval: { name: 'Interval', type: 'number' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const ttp229 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\n scancode: { name: 'ScanCode', type: 'checkbox', options: pins, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const bmp085 = {\n sensor: {\n name: 'Sensor',\n configs: {\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const pcf8591 = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst weigandType = [\n { value: 26, name: '26 Bits' }, \n { value: 34, name: '34 Bits' }, \n]\n\nexport const rfidWeigand = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO D0 (green, 5V)', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO D1 (white, 5V)', type: 'select', options: pins, var: 'gpio2' },\n type: { name: 'Weigand Type', type: 'select', options: weigandType, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const inputMcp = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\n }\n },\n advanced: {\n name: 'Advanced event management',\n configs: {\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { settings } from '../lib/settings';\n\nexport { pins } from '../pages/config.hardware';\n\n\nexport const getTasks = () => {\n return settings.get('tasks').filter(task => task.enabled).map(task => ({ value: task.settings.index, name: task.settings.name }));\n}\n\nexport const getTaskValues = () => {\n return [ 1, 2, 3, 4 ];\n}","import { inputSwitch } from './1_input_switch';\nimport { analogInput } from './2_analog_input';\nimport { genericPulse } from './3_generic_pulse';\nimport { ds18b20 } from './4_ds18b20';\nimport { dht } from './5_dht';\nimport { bmp085 } from './6_bmp085';\nimport { pcf8591 } from './7_pcf8591';\nimport { rfidWeigand } from './8_rfid';\nimport { inputMcp } from './9_io_mcp';\nimport { bh1750 } from './10_light_lux';\nimport { pme } from './11_pme';\nimport { lcd2004 } from './12_lcd';\nimport { hcsr04 } from './13_hcsr04';\nimport { si7021 } from './14_si7021';\nimport { tls2561 } from './15_tls2561';\nimport { pn532 } from './17_pn532';\nimport { dust } from './18_dust';\nimport { pcf8574 } from './19_pcf8574';\nimport { ser2net } from './20_ser2net';\nimport { levelControl } from './21_level_control';\nimport { pca9685 } from './22_pca9685';\nimport { oled1306 } from './23_oled1306';\nimport { mlx90614 } from './24_mlx90614';\nimport { ads1115 } from './25_ads1115';\nimport { systemInfo } from './26_system_info';\nimport { ina219 } from './27_ina219';\nimport { bmx280 } from './28_bmx280';\nimport { mqttDomoticz } from './29_mqtt_domoticz';\nimport { bmp280 } from './30_bmp280';\nimport { sht1x } from './31_sht1x';\nimport { ms5611 } from './32_ms5611';\nimport { dummyDevice } from './33_dummy_device';\nimport { dht12 } from './34_dht12';\nimport { sh1106 } from './36_sh1106';\nimport { mqttImport } from './37_mqtt_import';\nimport { neopixelBasic } from './38_neopixel_basic';\nimport { thermocouple } from './39_thermocouple';\nimport { neopixelClock } from './41_neopixel_clock';\nimport { neopixelCandle } from './42_neopixel_candle';\nimport { clock } from './43_output_clock';\nimport { wifiGateway } from './44_wifi_gateway';\nimport { mhz19 } from './49_mhz19';\nimport { senseAir } from './52_senseair';\nimport { sds011 } from './56_sds011';\nimport { rotaryEncoder } from './59_rotary_encoder';\nimport { ttp229 } from './63_ttp229';\n\nexport const devices = [\n { name: '- None -', value: 0, fields: [] },\n { name: 'Switch input - Switch', value: 1, fields: inputSwitch },\n { name: 'Analog input - internal', value: 2, fields: analogInput },\n { name: 'Generic - Pulse counter', value: 3, fields: genericPulse },\n { name: 'Environment - DS18b20', value: 4, fields: ds18b20 },\n { name: 'Environment - DHT11/12/22 SONOFF2301/7021', value: 5, fields: dht },\n { name: 'Environment - BMP085/180', value: 6, fields: bmp085 },\n { name: 'Analog input - PCF8591', value: 7, fields: pcf8591 },\n { name: 'RFID - Wiegand', value: 8, fields: rfidWeigand },\n { name: 'Switch input - MCP23017', value: 9, fields: inputMcp },\n { name: 'Light/Lux - BH1750', value: 10, fields: bh1750 },\n { name: 'Extra IO - ProMini Extender', value: 11, fields: pme },\n { name: 'Display - LCD2004', value: 12, fields: lcd2004 },\n { name: 'Position - HC-SR04, RCW-0001, etc.', value: 13, fields: hcsr04 },\n { name: 'Environment - SI7021/HTU21D', value: 14, fields: si7021 },\n { name: 'Light/Lux - TSL2561', value: 15, fields: tls2561 },\n //{ name: 'Communication - IR', value: 16, fields: bh1750 },\n { name: 'RFID - PN532', value: 17, fields: pn532 },\n { name: 'Dust - Sharp GP2Y10', value: 18, fields: dust },\n { name: 'Switch input - PCF8574', value: 19, fields: pcf8574 },\n { name: 'Communication - Serial Server', value: 20, fields: ser2net },\n { name: 'Regulator - Level Control', value: 21, fields: levelControl },\n { name: 'Extra IO - PCA9685', value: 22, fields: pca9685 },\n { name: 'Display - OLED SSD1306', value: 23, fields: oled1306 },\n { name: 'Environment - MLX90614', value: 24, fields: mlx90614 },\n { name: 'Analog input - ADS1115', value: 25, fields: ads1115 },\n { name: 'Generic - System Info', value: 26, fields: systemInfo },\n { name: 'Energy (DC) - INA219', value: 27, fields: ina219 },\n { name: 'Environment - BMx280', value: 28, fields: bmx280 },\n { name: 'Output - Domoticz MQTT Helper', value: 29, fields: mqttDomoticz },\n { name: 'Environment - BMP280', value: 30, fields: bmp280 },\n { name: 'Environment - SHT1X', value: 31, fields: sht1x },\n { name: 'Environment - MS5611 (GY-63)', value: 32, fields: ms5611 },\n { name: 'Generic - Dummy Device', value: 33, fields: dummyDevice },\n { name: 'Environment - DHT12 (I2C)', value: 34, fields: dht12 },\n { name: 'Display - OLED SSD1306/SH1106 Framed', value: 36, fields: sh1106 },\n { name: 'Generic - MQTT Import', value: 37, fields: mqttImport },\n { name: 'Output - NeoPixel (Basic)', value: 38, fields: neopixelBasic },\n { name: 'Environment - Thermocouple', value: 39, fields: thermocouple },\n { name: 'Output - NeoPixel (Word Clock)', value: 41, fields: neopixelClock },\n { name: 'Output - NeoPixel (Candle)', value: 42, fields: neopixelCandle },\n { name: 'Output - Clock', value: 43, fields: clock },\n { name: 'Communication - P1 Wifi Gateway', value: 44, fields: wifiGateway },\n { name: 'Gases - CO2 MH-Z19', value: 49, fields: mhz19 },\n { name: 'Gases - CO2 Senseair', value: 52, fields: senseAir },\n { name: 'Dust - SDS011/018/198', value: 56, fields: sds011 },\n { name: 'Switch Input - Rotary Encoder', value: 59, fields: rotaryEncoder },\n { name: 'Keypad - TTP229 Touc', value: 63, fields: ttp229 },\n];","import miniToastr from 'mini-toastr';\nimport { loader } from './loader';\n\nexport const getJsonStat = async (url = '') => {\n return await fetch(`${url}/json`).then(response => response.json())\n}\n\nexport const loadDevices = async (url) => {\n return getJsonStat(url).then(response => response.Sensors);\n}\n\nexport const getConfigNodes = async () => {\n const devices = await loadDevices();\n const vars = [];\n const nodes = devices.map(device => {\n const taskValues = device.TaskValues || [];\n taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n const result = [{\n group: 'TRIGGERS',\n type: device.TaskName || `${device.TaskNumber}-${device.Type}`,\n inputs: [],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n value: taskValues.length ? taskValues[0].Name : '',\n }, {\n name: 'euqality',\n type: 'select',\n values: ['', '=', '<', '>', '<=', '>=', '!='],\n value: '',\n }, {\n name: 'value',\n type: 'number',\n }],\n indent: true,\n toString: function () { \n const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`;\n return `when ${this.type}.${this.config[0].value} ${comparison}`; \n },\n toDsl: function () { \n const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`;\n return [`on ${this.type}#${this.config[0].value}${comparison} do\\n%%output%%\\nEndon\\n`]; \n }\n }];\n\n let fnNames, fnName, name;\n switch (device.Type) {\n // todo: need access to GPIO number\n // case 'Switch input - Switch':\n // result.push({\n // group: 'ACTIONS',\n // type: `${device.TaskName} - switch`,\n // inputs: [1],\n // outputs: [1],\n // config: [{\n // name: 'value',\n // type: 'number',\n // }],\n // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n // });\n // break;\n case 'Regulator - Level Control':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - setlevel`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'value',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n });\n break;\n case 'Extra IO - PCA9685':\n case 'Switch input - PCF8574':\n case 'Switch input - MCP23017':\n fnNames = {\n 'Extra IO - PCA9685': 'PCF',\n 'Switch input - PCF8574': 'PCF',\n 'Switch input - MCP23017': 'MCP',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Pulse`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n },{\n name: 'unit',\n type: 'select',\n values: ['ms', 's'],\n },{\n name: 'duration',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; },\n toDsl: function () { \n if (this.config[2].value === 's') {\n return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n } else {\n return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n }\n }\n });\n break;\n case 'Extra IO - ProMini Extender':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n break;\n case 'Display - OLED SSD1306':\n case 'Display - LCD2004':\n fnNames = {\n 'Display - OLED SSD1306': 'OLED',\n 'Display - LCD2004': 'LCD',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'row',\n type: 'select',\n values: [1, 2, 3, 4],\n }, {\n name: 'column',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],\n }, {\n name: 'text',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.text = ${this.config[2].value}`; },\n toDsl: function () { return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; }\n });\n break;\n case 'Generic - Dummy Device':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n }, {\n name: 'value',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; }\n });\n break;\n }\n\n return result;\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const getVariables = async () => {\n const urls = ['']; //, 'http://192.168.1.130'\n const vars = {};\n await Promise.all(urls.map(async url => {\n const stat = await getJsonStat(url);\n stat.Sensors.map(device => {\n device.TaskValues.map(value => {\n vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value;\n });\n });\n }));\n return vars;\n}\n\nexport const getDashboardConfigNodes = async (url) => {\n const devices = await loadDevices(url);\n const vars = [];\n const nodes = devices.map(device => {\n device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n return [];\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const storeFile = async (filename, data) => {\n loader.show();\n const file = data ? new File([new Blob([data])], filename) : filename;\n const formData = new FormData();\n formData.append('edit', 1);\n formData.append('file', file);\n \n return await fetch('/upload', {\n method: 'post',\n body: formData,\n }).then(() => {\n loader.hide();\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n loader.hide();\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const deleteFile = async (filename,) => { \n return await fetch('/filelist?delete='+filename).then(() => {\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const storeDashboardConfig = async (config) => {\n storeFile('d1.txt', config);\n}\n\nexport const loadDashboardConfig = async (nodes) => {\n return await fetch('/d1.txt').then(response => response.json());\n}\n\nexport const storeRuleConfig = async (config) => {\n storeFile('r1.txt', config);\n}\n\nexport const loadRuleConfig = async () => {\n return await fetch('/r1.txt').then(response => response.json());\n}\n\nexport const storeRule = async (rule) => {\n const formData = new FormData();\n formData.append('set', 1);\n formData.append('rules', rule);\n \n return await fetch('/rules', {\n method: 'post',\n body: formData,\n });\n}\n\n\nexport default {\n getJsonStat, loadDevices, getConfigNodes, getDashboardConfigNodes, getVariables, storeFile, deleteFile, storeDashboardConfig, loadDashboardConfig, storeRuleConfig, loadRuleConfig, storeRule\n}","import { getKeys } from \"./helpers\";\n\n// todo:\n// improve relability of moving elements around\n\n// global config\nconst color = '#000000';\n\nconst saveChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.inputs.length === 0);\n\n // for each initial node walk the tree and produce one 'rule'\n const result = triggers.map(trigger => {\n const walkRule = rule => {\n return {\n t: rule.type,\n v: rule.config.map(config => config.value),\n o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),\n c: [rule.position.x, rule.position.y]\n }\n }\n\n return walkRule(trigger);\n });\n\n return result;\n}\n\nconst loadChart = (config, chart, from) => {\n config.map(config => {\n let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);\n if (!node) {\n const configNode = chart.nodes.find(n => config.t == n.type);\n node = new NodeUI(chart.canvas, configNode, { x: config.c[0], y: config.c[1] });\n node.config.map((cfg, i) => {\n cfg.value = config.v[i];\n });\n node.render();\n chart.renderedNodes.push(node);\n }\n \n\n if (from) {\n const fromDimension = from.getBoundingClientRect();\n const toDimension = node.inputs[0].getBoundingClientRect();\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n chart.canvas.appendChild(lineSvg.element);\n const x1 = fromDimension.x + fromDimension.width;\n const y1 = fromDimension.y + fromDimension.height/2;\n const x2 = toDimension.x;\n const y2 = toDimension.y + toDimension.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n\n const connection = {\n output: from,\n input: node.inputs[0],\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n node.inputs[0].lines.push(connection);\n from.lines.push(connection);\n }\n\n config.o.map((output, outputI) => {\n loadChart(output, chart, node.outputs[outputI]);\n });\n })\n}\n\nconst exportChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');\n\n let result = '';\n // for each initial node walk the tree and produce one 'rule'\n triggers.map(trigger => {\n \n const walkRule = (r, i) => {\n const rules = r.toDsl ? r.toDsl() : [];\n let ruleset = '';\n let padding = r.indent ? ' ' : '';\n \n r.outputs.map((out, outI) => {\n let rule = rules[outI] || r.type;\n let subrule = '';\n if (out.lines) {\n out.lines.map(line => {\n subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);\n });\n subrule = subrule.split('\\n').map(line => (padding + line)).filter(line => line.trim() !== '').join('\\n') + '\\n';\n } \n if (rule.includes('%%output%%')) {\n rule = rule.replace('%%output%%', subrule);\n } else {\n rule += subrule;\n }\n ruleset += rule;\n });\n \n return ruleset;\n }\n\n const rule = walkRule(trigger, 0);\n result += rule + \"\\n\\n\";\n });\n\n return result;\n}\n\n// drag and drop helpers\nconst dNd = {\n enableNativeDrag: (nodeElement, data) => {\n nodeElement.draggable = true;\n nodeElement.ondragstart = ev => {\n getKeys(data).map(key => {\n ev.dataTransfer.setData(key, data[key]);\n }); \n }\n }, enableNativeDrop: (nodeElement, fn) => {\n nodeElement.ondragover = ev => {\n ev.preventDefault();\n }\n nodeElement.ondrop = fn;\n }\n}\n\n// svg helpers\nclass svgArrow {\n constructor(width, height, fill, color) {\n this.element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');\n this.element.setAttribute('width', width);\n this.element.setAttribute('height', height);\n this.element.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\n this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this.line.setAttributeNS(null, \"fill\", fill);\n this.line.setAttributeNS(null, \"stroke\", color);\n this.element.appendChild(this.line);\n }\n\n setPath(x1, y1, x2, y2, tension = 0.5) {\n const delta = (x2-x1)*tension;\n const hx1=x1+delta;\n const hy1=y1;\n const hx2=x2-delta;\n const hy2=y2;\n \n const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;\n this.line.setAttributeNS(null, \"d\", path);\n }\n}\n\n// node configuration (each node in the left menu is represented by an instance of this object)\nclass Node {\n constructor(conf) {\n this.type = conf.type;\n this.group = conf.group;\n this.config = conf.config.map(config => (Object.assign({}, config)));\n this.inputs = conf.inputs.map(input => {});\n this.outputs = conf.outputs.map(output => {});\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n}\n\n// node UI (each node in your flow diagram is represented by an instance of this object)\nclass NodeUI extends Node {\n constructor(canvas, conf, position) {\n super(conf);\n this.canvas = canvas;\n this.position = position;\n this.lines = [];\n this.linesEnd = [];\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n\n updateInputsOutputs(inputs, outputs) {\n inputs.map(input => {\n const rect = input.getBoundingClientRect();\n input.lines.map(line => {\n line.end.x = rect.x;\n line.end.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n outputs.map(output => {\n const rect = output.getBoundingClientRect();\n output.lines.map(line => {\n line.start.x = rect.x + rect.width;\n line.start.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n }\n\n handleMoveEvent(ev) {\n if (!this.canvas.canEdit) return;\n const shiftX = ev.clientX - this.element.getBoundingClientRect().left;\n const shiftY = ev.clientY - this.element.getBoundingClientRect().top;\n const onMouseMove = ev => {\n const newy = ev.y - shiftY;\n const newx = ev.x - shiftX\n this.position.y = newy - newy % this.canvas.gridSize;\n this.position.x = newx - newx % this.canvas.gridSize;\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`; \n this.updateInputsOutputs(this.inputs, this.outputs);\n }\n const onMouseUp = ev => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp); \n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n handleDblClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n if (this.config.length)\n showConfigBox(this.type, this.config, () => {\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n });\n }\n\n handleRightClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n this.inputs.map(input => {\n input.lines.map(line => {\n line.output.lines = [];\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n input.lines = [];\n });\n this.outputs.map(output => {\n output.lines.map(line => {\n const index = line.input.lines.indexOf(line);\n line.input.lines.splice(index, 1);\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n });\n this.element.parentNode.removeChild(this.element);\n if (this.destroy) this.destroy();\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n render() {\n this.element = document.createElement('div');\n this.element.nodeObject = this;\n this.element.className = `node node-chart group-${this.group}`;\n\n this.text = document.createElement('span');\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n \n this.element.appendChild(this.text);\n\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`;\n\n const inputs = document.createElement('div');\n inputs.className = 'node-inputs';\n this.element.appendChild(inputs);\n \n this.inputs.map((val, index) => {\n const input = this.inputs[index] = document.createElement('div');\n input.className = 'node-input';\n input.nodeObject = this;\n input.lines = []\n input.onmousedown = ev => {\n ev.preventDefault();\n ev.stopPropagation();\n }\n inputs.appendChild(input);\n })\n\n const outputs = document.createElement('div');\n outputs.className = 'node-outputs';\n this.element.appendChild(outputs);\n\n this.outputs.map((val, index) => {\n const output = this.outputs[index] = document.createElement('div');\n output.className = 'node-output';\n output.nodeObject = this;\n output.lines = [];\n output.oncontextmenu = ev => {\n output.lines.map(line => {\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n ev.stopPropagation();\n ev.preventDefault();\n return false;\n }\n output.onmousedown = ev => {\n ev.stopPropagation();\n if (output.lines.length) return;\n const rects = output.getBoundingClientRect();\n const x1 = rects.x + rects.width;\n const y1 = rects.y + rects.height/2;\n\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n this.canvas.appendChild(lineSvg.element);\n\n const onMouseMove = ev => {\n lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);\n }\n\n const onMouseUp = ev => {\n const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);\n const input = elemBelow ? elemBelow.closest('.node-input') : null;\n if (!input) {\n lineSvg.element.remove();\n } else {\n const inputRect = input.getBoundingClientRect();\n const x2 = inputRect.x;\n const y2 = inputRect.y + inputRect.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n const connection = {\n output,\n input,\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n output.lines.push(connection);\n input.lines.push(connection);\n }\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n outputs.appendChild(output);\n });\n\n this.element.ondblclick = this.handleDblClickEvent.bind(this);\n this.element.onmousedown = this.handleMoveEvent.bind(this);\n this.element.oncontextmenu = this.handleRightClickEvent.bind(this);\n this.canvas.appendChild(this.element);\n }\n}\n\nconst getCfgUI = cfg => {\n const template = document.createElement('template');\n\n const getSelectOptions = val => {\n const selected = val == cfg.value ? 'selected' : '';\n return ``;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `
    `;\n break;\n case 'number':\n template.innerHTML = `
    `;\n break;\n case 'select':\n template.innerHTML = `
    `;\n break;\n case 'textselect':\n template.innerHTML = `
    \n \n \n \n
    `\n }\n return template.content.cloneNode(true);\n}\n\nconst showConfigBox = (type, config, onclose) => {\n const template = document.createElement('template');\n template.innerHTML = `\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n `;\n\n document.body.appendChild(template.content.cloneNode(true));\n const configBox = document.body.querySelectorAll('.configbox')[0];\n const body = document.body.querySelectorAll('.configbox-body')[0];\n const okButton = document.getElementById('ob');\n const cancelButton = document.getElementById('cb');\n cancelButton.onclick = () => {\n configBox.remove();\n }\n okButton.onclick = () => {\n // set configuration to node\n config.map(cfg => {\n cfg.value = document.forms['configform'].elements[cfg.name].value;\n });\n configBox.remove();\n onclose();\n }\n config.map(cfg => {\n const cfgUI = getCfgUI(cfg);\n body.appendChild(cfgUI);\n })\n}\n\nexport class FlowEditor {\n constructor(element, nodes, config) {\n this.nodes = [];\n this.renderedNodes = [];\n this.onSave = config.onSave;\n this.canEdit = !config.readOnly;\n this.debug = config.debug!= null ? config.debug : true;\n this.gridSize = config.gridSize || 1;\n\n this.element = element;\n\n nodes.map(nodeConfig => {\n const node = new Node(nodeConfig);\n this.nodes.push(node);\n });\n this.render();\n\n if (this.canEdit)\n dNd.enableNativeDrop(this.canvas, ev => {\n const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));\n let node = new NodeUI(this.canvas, configNode, { x: ev.x, y: ev.y });\n node.render();\n node.destroy = () => {\n this.renderedNodes.splice( this.renderedNodes.indexOf(node), 1 );\n node = null;\n }\n this.renderedNodes.push(node); \n });\n }\n\n loadConfig(config) {\n loadChart(config, this);\n }\n\n saveConfig() {\n return saveChart(this.renderedNodes);\n }\n\n renderContainers() {\n if (this.canEdit) {\n this.sidebar = document.createElement('div');\n this.sidebar.className = 'sidebar';\n this.element.appendChild(this.sidebar);\n }\n\n this.canvas = document.createElement('div');\n this.canvas.className = 'canvas';\n this.canvas.canEdit = this.canEdit;\n this.canvas.gridSize = this.gridSize;\n this.element.appendChild(this.canvas);\n\n if (this.canEdit && this.debug) {\n this.debug = document.createElement('div');\n this.debug.className = 'debug';\n\n const text = document.createElement('div');\n this.debug.appendChild(text);\n\n const saveBtn = document.createElement('button');\n saveBtn.textContent = 'SAVE';\n saveBtn.onclick = () => {\n const config = JSON.stringify(saveChart(this.renderedNodes));\n const rules = exportChart(this.renderedNodes);\n this.onSave(config, rules);\n }\n\n const loadBtn = document.createElement('button');\n loadBtn.textContent = 'LOAD';\n loadBtn.onclick = () => {\n const input = prompt('enter config');\n loadChart(JSON.parse(input), this);\n }\n\n const exportBtn = document.createElement('button');\n exportBtn.textContent = 'EXPORT';\n exportBtn.onclick = () => {\n const exported = exportChart(this.renderedNodes);\n text.textContent = exported;\n }\n this.debug.appendChild(exportBtn);\n this.debug.appendChild(saveBtn);\n this.debug.appendChild(loadBtn);\n this.debug.appendChild(text);\n this.element.appendChild(this.debug);\n }\n \n }\n\n renderConfigNodes() {\n const groups = {};\n this.nodes.map(node => {\n if (!groups[node.group]) {\n const group = document.createElement('div');\n group.className = 'group';\n group.textContent = node.group;\n this.sidebar.appendChild(group);\n groups[node.group] = group;\n }\n const nodeElement = document.createElement('div');\n nodeElement.className = `node group-${node.group}`;\n nodeElement.textContent = node.type;\n groups[node.group].appendChild(nodeElement);\n\n dNd.enableNativeDrag(nodeElement, { type: node.type });\n })\n }\n\n render() {\n this.renderContainers();\n if (this.canEdit) this.renderConfigNodes();\n }\n}","import get from 'lodash/get';\nimport set from 'lodash/set';\n\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\n\n// const set = (obj, path, value) => {\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\n// if (!a[c]) a[c] = {};\n// if (i === src.length - 1) a[c] = value;\n// }, obj)\n// }\n\nconst getKeys = object => {\n const keys = [];\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\nexport { get, set, getKeys }","class Loader {\n constructor() {\n const loader = document.createElement('div');\n loader.className = 'loader';\n loader.innerHTML = 'loading';\n document.body.appendChild(loader);\n this.loader = loader;\n }\n\n show() {\n this.loader.classList.add('show');\n }\n\n hide() {\n this.loader.classList.add('hide');\n setTimeout(() => {\n this.loader.classList.remove('hide');\n this.loader.classList.remove('show');\n }, 1000);\n }\n}\n\nexport const loader = new Loader();","import { \n ConfigPage, \n DevicesPage, \n DevicesEditPage, \n ControllersPage, \n ControllerEditPage, \n ConfigAdvancedPage, \n ConfigHardwarePage, \n RebootPage, \n LoadPage, \n RulesPage, \n UpdatePage, \n ToolsPage, \n FSPage, \n FactoryResetPage, \n DiscoverPage, \n DiffPage, \n RulesEditorPage \n} from '../pages';\n\nimport { saveConfig } from '../conf/config.dat';\n\nclass Menus {\n constructor() {\n this.menus = [];\n this.routes = [];\n\n this.addMenu = (menu) => {\n this.menus.push(menu);\n this.addRoute(menu);\n }\n\n this.addRoute = (route) => {\n this.routes.push(route);\n if (route.children) {\n route.children.forEach(child => this.routes.push(child));\n }\n }\n }\n \n}\n\nconst menus = [\n { title: 'Devices', href: 'devices', component: DevicesPage, children: [] },\n { title: 'Controllers', href: 'controllers', component: ControllersPage, children: [] },\n { title: 'Automation', href: 'rules', component: RulesEditorPage, class: 'full', children: [] },\n { title: 'Config', href: 'config', component: ConfigPage, children: [\n { title: 'Hardware', href: 'config/hardware', component: ConfigHardwarePage },\n { title: 'Advanced', href: 'config/advanced', component: ConfigAdvancedPage },\n { title: 'Rules', href: 'config/rules', component: RulesPage },\n { title: 'Save', href: 'config/save', action: saveConfig },\n { title: 'Load', href: 'config/load', component: LoadPage },\n { title: 'Reboot', href: 'config/reboot', component: RebootPage },\n { title: 'Factory Reset', href: 'config/factory', component: FactoryResetPage },\n ] },\n { title: 'Tools', href: 'tools', component: ToolsPage, children: [\n { title: 'Discover', href: 'tools/discover', component: DiscoverPage },\n { title: 'Update', href: 'tools/update', component: UpdatePage },\n { title: 'Filesystem', href: 'tools/fs', component: FSPage },\n ] },\n];\n\nconst routes = [\n { title: 'Edit Controller', href:'controllers/edit', component: ControllerEditPage },\n { title: 'Edit Device', href:'devices/edit', component: DevicesEditPage },\n { title: 'Save to Flash', href:'tools/diff', component: DiffPage }\n];\n\nconst menu = new Menus();\nroutes.forEach(menu.addRoute);\nmenus.forEach(menu.addMenu)\n\nexport { menu };","export const nodes = [\n // TRIGGERS\n {\n group: 'TRIGGERS',\n type: 'timer',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }],\n indent: true,\n toString: function () { return `timer ${this.config[0].value}`; },\n toDsl: function () { return [`on Rules#Timer=${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'event',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text',\n }],\n indent: true,\n toString: function () { return `event ${this.config[0].value}`; },\n toDsl: function () { return [`on ${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'clock',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: () => { return 'clock'; },\n toDsl: () => { return ['on Clock#Time do\\n%%output%%\\nEndon\\n']; }\n }, {\n group: 'TRIGGERS',\n type: 'system boot',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On System#Boot do\\n%%output%%\\nEndon\\n`];\n }\n }, {\n group: 'TRIGGERS',\n type: 'Device',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On Device#Value do\\n%%output%%\\nEndon\\n`];\n }\n }, \n // LOGIC\n {\n group: 'LOGIC',\n type: 'if/else',\n inputs: [1],\n outputs: [1, 2],\n config: [{\n name: 'variable',\n type: 'textselect',\n values: ['Clock#Time'],\n },{\n name: 'equality',\n type: 'select',\n values: ['=', '<', '>', '<=', '>=', '!=']\n },{\n name: 'value',\n type: 'text',\n }],\n indent: true,\n toString: function() {\n return `IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`;\n },\n toDsl: function() {\n return [`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\\n%%output%%`, `Else\\n%%output%%\\nEndif`];\n }\n }, {\n group: 'LOGIC',\n type: 'delay',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'delay',\n type: 'number',\n }],\n toString: function() {\n return `delay: ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`Delay ${this.config[0].value}\\n`];\n }\n },\n // ACTIONS\n {\n group: 'ACTIONS',\n type: 'GPIO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function() {\n return `GPIO ${this.config[0].value}, ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`GPIO,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'Pulse',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n value: 0\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n value: 1\n }, {\n name: 'unit',\n type: 'select',\n values: ['s', 'ms'],\n value: 'ms',\n }, {\n name: 'duration',\n type: 'number',\n value: 1000\n }],\n toString: function() {\n return `Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`;\n },\n toDsl: function() {\n const fn = this.config[2].value === 's' ? 'LongPulse' : 'Pulse';\n return [`${fn},${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'PWM',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'value',\n type: 'number',\n value: 1023,\n }],\n toString: function() {\n return `PWM.GPIO${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`PWM,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'SERVO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'servo',\n type: 'select',\n values: [1, 2],\n value: 0\n }, {\n name: 'position',\n type: 'number',\n value: 90,\n }],\n toString: function() {\n return `SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'fire event',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text'\n }],\n toString: function() {\n return `event ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`event,${this.config[0].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'settimer',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }, {\n name: 'value',\n type: 'number'\n }],\n toString: function() {\n return `timer${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`timerSet,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'MQTT',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'topic',\n type: 'text',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`Publish ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'UDP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'ip',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `UDP ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'HTTP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'host',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n value: 80\n }, {\n name: 'url',\n type: 'text',\n }],\n toString: function() {\n return `HTTP ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'ESPEASY',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'device',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendTo ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }\n]","import { get, set } from './helpers';\n\nclass DataParser {\n constructor(data) {\n this.view = new DataView(data);\n this.offset = 0;\n this.bitbyte = 0;\n this.bitbytepos = 7;\n }\n\n pad(nr) {\n while (this.offset % nr) {\n this.offset++;\n }\n }\n\n bit(signed = false, write = false, val) {\n if (this.bitbytepos === 7) {\n if (!write) {\n this.bitbyte = this.byte();\n this.bitbytepos = 0;\n } else {\n this.byte(signed, write, this.bitbyte);\n }\n }\n if (!write) {\n return (this.bitbyte >> this.bitbytepos++) & 1;\n } else {\n this.bitbyte = val ? (this.bitbyte | (1 << this.bitbytepos++)) : (this.bitbyte & ~(1 << this.bitbytepos++));\n }\n }\n\n byte(signed = false, write = false, val) {\n this.pad(1);\n const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`;\n const res = this.view[fn](this.offset, val);\n this.offset += 1;\n return res;\n }\n\n int16(signed = false, write = false, val) {\n this.pad(2);\n let fn = signed ? 'Int16' : 'Uint16';\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\n this.offset += 2;\n return res;\n }\n\n int32(signed = false, write = false, val) {\n this.pad(4);\n let fn = signed ? 'Int32' : 'Uint32';\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\n this.offset += 4;\n return res;\n }\n float(signed = false, write = false, val) {\n this.pad(4);\n const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true);\n this.offset += 4;\n return res;\n }\n bytes(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.byte(signed, write, vals ? vals[x] : null));\n }\n return res;\n }\n ints(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.int16(signed, write, vals ? vals[x] : null));\n }\n return res;\n }\n longs(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.int32(signed, write, vals ? vals[x] : null));\n }\n return res;\n }\n floats(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.float(write, vals ? vals[x] : null));\n }\n return res;\n }\n string(nr, signed = false, write = false, val) {\n if (write) {\n for (var i = 0; i < nr; ++i) {\n var code = val.charCodeAt(i) || '\\0';\n this.byte(false, true, code);\n }\n } else {\n const res = this.bytes(nr);\n return String.fromCharCode.apply(null, res).replace(/\\x00/g, '');\n }\n }\n}\n\nexport const parseConfig = (data, config, start) => {\n const p = new DataParser(data);\n if (start) p.offset = start;\n const result = {};\n config.map(value => {\n const prop = value.length ? value.length : value.signed;\n set(result, value.prop, p[value.type](prop, value.signed));\n });\n return result;\n}\n\nexport const writeConfig = (buffer, data, config, start) => {\n const p = new DataParser(buffer);\n if (start) p.offset = start;\n config.map(value => {\n const val = get(data, value.prop);\n if (value.length) {\n p[value.type](value.length, value.signed, true, val);\n } else {\n p[value.type](value.signed, true, val);\n }\n });\n}","import { settings } from './settings';\nimport espeasy from './espeasy';\nimport { loader } from './loader';\nimport { menu } from './menu';\n\nconst PLUGINS = [\n 'http://localhost:8080/build/dash.js', 'flow.js',\n];\n\nconst dynamicallyLoadScript = (url) => {\n return new Promise(resolve => {\n var script = document.createElement(\"script\"); // create a script DOM node\n script.src = url; // set its src to the provided URL\n script.onreadystatechange = resolve;\n script.onload = resolve;\n script.onerror = resolve;\n document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)\n });\n}\n\nconst getPluginAPI = () => {\n return {\n settings,\n loader,\n menu,\n espeasy,\n }\n}\n\nwindow.getPluginAPI = getPluginAPI;\n\nexport const loadPlugins = async () => {\n return Promise.all(PLUGINS.map(async plugin => {\n return dynamicallyLoadScript(plugin);\n }));\n}","import { get, set, getKeys } from './helpers';\n\nconst diff = (obj1, obj2, path = '') => {\n return getKeys(obj1).map(key => {\n const val1 = obj1[key];\n const val2 = obj2[key];\n if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);\n else if (val1 !== val2) {\n return [{ path: `${path}.${key}`, val1, val2 }];\n } else return [];\n }).flat();\n}\n\nclass Settings {\n init(settings) {\n this.settings = settings;\n this.apply();\n }\n\n get(prop) {\n return get(this.settings, prop);\n }\n\n /**\n * sets changes to the current version and sets changed flag\n * @param {*} prop \n * @param {*} value \n */\n set(prop, value) {\n const obj = get(this.settings, prop);\n if (typeof obj === 'object') {\n console.warn('settings an object!');\n set(this.settings, prop, value);\n } else {\n set(this.settings, prop, value);\n }\n \n if (this.diff().length) this.changed = true;\n }\n\n /**\n * returns diff between applied and current version\n */\n diff() {\n return diff(this.stored, this.settings);\n }\n\n /***\n * applys changes and creates new version in localStorage\n */\n apply() {\n this.stored = JSON.parse(JSON.stringify(this.settings));\n this.changed = false;\n }\n}\n\nexport const settings = window.settings1 = new Settings();","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nconst logLevelOptions = [\n { name: 'None', value: 0 },\n { name: 'Error', value: 1 },\n { name: 'Info', value: 2 },\n { name: 'Debug', value: 3 },\n { name: 'Debug More', value: 4 },\n { name: 'Debug Dev', value: 9 },\n];\n\nconst formConfig = {\n onSave: (vals) => { console.log(vals); },\n groups: {\n rules: {\n name: 'Rules Settings',\n configs: {\n enabled: { name: 'Enabled', type: 'checkbox' },\n oldengine: { name: 'Old Engine', type: 'checkbox' },\n }\n },\n mqtt: {\n name: 'Controller Settings',\n configs: {\n retain_flag: { name: 'MQTT Retain Msg', type: 'checkbox' },\n interval: { name: 'Message Interval', type: 'number' },\n useunitname: { name: 'MQTT use unit name as ClientId', type: 'checkbox' },\n changeclientid: { name: 'MQTT change ClientId at reconnect', type: 'checkbox' },\n }\n },\n ntp: {\n name: 'NTP Settings',\n configs: {\n enabled: { name: 'Use NTP', type: 'checkbox' },\n host: { name: 'NTP Hostname', type: 'string' },\n }\n },\n dst: {\n name: 'DST Settings',\n configs: {\n enabled: { name: 'Use DST', type: 'checkbox' },\n }\n },\n location: {\n name: 'Location Settings',\n configs: {\n long: { name: 'Longitude', type: 'number' },\n lat: { name: 'Latitude', type: 'number' },\n }\n },\n log: {\n name: 'Log Settings',\n configs: {\n syslog_ip: { name: 'Syslog IP', type: 'ip' },\n syslog_level: { name: 'Syslog Level', type: 'select', options: logLevelOptions },\n syslog_facility: { name: 'Syslog Level', type: 'select', options: [\n { name: 'Kernel', value: 0 },\n { name: 'User', value: 1 },\n { name: 'Daemon', value: 3 },\n { name: 'Message', value: 5 },\n { name: 'Local0', value: 16 },\n { name: 'Local1', value: 17 },\n { name: 'Local2', value: 18 },\n { name: 'Local3', value: 19 },\n { name: 'Local4', value: 20 },\n { name: 'Local5', value: 21 },\n { name: 'Local6', value: 22 },\n { name: 'Local7', value: 23 },\n ] },\n serial_level: { name: 'Serial Level', type: 'select', options: logLevelOptions },\n web_level: { name: 'Web Level', type: 'select', options: logLevelOptions },\n }\n },\n serial: {\n name: 'Serial Settings',\n configs: {\n enabled: { name: 'Enable Serial', type: 'checkbox' },\n baudrate: { name: 'Baud Rate', type: 'number' },\n }\n },\n espnetwork: {\n name: 'Inter-ESPEasy Network',\n configs: {\n enabled: { name: 'Enable', type: 'checkbox' },\n port: { name: 'Port', type: 'number' },\n }\n },\n experimental: {\n name: 'Experimental Settings',\n configs: {\n ip_octet: { name: 'Fixed IP Octet', type: 'number' },\n WDI2CAddress: { name: 'WD I2C Address', type: 'number' },\n ssdp: { name: 'Use SSDP', type: 'checkbox', var: 'ssdp.enabled' },\n ConnectionFailuresThreshold: { name: 'Connection Failiure Treshold', type: 'number' },\n WireClockStretchLimit: { name: 'I2C ClockStretchLimit', type: 'number' },\n }\n }\n },\n}\n\nexport class ConfigAdvancedPage extends Component {\n render(props) {\n formConfig.onSave = (values) => {\n settings.set('config', values);\n window.location.href='#devices';\n }\n return (\n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nexport const pins = [\n { name: 'None', value: 255 },\n { name: 'GPIO-0', value: 0 },\n { name: 'GPIO-1', value: 1 },\n { name: 'GPIO-2', value: 2 },\n { name: 'GPIO-3', value: 3 },\n { name: 'GPIO-4', value: 4 },\n { name: 'GPIO-5', value: 5 },\n { name: 'GPIO-9', value: 9 },\n { name: 'GPIO-10', value: 10 },\n { name: 'GPIO-12', value: 12 },\n { name: 'GPIO-13', value: 13 },\n { name: 'GPIO-14', value: 14 },\n { name: 'GPIO-15', value: 15 },\n { name: 'GPIO-16', value: 16 }\n];\n\nconst pinState = [\n { name: 'Default', value: 0 },\n { name: 'Low', value: 1 },\n { name: 'High', value: 2 },\n { name: 'Input', value: 3 },\n];\n\nconst formConfig = {\n groups: {\n led: {\n name: 'WiFi Status LED',\n configs: {\n gpio: { name: 'GPIO --> LED', type: 'select', options: pins },\n inverse: { name: 'Inversed LED', type: 'checkbox' },\n }\n },\n reset: {\n name: 'Reset Pin',\n configs: {\n pin: { name: 'GPIO <-- Switch', type: 'select', options: pins },\n }\n },\n i2c: {\n name: 'I2C Settings',\n configs: {\n sda: { name: 'GPIO - SDA', type: 'select', options: pins },\n scl: { name: 'GPIO - SCL', type: 'select', options: pins },\n }\n },\n spi: {\n name: 'SPI Settings',\n configs: {\n enabled: { name: 'Init SPI', type: 'checkbox' },\n }\n },\n gpio: {\n name: 'GPIO boot states',\n configs: {\n 0: { name: 'Pin Mode GPIO-0', type: 'select', options: pinState },\n 1: { name: 'Pin Mode GPIO-1', type: 'select', options: pinState },\n 2: { name: 'Pin Mode GPIO-2', type: 'select', options: pinState },\n 3: { name: 'Pin Mode GPIO-3', type: 'select', options: pinState },\n 4: { name: 'Pin Mode GPIO-4', type: 'select', options: pinState },\n 5: { name: 'Pin Mode GPIO-5', type: 'select', options: pinState },\n 9: { name: 'Pin Mode GPIO-9', type: 'select', options: pinState },\n 10: { name: 'Pin Mode GPIO-10', type: 'select', options: pinState },\n 12: { name: 'Pin Mode GPIO-12', type: 'select', options: pinState },\n 13: { name: 'Pin Mode GPIO-13', type: 'select', options: pinState },\n 14: { name: 'Pin Mode GPIO-14', type: 'select', options: pinState },\n 15: { name: 'Pin Mode GPIO-15', type: 'select', options: pinState },\n }\n }\n },\n}\n\nexport class ConfigHardwarePage extends Component {\n render(props) {\n const config = settings.get('hardware');\n formConfig.onSave = (values) => {\n settings.set('hardware', values);\n window.location.href='#devices';\n }\n\n return (\n \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nconst ipBlockLevel = [\n { name: 'Allow All', value: 0 },\n { name: 'Allow Local Subnet', value: 1 },\n { name: 'Allow IP Range', value: 2 },\n]\n\nconst formConfig = {\n groups: {\n general: {\n name: 'General',\n configs: {\n unitname: { name: 'Unit Name', type: 'string' },\n unitnr: { name: 'Unit Number', type: 'number' },\n appendunit: { name: 'Append Unit Name to Hostname', type: 'checkbox' },\n password: { name: 'Admin Password', type: 'password', var: 'security[0].password' },\n }\n },\n wifi: {\n name: 'WiFi',\n configs: {\n ssid: { name: 'SSID', type: 'string', var: 'security[0].WifiSSID' },\n passwd: { name: 'Password', type: 'password', var: 'security[0].WifiKey' },\n fallbackssid: { name: 'Fallback SSID', type: 'string', var: 'security[0].WifiSSID2' },\n fallbackpasswd: { name: 'Fallback Password', type: 'password', var: 'security[0].WifiKey2' },\n wpaapmode: { name: 'WPA AP Mode Key:', type: 'string', var: 'security[0].WifiAPKey' },\n }\n },\n clientIP: {\n name: 'Client IP Filtering',\n configs: {\n blocklevel: { name: 'IP Block Level', type: 'select', options: ipBlockLevel, var: 'security[0].IPblockLevel' },\n lowerrange: { name: 'Access IP lower range', type: 'ip', var: 'security[0].AllowedIPrangeLow' },\n upperrange: { name: 'Access IP upper range', type: 'ip', var: 'security[0].AllowedIPrangeHigh' },\n }\n },\n IP: {\n name: 'IP Settings',\n configs: {\n ip: { name: 'IP', type: 'ip' },\n gw: { name: 'Gateway', type: 'ip' },\n subnet: { name: 'Subnet', type: 'ip' },\n dns: { name: 'DNS', type: 'ip' },\n }\n },\n sleep: {\n name: 'Sleep Mode',\n configs: {\n awaketime: { name: 'Sleep awake time', type: 'number' },\n sleeptime: { name: 'Sleep time', type: 'number' },\n sleeponfailiure: { name: 'Sleep on connection failure', type: 'checkbox' },\n }\n }\n },\n}\n\nexport class ConfigPage extends Component {\n render(props) {\n formConfig.onSave = (values) => {\n settings.set(`config`, values);\n window.location.href='#devices';\n }\n const config = settings.get('config');\n return (\n \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nexport const protocols = [\n { name: '- Standalone -', value: 0 },\n { name: 'Domoticz HTTP', value: 1 },\n { name: 'Domoticz MQTT', value: 2 },\n { name: 'Nodo Telnet', value: 3 },\n { name: 'ThingSpeak', value: 4 },\n { name: 'OpenHAB MQTT', value: 5 },\n { name: 'PiDome MQTT', value: 6 },\n { name: 'Emoncms', value: 7 },\n { name: 'Generic HTTP', value: 8 },\n { name: 'FHEM HTTP', value: 9 },\n { name: 'Generic UDP', value: 10 },\n { name: 'ESPEasy P2P Networking', value: 13 },\n { name: 'Email', value: 25 },\n];\n\nconst baseFields = { \n \n dns: { name: 'Locate Controller', type: 'select', options: [{ value: 0, name: 'Use IP Address'}, { value: 1, name: 'Use Hostname' }] },\n IP: { name: 'IP', type: 'ip' },\n hostname: { name: 'Hostname', type: 'string' },\n port: { name: 'Port', type: 'number' },\n minimal_time_between: { name: 'Minimum Send Interval', type: 'number' },\n max_queue_depth: { name: 'Max Queue Depth', type: 'number' },\n max_retry: { name: 'Max Retries', type: 'number' },\n delete_oldest: { name: 'Full Queue Action', type: 'select', options: [{ value: 0, name: 'Ignore New'}, { value: 1, name: 'Delete Oldest' }] },\n must_check_reply: { name: 'Check Reply', type: 'select', options: [{ value: 0, name: 'Ignore Acknowledgement'}, { value: 1, name: 'Check Acknowledgement' }] },\n client_timeout: { name: 'Client Timeout', type: 'number' },\n};\n\nconst user = { name: 'Controller User', type: 'string' };\nconst password = { name: 'Controller Password', type: 'password' };\nconst subscribe = { name: 'Controller Subscribe', type: 'string' };\nconst publish = { name: 'Controller Publish', type: 'string' };\nconst lwtTopicField = { MQTT_lwt_topic: { name: 'Controller LWT topic:', type: 'string' }, lwt_message_connect: { name: 'LWT Connect Message', type: 'string' }, lwt_message_disconnect: { name: 'LWT Disconnect Message', type: 'string' }, };\n\nconst getFormConfig = (type) => {\n let additionalFields = {};\n switch (Number(type)) {\n case 2: // Domoticz MQTT\n case 5: // OpenHAB MQTT\n additionalFields = { ...baseFields, user, password, subscribe, publish, ...lwtTopicField };\n break;\n case 6: // 'PiDome MQTT'\n additionalFields = { ...baseFields, subscribe, publish, ...lwtTopicField };\n break;\n case 3: //'Nodo Telnet'\n case 7: //'Emoncms':\n additionalFields = { ...baseFields, password };\n break;\n case 8: // 'Generic HTTP'\n additionalFields = { ...baseFields, user, password, subscribe, publish };\n break;\n case 1: // Domoticz HTTP\n case 9: // 'FHEM HTTP'\n additionalFields = { ...baseFields, user, password };\n break;\n case 10: //'Generic UDP': \n additionalFields = { ...baseFields, subscribe, publish };\n break;\n case 0:\n case 13: //'ESPEasy P2P Networking':\n break;\n default:\n additionalFields = { ...baseFields };\n }\n \n return {\n groups: {\n settings: {\n name: 'Controller Settings',\n configs: {\n protocol: { name: 'Protocol', type: 'select', var: 'protocol', options: protocols },\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\n ...additionalFields\n }\n },\n },\n }\n}\n\n// todo: changing protocol needs to update:\n// -- back to default (correct default)\n// -- field list \nexport class ControllerEditPage extends Component {\n constructor(props) {\n super(props);\n\n this.config = settings.get(`controllers[${props.params[0]}]`);\n this.state = {\n protocol: this.config.protocol,\n }\n }\n\n render(props) {\n const formConfig = getFormConfig(this.state.protocol);\n formConfig.groups.settings.configs.protocol.onChange = (e) => {\n this.setState({ protocol: e.currentTarget.value });\n };\n formConfig.onSave = (values) => {\n settings.set(`controllers[${props.params[0]}]`, values);\n window.location.href='#controllers';\n }\n \n return (\n \n );\n }\n}\n","import { h, Component } from 'preact';\nimport { settings } from '../lib/settings';\nimport { protocols } from './controllers.edit';\n\nexport class ControllersPage extends Component {\n render(props) {\n const controllers = settings.get('controllers');\n const notifications = settings.get('notifications');\n return (\n

    Controllers

    \n
    {controllers.map((c, i) => {\n const editUrl = `#controllers/edit/${i}`;\n return (\n
    \n \n {i+1}: {(c.enabled) ? () : ()}\n   [{protocols.find(p => p.value === c.protocol).name}] PORT:{c.settings.port} HOST:{c.settings.host}\n edit\n \n
    \n )\n })}
    \n

    Notifications

    \n
    {notifications.map((n, i) => {\n const editUrl = `#notifications/edit/${i}`;\n return (\n
    \n \n {i+1}: {(n.enabled) ? () : ()}\n   [{n.type}] PORT:{n.settings.port} HOST:{n.settings.host}\n edit\n \n
    \n )\n })}
    \n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\nimport { devices } from '../devices';\n\nconst baseFields = { \n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\n name: { name: 'Name', type: 'string' },\n};\n\nconst getFormConfig = (type) => {\n const device = devices.find(d => d.value === parseInt(type));\n if (!device) return null;\n \n return {\n groups: {\n settings: {\n name: 'Device Settings',\n configs: {\n device: { name: 'Device', type: 'select', var: 'device', options: devices },\n ...baseFields,\n \n }\n },\n ...device.fields,\n values: {\n name: 'Values',\n configs: {\n ...[...new Array(4)].reduce((acc, x, i) => {\n acc[`value${i}`] = [{ name: 'Name', var: `settings.values[${i}].name`, type: 'string' }, { name: 'Formula', var: `settings.values[${i}].formula`, type: 'string' }];\n return acc;\n }, {})\n }\n }\n },\n }\n}\n\n// todo: changing protocol needs to update:\n// -- back to default (correct default)\n// -- field list \nexport class DevicesEditPage extends Component {\n constructor(props) {\n super(props);\n\n this.config = settings.get(`tasks[${props.params[0]}]`);\n this.state = {\n device: this.config.device,\n }\n }\n\n render(props) {\n const formConfig = getFormConfig(this.state.device);\n if (!formConfig) {\n alert('something went wrong, cant edit device');\n window.location.href='#devices';\n }\n formConfig.groups.settings.configs.device.onChange = (e) => {\n this.setState({ device: e.currentTarget.value });\n };\n formConfig.onSave = (values) => {\n settings.set(`tasks[${props.params[0]}]`, values);\n window.location.href='#devices';\n }\n return (\n \n );\n }\n}\n","import { h, Component } from 'preact';\nimport { settings } from '../lib/settings';\nimport { devices } from '../devices';\n\nexport class DevicesPage extends Component {\n constructor(props) {\n super(props);\n\n this.handleEnableToggle = (e) => {\n settings.set(e.currentTarget.dataset.prop, e.currentTarget.checked ? 1 : 0);\n }\n }\n render(props) {\n const tasks = settings.get('tasks');\n if (!tasks) return;\n return (\n
    \n {tasks.map((task, i) => {\n const editUrl = `#devices/edit/${i}`;\n const device = devices.find(d => d.value === task.device);\n const deviceType = device ? device.name : '--unknown--';\n const enabledProp = `tasks[${i}].enabled`;\n return (\n
    \n \n {i+1}: \n   {task.settings.name} [{deviceType}] {task.gpio1!==255?`GPIO:${task.gpio1}`:''}\n edit\n \n \n {/* {device.settings.values.map(v => {\n return ({v.name}: {v.value});\n })} */}\n \n
    \n )\n })}\n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { settings } from '../lib/settings';\nimport { saveConfig } from '../conf/config.dat';\nimport { storeFile } from '../lib/espeasy';\n\n\nexport class DiffPage extends Component {\n constructor(props) {\n super(props);\n\n this.diff = settings.diff();\n this.stage = 0;\n\n this.applyChanges = () => {\n if (this.stage === 0) {\n this.diff.map(d => {\n const input = this.form.elements[d.path];\n if (!input.checked) {\n settings.set(input.name, d.val1);\n }\n });\n settings.apply();\n this.diff = settings.diff();\n this.data = saveConfig(false);\n \n this.bytediff = Array.from(new Uint8Array(this.data));\n this.bytediff = this.bytediff.map((byte, i) => {\n if (byte !== settings.binary[i]) {\n return `${byte.toString(16)}`;\n } else return `${byte.toString(16)}`;\n });\n this.bytediff = this.bytediff.join(' ');\n this.stage = 1;\n return;\n }\n \n storeFile('config.dat', this.data).then(() => {\n this.stage = 0;\n window.location.href='#devices';\n });\n \n };\n }\n \n\n render(props) {\n if (this.bytediff) {\n return (
    )\n }\n return (\n this.form = ref}>\n {this.diff.map(change => {\n return (\n
    \n {change.path}: before: {JSON.stringify(change.val1)} now:{JSON.stringify(change.val2)} \n
    \n )\n })}\n \n
    \n );\n }\n}","import { h, Component } from 'preact';\n\nconst devices = [\n { nr: 1, name: 'Senzor', type: 'DH11', vars: [{ name: 'Temperature', formula: '', value: 21 }, { name: 'Humidity', formula: '', value: 65 }] },\n { nr: 1, name: 'Humidity', type: 'Linear Regulator', vars: [{ name: 'Output', formula: '', value: 1 }] }\n]\n\nexport class DiscoverPage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n devices: []\n }\n\n this.scani2c = () => {\n fetch('/i2cscanner').then(r => r.json()).then(r => {\n this.setState({ devices: r });\n });\n }\n\n this.scanwifi = () => {\n fetch('/wifiscanner').then(r => r.json()).then(r => {\n this.setState({ devices: r });\n });\n }\n }\n\n render(props) {\n return (\n
    \n
    \n \n \n
    \n {this.state.devices.map(device => {\n return (\n \n \n \n )\n })}
    \n {JSON.stringify(device)}\n
    \n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\n\nconst formConfig = {\n onSave: (vals) => { console.log(vals); },\n groups: {\n keep: {\n name: 'Settings to keep',\n configs: {\n unit: { name: 'Keep Unit/Name', type: 'checkbox' },\n wifi: { name: 'Keep WiFi config', type: 'checkbox' },\n network: { name: 'Keep network config', type: 'checkbox' },\n ntp: { name: 'Keep NTP/DST config', type: 'checkbox' },\n log: { name: 'Keep log config', type: 'checkbox' },\n }\n },\n load: {\n name: 'Pre-defined configurations',\n configs: {\n config: { name: 'Pre-Defined config', type: 'select', options: [\n { name: 'default', value: 0 },\n { name: 'Sonoff Basic', value: 1 },\n { name: 'Sonoff TH1x', value: 2 },\n { name: 'Sonoff S2x', value: 3 },\n { name: 'Sonoff TouchT1', value: 4 },\n { name: 'Sonoff TouchT2', value: 5 },\n { name: 'Sonoff TouchT3', value: 6 },\n { name: 'Sonoff 4ch', value: 7 },\n { name: 'Sonoff POW', value: 8 },\n { name: 'Sonoff POW-r2', value: 9 },\n { name: 'Shelly1', value: 10 },\n ] },\n }\n },\n },\n}\n\nconst config = {}\n\nexport class FactoryResetPage extends Component {\n render(props) {\n formConfig.onSave = (config) => {\n const data = new FormData();\n if (config.keep.unit) data.append('kun', 'on');\n if (config.keep.wifi) data.append('kw', 'on');\n if (config.keep.network) data.append('knet', 'on');\n if (config.keep.ntp) data.append('kntp', 'on');\n if (config.keep.log) data.append('klog', 'on');\n data.append('fdm', config.load.config);\n data.append('savepref', 'Save Preferences');\n fetch('/factoryreset', {\n method: 'POST',\n body: data \n }).then(() => {\n data.delete('savepref');\n data.append('performfactoryreset', 'Factory Reset');\n fetch('/factoryreset', {\n method: 'POST',\n body: data\n }).then(() => {\n setTimeout(() => {\n window.location.href=\"#devices\";\n }, 5000);\n }, e => {\n\n })\n }, e => {\n\n });\n };\n return (\n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { deleteFile, storeFile } from '../lib/espeasy';\n\nexport class FSPage extends Component {\n constructor(props) {\n super(props);\n this.state = { files: [] }\n\n this.saveForm = () => {\n storeFile(this.file.files[0]);\n }\n\n this.deleteFile = e => {\n const fileName = e.currentTarget.data.name;\n deleteFile(fileName).then(() => (this.fetch()));\n }\n }\n\n fetch() {\n fetch('/filelist').then(response => response.json()).then(fileList => {\n this.setState({ files: fileList });\n });\n }\n\n render(props) {\n return (\n
    \n \n
    \n \n this.file = ref} />\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n {this.state.files.map(file => {\n const url = `/${file.fileName}`;\n return (\n \n \n \n \n \n ); })}\n\n \n
    FileSize
    {file.fileName}{file.size}\n \n
    \n
    \n );\n }\n\n componentDidMount() {\n this.fetch();\n }\n}","export * from './controllers';\nexport * from './devices';\nexport * from './config';\nexport * from './config.advanced';\nexport * from './config.hardware';\nexport * from './reboot';\nexport * from './load';\nexport * from './update';\nexport * from './rules';\nexport * from './tools';\nexport * from './fs';\nexport * from './factory_reset';\nexport * from './discover';\nexport * from './controllers.edit';\nexport * from './devices.edit';\nexport * from './diff';\nexport * from './rules.editor';","import { h, Component } from 'preact';\nimport { storeFile } from '../lib/espeasy';\n\nexport class LoadPage extends Component {\n constructor(props) {\n super(props);\n\n this.saveForm = () => {\n storeFile(this.file.files[0]);\n }\n }\n\n render(props) {\n return (
    \n
    \n \n this.file = ref} />\n \n
    \n
    )\n }\n}","import { h, Component } from 'preact';\n\n\nexport class RebootPage extends Component {\n render(props) {\n return (\n
    ESPEasy is rebooting ... please wait a while, this page will auto refresh.
    \n );\n }\n\n componentDidMount() {\n fetch('/reboot').then(() => {\n setTimeout(() => {\n window.location.hash = '#devices';\n }, 5000)\n })\n }\n}","import { h, Component } from 'preact';\nimport { FlowEditor } from '../lib/floweditor';\nimport { nodes } from '../lib/node_definitions';\nimport { getConfigNodes, loadRuleConfig, storeRuleConfig, storeRule } from '../lib/espeasy';\n\nexport class RulesEditorPage extends Component {\n constructor(props) {\n super(props);\n this.nodes = nodes;\n }\n\n render(props) {\n return (\n
    this.element = ref}>\n
    \n );\n }\n\n componentDidMount() {\n getConfigNodes().then((out) => {\n out.nodes.forEach(device => nodes.unshift(device));\n const ifElseNode = nodes.find(node => node.type === 'if/else');\n if (!ifElseNode.config[0].loaded) {\n out.vars.forEach(v => ifElseNode.config[0].values.push(v)); \n ifElseNode.config[0].loaded = true;\n }\n\n this.chart = new FlowEditor(this.element, nodes, { \n onSave: (config, rules) => {\n storeRuleConfig(config);\n storeRule(rules);\n }\n });\n \n loadRuleConfig().then(config => {\n this.chart.loadConfig(config);\n });\n });\n }\n}","import { h, Component } from 'preact';\n\n\nconst rules = [\n { name: 'Rule 1', file: 'rules1.txt', index: 1 },\n { name: 'Rule 2', file: 'rules2.txt', index: 2 },\n { name: 'Rule 3', file: 'rules3.txt', index: 3 },\n { name: 'Rule 4', file: 'rules4.txt', index: 4 },\n];\n\nexport class RulesPage extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selected: rules[0]\n }\n\n this.selectionChanged = (e) => {\n this.setState({ selected: rules[e.currentTarget.value] });\n }\n\n this.saveRule = () => {\n const data = new FormData();\n data.append('set', this.state.selected.index);\n data.append('rules', this.text.value);\n fetch('/rules', {\n method: 'POST',\n body: data \n }).then(res => {\n console.log('succesfully saved');\n console.log(res.text());\n });\n }\n\n this.fetch();\n }\n\n render(props) {\n return (\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n );\n }\n\n async fetch() {\n const text = await fetch(this.state.selected.file).then(response => response.text());\n this.text.value = text;\n }\n\n async componentDidUpdate() {\n this.fetch();\n }\n}","import { h, Component } from 'preact';\n\nexport class ToolsPage extends Component {\n constructor(props) {\n super(props);\n\n this.history = '';\n\n this.sendCommand = (e) => {\n fetch(`/control?cmd=${this.cmd.value}`).then(response => response.text()).then(response => {\n this.cmdOutput.value = response;\n });\n }\n }\n\n fetch() {\n fetch('/logjson').then(response => response.json()).then(response => {\n response.Log.Entries.map(log => {\n this.history += `
    ${(new Date(log.timestamp).toLocaleTimeString())}${log.text}
    `;\n this.log.innerHTML = this.history;\n if (true) {\n this.log.scrollTop = this.log.scrollHeight;\n }\n })\n });\n }\n\n render(props) {\n return (\n
    \n
    this.log = ref}>loading logs ...
    \n
    Command: this.cmd = ref}/>
    \n \n
    \n );\n }\n\n componentDidMount() {\n this.interval = setInterval(() => {\n this.fetch();\n }, 1000);\n }\n\n componentWillUnmount() {\n if (this.interval) clearInterval(this.interval);\n }\n}","import { h, Component } from 'preact';\n\nexport class UpdatePage extends Component {\n constructor(props) {\n super(props);\n\n this.saveForm = () => {\n const data = new FormData()\n data.append('file', this.file.files[0])\n data.append('user', 'hubot')\n \n fetch('/update', {\n method: 'POST',\n body: data\n }).then(() => {\n \n });\n }\n }\n\n render(props) {\n return (\n
    \n
    \n \n this.file = ref} />\n \n
    \n
    \n )\n }\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/build/dash.js b/build/dash.js new file mode 100644 index 0000000..7bd3d94 --- /dev/null +++ b/build/dash.js @@ -0,0 +1,4033 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/plugins/dashboard/index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./node_modules/lodash/_Hash.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_Hash.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var hashClear = __webpack_require__(/*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"), + hashDelete = __webpack_require__(/*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"), + hashGet = __webpack_require__(/*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"), + hashHas = __webpack_require__(/*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"), + hashSet = __webpack_require__(/*! ./_hashSet */ "./node_modules/lodash/_hashSet.js"); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; + + +/***/ }), + +/***/ "./node_modules/lodash/_ListCache.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_ListCache.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"), + listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"), + listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"), + listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"), + listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js"); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; + + +/***/ }), + +/***/ "./node_modules/lodash/_Map.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/_Map.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), + root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; + + +/***/ }), + +/***/ "./node_modules/lodash/_MapCache.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_MapCache.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"), + mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"), + mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"), + mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"), + mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js"); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; + + +/***/ }), + +/***/ "./node_modules/lodash/_Symbol.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/_Symbol.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayMap.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_arrayMap.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; + + +/***/ }), + +/***/ "./node_modules/lodash/_assignValue.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_assignValue.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"), + eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_assocIndexOf.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_assocIndexOf.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseAssignValue.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_baseAssignValue.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js"); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseGet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGetTag.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseGetTag.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"), + objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js"); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsNative.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseIsNative.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"), + isMasked = __webpack_require__(/*! ./_isMasked */ "./node_modules/lodash/_isMasked.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js"); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseSet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseSet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), + castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseToString.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseToString.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_castPath.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_castPath.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"), + stringToPath = __webpack_require__(/*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"), + toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js"); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; + + +/***/ }), + +/***/ "./node_modules/lodash/_coreJsData.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_coreJsData.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + + +/***/ }), + +/***/ "./node_modules/lodash/_defineProperty.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_defineProperty.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + + +/***/ }), + +/***/ "./node_modules/lodash/_freeGlobal.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_freeGlobal.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./node_modules/lodash/_getMapData.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_getMapData.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./node_modules/lodash/_isKeyable.js"); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; + + +/***/ }), + +/***/ "./node_modules/lodash/_getNative.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getNative.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"), + getValue = __webpack_require__(/*! ./_getValue */ "./node_modules/lodash/_getValue.js"); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; + + +/***/ }), + +/***/ "./node_modules/lodash/_getRawTag.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getRawTag.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_getValue.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_getValue.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashClear.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_hashClear.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashDelete.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_hashDelete.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashGet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashGet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashHas.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashHas.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashSet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashSet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_isIndex.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_isIndex.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/_isKey.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_isKey.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; + + +/***/ }), + +/***/ "./node_modules/lodash/_isKeyable.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_isKeyable.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; + + +/***/ }), + +/***/ "./node_modules/lodash/_isMasked.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_isMasked.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./node_modules/lodash/_coreJsData.js"); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheClear.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_listCacheClear.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheDelete.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_listCacheDelete.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheGet.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheGet.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheHas.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheHas.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheSet.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheSet.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheClear.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_mapCacheClear.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Hash = __webpack_require__(/*! ./_Hash */ "./node_modules/lodash/_Hash.js"), + ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), + Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheDelete.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_mapCacheDelete.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheGet.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheGet.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheHas.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheHas.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheSet.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheSet.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_memoizeCapped.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_memoizeCapped.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var memoize = __webpack_require__(/*! ./memoize */ "./node_modules/lodash/memoize.js"); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; + + +/***/ }), + +/***/ "./node_modules/lodash/_nativeCreate.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_nativeCreate.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; + + +/***/ }), + +/***/ "./node_modules/lodash/_objectToString.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_objectToString.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_root.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_root.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), + +/***/ "./node_modules/lodash/_stringToPath.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_stringToPath.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./node_modules/lodash/_memoizeCapped.js"); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + + +/***/ }), + +/***/ "./node_modules/lodash/_toKey.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_toKey.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; + + +/***/ }), + +/***/ "./node_modules/lodash/_toSource.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_toSource.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; + + +/***/ }), + +/***/ "./node_modules/lodash/eq.js": +/*!***********************************!*\ + !*** ./node_modules/lodash/eq.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; + + +/***/ }), + +/***/ "./node_modules/lodash/get.js": +/*!************************************!*\ + !*** ./node_modules/lodash/get.js ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + + +/***/ }), + +/***/ "./node_modules/lodash/isArray.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/isArray.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; + + +/***/ }), + +/***/ "./node_modules/lodash/isFunction.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/isFunction.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + + +/***/ }), + +/***/ "./node_modules/lodash/isObject.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isObject.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), + +/***/ "./node_modules/lodash/isObjectLike.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/isObjectLike.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), + +/***/ "./node_modules/lodash/isSymbol.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isSymbol.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), + +/***/ "./node_modules/lodash/memoize.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/memoize.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +module.exports = memoize; + + +/***/ }), + +/***/ "./node_modules/lodash/set.js": +/*!************************************!*\ + !*** ./node_modules/lodash/set.js ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseSet = __webpack_require__(/*! ./_baseSet */ "./node_modules/lodash/_baseSet.js"); + +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); +} + +module.exports = set; + + +/***/ }), + +/***/ "./node_modules/lodash/toString.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/toString.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseToString = __webpack_require__(/*! ./_baseToString */ "./node_modules/lodash/_baseToString.js"); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +module.exports = toString; + + +/***/ }), + +/***/ "./node_modules/preact/dist/preact.mjs": +/*!*********************************************!*\ + !*** ./node_modules/preact/dist/preact.mjs ***! + \*********************************************/ +/*! exports provided: default, h, createElement, cloneElement, createRef, Component, render, rerender, options */ +/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return h; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneElement", function() { return cloneElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return createRef; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rerender", function() { return rerender; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "options", function() { return options; }); +var VNode = function VNode() {}; + +var options = {}; + +var stack = []; + +var EMPTY_CHILDREN = []; + +function h(nodeName, attributes) { + var children = EMPTY_CHILDREN, + lastSimple, + child, + simple, + i; + for (i = arguments.length; i-- > 2;) { + stack.push(arguments[i]); + } + if (attributes && attributes.children != null) { + if (!stack.length) stack.push(attributes.children); + delete attributes.children; + } + while (stack.length) { + if ((child = stack.pop()) && child.pop !== undefined) { + for (i = child.length; i--;) { + stack.push(child[i]); + } + } else { + if (typeof child === 'boolean') child = null; + + if (simple = typeof nodeName !== 'function') { + if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false; + } + + if (simple && lastSimple) { + children[children.length - 1] += child; + } else if (children === EMPTY_CHILDREN) { + children = [child]; + } else { + children.push(child); + } + + lastSimple = simple; + } + } + + var p = new VNode(); + p.nodeName = nodeName; + p.children = children; + p.attributes = attributes == null ? undefined : attributes; + p.key = attributes == null ? undefined : attributes.key; + + if (options.vnode !== undefined) options.vnode(p); + + return p; +} + +function extend(obj, props) { + for (var i in props) { + obj[i] = props[i]; + }return obj; +} + +function applyRef(ref, value) { + if (ref != null) { + if (typeof ref == 'function') ref(value);else ref.current = value; + } +} + +var defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout; + +function cloneElement(vnode, props) { + return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children); +} + +var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i; + +var items = []; + +function enqueueRender(component) { + if (!component._dirty && (component._dirty = true) && items.push(component) == 1) { + (options.debounceRendering || defer)(rerender); + } +} + +function rerender() { + var p; + while (p = items.pop()) { + if (p._dirty) renderComponent(p); + } +} + +function isSameNodeType(node, vnode, hydrating) { + if (typeof vnode === 'string' || typeof vnode === 'number') { + return node.splitText !== undefined; + } + if (typeof vnode.nodeName === 'string') { + return !node._componentConstructor && isNamedNode(node, vnode.nodeName); + } + return hydrating || node._componentConstructor === vnode.nodeName; +} + +function isNamedNode(node, nodeName) { + return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase(); +} + +function getNodeProps(vnode) { + var props = extend({}, vnode.attributes); + props.children = vnode.children; + + var defaultProps = vnode.nodeName.defaultProps; + if (defaultProps !== undefined) { + for (var i in defaultProps) { + if (props[i] === undefined) { + props[i] = defaultProps[i]; + } + } + } + + return props; +} + +function createNode(nodeName, isSvg) { + var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName); + node.normalizedNodeName = nodeName; + return node; +} + +function removeNode(node) { + var parentNode = node.parentNode; + if (parentNode) parentNode.removeChild(node); +} + +function setAccessor(node, name, old, value, isSvg) { + if (name === 'className') name = 'class'; + + if (name === 'key') {} else if (name === 'ref') { + applyRef(old, null); + applyRef(value, node); + } else if (name === 'class' && !isSvg) { + node.className = value || ''; + } else if (name === 'style') { + if (!value || typeof value === 'string' || typeof old === 'string') { + node.style.cssText = value || ''; + } + if (value && typeof value === 'object') { + if (typeof old !== 'string') { + for (var i in old) { + if (!(i in value)) node.style[i] = ''; + } + } + for (var i in value) { + node.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i]; + } + } + } else if (name === 'dangerouslySetInnerHTML') { + if (value) node.innerHTML = value.__html || ''; + } else if (name[0] == 'o' && name[1] == 'n') { + var useCapture = name !== (name = name.replace(/Capture$/, '')); + name = name.toLowerCase().substring(2); + if (value) { + if (!old) node.addEventListener(name, eventProxy, useCapture); + } else { + node.removeEventListener(name, eventProxy, useCapture); + } + (node._listeners || (node._listeners = {}))[name] = value; + } else if (name !== 'list' && name !== 'type' && !isSvg && name in node) { + try { + node[name] = value == null ? '' : value; + } catch (e) {} + if ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name); + } else { + var ns = isSvg && name !== (name = name.replace(/^xlink:?/, '')); + + if (value == null || value === false) { + if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name); + } else if (typeof value !== 'function') { + if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value); + } + } +} + +function eventProxy(e) { + return this._listeners[e.type](options.event && options.event(e) || e); +} + +var mounts = []; + +var diffLevel = 0; + +var isSvgMode = false; + +var hydrating = false; + +function flushMounts() { + var c; + while (c = mounts.shift()) { + if (options.afterMount) options.afterMount(c); + if (c.componentDidMount) c.componentDidMount(); + } +} + +function diff(dom, vnode, context, mountAll, parent, componentRoot) { + if (!diffLevel++) { + isSvgMode = parent != null && parent.ownerSVGElement !== undefined; + + hydrating = dom != null && !('__preactattr_' in dom); + } + + var ret = idiff(dom, vnode, context, mountAll, componentRoot); + + if (parent && ret.parentNode !== parent) parent.appendChild(ret); + + if (! --diffLevel) { + hydrating = false; + + if (!componentRoot) flushMounts(); + } + + return ret; +} + +function idiff(dom, vnode, context, mountAll, componentRoot) { + var out = dom, + prevSvgMode = isSvgMode; + + if (vnode == null || typeof vnode === 'boolean') vnode = ''; + + if (typeof vnode === 'string' || typeof vnode === 'number') { + if (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) { + if (dom.nodeValue != vnode) { + dom.nodeValue = vnode; + } + } else { + out = document.createTextNode(vnode); + if (dom) { + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + recollectNodeTree(dom, true); + } + } + + out['__preactattr_'] = true; + + return out; + } + + var vnodeName = vnode.nodeName; + if (typeof vnodeName === 'function') { + return buildComponentFromVNode(dom, vnode, context, mountAll); + } + + isSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode; + + vnodeName = String(vnodeName); + if (!dom || !isNamedNode(dom, vnodeName)) { + out = createNode(vnodeName, isSvgMode); + + if (dom) { + while (dom.firstChild) { + out.appendChild(dom.firstChild); + } + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + + recollectNodeTree(dom, true); + } + } + + var fc = out.firstChild, + props = out['__preactattr_'], + vchildren = vnode.children; + + if (props == null) { + props = out['__preactattr_'] = {}; + for (var a = out.attributes, i = a.length; i--;) { + props[a[i].name] = a[i].value; + } + } + + if (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) { + if (fc.nodeValue != vchildren[0]) { + fc.nodeValue = vchildren[0]; + } + } else if (vchildren && vchildren.length || fc != null) { + innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null); + } + + diffAttributes(out, vnode.attributes, props); + + isSvgMode = prevSvgMode; + + return out; +} + +function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) { + var originalChildren = dom.childNodes, + children = [], + keyed = {}, + keyedLen = 0, + min = 0, + len = originalChildren.length, + childrenLen = 0, + vlen = vchildren ? vchildren.length : 0, + j, + c, + f, + vchild, + child; + + if (len !== 0) { + for (var i = 0; i < len; i++) { + var _child = originalChildren[i], + props = _child['__preactattr_'], + key = vlen && props ? _child._component ? _child._component.__key : props.key : null; + if (key != null) { + keyedLen++; + keyed[key] = _child; + } else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) { + children[childrenLen++] = _child; + } + } + } + + if (vlen !== 0) { + for (var i = 0; i < vlen; i++) { + vchild = vchildren[i]; + child = null; + + var key = vchild.key; + if (key != null) { + if (keyedLen && keyed[key] !== undefined) { + child = keyed[key]; + keyed[key] = undefined; + keyedLen--; + } + } else if (min < childrenLen) { + for (j = min; j < childrenLen; j++) { + if (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) { + child = c; + children[j] = undefined; + if (j === childrenLen - 1) childrenLen--; + if (j === min) min++; + break; + } + } + } + + child = idiff(child, vchild, context, mountAll); + + f = originalChildren[i]; + if (child && child !== dom && child !== f) { + if (f == null) { + dom.appendChild(child); + } else if (child === f.nextSibling) { + removeNode(f); + } else { + dom.insertBefore(child, f); + } + } + } + } + + if (keyedLen) { + for (var i in keyed) { + if (keyed[i] !== undefined) recollectNodeTree(keyed[i], false); + } + } + + while (min <= childrenLen) { + if ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false); + } +} + +function recollectNodeTree(node, unmountOnly) { + var component = node._component; + if (component) { + unmountComponent(component); + } else { + if (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null); + + if (unmountOnly === false || node['__preactattr_'] == null) { + removeNode(node); + } + + removeChildren(node); + } +} + +function removeChildren(node) { + node = node.lastChild; + while (node) { + var next = node.previousSibling; + recollectNodeTree(node, true); + node = next; + } +} + +function diffAttributes(dom, attrs, old) { + var name; + + for (name in old) { + if (!(attrs && attrs[name] != null) && old[name] != null) { + setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode); + } + } + + for (name in attrs) { + if (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) { + setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode); + } + } +} + +var recyclerComponents = []; + +function createComponent(Ctor, props, context) { + var inst, + i = recyclerComponents.length; + + if (Ctor.prototype && Ctor.prototype.render) { + inst = new Ctor(props, context); + Component.call(inst, props, context); + } else { + inst = new Component(props, context); + inst.constructor = Ctor; + inst.render = doRender; + } + + while (i--) { + if (recyclerComponents[i].constructor === Ctor) { + inst.nextBase = recyclerComponents[i].nextBase; + recyclerComponents.splice(i, 1); + return inst; + } + } + + return inst; +} + +function doRender(props, state, context) { + return this.constructor(props, context); +} + +function setComponentProps(component, props, renderMode, context, mountAll) { + if (component._disable) return; + component._disable = true; + + component.__ref = props.ref; + component.__key = props.key; + delete props.ref; + delete props.key; + + if (typeof component.constructor.getDerivedStateFromProps === 'undefined') { + if (!component.base || mountAll) { + if (component.componentWillMount) component.componentWillMount(); + } else if (component.componentWillReceiveProps) { + component.componentWillReceiveProps(props, context); + } + } + + if (context && context !== component.context) { + if (!component.prevContext) component.prevContext = component.context; + component.context = context; + } + + if (!component.prevProps) component.prevProps = component.props; + component.props = props; + + component._disable = false; + + if (renderMode !== 0) { + if (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) { + renderComponent(component, 1, mountAll); + } else { + enqueueRender(component); + } + } + + applyRef(component.__ref, component); +} + +function renderComponent(component, renderMode, mountAll, isChild) { + if (component._disable) return; + + var props = component.props, + state = component.state, + context = component.context, + previousProps = component.prevProps || props, + previousState = component.prevState || state, + previousContext = component.prevContext || context, + isUpdate = component.base, + nextBase = component.nextBase, + initialBase = isUpdate || nextBase, + initialChildComponent = component._component, + skip = false, + snapshot = previousContext, + rendered, + inst, + cbase; + + if (component.constructor.getDerivedStateFromProps) { + state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state)); + component.state = state; + } + + if (isUpdate) { + component.props = previousProps; + component.state = previousState; + component.context = previousContext; + if (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) { + skip = true; + } else if (component.componentWillUpdate) { + component.componentWillUpdate(props, state, context); + } + component.props = props; + component.state = state; + component.context = context; + } + + component.prevProps = component.prevState = component.prevContext = component.nextBase = null; + component._dirty = false; + + if (!skip) { + rendered = component.render(props, state, context); + + if (component.getChildContext) { + context = extend(extend({}, context), component.getChildContext()); + } + + if (isUpdate && component.getSnapshotBeforeUpdate) { + snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState); + } + + var childComponent = rendered && rendered.nodeName, + toUnmount, + base; + + if (typeof childComponent === 'function') { + + var childProps = getNodeProps(rendered); + inst = initialChildComponent; + + if (inst && inst.constructor === childComponent && childProps.key == inst.__key) { + setComponentProps(inst, childProps, 1, context, false); + } else { + toUnmount = inst; + + component._component = inst = createComponent(childComponent, childProps, context); + inst.nextBase = inst.nextBase || nextBase; + inst._parentComponent = component; + setComponentProps(inst, childProps, 0, context, false); + renderComponent(inst, 1, mountAll, true); + } + + base = inst.base; + } else { + cbase = initialBase; + + toUnmount = initialChildComponent; + if (toUnmount) { + cbase = component._component = null; + } + + if (initialBase || renderMode === 1) { + if (cbase) cbase._component = null; + base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true); + } + } + + if (initialBase && base !== initialBase && inst !== initialChildComponent) { + var baseParent = initialBase.parentNode; + if (baseParent && base !== baseParent) { + baseParent.replaceChild(base, initialBase); + + if (!toUnmount) { + initialBase._component = null; + recollectNodeTree(initialBase, false); + } + } + } + + if (toUnmount) { + unmountComponent(toUnmount); + } + + component.base = base; + if (base && !isChild) { + var componentRef = component, + t = component; + while (t = t._parentComponent) { + (componentRef = t).base = base; + } + base._component = componentRef; + base._componentConstructor = componentRef.constructor; + } + } + + if (!isUpdate || mountAll) { + mounts.push(component); + } else if (!skip) { + + if (component.componentDidUpdate) { + component.componentDidUpdate(previousProps, previousState, snapshot); + } + if (options.afterUpdate) options.afterUpdate(component); + } + + while (component._renderCallbacks.length) { + component._renderCallbacks.pop().call(component); + }if (!diffLevel && !isChild) flushMounts(); +} + +function buildComponentFromVNode(dom, vnode, context, mountAll) { + var c = dom && dom._component, + originalComponent = c, + oldDom = dom, + isDirectOwner = c && dom._componentConstructor === vnode.nodeName, + isOwner = isDirectOwner, + props = getNodeProps(vnode); + while (c && !isOwner && (c = c._parentComponent)) { + isOwner = c.constructor === vnode.nodeName; + } + + if (c && isOwner && (!mountAll || c._component)) { + setComponentProps(c, props, 3, context, mountAll); + dom = c.base; + } else { + if (originalComponent && !isDirectOwner) { + unmountComponent(originalComponent); + dom = oldDom = null; + } + + c = createComponent(vnode.nodeName, props, context); + if (dom && !c.nextBase) { + c.nextBase = dom; + + oldDom = null; + } + setComponentProps(c, props, 1, context, mountAll); + dom = c.base; + + if (oldDom && dom !== oldDom) { + oldDom._component = null; + recollectNodeTree(oldDom, false); + } + } + + return dom; +} + +function unmountComponent(component) { + if (options.beforeUnmount) options.beforeUnmount(component); + + var base = component.base; + + component._disable = true; + + if (component.componentWillUnmount) component.componentWillUnmount(); + + component.base = null; + + var inner = component._component; + if (inner) { + unmountComponent(inner); + } else if (base) { + if (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null); + + component.nextBase = base; + + removeNode(base); + recyclerComponents.push(component); + + removeChildren(base); + } + + applyRef(component.__ref, null); +} + +function Component(props, context) { + this._dirty = true; + + this.context = context; + + this.props = props; + + this.state = this.state || {}; + + this._renderCallbacks = []; +} + +extend(Component.prototype, { + setState: function setState(state, callback) { + if (!this.prevState) this.prevState = this.state; + this.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state); + if (callback) this._renderCallbacks.push(callback); + enqueueRender(this); + }, + forceUpdate: function forceUpdate(callback) { + if (callback) this._renderCallbacks.push(callback); + renderComponent(this, 2); + }, + render: function render() {} +}); + +function render(vnode, parent, merge) { + return diff(merge, vnode, {}, false, parent, false); +} + +function createRef() { + return {}; +} + +var preact = { + h: h, + createElement: h, + cloneElement: cloneElement, + createRef: createRef, + Component: Component, + render: render, + rerender: rerender, + options: options +}; + +/* harmony default export */ __webpack_exports__["default"] = (preact); + +//# sourceMappingURL=preact.mjs.map + + +/***/ }), + +/***/ "./node_modules/webpack/buildin/global.js": +/*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || new Function("return this")(); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), + +/***/ "./src/lib/floweditor.js": +/*!*******************************!*\ + !*** ./src/lib/floweditor.js ***! + \*******************************/ +/*! exports provided: FlowEditor */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FlowEditor", function() { return FlowEditor; }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); + // todo: +// improve relability of moving elements around +// global config + +const color = '#000000'; + +const saveChart = renderedNodes => { + // find initial nodes (triggers); + const triggers = renderedNodes.filter(node => node.inputs.length === 0); // for each initial node walk the tree and produce one 'rule' + + const result = triggers.map(trigger => { + const walkRule = rule => { + return { + t: rule.type, + v: rule.config.map(config => config.value), + o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))), + c: [rule.position.x, rule.position.y] + }; + }; + + return walkRule(trigger); + }); + return result; +}; + +const loadChart = (config, chart, from) => { + config.map(config => { + let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]); + + if (!node) { + const configNode = chart.nodes.find(n => config.t == n.type); + node = new NodeUI(chart.canvas, configNode, { + x: config.c[0], + y: config.c[1] + }); + node.config.map((cfg, i) => { + cfg.value = config.v[i]; + }); + node.render(); + chart.renderedNodes.push(node); + } + + if (from) { + const fromDimension = from.getBoundingClientRect(); + const toDimension = node.inputs[0].getBoundingClientRect(); + const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color); + chart.canvas.appendChild(lineSvg.element); + const x1 = fromDimension.x + fromDimension.width; + const y1 = fromDimension.y + fromDimension.height / 2; + const x2 = toDimension.x; + const y2 = toDimension.y + toDimension.height / 2; + lineSvg.setPath(x1, y1, x2, y2); + const connection = { + output: from, + input: node.inputs[0], + svg: lineSvg, + start: { + x: x1, + y: y1 + }, + end: { + x: x2, + y: y2 + } + }; + node.inputs[0].lines.push(connection); + from.lines.push(connection); + } + + config.o.map((output, outputI) => { + loadChart(output, chart, node.outputs[outputI]); + }); + }); +}; + +const exportChart = renderedNodes => { + // find initial nodes (triggers); + const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS'); + let result = ''; // for each initial node walk the tree and produce one 'rule' + + triggers.map(trigger => { + const walkRule = (r, i) => { + const rules = r.toDsl ? r.toDsl() : []; + let ruleset = ''; + let padding = r.indent ? ' ' : ''; + r.outputs.map((out, outI) => { + let rule = rules[outI] || r.type; + let subrule = ''; + + if (out.lines) { + out.lines.map(line => { + subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i); + }); + subrule = subrule.split('\n').map(line => padding + line).filter(line => line.trim() !== '').join('\n') + '\n'; + } + + if (rule.includes('%%output%%')) { + rule = rule.replace('%%output%%', subrule); + } else { + rule += subrule; + } + + ruleset += rule; + }); + return ruleset; + }; + + const rule = walkRule(trigger, 0); + result += rule + "\n\n"; + }); + return result; +}; // drag and drop helpers + + +const dNd = { + enableNativeDrag: (nodeElement, data) => { + nodeElement.draggable = true; + + nodeElement.ondragstart = ev => { + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(data).map(key => { + ev.dataTransfer.setData(key, data[key]); + }); + }; + }, + enableNativeDrop: (nodeElement, fn) => { + nodeElement.ondragover = ev => { + ev.preventDefault(); + }; + + nodeElement.ondrop = fn; + } // svg helpers + +}; + +class svgArrow { + constructor(width, height, fill, color) { + this.element = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px'); + this.element.setAttribute('width', width); + this.element.setAttribute('height', height); + this.element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + this.line = document.createElementNS("http://www.w3.org/2000/svg", "path"); + this.line.setAttributeNS(null, "fill", fill); + this.line.setAttributeNS(null, "stroke", color); + this.element.appendChild(this.line); + } + + setPath(x1, y1, x2, y2, tension = 0.5) { + const delta = (x2 - x1) * tension; + const hx1 = x1 + delta; + const hy1 = y1; + const hx2 = x2 - delta; + const hy2 = y2; + const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`; + this.line.setAttributeNS(null, "d", path); + } + +} // node configuration (each node in the left menu is represented by an instance of this object) + + +class Node { + constructor(conf) { + this.type = conf.type; + this.group = conf.group; + this.config = conf.config.map(config => Object.assign({}, config)); + this.inputs = conf.inputs.map(input => {}); + this.outputs = conf.outputs.map(output => {}); + this.toDsl = conf.toDsl; + this.toString = conf.toString; + this.toHtml = conf.toHtml; + this.indent = conf.indent; + } + +} // node UI (each node in your flow diagram is represented by an instance of this object) + + +class NodeUI extends Node { + constructor(canvas, conf, position) { + super(conf); + this.canvas = canvas; + this.position = position; + this.lines = []; + this.linesEnd = []; + this.toDsl = conf.toDsl; + this.toString = conf.toString; + this.toHtml = conf.toHtml; + this.indent = conf.indent; + } + + updateInputsOutputs(inputs, outputs) { + inputs.map(input => { + const rect = input.getBoundingClientRect(); + input.lines.map(line => { + line.end.x = rect.x; + line.end.y = rect.y + rect.height / 2; + line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y); + }); + }); + outputs.map(output => { + const rect = output.getBoundingClientRect(); + output.lines.map(line => { + line.start.x = rect.x + rect.width; + line.start.y = rect.y + rect.height / 2; + line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y); + }); + }); + } + + handleMoveEvent(ev) { + if (!this.canvas.canEdit) return; + const shiftX = ev.clientX - this.element.getBoundingClientRect().left; + const shiftY = ev.clientY - this.element.getBoundingClientRect().top; + + const onMouseMove = ev => { + const newy = ev.y - shiftY; + const newx = ev.x - shiftX; + this.position.y = newy - newy % this.canvas.gridSize; + this.position.x = newx - newx % this.canvas.gridSize; + this.element.style.top = `${this.position.y}px`; + this.element.style.left = `${this.position.x}px`; + this.updateInputsOutputs(this.inputs, this.outputs); + }; + + const onMouseUp = ev => { + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + }; + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + } + + handleDblClickEvent(ev) { + if (!this.canvas.canEdit) return; + if (this.config.length) showConfigBox(this.type, this.config, () => { + if (this.toHtml) { + this.text.innerHTML = this.toHtml(); + } else { + this.text.textContent = this.toString(); + } + }); + } + + handleRightClickEvent(ev) { + if (!this.canvas.canEdit) return; + this.inputs.map(input => { + input.lines.map(line => { + line.output.lines = []; + line.svg.element.parentNode.removeChild(line.svg.element); + }); + input.lines = []; + }); + this.outputs.map(output => { + output.lines.map(line => { + const index = line.input.lines.indexOf(line); + line.input.lines.splice(index, 1); + line.svg.element.parentNode.removeChild(line.svg.element); + }); + output.lines = []; + }); + this.element.parentNode.removeChild(this.element); + if (this.destroy) this.destroy(); + ev.preventDefault(); + ev.stopPropagation(); + return false; + } + + render() { + this.element = document.createElement('div'); + this.element.nodeObject = this; + this.element.className = `node node-chart group-${this.group}`; + this.text = document.createElement('span'); + + if (this.toHtml) { + this.text.innerHTML = this.toHtml(); + } else { + this.text.textContent = this.toString(); + } + + this.element.appendChild(this.text); + this.element.style.top = `${this.position.y}px`; + this.element.style.left = `${this.position.x}px`; + const inputs = document.createElement('div'); + inputs.className = 'node-inputs'; + this.element.appendChild(inputs); + this.inputs.map((val, index) => { + const input = this.inputs[index] = document.createElement('div'); + input.className = 'node-input'; + input.nodeObject = this; + input.lines = []; + + input.onmousedown = ev => { + ev.preventDefault(); + ev.stopPropagation(); + }; + + inputs.appendChild(input); + }); + const outputs = document.createElement('div'); + outputs.className = 'node-outputs'; + this.element.appendChild(outputs); + this.outputs.map((val, index) => { + const output = this.outputs[index] = document.createElement('div'); + output.className = 'node-output'; + output.nodeObject = this; + output.lines = []; + + output.oncontextmenu = ev => { + output.lines.map(line => { + line.svg.element.parentNode.removeChild(line.svg.element); + }); + output.lines = []; + ev.stopPropagation(); + ev.preventDefault(); + return false; + }; + + output.onmousedown = ev => { + ev.stopPropagation(); + if (output.lines.length) return; + const rects = output.getBoundingClientRect(); + const x1 = rects.x + rects.width; + const y1 = rects.y + rects.height / 2; + const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color); + this.canvas.appendChild(lineSvg.element); + + const onMouseMove = ev => { + lineSvg.setPath(x1, y1, ev.pageX, ev.pageY); + }; + + const onMouseUp = ev => { + const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY); + const input = elemBelow ? elemBelow.closest('.node-input') : null; + + if (!input) { + lineSvg.element.remove(); + } else { + const inputRect = input.getBoundingClientRect(); + const x2 = inputRect.x; + const y2 = inputRect.y + inputRect.height / 2; + lineSvg.setPath(x1, y1, x2, y2); + const connection = { + output, + input, + svg: lineSvg, + start: { + x: x1, + y: y1 + }, + end: { + x: x2, + y: y2 + } + }; + output.lines.push(connection); + input.lines.push(connection); + } + + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + }; + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + }; + + outputs.appendChild(output); + }); + this.element.ondblclick = this.handleDblClickEvent.bind(this); + this.element.onmousedown = this.handleMoveEvent.bind(this); + this.element.oncontextmenu = this.handleRightClickEvent.bind(this); + this.canvas.appendChild(this.element); + } + +} + +const getCfgUI = cfg => { + const template = document.createElement('template'); + + const getSelectOptions = val => { + const selected = val == cfg.value ? 'selected' : ''; + return ``; + }; + + switch (cfg.type) { + case 'text': + template.innerHTML = `
    `; + break; + + case 'number': + template.innerHTML = `
    `; + break; + + case 'select': + template.innerHTML = `
    `; + break; + + case 'textselect': + template.innerHTML = `
    + + + +
    `; + } + + return template.content.cloneNode(true); +}; + +const showConfigBox = (type, config, onclose) => { + const template = document.createElement('template'); + template.innerHTML = ` +
    +
    +
    + +
    +
    +
    + +
    + `; + document.body.appendChild(template.content.cloneNode(true)); + const configBox = document.body.querySelectorAll('.configbox')[0]; + const body = document.body.querySelectorAll('.configbox-body')[0]; + const okButton = document.getElementById('ob'); + const cancelButton = document.getElementById('cb'); + + cancelButton.onclick = () => { + configBox.remove(); + }; + + okButton.onclick = () => { + // set configuration to node + config.map(cfg => { + cfg.value = document.forms['configform'].elements[cfg.name].value; + }); + configBox.remove(); + onclose(); + }; + + config.map(cfg => { + const cfgUI = getCfgUI(cfg); + body.appendChild(cfgUI); + }); +}; + +class FlowEditor { + constructor(element, nodes, config) { + this.nodes = []; + this.renderedNodes = []; + this.onSave = config.onSave; + this.canEdit = !config.readOnly; + this.debug = config.debug != null ? config.debug : true; + this.gridSize = config.gridSize || 1; + this.element = element; + nodes.map(nodeConfig => { + const node = new Node(nodeConfig); + this.nodes.push(node); + }); + this.render(); + if (this.canEdit) dNd.enableNativeDrop(this.canvas, ev => { + const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type')); + let node = new NodeUI(this.canvas, configNode, { + x: ev.x, + y: ev.y + }); + node.render(); + + node.destroy = () => { + this.renderedNodes.splice(this.renderedNodes.indexOf(node), 1); + node = null; + }; + + this.renderedNodes.push(node); + }); + } + + loadConfig(config) { + loadChart(config, this); + } + + saveConfig() { + return saveChart(this.renderedNodes); + } + + renderContainers() { + if (this.canEdit) { + this.sidebar = document.createElement('div'); + this.sidebar.className = 'sidebar'; + this.element.appendChild(this.sidebar); + } + + this.canvas = document.createElement('div'); + this.canvas.className = 'canvas'; + this.canvas.canEdit = this.canEdit; + this.canvas.gridSize = this.gridSize; + this.element.appendChild(this.canvas); + + if (this.canEdit && this.debug) { + this.debug = document.createElement('div'); + this.debug.className = 'debug'; + const text = document.createElement('div'); + this.debug.appendChild(text); + const saveBtn = document.createElement('button'); + saveBtn.textContent = 'SAVE'; + + saveBtn.onclick = () => { + const config = JSON.stringify(saveChart(this.renderedNodes)); + const rules = exportChart(this.renderedNodes); + this.onSave(config, rules); + }; + + const loadBtn = document.createElement('button'); + loadBtn.textContent = 'LOAD'; + + loadBtn.onclick = () => { + const input = prompt('enter config'); + loadChart(JSON.parse(input), this); + }; + + const exportBtn = document.createElement('button'); + exportBtn.textContent = 'EXPORT'; + + exportBtn.onclick = () => { + const exported = exportChart(this.renderedNodes); + text.textContent = exported; + }; + + this.debug.appendChild(exportBtn); + this.debug.appendChild(saveBtn); + this.debug.appendChild(loadBtn); + this.debug.appendChild(text); + this.element.appendChild(this.debug); + } + } + + renderConfigNodes() { + const groups = {}; + this.nodes.map(node => { + if (!groups[node.group]) { + const group = document.createElement('div'); + group.className = 'group'; + group.textContent = node.group; + this.sidebar.appendChild(group); + groups[node.group] = group; + } + + const nodeElement = document.createElement('div'); + nodeElement.className = `node group-${node.group}`; + nodeElement.textContent = node.type; + groups[node.group].appendChild(nodeElement); + dNd.enableNativeDrag(nodeElement, { + type: node.type + }); + }); + } + + render() { + this.renderContainers(); + if (this.canEdit) this.renderConfigNodes(); + } + +} + +/***/ }), + +/***/ "./src/lib/helpers.js": +/*!****************************!*\ + !*** ./src/lib/helpers.js ***! + \****************************/ +/*! exports provided: get, set, getKeys */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getKeys", function() { return getKeys; }); +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js"); +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "get", function() { return lodash_get__WEBPACK_IMPORTED_MODULE_0___default.a; }); +/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/set */ "./node_modules/lodash/set.js"); +/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_set__WEBPACK_IMPORTED_MODULE_1__); +/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "set", function() { return lodash_set__WEBPACK_IMPORTED_MODULE_1___default.a; }); + + // const get = (obj, path, defaultValue) => path.replace(/\[/g, '.').replace(/\]/g, '').split(".") +// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj) +// const set = (obj, path, value) => { +// path.replace(/\[/g, '.').replace(/\]/g, '').split('.').reduce((a, c, i, src) => { +// if (!a[c]) a[c] = {}; +// if (i === src.length - 1) a[c] = value; +// }, obj) +// } + +const getKeys = object => { + const keys = []; + + for (let key in object) { + if (object.hasOwnProperty(key)) { + keys.push(key); + } + } + + return keys; +}; + + + +/***/ }), + +/***/ "./src/plugins/dashboard/api.js": +/*!**************************************!*\ + !*** ./src/plugins/dashboard/api.js ***! + \**************************************/ +/*! exports provided: getVariables, loadDashboardConfig, storeDashboardConfig */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariables", function() { return getVariables; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDashboardConfig", function() { return loadDashboardConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeDashboardConfig", function() { return storeDashboardConfig; }); +const api = window.getPluginAPI(); +const getVariables = api.espeasy.getVariables; +const loadDashboardConfig = api.espeasy.loadDashboardConfig; +const storeDashboardConfig = api.espeasy.storeDashboardConfig; + +/***/ }), + +/***/ "./src/plugins/dashboard/dashboard.editor.js": +/*!***************************************************!*\ + !*** ./src/plugins/dashboard/dashboard.editor.js ***! + \***************************************************/ +/*! exports provided: DashboardEditorPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DashboardEditorPage", function() { return DashboardEditorPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/floweditor */ "./src/lib/floweditor.js"); +/* harmony import */ var _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dashboard_node_definitions */ "./src/plugins/dashboard/dashboard_node_definitions.js"); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./api */ "./src/plugins/dashboard/api.js"); + + + + +class DashboardEditorPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.pages = []; + this.nodes = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"]; + + this.saveConfig = () => { + const config = this.pages.map(page => { + return { + title: page.title, + nodes: page.chart.saveConfig() + }; + }); + Object(_api__WEBPACK_IMPORTED_MODULE_3__["storeDashboardConfig"])(JSON.stringify(config)); + }; + + this.addPage = ({ + title, + nodes = [] + } = {}) => { + if (!title) title = prompt('enter page name', 'new'); + this.pages.push({ + title, + nodes, + chart: this.createPage({ + title, + nodes + }) + }); + this.selectTab(null, this.pages.length - 1); + }; + + this.selectTab = (e, tabIndex) => { + const tab = tabIndex != null ? tabIndex : e.currentTarget.dataset.tab; + const elements = document.querySelectorAll('ul.tabs li'); + elements.forEach((element, i) => { + if (i === parseInt(tab)) element.classList.add('active');else element.classList.remove('active'); + }); + }; + } + + createPage(page) { + // add menu + const menu = document.createElement('li'); + menu.innerText = page.title; + menu.dataset.tab = this.pages.length; + menu.onclick = this.selectTab; + this.menu.appendChild(menu); // add tab + + const el = document.createElement('li'); + const chart = this.renderChart(el, page.nodes); + this.tabs.appendChild(el); + return chart; + } + + renderChart(domNode, elements) { + const chart = new _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__["FlowEditor"](domNode, _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"], { + gridSize: 10, + debug: false + }); + chart.loadConfig(elements); + return chart; + } + + render(props) { + this.editors = []; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "dash_menu" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + style: "display: inline", + ref: ref => this.menu = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + onClick: this.addPage + }, "add page")))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "dash_menu_right" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + onClick: this.saveConfig + }, "SAVE"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", { + class: "tabs", + ref: ref => this.tabs = ref + })); + } + + componentDidMount() { + Object(_api__WEBPACK_IMPORTED_MODULE_3__["getVariables"])().then(out => { + const varNode = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'VARIABLE'); + const meterNode = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'METER'); + const imageNode = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'IMAGE_METER'); + Object.keys(out).forEach(v => { + varNode.config[0].values.push(v); + meterNode.config[0].values.push(v); + imageNode.config[0].values.push(v); + }); + Object(_api__WEBPACK_IMPORTED_MODULE_3__["loadDashboardConfig"])().then(configs => { + configs.forEach(page => { + this.addPage(page); + }); + this.selectTab(null, 0); + }); + }); + } + +} + +/***/ }), + +/***/ "./src/plugins/dashboard/dashboard.js": +/*!********************************************!*\ + !*** ./src/plugins/dashboard/dashboard.js ***! + \********************************************/ +/*! exports provided: DashboardPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DashboardPage", function() { return DashboardPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dashboard_node_definitions */ "./src/plugins/dashboard/dashboard_node_definitions.js"); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./api */ "./src/plugins/dashboard/api.js"); + + + +class DashboardPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.shutdown = false; + this.state = { + pages: [], + vals: [], + tab: 0 + }; + + this.selectTab = e => { + const tab = parseInt(e.currentTarget.dataset.tab); + this.setState({ + tab: tab + }); + }; + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "dash_menu" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", { + ref: ref => this.menu = ref + }, this.state.pages.map((page, i) => { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + onClick: this.selectTab, + "data-tab": i + }, page.title)); + }))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", { + class: "tabs" + }, this.state.pages.map((page, i) => { + const classname = `editor ${i === this.state.tab ? 'active' : ''}`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { + class: classname + }, page.nodes.map(cfg => { + const node = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_1__["nodes"].find(n => n.type === cfg.t); + const cssClass = `node-dash node-${node.group}`; + const style = `top: ${cfg.c[1]}px; left: ${cfg.c[0]}px;`; + const context = { + config: cfg.v.map(v => ({ + value: v + })) + }; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: cssClass, + style: style, + dangerouslySetInnerHTML: { + __html: node.toHtml.bind(context)(this.state.vals) + } + }); + })); + }))); + } + + componentDidMount() { + Object(_api__WEBPACK_IMPORTED_MODULE_2__["loadDashboardConfig"])().then(config => { + this.setState({ + pages: config + }); + }); + + const timeout = async () => { + const variables = await Object(_api__WEBPACK_IMPORTED_MODULE_2__["getVariables"])(); + this.setState({ + vals: variables + }); + if (!this.shutdown) setTimeout(timeout, 1000); + }; + + timeout(); + } + + componentWillUnmount() { + this.shutdown = true; + } + +} + +/***/ }), + +/***/ "./src/plugins/dashboard/dashboard_node_definitions.js": +/*!*************************************************************!*\ + !*** ./src/plugins/dashboard/dashboard_node_definitions.js ***! + \*************************************************************/ +/*! exports provided: nodes */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nodes", function() { return nodes; }); +const nodes = [// TRIGGERS +{ + group: 'DEVICES', + type: 'CLOCK', + inputs: [], + outputs: [], + config: [], + vals: [], + indent: true, + toHtml: () => { + return `${new Date().toTimeString()}`; + } +}, { + group: 'DEVICES', + type: 'IMAGE', + inputs: [], + outputs: [], + config: [{ + name: 'url', + type: 'text', + value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png' + }, { + name: 'width', + type: 'number', + value: '200' + }], + vals: [], + indent: true, + toHtml: function () { + return ``; + } +}, { + group: 'DEVICES', + type: 'VARIABLE', + inputs: [], + outputs: [], + vals: [], + config: [{ + name: 'device', + type: 'select', + values: [], + value: 0 + }], + toHtml: function (vals) { + return `${this.config[0].value}: ${vals ? vals[this.config[0].value] : 0}`; + } +}, { + group: 'DEVICES', + type: 'METER', + inputs: [], + outputs: [], + vals: [], + config: [{ + name: 'device', + type: 'select', + values: [], + value: 0 + }, { + name: 'max', + type: 'number', + value: '255' + }, { + name: 'size', + type: 'number', + value: '255' + }, { + name: 'orientation', + type: 'select', + values: ['horizontal', 'vertical'], + value: 'horizontal' + }], + toHtml: function (vals) { + const val = vals ? vals[this.config[0].value] : 0; + const vertical = this.config[3].value === 'vertical'; + const width = vertical ? 24 : this.config[2].value; + const height = vertical ? this.config[2].value : 24; + const widthPercent = vertical ? 100 : 100 * val / this.config[1].value; + const heightPercent = !vertical ? 100 : 100 * val / this.config[1].value; + return `
    ${this.config[0].value}: ${val}
    `; + } +}, { + group: 'DEVICES', + type: 'IMAGE_METER', + inputs: [], + outputs: [], + vals: [], + config: [{ + name: 'device', + type: 'select', + values: [], + value: 0 + }, { + name: 'max', + type: 'number', + value: '255' + }, { + name: 'image width', + type: 'number', + value: '255' + }, { + name: 'image height', + type: 'number', + value: '255' + }, { + name: 'image 1 url', + type: 'text', + value: '#' + }, { + name: 'image 2 url', + type: 'text', + value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png' + }, { + name: 'orientation', + type: 'select', + values: ['left', 'right', 'top', 'bottom'], + value: 'left' + }], + toHtml: function (vals) { + const val = vals ? vals[this.config[0].value] : 0; + const width = this.config[2].value; + const height = this.config[3].value; + const image1 = this.config[4].value; + const image2 = this.config[5].value; + let percent = 100 * val / this.config[1].value; + let widthPercent, heightPercent; + + switch (this.config[6].value) { + case 'right': + percent = 100 - percent; + + case 'left': + widthPercent = percent; + heightPercent = 100; + break; + + case 'top': + percent = 100 - percent; + + case 'bottom': + widthPercent = 100; + heightPercent = percent; + break; + } + + return `
    +
    + +
    +
    `; + } +}, { + group: 'ACTIONS', + type: 'BUTTON', + inputs: [], + outputs: [], + vals: [], + config: [{ + name: 'text', + type: 'text', + value: 'CLICK' + }, { + name: 'cmd', + type: 'text', + value: 'event,test' + }], + toHtml: function () { + return ``; + } +}, { + group: 'ACTIONS', + type: 'INPUT', + inputs: [], + outputs: [], + vals: [], + config: [{ + name: 'name', + type: 'text', + value: 'var' + }, { + name: 'min', + type: 'number', + value: '0' + }, { + name: 'max', + type: 'number', + value: '255' + }, { + name: 'cmd', + type: 'text', + value: 'set_level,1' + }, { + name: 'type', + type: 'select', + values: ['input', 'slider'], + value: 'slider' + }], + toHtml: function (vals) { + return `${this.config[0].value}: `; + } +}]; + +/***/ }), + +/***/ "./src/plugins/dashboard/index.js": +/*!****************************************!*\ + !*** ./src/plugins/dashboard/index.js ***! + \****************************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _dashboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dashboard */ "./src/plugins/dashboard/dashboard.js"); +/* harmony import */ var _dashboard_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dashboard.editor */ "./src/plugins/dashboard/dashboard.editor.js"); + + +const pluginAPI = window.getPluginAPI(); +const menu = { + title: 'Dashboard', + pagetitle: '', + href: 'dashboard', + class: 'full', + component: _dashboard__WEBPACK_IMPORTED_MODULE_0__["DashboardPage"], + children: [{ + title: 'Editor', + pagetitle: '', + href: 'dashboard/editor', + class: 'full', + component: _dashboard_editor__WEBPACK_IMPORTED_MODULE_1__["DashboardEditorPage"] + }] +}; +pluginAPI.menu.addMenu(menu); + +/***/ }) + +/******/ }); +//# sourceMappingURL=dash.js.map \ No newline at end of file diff --git a/build/dash.js.map b/build/dash.js.map new file mode 100644 index 0000000..45d3824 --- /dev/null +++ b/build/dash.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///(webpack)/buildin/global.js","webpack:///./src/lib/floweditor.js","webpack:///./src/lib/helpers.js","webpack:///./src/plugins/dashboard/api.js","webpack:///./src/plugins/dashboard/dashboard.editor.js","webpack:///./src/plugins/dashboard/dashboard.js","webpack:///./src/plugins/dashboard/dashboard_node_definitions.js","webpack:///./src/plugins/dashboard/index.js"],"names":["color","saveChart","renderedNodes","triggers","filter","node","inputs","length","result","map","trigger","walkRule","rule","t","type","v","config","value","o","outputs","out","lines","line","input","nodeObject","c","position","x","y","loadChart","chart","from","find","n","configNode","nodes","NodeUI","canvas","cfg","i","render","push","fromDimension","getBoundingClientRect","toDimension","lineSvg","svgArrow","document","body","clientWidth","clientHeight","appendChild","element","x1","width","y1","height","x2","y2","setPath","connection","output","svg","start","end","outputI","exportChart","group","r","rules","toDsl","ruleset","padding","indent","outI","subrule","split","trim","join","includes","replace","dNd","enableNativeDrag","nodeElement","data","draggable","ondragstart","ev","getKeys","key","dataTransfer","setData","enableNativeDrop","fn","ondragover","preventDefault","ondrop","constructor","fill","createElementNS","setAttribute","setAttributeNS","tension","delta","hx1","hy1","hx2","hy2","path","Node","conf","Object","assign","toString","toHtml","linesEnd","updateInputsOutputs","rect","handleMoveEvent","canEdit","shiftX","clientX","left","shiftY","clientY","top","onMouseMove","newy","newx","gridSize","style","onMouseUp","removeEventListener","addEventListener","handleDblClickEvent","showConfigBox","text","innerHTML","textContent","handleRightClickEvent","parentNode","removeChild","index","indexOf","splice","destroy","stopPropagation","createElement","className","val","onmousedown","oncontextmenu","rects","pageX","pageY","elemBelow","elementFromPoint","closest","remove","inputRect","ondblclick","bind","getCfgUI","template","getSelectOptions","selected","name","values","content","cloneNode","onclose","configBox","querySelectorAll","okButton","getElementById","cancelButton","onclick","forms","elements","cfgUI","FlowEditor","onSave","readOnly","debug","nodeConfig","getData","loadConfig","saveConfig","renderContainers","sidebar","saveBtn","JSON","stringify","loadBtn","prompt","parse","exportBtn","exported","renderConfigNodes","groups","object","keys","hasOwnProperty","api","window","getPluginAPI","getVariables","espeasy","loadDashboardConfig","storeDashboardConfig","DashboardEditorPage","Component","props","pages","page","title","addPage","createPage","selectTab","e","tabIndex","tab","currentTarget","dataset","forEach","parseInt","classList","add","menu","innerText","el","renderChart","tabs","domNode","editors","ref","componentDidMount","then","varNode","meterNode","imageNode","configs","DashboardPage","shutdown","state","vals","setState","classname","cssClass","context","__html","timeout","variables","setTimeout","componentWillUnmount","Date","toTimeString","vertical","widthPercent","heightPercent","image1","image2","percent","pluginAPI","pagetitle","href","class","component","children","addMenu"],"mappings":"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;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7BA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,cAAc,mBAAO,CAAC,mDAAW;AACjC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,WAAW,mBAAO,CAAC,+CAAS;AAC5B,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,UAAU,mBAAO,CAAC,6CAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,mDAAW;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACRA,oBAAoB,mBAAO,CAAC,iEAAkB;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;;;;;;;;;;;AC1BA,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxEA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA,GAAG;AACH;;AAEA;AACA,kCAAkC,0DAA0D;AAC5F;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;;AAEA;AACA,2CAA2C;AAC3C;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,EAAE;AACF;;AAEA;AACA,sFAAsF;AACtF,GAAG;AACH,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,UAAU;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC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","file":"dash.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/plugins/dashboard/index.js\");\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { getKeys } from \"./helpers\";\n\n// todo:\n// improve relability of moving elements around\n\n// global config\nconst color = '#000000';\n\nconst saveChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.inputs.length === 0);\n\n // for each initial node walk the tree and produce one 'rule'\n const result = triggers.map(trigger => {\n const walkRule = rule => {\n return {\n t: rule.type,\n v: rule.config.map(config => config.value),\n o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),\n c: [rule.position.x, rule.position.y]\n }\n }\n\n return walkRule(trigger);\n });\n\n return result;\n}\n\nconst loadChart = (config, chart, from) => {\n config.map(config => {\n let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);\n if (!node) {\n const configNode = chart.nodes.find(n => config.t == n.type);\n node = new NodeUI(chart.canvas, configNode, { x: config.c[0], y: config.c[1] });\n node.config.map((cfg, i) => {\n cfg.value = config.v[i];\n });\n node.render();\n chart.renderedNodes.push(node);\n }\n \n\n if (from) {\n const fromDimension = from.getBoundingClientRect();\n const toDimension = node.inputs[0].getBoundingClientRect();\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n chart.canvas.appendChild(lineSvg.element);\n const x1 = fromDimension.x + fromDimension.width;\n const y1 = fromDimension.y + fromDimension.height/2;\n const x2 = toDimension.x;\n const y2 = toDimension.y + toDimension.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n\n const connection = {\n output: from,\n input: node.inputs[0],\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n node.inputs[0].lines.push(connection);\n from.lines.push(connection);\n }\n\n config.o.map((output, outputI) => {\n loadChart(output, chart, node.outputs[outputI]);\n });\n })\n}\n\nconst exportChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');\n\n let result = '';\n // for each initial node walk the tree and produce one 'rule'\n triggers.map(trigger => {\n \n const walkRule = (r, i) => {\n const rules = r.toDsl ? r.toDsl() : [];\n let ruleset = '';\n let padding = r.indent ? ' ' : '';\n \n r.outputs.map((out, outI) => {\n let rule = rules[outI] || r.type;\n let subrule = '';\n if (out.lines) {\n out.lines.map(line => {\n subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);\n });\n subrule = subrule.split('\\n').map(line => (padding + line)).filter(line => line.trim() !== '').join('\\n') + '\\n';\n } \n if (rule.includes('%%output%%')) {\n rule = rule.replace('%%output%%', subrule);\n } else {\n rule += subrule;\n }\n ruleset += rule;\n });\n \n return ruleset;\n }\n\n const rule = walkRule(trigger, 0);\n result += rule + \"\\n\\n\";\n });\n\n return result;\n}\n\n// drag and drop helpers\nconst dNd = {\n enableNativeDrag: (nodeElement, data) => {\n nodeElement.draggable = true;\n nodeElement.ondragstart = ev => {\n getKeys(data).map(key => {\n ev.dataTransfer.setData(key, data[key]);\n }); \n }\n }, enableNativeDrop: (nodeElement, fn) => {\n nodeElement.ondragover = ev => {\n ev.preventDefault();\n }\n nodeElement.ondrop = fn;\n }\n}\n\n// svg helpers\nclass svgArrow {\n constructor(width, height, fill, color) {\n this.element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');\n this.element.setAttribute('width', width);\n this.element.setAttribute('height', height);\n this.element.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\n this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this.line.setAttributeNS(null, \"fill\", fill);\n this.line.setAttributeNS(null, \"stroke\", color);\n this.element.appendChild(this.line);\n }\n\n setPath(x1, y1, x2, y2, tension = 0.5) {\n const delta = (x2-x1)*tension;\n const hx1=x1+delta;\n const hy1=y1;\n const hx2=x2-delta;\n const hy2=y2;\n \n const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;\n this.line.setAttributeNS(null, \"d\", path);\n }\n}\n\n// node configuration (each node in the left menu is represented by an instance of this object)\nclass Node {\n constructor(conf) {\n this.type = conf.type;\n this.group = conf.group;\n this.config = conf.config.map(config => (Object.assign({}, config)));\n this.inputs = conf.inputs.map(input => {});\n this.outputs = conf.outputs.map(output => {});\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n}\n\n// node UI (each node in your flow diagram is represented by an instance of this object)\nclass NodeUI extends Node {\n constructor(canvas, conf, position) {\n super(conf);\n this.canvas = canvas;\n this.position = position;\n this.lines = [];\n this.linesEnd = [];\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n\n updateInputsOutputs(inputs, outputs) {\n inputs.map(input => {\n const rect = input.getBoundingClientRect();\n input.lines.map(line => {\n line.end.x = rect.x;\n line.end.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n outputs.map(output => {\n const rect = output.getBoundingClientRect();\n output.lines.map(line => {\n line.start.x = rect.x + rect.width;\n line.start.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n }\n\n handleMoveEvent(ev) {\n if (!this.canvas.canEdit) return;\n const shiftX = ev.clientX - this.element.getBoundingClientRect().left;\n const shiftY = ev.clientY - this.element.getBoundingClientRect().top;\n const onMouseMove = ev => {\n const newy = ev.y - shiftY;\n const newx = ev.x - shiftX\n this.position.y = newy - newy % this.canvas.gridSize;\n this.position.x = newx - newx % this.canvas.gridSize;\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`; \n this.updateInputsOutputs(this.inputs, this.outputs);\n }\n const onMouseUp = ev => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp); \n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n handleDblClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n if (this.config.length)\n showConfigBox(this.type, this.config, () => {\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n });\n }\n\n handleRightClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n this.inputs.map(input => {\n input.lines.map(line => {\n line.output.lines = [];\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n input.lines = [];\n });\n this.outputs.map(output => {\n output.lines.map(line => {\n const index = line.input.lines.indexOf(line);\n line.input.lines.splice(index, 1);\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n });\n this.element.parentNode.removeChild(this.element);\n if (this.destroy) this.destroy();\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n render() {\n this.element = document.createElement('div');\n this.element.nodeObject = this;\n this.element.className = `node node-chart group-${this.group}`;\n\n this.text = document.createElement('span');\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n \n this.element.appendChild(this.text);\n\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`;\n\n const inputs = document.createElement('div');\n inputs.className = 'node-inputs';\n this.element.appendChild(inputs);\n \n this.inputs.map((val, index) => {\n const input = this.inputs[index] = document.createElement('div');\n input.className = 'node-input';\n input.nodeObject = this;\n input.lines = []\n input.onmousedown = ev => {\n ev.preventDefault();\n ev.stopPropagation();\n }\n inputs.appendChild(input);\n })\n\n const outputs = document.createElement('div');\n outputs.className = 'node-outputs';\n this.element.appendChild(outputs);\n\n this.outputs.map((val, index) => {\n const output = this.outputs[index] = document.createElement('div');\n output.className = 'node-output';\n output.nodeObject = this;\n output.lines = [];\n output.oncontextmenu = ev => {\n output.lines.map(line => {\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n ev.stopPropagation();\n ev.preventDefault();\n return false;\n }\n output.onmousedown = ev => {\n ev.stopPropagation();\n if (output.lines.length) return;\n const rects = output.getBoundingClientRect();\n const x1 = rects.x + rects.width;\n const y1 = rects.y + rects.height/2;\n\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n this.canvas.appendChild(lineSvg.element);\n\n const onMouseMove = ev => {\n lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);\n }\n\n const onMouseUp = ev => {\n const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);\n const input = elemBelow ? elemBelow.closest('.node-input') : null;\n if (!input) {\n lineSvg.element.remove();\n } else {\n const inputRect = input.getBoundingClientRect();\n const x2 = inputRect.x;\n const y2 = inputRect.y + inputRect.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n const connection = {\n output,\n input,\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n output.lines.push(connection);\n input.lines.push(connection);\n }\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n outputs.appendChild(output);\n });\n\n this.element.ondblclick = this.handleDblClickEvent.bind(this);\n this.element.onmousedown = this.handleMoveEvent.bind(this);\n this.element.oncontextmenu = this.handleRightClickEvent.bind(this);\n this.canvas.appendChild(this.element);\n }\n}\n\nconst getCfgUI = cfg => {\n const template = document.createElement('template');\n\n const getSelectOptions = val => {\n const selected = val == cfg.value ? 'selected' : '';\n return ``;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `
    `;\n break;\n case 'number':\n template.innerHTML = `
    `;\n break;\n case 'select':\n template.innerHTML = `
    `;\n break;\n case 'textselect':\n template.innerHTML = `
    \n \n \n \n
    `\n }\n return template.content.cloneNode(true);\n}\n\nconst showConfigBox = (type, config, onclose) => {\n const template = document.createElement('template');\n template.innerHTML = `\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n `;\n\n document.body.appendChild(template.content.cloneNode(true));\n const configBox = document.body.querySelectorAll('.configbox')[0];\n const body = document.body.querySelectorAll('.configbox-body')[0];\n const okButton = document.getElementById('ob');\n const cancelButton = document.getElementById('cb');\n cancelButton.onclick = () => {\n configBox.remove();\n }\n okButton.onclick = () => {\n // set configuration to node\n config.map(cfg => {\n cfg.value = document.forms['configform'].elements[cfg.name].value;\n });\n configBox.remove();\n onclose();\n }\n config.map(cfg => {\n const cfgUI = getCfgUI(cfg);\n body.appendChild(cfgUI);\n })\n}\n\nexport class FlowEditor {\n constructor(element, nodes, config) {\n this.nodes = [];\n this.renderedNodes = [];\n this.onSave = config.onSave;\n this.canEdit = !config.readOnly;\n this.debug = config.debug!= null ? config.debug : true;\n this.gridSize = config.gridSize || 1;\n\n this.element = element;\n\n nodes.map(nodeConfig => {\n const node = new Node(nodeConfig);\n this.nodes.push(node);\n });\n this.render();\n\n if (this.canEdit)\n dNd.enableNativeDrop(this.canvas, ev => {\n const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));\n let node = new NodeUI(this.canvas, configNode, { x: ev.x, y: ev.y });\n node.render();\n node.destroy = () => {\n this.renderedNodes.splice( this.renderedNodes.indexOf(node), 1 );\n node = null;\n }\n this.renderedNodes.push(node); \n });\n }\n\n loadConfig(config) {\n loadChart(config, this);\n }\n\n saveConfig() {\n return saveChart(this.renderedNodes);\n }\n\n renderContainers() {\n if (this.canEdit) {\n this.sidebar = document.createElement('div');\n this.sidebar.className = 'sidebar';\n this.element.appendChild(this.sidebar);\n }\n\n this.canvas = document.createElement('div');\n this.canvas.className = 'canvas';\n this.canvas.canEdit = this.canEdit;\n this.canvas.gridSize = this.gridSize;\n this.element.appendChild(this.canvas);\n\n if (this.canEdit && this.debug) {\n this.debug = document.createElement('div');\n this.debug.className = 'debug';\n\n const text = document.createElement('div');\n this.debug.appendChild(text);\n\n const saveBtn = document.createElement('button');\n saveBtn.textContent = 'SAVE';\n saveBtn.onclick = () => {\n const config = JSON.stringify(saveChart(this.renderedNodes));\n const rules = exportChart(this.renderedNodes);\n this.onSave(config, rules);\n }\n\n const loadBtn = document.createElement('button');\n loadBtn.textContent = 'LOAD';\n loadBtn.onclick = () => {\n const input = prompt('enter config');\n loadChart(JSON.parse(input), this);\n }\n\n const exportBtn = document.createElement('button');\n exportBtn.textContent = 'EXPORT';\n exportBtn.onclick = () => {\n const exported = exportChart(this.renderedNodes);\n text.textContent = exported;\n }\n this.debug.appendChild(exportBtn);\n this.debug.appendChild(saveBtn);\n this.debug.appendChild(loadBtn);\n this.debug.appendChild(text);\n this.element.appendChild(this.debug);\n }\n \n }\n\n renderConfigNodes() {\n const groups = {};\n this.nodes.map(node => {\n if (!groups[node.group]) {\n const group = document.createElement('div');\n group.className = 'group';\n group.textContent = node.group;\n this.sidebar.appendChild(group);\n groups[node.group] = group;\n }\n const nodeElement = document.createElement('div');\n nodeElement.className = `node group-${node.group}`;\n nodeElement.textContent = node.type;\n groups[node.group].appendChild(nodeElement);\n\n dNd.enableNativeDrag(nodeElement, { type: node.type });\n })\n }\n\n render() {\n this.renderContainers();\n if (this.canEdit) this.renderConfigNodes();\n }\n}","import get from 'lodash/get';\nimport set from 'lodash/set';\n\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\n\n// const set = (obj, path, value) => {\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\n// if (!a[c]) a[c] = {};\n// if (i === src.length - 1) a[c] = value;\n// }, obj)\n// }\n\nconst getKeys = object => {\n const keys = [];\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\nexport { get, set, getKeys }","const api = window.getPluginAPI();\n\nexport const getVariables = api.espeasy.getVariables;\nexport const loadDashboardConfig = api.espeasy.loadDashboardConfig;\nexport const storeDashboardConfig = api.espeasy.storeDashboardConfig;\n","import { h, Component } from 'preact';\nimport { FlowEditor } from '../../lib/floweditor';\nimport { nodes } from './dashboard_node_definitions';\nimport { loadDashboardConfig, storeDashboardConfig, getVariables } from './api';\n\nexport class DashboardEditorPage extends Component {\n constructor(props) {\n super(props);\n this.pages = []\n this.nodes = nodes;\n\n this.saveConfig = () => {\n const config = this.pages.map(page => {\n return { title: page.title, nodes: page.chart.saveConfig() };\n });\n storeDashboardConfig(JSON.stringify(config));\n }\n\n this.addPage = ({ title, nodes = []} = {}) => {\n if (!title) title = prompt('enter page name', 'new');\n this.pages.push({\n title, nodes, chart: this.createPage({ title, nodes })\n });\n this.selectTab(null, this.pages.length - 1);\n }\n\n this.selectTab = (e, tabIndex) => {\n const tab = tabIndex != null ? tabIndex : e.currentTarget.dataset.tab;\n const elements = document.querySelectorAll('ul.tabs li');\n elements.forEach((element, i) => {\n if (i === parseInt(tab)) element.classList.add('active');\n else element.classList.remove('active');\n });\n }\n }\n\n createPage(page) {\n // add menu\n const menu = document.createElement('li');\n menu.innerText = page.title;\n menu.dataset.tab = this.pages.length;\n menu.onclick = this.selectTab; \n this.menu.appendChild(menu);\n\n // add tab\n const el = document.createElement('li');\n const chart = this.renderChart(el, page.nodes)\n this.tabs.appendChild(el);\n return chart;\n }\n\n renderChart(domNode, elements) {\n const chart = new FlowEditor(domNode, nodes, { \n gridSize: 10, debug: false\n });\n chart.loadConfig(elements);\n return chart;\n }\n\n render(props) {\n this.editors = [];\n return (\n
    \n
    \n \n \n
    \n
    \n
    SAVE
    \n
    \n
      this.tabs = ref}>
    \n
    \n \n );\n }\n\n componentDidMount() {\n getVariables().then((out) => {\n const varNode = nodes.find(node => node.type === 'VARIABLE');\n const meterNode = nodes.find(node => node.type === 'METER');\n const imageNode = nodes.find(node => node.type === 'IMAGE_METER');\n Object.keys(out).forEach(v => {\n varNode.config[0].values.push(v); \n meterNode.config[0].values.push(v); \n imageNode.config[0].values.push(v); \n });\n \n loadDashboardConfig().then(configs => {\n configs.forEach(page => {\n this.addPage(page);\n });\n this.selectTab(null, 0);\n });\n });\n }\n}","import { h, Component } from 'preact';\nimport { nodes } from './dashboard_node_definitions';\nimport { getVariables, loadDashboardConfig } from './api';\n\nexport class DashboardPage extends Component {\n constructor(props) {\n super(props);\n this.shutdown = false;\n this.state = {\n pages: [], vals: [], tab: 0\n }\n\n this.selectTab = (e) => {\n const tab = parseInt(e.currentTarget.dataset.tab);\n this.setState({ tab: tab });\n }\n }\n\n render(props) {\n return (\n
    \n
    \n
      this.menu = ref}>\n {this.state.pages.map((page, i) => {\n return (
    • {page.title}
    • )\n })}\n
    \n
    \n
      \n {this.state.pages.map((page, i) => {\n const classname = `editor ${i === this.state.tab ? 'active' : ''}`;\n return (\n
    • \n {page.nodes.map(cfg => {\n const node = nodes.find(n => n.type === cfg.t);\n const cssClass = `node-dash node-${node.group}`;\n const style = `top: ${cfg.c[1]}px; left: ${cfg.c[0]}px;`;\n const context = {\n config: cfg.v.map(v => ({ value: v })),\n }\n return (\n
      \n )\n })}\n
    • \n )\n })}\n
    \n
    \n \n );\n }\n\n componentDidMount() {\n loadDashboardConfig().then(config => {\n this.setState({ pages: config });\n });\n\n const timeout = async () => {\n const variables = await getVariables();\n this.setState({ vals: variables });\n if (!this.shutdown) setTimeout(timeout, 1000);\n };\n\n timeout();\n }\n\n componentWillUnmount() {\n this.shutdown = true;\n }\n}","export const nodes = [\n // TRIGGERS\n {\n group: 'DEVICES',\n type: 'CLOCK',\n inputs: [],\n outputs: [],\n config: [],\n vals: [],\n indent: true,\n toHtml: () => { return `${(new Date()).toTimeString()}`; },\n },\n {\n group: 'DEVICES',\n type: 'IMAGE',\n inputs: [],\n outputs: [],\n config: [{\n name: 'url',\n type: 'text',\n value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png'\n }, {\n name: 'width',\n type: 'number',\n value: '200',\n }],\n vals: [],\n indent: true,\n toHtml: function () { return ``; },\n },\n {\n group: 'DEVICES',\n type: 'VARIABLE',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }],\n toHtml: function(vals) {\n return `${this.config[0].value}: ${vals ? vals[this.config[0].value] : 0}`;\n }\n }, {\n group: 'DEVICES',\n type: 'METER',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }, {\n name: 'max',\n type: 'number',\n value: '255',\n }, {\n name: 'size',\n type: 'number',\n value: '255',\n }, {\n name: 'orientation',\n type: 'select',\n values: ['horizontal', 'vertical'],\n value: 'horizontal',\n }],\n toHtml: function(vals) {\n const val = vals ? vals[this.config[0].value] : 0;\n const vertical = this.config[3].value === 'vertical';\n const width = vertical ? 24 : this.config[2].value;\n const height = vertical ? this.config[2].value : 24;\n const widthPercent = vertical ? 100 : 100 * val / this.config[1].value;\n const heightPercent = !vertical ? 100 : 100 * val / this.config[1].value;\n\n return `
    ${this.config[0].value}: ${val}
    `;\n }\n }, {\n group: 'DEVICES',\n type: 'IMAGE_METER',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }, {\n name: 'max',\n type: 'number',\n value: '255',\n }, {\n name: 'image width',\n type: 'number',\n value: '255',\n }, {\n name: 'image height',\n type: 'number',\n value: '255',\n }, {\n name: 'image 1 url',\n type: 'text',\n value: '#',\n }, {\n name: 'image 2 url',\n type: 'text',\n value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png',\n }, {\n name: 'orientation',\n type: 'select',\n values: ['left', 'right', 'top', 'bottom'],\n value: 'left',\n }],\n toHtml: function(vals) {\n const val = vals ? vals[this.config[0].value] : 0;\n const width = this.config[2].value;\n const height = this.config[3].value;\n const image1 = this.config[4].value;\n const image2 = this.config[5].value;\n let percent = 100 * val / this.config[1].value;\n let widthPercent, heightPercent;\n switch (this.config[6].value) {\n case 'right':\n percent = 100 - percent;\n case 'left':\n widthPercent = percent;\n heightPercent = 100;\n break;\n case 'top':\n percent = 100 - percent;\n case 'bottom':\n widthPercent = 100;\n heightPercent = percent;\n break;\n }\n\n return `
    \n
    \n \n
    \n
    `;\n }\n }, {\n group: 'ACTIONS',\n type: 'BUTTON',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'text',\n type: 'text',\n value: 'CLICK'\n },{\n name: 'cmd',\n type: 'text',\n value: 'event,test'\n }],\n toHtml: function() {\n return ``;\n }\n }, {\n group: 'ACTIONS',\n type: 'INPUT',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'name',\n type: 'text',\n value: 'var',\n },{\n name: 'min',\n type: 'number',\n value: '0',\n },{\n name: 'max',\n type: 'number',\n value: '255',\n },{\n name: 'cmd',\n type: 'text',\n value: 'set_level,1',\n },{\n name: 'type',\n type: 'select',\n values: ['input', 'slider'],\n value: 'slider',\n }],\n toHtml: function(vals) {\n return `${this.config[0].value}: `;\n }\n }\n]","import { DashboardPage } from './dashboard';\nimport { DashboardEditorPage } from './dashboard.editor';\n\nconst pluginAPI = window.getPluginAPI();\n\nconst menu = { title: 'Dashboard', pagetitle: '', href: 'dashboard', class: 'full', component: DashboardPage, children: [\n { title: 'Editor', pagetitle: '', href: 'dashboard/editor', class: 'full', component: DashboardEditorPage },\n ] };\n\npluginAPI.menu.addMenu(menu);"],"sourceRoot":""} \ No newline at end of file diff --git a/build/dashboad.js b/build/dashboad.js new file mode 100644 index 0000000..702e850 --- /dev/null +++ b/build/dashboad.js @@ -0,0 +1,115 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/plugins/dashboard/index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./src/plugins/dashboard/index.js": +/*!****************************************!*\ + !*** ./src/plugins/dashboard/index.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +const pluginAPI = window.getPluginAPI(); +const menu = { + title: 'Dashboard', + pagetitle: '', + href: 'dashboard', + class: 'full', + component: DashboardPage, + children: [{ + title: 'Editor', + pagetitle: '', + href: 'dashboard/editor', + class: 'full', + component: DashboardEditorPage + }] +}; + +/***/ }) + +/******/ }); +//# sourceMappingURL=dashboad.js.map \ No newline at end of file diff --git a/build/dashboad.js.map b/build/dashboad.js.map new file mode 100644 index 0000000..080be26 --- /dev/null +++ b/build/dashboad.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/plugins/dashboard/index.js"],"names":["pluginAPI","window","getPluginAPI","menu","title","pagetitle","href","class","component","DashboardPage","children","DashboardEditorPage"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;ACjFA,MAAMA,SAAS,GAAGC,MAAM,CAACC,YAAP,EAAlB;AAEA,MAAMC,IAAI,GAAG;AAAEC,OAAK,EAAE,WAAT;AAAsBC,WAAS,EAAE,EAAjC;AAAqCC,MAAI,EAAE,WAA3C;AAAwDC,OAAK,EAAE,MAA/D;AAAuEC,WAAS,EAAEC,aAAlF;AAAiGC,UAAQ,EAAE,CAChH;AAAEN,SAAK,EAAE,QAAT;AAAmBC,aAAS,EAAE,EAA9B;AAAkCC,QAAI,EAAE,kBAAxC;AAA4DC,SAAK,EAAE,MAAnE;AAA2EC,aAAS,EAAEG;AAAtF,GADgH;AAA3G,CAAb,C","file":"dashboad.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/plugins/dashboard/index.js\");\n"," \nconst pluginAPI = window.getPluginAPI();\n\nconst menu = { title: 'Dashboard', pagetitle: '', href: 'dashboard', class: 'full', component: DashboardPage, children: [\n { title: 'Editor', pagetitle: '', href: 'dashboard/editor', class: 'full', component: DashboardEditorPage },\n ] };\n\n"],"sourceRoot":""} \ No newline at end of file diff --git a/build/main.js b/build/main.js new file mode 100644 index 0000000..c1689d0 --- /dev/null +++ b/build/main.js @@ -0,0 +1,12196 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/app.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./node_modules/lodash/_Hash.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_Hash.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var hashClear = __webpack_require__(/*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"), + hashDelete = __webpack_require__(/*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"), + hashGet = __webpack_require__(/*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"), + hashHas = __webpack_require__(/*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"), + hashSet = __webpack_require__(/*! ./_hashSet */ "./node_modules/lodash/_hashSet.js"); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; + + +/***/ }), + +/***/ "./node_modules/lodash/_ListCache.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_ListCache.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"), + listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"), + listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"), + listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"), + listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js"); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; + + +/***/ }), + +/***/ "./node_modules/lodash/_Map.js": +/*!*************************************!*\ + !*** ./node_modules/lodash/_Map.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), + root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; + + +/***/ }), + +/***/ "./node_modules/lodash/_MapCache.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_MapCache.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"), + mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"), + mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"), + mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"), + mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js"); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; + + +/***/ }), + +/***/ "./node_modules/lodash/_Symbol.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/_Symbol.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), + +/***/ "./node_modules/lodash/_arrayMap.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_arrayMap.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; + + +/***/ }), + +/***/ "./node_modules/lodash/_assignValue.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_assignValue.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"), + eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_assocIndexOf.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_assocIndexOf.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseAssignValue.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_baseAssignValue.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js"); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseGet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGetTag.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseGetTag.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"), + objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js"); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseIsNative.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseIsNative.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"), + isMasked = __webpack_require__(/*! ./_isMasked */ "./node_modules/lodash/_isMasked.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js"); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseSet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_baseSet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), + castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), + isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseToString.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_baseToString.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), + isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_castPath.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_castPath.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"), + stringToPath = __webpack_require__(/*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"), + toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js"); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; + + +/***/ }), + +/***/ "./node_modules/lodash/_coreJsData.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_coreJsData.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + + +/***/ }), + +/***/ "./node_modules/lodash/_defineProperty.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_defineProperty.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + + +/***/ }), + +/***/ "./node_modules/lodash/_freeGlobal.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_freeGlobal.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./node_modules/lodash/_getMapData.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_getMapData.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./node_modules/lodash/_isKeyable.js"); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; + + +/***/ }), + +/***/ "./node_modules/lodash/_getNative.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getNative.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"), + getValue = __webpack_require__(/*! ./_getValue */ "./node_modules/lodash/_getValue.js"); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; + + +/***/ }), + +/***/ "./node_modules/lodash/_getRawTag.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getRawTag.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_getValue.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_getValue.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashClear.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_hashClear.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashDelete.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_hashDelete.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashGet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashGet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashHas.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashHas.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_hashSet.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_hashSet.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_isIndex.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/_isIndex.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/_isKey.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_isKey.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; + + +/***/ }), + +/***/ "./node_modules/lodash/_isKeyable.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_isKeyable.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; + + +/***/ }), + +/***/ "./node_modules/lodash/_isMasked.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_isMasked.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./node_modules/lodash/_coreJsData.js"); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheClear.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_listCacheClear.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheDelete.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_listCacheDelete.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheGet.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheGet.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheHas.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheHas.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_listCacheSet.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheSet.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheClear.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_mapCacheClear.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Hash = __webpack_require__(/*! ./_Hash */ "./node_modules/lodash/_Hash.js"), + ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), + Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheDelete.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_mapCacheDelete.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheGet.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheGet.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheHas.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheHas.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; + + +/***/ }), + +/***/ "./node_modules/lodash/_mapCacheSet.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheSet.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; + + +/***/ }), + +/***/ "./node_modules/lodash/_memoizeCapped.js": +/*!***********************************************!*\ + !*** ./node_modules/lodash/_memoizeCapped.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var memoize = __webpack_require__(/*! ./memoize */ "./node_modules/lodash/memoize.js"); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; + + +/***/ }), + +/***/ "./node_modules/lodash/_nativeCreate.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_nativeCreate.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; + + +/***/ }), + +/***/ "./node_modules/lodash/_objectToString.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_objectToString.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_root.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_root.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), + +/***/ "./node_modules/lodash/_stringToPath.js": +/*!**********************************************!*\ + !*** ./node_modules/lodash/_stringToPath.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./node_modules/lodash/_memoizeCapped.js"); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + + +/***/ }), + +/***/ "./node_modules/lodash/_toKey.js": +/*!***************************************!*\ + !*** ./node_modules/lodash/_toKey.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; + + +/***/ }), + +/***/ "./node_modules/lodash/_toSource.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_toSource.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; + + +/***/ }), + +/***/ "./node_modules/lodash/eq.js": +/*!***********************************!*\ + !*** ./node_modules/lodash/eq.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; + + +/***/ }), + +/***/ "./node_modules/lodash/get.js": +/*!************************************!*\ + !*** ./node_modules/lodash/get.js ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + + +/***/ }), + +/***/ "./node_modules/lodash/isArray.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/isArray.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; + + +/***/ }), + +/***/ "./node_modules/lodash/isFunction.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/isFunction.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + + +/***/ }), + +/***/ "./node_modules/lodash/isObject.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isObject.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), + +/***/ "./node_modules/lodash/isObjectLike.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/isObjectLike.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), + +/***/ "./node_modules/lodash/isSymbol.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isSymbol.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), + +/***/ "./node_modules/lodash/memoize.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/memoize.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +module.exports = memoize; + + +/***/ }), + +/***/ "./node_modules/lodash/set.js": +/*!************************************!*\ + !*** ./node_modules/lodash/set.js ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseSet = __webpack_require__(/*! ./_baseSet */ "./node_modules/lodash/_baseSet.js"); + +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); +} + +module.exports = set; + + +/***/ }), + +/***/ "./node_modules/lodash/toString.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/toString.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var baseToString = __webpack_require__(/*! ./_baseToString */ "./node_modules/lodash/_baseToString.js"); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +module.exports = toString; + + +/***/ }), + +/***/ "./node_modules/mini-toastr/mini-toastr.js": +/*!*************************************************!*\ + !*** ./node_modules/mini-toastr/mini-toastr.js ***! + \*************************************************/ +/*! exports provided: fadeOut, LIB_NAME, ERROR, WARN, SUCCESS, INFO, CONTAINER_CLASS, NOTIFICATION_CLASS, TITLE_CLASS, ICON_CLASS, MESSAGE_CLASS, ERROR_CLASS, WARN_CLASS, SUCCESS_CLASS, INFO_CLASS, DEFAULT_TIMEOUT, flatten, makeCss, appendStyles, config, makeNode, createIcon, addElem, getTypeClass, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fadeOut", function() { return fadeOut; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LIB_NAME", function() { return LIB_NAME; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ERROR", function() { return ERROR; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WARN", function() { return WARN; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SUCCESS", function() { return SUCCESS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INFO", function() { return INFO; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CONTAINER_CLASS", function() { return CONTAINER_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NOTIFICATION_CLASS", function() { return NOTIFICATION_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TITLE_CLASS", function() { return TITLE_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ICON_CLASS", function() { return ICON_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MESSAGE_CLASS", function() { return MESSAGE_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ERROR_CLASS", function() { return ERROR_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WARN_CLASS", function() { return WARN_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SUCCESS_CLASS", function() { return SUCCESS_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INFO_CLASS", function() { return INFO_CLASS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_TIMEOUT", function() { return DEFAULT_TIMEOUT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "flatten", function() { return flatten; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeCss", function() { return makeCss; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendStyles", function() { return appendStyles; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeNode", function() { return makeNode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createIcon", function() { return createIcon; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElem", function() { return addElem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTypeClass", function() { return getTypeClass; }); +function fadeOut (element, cb) { + if (element.style.opacity && element.style.opacity > 0.05) { + element.style.opacity = element.style.opacity - 0.05 + } else if (element.style.opacity && element.style.opacity <= 0.1) { + if (element.parentNode) { + element.parentNode.removeChild(element) + if (cb) cb() + } + } else { + element.style.opacity = 0.9 + } + setTimeout(() => fadeOut.apply(this, [element, cb]), 1000 / 30 + ) +} + +const LIB_NAME = 'mini-toastr' + +const ERROR = 'error' +const WARN = 'warn' +const SUCCESS = 'success' +const INFO = 'info' +const CONTAINER_CLASS = LIB_NAME +const NOTIFICATION_CLASS = `${LIB_NAME}__notification` +const TITLE_CLASS = `${LIB_NAME}-notification__title` +const ICON_CLASS = `${LIB_NAME}-notification__icon` +const MESSAGE_CLASS = `${LIB_NAME}-notification__message` +const ERROR_CLASS = `-${ERROR}` +const WARN_CLASS = `-${WARN}` +const SUCCESS_CLASS = `-${SUCCESS}` +const INFO_CLASS = `-${INFO}` +const DEFAULT_TIMEOUT = 3000 + +const EMPTY_STRING = '' + +function flatten (obj, into, prefix) { + into = into || {} + prefix = prefix || EMPTY_STRING + + for (const k in obj) { + if (obj.hasOwnProperty(k)) { + const prop = obj[k] + if (prop && typeof prop === 'object' && !(prop instanceof Date || prop instanceof RegExp)) { + flatten(prop, into, prefix + k + ' ') + } else { + if (into[prefix] && typeof into[prefix] === 'object') { + into[prefix][k] = prop + } else { + into[prefix] = {} + into[prefix][k] = prop + } + } + } + } + + return into +} + +function makeCss (obj) { + const flat = flatten(obj) + let str = JSON.stringify(flat, null, 2) + str = str.replace(/"([^"]*)": {/g, '$1 {') + .replace(/"([^"]*)"/g, '$1') + .replace(/(\w*-?\w*): ([\w\d .#]*),?/g, '$1: $2;') + .replace(/},/g, '}\n') + .replace(/ &([.:])/g, '$1') + + str = str.substr(1, str.lastIndexOf('}') - 1) + + return str +} + +function appendStyles (css) { + let head = document.head || document.getElementsByTagName('head')[0] + let styleElem = makeNode('style') + styleElem.id = `${LIB_NAME}-styles` + styleElem.type = 'text/css' + + if (styleElem.styleSheet) { + styleElem.styleSheet.cssText = css + } else { + styleElem.appendChild(document.createTextNode(css)) + } + + head.appendChild(styleElem) +} + +const config = { + types: {ERROR, WARN, SUCCESS, INFO}, + animation: fadeOut, + timeout: DEFAULT_TIMEOUT, + icons: {}, + appendTarget: document.body, + node: makeNode(), + allowHtml: false, + style: { + [`.${CONTAINER_CLASS}`]: { + position: 'fixed', + 'z-index': 99999, + right: '12px', + top: '12px' + }, + [`.${NOTIFICATION_CLASS}`]: { + cursor: 'pointer', + padding: '12px 18px', + margin: '0 0 6px 0', + 'background-color': '#000', + opacity: 0.8, + color: '#fff', + 'border-radius': '3px', + 'box-shadow': '#3c3b3b 0 0 12px', + width: '300px', + [`&.${ERROR_CLASS}`]: { + 'background-color': '#D5122B' + }, + [`&.${WARN_CLASS}`]: { + 'background-color': '#F5AA1E' + }, + [`&.${SUCCESS_CLASS}`]: { + 'background-color': '#7AC13E' + }, + [`&.${INFO_CLASS}`]: { + 'background-color': '#4196E1' + }, + '&:hover': { + opacity: 1, + 'box-shadow': '#000 0 0 12px' + } + }, + [`.${TITLE_CLASS}`]: { + 'font-weight': '500' + }, + [`.${MESSAGE_CLASS}`]: { + display: 'inline-block', + 'vertical-align': 'middle', + width: '240px', + padding: '0 12px' + } + } +} + +function makeNode (type = 'div') { + return document.createElement(type) +} + +function createIcon (node, type, config) { + const iconNode = makeNode(config.icons[type].nodeType) + const attrs = config.icons[type].attrs + + for (const k in attrs) { + if (attrs.hasOwnProperty(k)) { + iconNode.setAttribute(k, attrs[k]) + } + } + + node.appendChild(iconNode) +} + +function addElem (node, text, className, config) { + const elem = makeNode() + elem.className = className + if (config.allowHtml) { + elem.innerHTML = text + } else { + elem.appendChild(document.createTextNode(text)) + } + node.appendChild(elem) +} + +function getTypeClass (type) { + if (type === SUCCESS) return SUCCESS_CLASS + if (type === WARN) return WARN_CLASS + if (type === ERROR) return ERROR_CLASS + if (type === INFO) return INFO_CLASS + + return EMPTY_STRING +} + +const miniToastr = { + config, + isInitialised: false, + showMessage (message, title, type, timeout, cb, overrideConf) { + const config = {} + Object.assign(config, this.config) + Object.assign(config, overrideConf) + + const notificationElem = makeNode() + notificationElem.className = `${NOTIFICATION_CLASS} ${getTypeClass(type)}` + + notificationElem.onclick = function () { + config.animation(notificationElem, null) + } + + if (title) addElem(notificationElem, title, TITLE_CLASS, config) + if (config.icons[type]) createIcon(notificationElem, type, config) + if (message) addElem(notificationElem, message, MESSAGE_CLASS, config) + + config.node.insertBefore(notificationElem, config.node.firstChild) + setTimeout(() => config.animation(notificationElem, cb), timeout || config.timeout + ) + + if (cb) cb() + return this + }, + init (aConfig) { + const newConfig = {} + Object.assign(newConfig, config) + Object.assign(newConfig, aConfig) + this.config = newConfig + + const cssStr = makeCss(newConfig.style) + appendStyles(cssStr) + + newConfig.node.id = CONTAINER_CLASS + newConfig.node.className = CONTAINER_CLASS + newConfig.appendTarget.appendChild(newConfig.node) + + Object.keys(newConfig.types).forEach(v => { + this[newConfig.types[v]] = function (message, title, timeout, cb, config) { + this.showMessage(message, title, newConfig.types[v], timeout, cb, config) + return this + }.bind(this) + } + ) + + this.isInitialised = true + + return this + }, + setIcon (type, nodeType = 'i', attrs = []) { + attrs.class = attrs.class ? attrs.class + ' ' + ICON_CLASS : ICON_CLASS + + this.config.icons[type] = {nodeType, attrs} + } +} + +/* harmony default export */ __webpack_exports__["default"] = (miniToastr); + +/***/ }), + +/***/ "./node_modules/preact/dist/preact.mjs": +/*!*********************************************!*\ + !*** ./node_modules/preact/dist/preact.mjs ***! + \*********************************************/ +/*! exports provided: default, h, createElement, cloneElement, createRef, Component, render, rerender, options */ +/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return h; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneElement", function() { return cloneElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return createRef; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rerender", function() { return rerender; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "options", function() { return options; }); +var VNode = function VNode() {}; + +var options = {}; + +var stack = []; + +var EMPTY_CHILDREN = []; + +function h(nodeName, attributes) { + var children = EMPTY_CHILDREN, + lastSimple, + child, + simple, + i; + for (i = arguments.length; i-- > 2;) { + stack.push(arguments[i]); + } + if (attributes && attributes.children != null) { + if (!stack.length) stack.push(attributes.children); + delete attributes.children; + } + while (stack.length) { + if ((child = stack.pop()) && child.pop !== undefined) { + for (i = child.length; i--;) { + stack.push(child[i]); + } + } else { + if (typeof child === 'boolean') child = null; + + if (simple = typeof nodeName !== 'function') { + if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false; + } + + if (simple && lastSimple) { + children[children.length - 1] += child; + } else if (children === EMPTY_CHILDREN) { + children = [child]; + } else { + children.push(child); + } + + lastSimple = simple; + } + } + + var p = new VNode(); + p.nodeName = nodeName; + p.children = children; + p.attributes = attributes == null ? undefined : attributes; + p.key = attributes == null ? undefined : attributes.key; + + if (options.vnode !== undefined) options.vnode(p); + + return p; +} + +function extend(obj, props) { + for (var i in props) { + obj[i] = props[i]; + }return obj; +} + +function applyRef(ref, value) { + if (ref != null) { + if (typeof ref == 'function') ref(value);else ref.current = value; + } +} + +var defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout; + +function cloneElement(vnode, props) { + return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children); +} + +var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i; + +var items = []; + +function enqueueRender(component) { + if (!component._dirty && (component._dirty = true) && items.push(component) == 1) { + (options.debounceRendering || defer)(rerender); + } +} + +function rerender() { + var p; + while (p = items.pop()) { + if (p._dirty) renderComponent(p); + } +} + +function isSameNodeType(node, vnode, hydrating) { + if (typeof vnode === 'string' || typeof vnode === 'number') { + return node.splitText !== undefined; + } + if (typeof vnode.nodeName === 'string') { + return !node._componentConstructor && isNamedNode(node, vnode.nodeName); + } + return hydrating || node._componentConstructor === vnode.nodeName; +} + +function isNamedNode(node, nodeName) { + return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase(); +} + +function getNodeProps(vnode) { + var props = extend({}, vnode.attributes); + props.children = vnode.children; + + var defaultProps = vnode.nodeName.defaultProps; + if (defaultProps !== undefined) { + for (var i in defaultProps) { + if (props[i] === undefined) { + props[i] = defaultProps[i]; + } + } + } + + return props; +} + +function createNode(nodeName, isSvg) { + var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName); + node.normalizedNodeName = nodeName; + return node; +} + +function removeNode(node) { + var parentNode = node.parentNode; + if (parentNode) parentNode.removeChild(node); +} + +function setAccessor(node, name, old, value, isSvg) { + if (name === 'className') name = 'class'; + + if (name === 'key') {} else if (name === 'ref') { + applyRef(old, null); + applyRef(value, node); + } else if (name === 'class' && !isSvg) { + node.className = value || ''; + } else if (name === 'style') { + if (!value || typeof value === 'string' || typeof old === 'string') { + node.style.cssText = value || ''; + } + if (value && typeof value === 'object') { + if (typeof old !== 'string') { + for (var i in old) { + if (!(i in value)) node.style[i] = ''; + } + } + for (var i in value) { + node.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i]; + } + } + } else if (name === 'dangerouslySetInnerHTML') { + if (value) node.innerHTML = value.__html || ''; + } else if (name[0] == 'o' && name[1] == 'n') { + var useCapture = name !== (name = name.replace(/Capture$/, '')); + name = name.toLowerCase().substring(2); + if (value) { + if (!old) node.addEventListener(name, eventProxy, useCapture); + } else { + node.removeEventListener(name, eventProxy, useCapture); + } + (node._listeners || (node._listeners = {}))[name] = value; + } else if (name !== 'list' && name !== 'type' && !isSvg && name in node) { + try { + node[name] = value == null ? '' : value; + } catch (e) {} + if ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name); + } else { + var ns = isSvg && name !== (name = name.replace(/^xlink:?/, '')); + + if (value == null || value === false) { + if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name); + } else if (typeof value !== 'function') { + if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value); + } + } +} + +function eventProxy(e) { + return this._listeners[e.type](options.event && options.event(e) || e); +} + +var mounts = []; + +var diffLevel = 0; + +var isSvgMode = false; + +var hydrating = false; + +function flushMounts() { + var c; + while (c = mounts.shift()) { + if (options.afterMount) options.afterMount(c); + if (c.componentDidMount) c.componentDidMount(); + } +} + +function diff(dom, vnode, context, mountAll, parent, componentRoot) { + if (!diffLevel++) { + isSvgMode = parent != null && parent.ownerSVGElement !== undefined; + + hydrating = dom != null && !('__preactattr_' in dom); + } + + var ret = idiff(dom, vnode, context, mountAll, componentRoot); + + if (parent && ret.parentNode !== parent) parent.appendChild(ret); + + if (! --diffLevel) { + hydrating = false; + + if (!componentRoot) flushMounts(); + } + + return ret; +} + +function idiff(dom, vnode, context, mountAll, componentRoot) { + var out = dom, + prevSvgMode = isSvgMode; + + if (vnode == null || typeof vnode === 'boolean') vnode = ''; + + if (typeof vnode === 'string' || typeof vnode === 'number') { + if (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) { + if (dom.nodeValue != vnode) { + dom.nodeValue = vnode; + } + } else { + out = document.createTextNode(vnode); + if (dom) { + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + recollectNodeTree(dom, true); + } + } + + out['__preactattr_'] = true; + + return out; + } + + var vnodeName = vnode.nodeName; + if (typeof vnodeName === 'function') { + return buildComponentFromVNode(dom, vnode, context, mountAll); + } + + isSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode; + + vnodeName = String(vnodeName); + if (!dom || !isNamedNode(dom, vnodeName)) { + out = createNode(vnodeName, isSvgMode); + + if (dom) { + while (dom.firstChild) { + out.appendChild(dom.firstChild); + } + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + + recollectNodeTree(dom, true); + } + } + + var fc = out.firstChild, + props = out['__preactattr_'], + vchildren = vnode.children; + + if (props == null) { + props = out['__preactattr_'] = {}; + for (var a = out.attributes, i = a.length; i--;) { + props[a[i].name] = a[i].value; + } + } + + if (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) { + if (fc.nodeValue != vchildren[0]) { + fc.nodeValue = vchildren[0]; + } + } else if (vchildren && vchildren.length || fc != null) { + innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null); + } + + diffAttributes(out, vnode.attributes, props); + + isSvgMode = prevSvgMode; + + return out; +} + +function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) { + var originalChildren = dom.childNodes, + children = [], + keyed = {}, + keyedLen = 0, + min = 0, + len = originalChildren.length, + childrenLen = 0, + vlen = vchildren ? vchildren.length : 0, + j, + c, + f, + vchild, + child; + + if (len !== 0) { + for (var i = 0; i < len; i++) { + var _child = originalChildren[i], + props = _child['__preactattr_'], + key = vlen && props ? _child._component ? _child._component.__key : props.key : null; + if (key != null) { + keyedLen++; + keyed[key] = _child; + } else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) { + children[childrenLen++] = _child; + } + } + } + + if (vlen !== 0) { + for (var i = 0; i < vlen; i++) { + vchild = vchildren[i]; + child = null; + + var key = vchild.key; + if (key != null) { + if (keyedLen && keyed[key] !== undefined) { + child = keyed[key]; + keyed[key] = undefined; + keyedLen--; + } + } else if (min < childrenLen) { + for (j = min; j < childrenLen; j++) { + if (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) { + child = c; + children[j] = undefined; + if (j === childrenLen - 1) childrenLen--; + if (j === min) min++; + break; + } + } + } + + child = idiff(child, vchild, context, mountAll); + + f = originalChildren[i]; + if (child && child !== dom && child !== f) { + if (f == null) { + dom.appendChild(child); + } else if (child === f.nextSibling) { + removeNode(f); + } else { + dom.insertBefore(child, f); + } + } + } + } + + if (keyedLen) { + for (var i in keyed) { + if (keyed[i] !== undefined) recollectNodeTree(keyed[i], false); + } + } + + while (min <= childrenLen) { + if ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false); + } +} + +function recollectNodeTree(node, unmountOnly) { + var component = node._component; + if (component) { + unmountComponent(component); + } else { + if (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null); + + if (unmountOnly === false || node['__preactattr_'] == null) { + removeNode(node); + } + + removeChildren(node); + } +} + +function removeChildren(node) { + node = node.lastChild; + while (node) { + var next = node.previousSibling; + recollectNodeTree(node, true); + node = next; + } +} + +function diffAttributes(dom, attrs, old) { + var name; + + for (name in old) { + if (!(attrs && attrs[name] != null) && old[name] != null) { + setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode); + } + } + + for (name in attrs) { + if (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) { + setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode); + } + } +} + +var recyclerComponents = []; + +function createComponent(Ctor, props, context) { + var inst, + i = recyclerComponents.length; + + if (Ctor.prototype && Ctor.prototype.render) { + inst = new Ctor(props, context); + Component.call(inst, props, context); + } else { + inst = new Component(props, context); + inst.constructor = Ctor; + inst.render = doRender; + } + + while (i--) { + if (recyclerComponents[i].constructor === Ctor) { + inst.nextBase = recyclerComponents[i].nextBase; + recyclerComponents.splice(i, 1); + return inst; + } + } + + return inst; +} + +function doRender(props, state, context) { + return this.constructor(props, context); +} + +function setComponentProps(component, props, renderMode, context, mountAll) { + if (component._disable) return; + component._disable = true; + + component.__ref = props.ref; + component.__key = props.key; + delete props.ref; + delete props.key; + + if (typeof component.constructor.getDerivedStateFromProps === 'undefined') { + if (!component.base || mountAll) { + if (component.componentWillMount) component.componentWillMount(); + } else if (component.componentWillReceiveProps) { + component.componentWillReceiveProps(props, context); + } + } + + if (context && context !== component.context) { + if (!component.prevContext) component.prevContext = component.context; + component.context = context; + } + + if (!component.prevProps) component.prevProps = component.props; + component.props = props; + + component._disable = false; + + if (renderMode !== 0) { + if (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) { + renderComponent(component, 1, mountAll); + } else { + enqueueRender(component); + } + } + + applyRef(component.__ref, component); +} + +function renderComponent(component, renderMode, mountAll, isChild) { + if (component._disable) return; + + var props = component.props, + state = component.state, + context = component.context, + previousProps = component.prevProps || props, + previousState = component.prevState || state, + previousContext = component.prevContext || context, + isUpdate = component.base, + nextBase = component.nextBase, + initialBase = isUpdate || nextBase, + initialChildComponent = component._component, + skip = false, + snapshot = previousContext, + rendered, + inst, + cbase; + + if (component.constructor.getDerivedStateFromProps) { + state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state)); + component.state = state; + } + + if (isUpdate) { + component.props = previousProps; + component.state = previousState; + component.context = previousContext; + if (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) { + skip = true; + } else if (component.componentWillUpdate) { + component.componentWillUpdate(props, state, context); + } + component.props = props; + component.state = state; + component.context = context; + } + + component.prevProps = component.prevState = component.prevContext = component.nextBase = null; + component._dirty = false; + + if (!skip) { + rendered = component.render(props, state, context); + + if (component.getChildContext) { + context = extend(extend({}, context), component.getChildContext()); + } + + if (isUpdate && component.getSnapshotBeforeUpdate) { + snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState); + } + + var childComponent = rendered && rendered.nodeName, + toUnmount, + base; + + if (typeof childComponent === 'function') { + + var childProps = getNodeProps(rendered); + inst = initialChildComponent; + + if (inst && inst.constructor === childComponent && childProps.key == inst.__key) { + setComponentProps(inst, childProps, 1, context, false); + } else { + toUnmount = inst; + + component._component = inst = createComponent(childComponent, childProps, context); + inst.nextBase = inst.nextBase || nextBase; + inst._parentComponent = component; + setComponentProps(inst, childProps, 0, context, false); + renderComponent(inst, 1, mountAll, true); + } + + base = inst.base; + } else { + cbase = initialBase; + + toUnmount = initialChildComponent; + if (toUnmount) { + cbase = component._component = null; + } + + if (initialBase || renderMode === 1) { + if (cbase) cbase._component = null; + base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true); + } + } + + if (initialBase && base !== initialBase && inst !== initialChildComponent) { + var baseParent = initialBase.parentNode; + if (baseParent && base !== baseParent) { + baseParent.replaceChild(base, initialBase); + + if (!toUnmount) { + initialBase._component = null; + recollectNodeTree(initialBase, false); + } + } + } + + if (toUnmount) { + unmountComponent(toUnmount); + } + + component.base = base; + if (base && !isChild) { + var componentRef = component, + t = component; + while (t = t._parentComponent) { + (componentRef = t).base = base; + } + base._component = componentRef; + base._componentConstructor = componentRef.constructor; + } + } + + if (!isUpdate || mountAll) { + mounts.push(component); + } else if (!skip) { + + if (component.componentDidUpdate) { + component.componentDidUpdate(previousProps, previousState, snapshot); + } + if (options.afterUpdate) options.afterUpdate(component); + } + + while (component._renderCallbacks.length) { + component._renderCallbacks.pop().call(component); + }if (!diffLevel && !isChild) flushMounts(); +} + +function buildComponentFromVNode(dom, vnode, context, mountAll) { + var c = dom && dom._component, + originalComponent = c, + oldDom = dom, + isDirectOwner = c && dom._componentConstructor === vnode.nodeName, + isOwner = isDirectOwner, + props = getNodeProps(vnode); + while (c && !isOwner && (c = c._parentComponent)) { + isOwner = c.constructor === vnode.nodeName; + } + + if (c && isOwner && (!mountAll || c._component)) { + setComponentProps(c, props, 3, context, mountAll); + dom = c.base; + } else { + if (originalComponent && !isDirectOwner) { + unmountComponent(originalComponent); + dom = oldDom = null; + } + + c = createComponent(vnode.nodeName, props, context); + if (dom && !c.nextBase) { + c.nextBase = dom; + + oldDom = null; + } + setComponentProps(c, props, 1, context, mountAll); + dom = c.base; + + if (oldDom && dom !== oldDom) { + oldDom._component = null; + recollectNodeTree(oldDom, false); + } + } + + return dom; +} + +function unmountComponent(component) { + if (options.beforeUnmount) options.beforeUnmount(component); + + var base = component.base; + + component._disable = true; + + if (component.componentWillUnmount) component.componentWillUnmount(); + + component.base = null; + + var inner = component._component; + if (inner) { + unmountComponent(inner); + } else if (base) { + if (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null); + + component.nextBase = base; + + removeNode(base); + recyclerComponents.push(component); + + removeChildren(base); + } + + applyRef(component.__ref, null); +} + +function Component(props, context) { + this._dirty = true; + + this.context = context; + + this.props = props; + + this.state = this.state || {}; + + this._renderCallbacks = []; +} + +extend(Component.prototype, { + setState: function setState(state, callback) { + if (!this.prevState) this.prevState = this.state; + this.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state); + if (callback) this._renderCallbacks.push(callback); + enqueueRender(this); + }, + forceUpdate: function forceUpdate(callback) { + if (callback) this._renderCallbacks.push(callback); + renderComponent(this, 2); + }, + render: function render() {} +}); + +function render(vnode, parent, merge) { + return diff(merge, vnode, {}, false, parent, false); +} + +function createRef() { + return {}; +} + +var preact = { + h: h, + createElement: h, + cloneElement: cloneElement, + createRef: createRef, + Component: Component, + render: render, + rerender: rerender, + options: options +}; + +/* harmony default export */ __webpack_exports__["default"] = (preact); + +//# sourceMappingURL=preact.mjs.map + + +/***/ }), + +/***/ "./node_modules/webpack/buildin/global.js": +/*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || new Function("return this")(); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), + +/***/ "./src/app.js": +/*!********************!*\ + !*** ./src/app.js ***! + \********************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var mini_toastr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mini-toastr */ "./node_modules/mini-toastr/mini-toastr.js"); +/* harmony import */ var _components_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/menu */ "./src/components/menu/index.js"); +/* harmony import */ var _components_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/page */ "./src/components/page/index.js"); +/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conf/config.dat */ "./src/conf/config.dat.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _lib_loader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/loader */ "./src/lib/loader.js"); +/* harmony import */ var _lib_plugins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/plugins */ "./src/lib/plugins.js"); +/* harmony import */ var _lib_menu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/menu */ "./src/lib/menu.js"); + + + + + + + + + +mini_toastr__WEBPACK_IMPORTED_MODULE_1__["default"].init({}); + +const clearSlashes = path => { + return path.toString().replace(/\/$/, '').replace(/^\//, ''); +}; + +const getFragment = () => { + const match = window.location.href.match(/#(.*)$/); + const fragment = match ? match[1] : ''; + return clearSlashes(fragment); +}; + +class App extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor() { + super(); + this.state = { + menuActive: false, + menu: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus[0], + page: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus[0], + changed: false + }; + + this.menuToggle = () => { + this.setState({ + menuActive: !this.state.menuActive + }); + }; + } + + render(props, state) { + const params = getFragment().split('/').slice(2); + const active = this.state.menuActive ? 'active' : ''; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + id: "layout", + class: active + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + id: "menuLink", + class: "menu-link", + onClick: this.menuToggle + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", null)), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_menu__WEBPACK_IMPORTED_MODULE_2__["Menu"], { + menus: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus, + selected: state.menu + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_page__WEBPACK_IMPORTED_MODULE_3__["Page"], { + page: state.page, + params: params, + changed: this.state.changed + })); + } + + componentDidMount() { + _lib_loader__WEBPACK_IMPORTED_MODULE_6__["loader"].hide(); + let current = ''; + + const fn = () => { + const newFragment = getFragment(); + const diff = _lib_settings__WEBPACK_IMPORTED_MODULE_5__["settings"].diff(); + + if (this.state.changed !== !!diff.length) { + this.setState({ + changed: !this.state.changed + }); + } + + if (current !== newFragment) { + current = newFragment; + const parts = current.split('/'); + const m = _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus.find(menu => menu.href === parts[0]); + const page = parts.length > 1 ? _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m; + + if (page) { + this.setState({ + page, + m, + menuActive: false + }); + } + } + }; + + this.interval = setInterval(fn, 100); + } + + componentWillUnmount() {} + +} + +const load = async () => { + await Object(_conf_config_dat__WEBPACK_IMPORTED_MODULE_4__["loadConfig"])(); + await Object(_lib_plugins__WEBPACK_IMPORTED_MODULE_7__["loadPlugins"])(); + Object(preact__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(App, null), document.body); +}; + +load(); + +/***/ }), + +/***/ "./src/components/form/index.js": +/*!**************************************!*\ + !*** ./src/components/form/index.js ***! + \**************************************/ +/*! exports provided: Form */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Form", function() { return Form; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/helpers */ "./src/lib/helpers.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/settings */ "./src/lib/settings.js"); + + + +class Form extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + + this.saveForm = () => { + const values = {}; + const groups = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(this.props.config.groups); + groups.map(groupKey => { + const group = this.props.config.groups[groupKey]; + const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(group.configs); + if (!values[groupKey]) values[groupKey] = {}; + keys.map(key => { + let val = this.form.elements[`${groupKey}.${key}`].value; + + if (group.configs[key].type === 'checkbox') { + val = val === 'on' ? 1 : 0; + } + + values[groupKey][key] = val; + }); + }); + this.props.config.onSave(values); + }; + + this.resetForm = () => { + this.form.reset(); + }; + + this.onChange = (id, prop, config = {}) => { + return e => { + let val = this.form.elements[id].value; + + if (config.type === 'checkbox') { + val = this.form.elements[id].checked ? 1 : 0; + } else if (config.type === 'number' || config.type === 'ip') { + val = parseFloat(val); + } else if (config.type === 'select') { + val = isNaN(val) ? val : parseInt(val); + } + + Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["set"])(this.props.selected, prop, val); + + if (config.onChange) { + config.onChange(e); + } + }; + }; + } + + renderConfig(id, config, value, varName) { + switch (config.type) { + case 'string': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "text", + value: value, + onChange: this.onChange(id, varName, config) + }); + + case 'number': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "number", + value: value, + onChange: this.onChange(id, varName, config) + }); + + case 'ip': + return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.0`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.0`, `${varName}.0`, config), + style: "width: 80px", + value: value ? value[0] : null + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.1`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.1`, `${varName}.1`, config), + style: "width: 80px", + value: value ? value[1] : null + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.2`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.2`, `${varName}.2`, config), + style: "width: 80px", + value: value ? value[2] : null + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: `${id}.3`, + type: "number", + min: "0", + max: "255", + onChange: this.onChange(`${id}.3`, `${varName}.3`, config), + style: "width: 80px", + value: value ? value[3] : null + })]; + + case 'password': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "password", + onChange: this.onChange(id, varName, config) + }); + + case 'checkbox': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "checkbox", + defaultChecked: value, + onChange: this.onChange(id, varName, config) + }); + + case 'select': + const options = typeof config.options === 'function' ? config.options() : config.options; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("select", { + id: id, + type: "password", + onChange: this.onChange(id, varName, config) + }, options.map(option => { + const name = option instanceof Object ? option.name : option; + const val = option instanceof Object ? option.value : option; + + if (val === value) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: val, + selected: true + }, name); + } else { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: val + }, name); + } + })); + + case 'file': + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: id, + type: "file" + }); + + case 'button': + if (config.if != null && !config.if) return null; + + const clickEvent = () => { + if (!config.click) return; + config.click(this.props.selected); + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: clickEvent + }, "GET IT"); + } + } + + renderConfigGroup(id, configs, values) { + const configArray = Array.isArray(configs) ? configs : [configs]; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, configArray.map((conf, i) => { + const varId = configArray.length > 1 ? `${id}.${i}` : id; + const varName = conf.var ? conf.var : varId; + const val = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["get"])(values, varName, null); + return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: varId + }, conf.name), this.renderConfig(varId, conf, val, varName)]; + })); + } + + renderGroup(id, group, values) { + const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(group.configs); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("fieldset", { + name: id + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", null, group.name), keys.map(key => { + const conf = group.configs[key]; + return this.renderConfigGroup(`${id}.${key}`, conf, values); + })); + } + + render(props) { + const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(props.config.groups); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned", + ref: ref => this.form = ref + }, keys.map(key => this.renderGroup(key, props.config.groups[key], props.selected))); + } + +} + +/***/ }), + +/***/ "./src/components/menu/index.js": +/*!**************************************!*\ + !*** ./src/components/menu/index.js ***! + \**************************************/ +/*! exports provided: Menu */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Menu", function() { return Menu; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); + +class Menu extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + renderMenuItem(menu) { + if (menu.action) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { + class: "pure-menu-item" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: `#${menu.href}`, + onClick: menu.action, + class: "pure-menu-link" + }, menu.title)); + } + + if (menu.href === this.props.selected.href) { + return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { + class: "pure-menu-item pure-menu-item-selected" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: `#${menu.href}`, + class: "pure-menu-link" + }, menu.title)), ...menu.children.map(child => { + if (child.action) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { + class: "pure-menu-item submenu" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: `#${child.href}`, + onClick: child.action, + class: "pure-menu-link" + }, child.title)); + } + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { + class: "pure-menu-item submenu" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: `#${child.href}`, + class: "pure-menu-link" + }, child.title)); + })]; + } + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { + class: "pure-menu-item" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: `#${menu.href}`, + class: "pure-menu-link" + }, menu.title)); + } + + render(props) { + if (props.open === false) return; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + id: "menu" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-menu" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + class: "pure-menu-heading", + href: "/" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "ESP"), "Easy"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", { + class: "pure-menu-list" + }, props.menus.map(menu => this.renderMenuItem(menu))))); + } + +} + +/***/ }), + +/***/ "./src/components/page/index.js": +/*!**************************************!*\ + !*** ./src/components/page/index.js ***! + \**************************************/ +/*! exports provided: Page */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Page", function() { return Page; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); + +class Page extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + const PageComponent = props.page.component; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + id: "main" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "header" + }, "> ", props.page.pagetitle == null ? props.page.title : props.page.pagetitle, props.changed ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + style: "float: right", + href: "#tools/diff" + }, "CHANGED! Click here to SAVE") : null), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: `content ${props.page.class}` + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(PageComponent, { + params: props.params + }))); + } + +} + +/***/ }), + +/***/ "./src/conf/config.dat.js": +/*!********************************!*\ + !*** ./src/conf/config.dat.js ***! + \********************************/ +/*! exports provided: configDatParseConfig, TaskSettings, ControllerSettings, NotificationSettings, SecuritySettings, loadConfig, saveConfig */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "configDatParseConfig", function() { return configDatParseConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TaskSettings", function() { return TaskSettings; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllerSettings", function() { return ControllerSettings; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotificationSettings", function() { return NotificationSettings; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SecuritySettings", function() { return SecuritySettings; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadConfig", function() { return loadConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveConfig", function() { return saveConfig; }); +/* harmony import */ var _lib_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/parser */ "./src/lib/parser.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + +const TASKS_MAX = 12; +const NOTIFICATION_MAX = 3; +const CONTROLLER_MAX = 3; +const PLUGIN_CONFIGVAR_MAX = 8; +const PLUGIN_CONFIGFLOATVAR_MAX = 4; +const PLUGIN_CONFIGLONGVAR_MAX = 4; +const PLUGIN_EXTRACONFIGVAR_MAX = 16; +const NAME_FORMULA_LENGTH_MAX = 40; +const VARS_PER_TASK = 4; +const configDatParseConfig = [{ + prop: 'status.PID', + type: 'int32' +}, { + prop: 'status.version', + type: 'int32' +}, { + prop: 'status.build', + type: 'int16' +}, { + prop: 'config.IP.ip', + type: 'bytes', + length: 4 +}, { + prop: 'config.IP.gw', + type: 'bytes', + length: 4 +}, { + prop: 'config.IP.subnet', + type: 'bytes', + length: 4 +}, { + prop: 'config.IP.dns', + type: 'bytes', + length: 4 +}, { + prop: 'config.experimental.ip_octet', + type: 'byte' +}, { + prop: 'config.general.unitnr', + type: 'byte' +}, { + prop: 'config.general.unitname', + type: 'string', + length: 26 +}, { + prop: 'config.ntp.host', + type: 'string', + length: 64 +}, { + prop: 'config.sleep.sleeptime', + type: 'int32' +}, { + prop: 'hardware.i2c.sda', + type: 'byte' +}, { + prop: 'hardware.i2c.scl', + type: 'byte' +}, { + prop: 'hardware.led.gpio', + type: 'byte' +}, { + prop: 'Pin_sd_cs', + type: 'byte' +}, // TODO +{ + prop: 'hardware.gpio', + type: 'bytes', + length: 17 +}, { + prop: 'config.log.syslog_ip', + type: 'bytes', + length: 4 +}, { + prop: 'config.espnetwork.port', + type: 'int32' +}, { + prop: 'config.log.syslog_level', + type: 'byte' +}, { + prop: 'config.log.serial_level', + type: 'byte' +}, { + prop: 'config.log.web_level', + type: 'byte' +}, { + prop: 'config.log.sd_level', + type: 'byte' +}, { + prop: 'config.serial.baudrate', + type: 'int32' +}, { + prop: 'config.mqtt.interval', + type: 'int32' +}, { + prop: 'config.sleep.awaketime', + type: 'byte' +}, { + prop: 'CustomCSS', + type: 'byte' +}, // TODO +{ + prop: 'config.dst.enabled', + type: 'byte' +}, { + prop: 'config.experimental.WDI2CAddress', + type: 'byte' +}, { + prop: 'config.rules.enabled', + type: 'byte' +}, { + prop: 'config.serial.enabled', + type: 'byte' +}, { + prop: 'config.ssdp.enabled', + type: 'byte' +}, { + prop: 'config.ntp.enabled', + type: 'byte' +}, { + prop: 'config.experimental.WireClockStretchLimit', + type: 'int32' +}, { + prop: 'GlobalSync', + type: 'byte' +}, // TODO +{ + prop: 'config.experimental.ConnectionFailuresThreshold', + type: 'int32' +}, { + prop: 'TimeZone', + type: 'int16', + signed: true +}, // TODO +{ + prop: 'config.mqtt.retain_flag', + type: 'byte' +}, { + prop: 'hardware.spi.enabled', + type: 'byte' +}, [...Array(CONTROLLER_MAX)].map((x, i) => ({ + prop: `controllers[${i}].protocol`, + type: 'byte' +})), [...Array(NOTIFICATION_MAX)].map((x, i) => ({ + prop: `notifications[${i}].type`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].device`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].OLD_TaskDeviceID`, + type: 'int32' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].gpio1`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].gpio2`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].gpio3`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].gpio4`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].pin1pullup`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].configs`, + type: 'ints', + length: PLUGIN_CONFIGVAR_MAX +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].pin1inversed`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].configs_float`, + type: 'floats', + length: PLUGIN_CONFIGFLOATVAR_MAX +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].configs_long`, + type: 'longs', + length: PLUGIN_CONFIGFLOATVAR_MAX +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].OLD_senddata`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].global_sync`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].data_feed`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].interval`, + type: 'int32' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].enabled`, + type: 'byte' +})), [...Array(CONTROLLER_MAX)].map((x, i) => ({ + prop: `controllers[${i}].enabled`, + type: 'byte' +})), [...Array(NOTIFICATION_MAX)].map((x, i) => ({ + prop: `notifications[${i}].enabled`, + type: 'byte' +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].TaskDeviceID`, + type: 'longs', + length: CONTROLLER_MAX +})), [...Array(TASKS_MAX)].map((x, i) => ({ + prop: `tasks[${i}].TaskDeviceSendData`, + type: 'bytes', + length: CONTROLLER_MAX +})), { + prop: 'hardware.led.inverse', + type: 'byte' +}, { + prop: 'config.sleep.sleeponfailiure', + type: 'byte' +}, { + prop: 'UseValueLogger', + type: 'byte' +}, // TODO +{ + prop: 'ArduinoOTAEnable', + type: 'byte' +}, // TODO +{ + prop: 'config.dst.DST_Start', + type: 'int16' +}, { + prop: 'config.dst.DST_End', + type: 'int16' +}, { + prop: 'UseRTOSMultitasking', + type: 'byte' +}, // TODO +{ + prop: 'hardware.reset.pin', + type: 'byte' +}, { + prop: 'config.log.syslog_facility', + type: 'byte' +}, { + prop: 'StructSize', + type: 'int32' +}, // TODO +{ + prop: 'config.mqtt.useunitname', + type: 'byte' +}, { + prop: 'config.location.lat', + type: 'float' +}, { + prop: 'config.location.long', + type: 'float' +}, { + prop: 'config._emptyBit', + type: 'bit' +}, { + prop: 'config.general.appendunit', + type: 'bit' +}, { + prop: 'config.mqtt.changeclientid', + type: 'bit' +}, { + prop: 'config.rules.oldengine', + type: 'bit' +}, { + prop: 'config._bit4', + type: 'bit' +}, { + prop: 'config._bit5', + type: 'bit' +}, { + prop: 'config._bit6', + type: 'bit' +}, { + prop: 'config._bit7', + type: 'bit' +}, { + prop: 'config._bits1', + type: 'byte' +}, { + prop: 'config._bits2', + type: 'byte' +}, { + prop: 'config._bits3', + type: 'byte' +}, { + prop: 'ResetFactoryDefaultPreference', + type: 'int32' +}].flat(); +const TaskSettings = [{ + prop: 'index', + type: 'byte' +}, { + prop: 'name', + type: 'string', + length: NAME_FORMULA_LENGTH_MAX + 1 +}, [...Array(VARS_PER_TASK)].map((x, i) => ({ + prop: `values[${i}].formula`, + type: 'string', + length: NAME_FORMULA_LENGTH_MAX + 1 +})), [...Array(VARS_PER_TASK)].map((x, i) => ({ + prop: `values[${i}].name`, + type: 'string', + length: NAME_FORMULA_LENGTH_MAX + 1 +})), { + prop: 'value_names', + type: 'string', + length: NAME_FORMULA_LENGTH_MAX + 1 +}, { + prop: 'plugin_config_long', + type: 'longs', + length: PLUGIN_EXTRACONFIGVAR_MAX +}, { + prop: 'decimals', + type: 'bytes', + length: VARS_PER_TASK +}, { + prop: 'plugin_config', + type: 'ints', + length: PLUGIN_EXTRACONFIGVAR_MAX +}].flat(); +const ControllerSettings = [{ + prop: 'dns', + type: 'byte' +}, { + prop: 'IP', + type: 'bytes', + length: 4 +}, { + prop: 'port', + type: 'int32' +}, { + prop: 'hostname', + type: 'string', + length: 65 +}, { + prop: 'publish', + type: 'string', + length: 129 +}, { + prop: 'subscribe', + type: 'string', + length: 129 +}, { + prop: 'MQTT_lwt_topic', + type: 'string', + length: 129 +}, { + prop: 'lwt_message_connect', + type: 'string', + length: 129 +}, { + prop: 'lwt_message_disconnect', + type: 'string', + length: 129 +}, { + prop: 'minimal_time_between', + type: 'int32' +}, { + prop: 'max_queue_depth', + type: 'int32' +}, { + prop: 'max_retry', + type: 'int32' +}, { + prop: 'delete_oldest', + type: 'byte' +}, { + prop: 'client_timeout', + type: 'int32' +}, { + prop: 'must_check_reply', + type: 'byte' +}]; +const NotificationSettings = [{ + prop: 'server', + type: 'string', + length: 65 +}, { + prop: 'port', + type: 'int16' +}, { + prop: 'domain', + type: 'string', + length: 65 +}, { + prop: 'sender', + type: 'string', + length: 65 +}, { + prop: 'receiver', + type: 'string', + length: 65 +}, { + prop: 'subject', + type: 'string', + length: 129 +}, { + prop: 'body', + type: 'string', + length: 513 +}, { + prop: 'pin1', + type: 'byte' +}, { + prop: 'pin2', + type: 'byte' +}, { + prop: 'user', + type: 'string', + length: 49 +}, { + prop: 'pass', + type: 'string', + length: 33 +}]; +const SecuritySettings = [{ + prop: 'WifiSSID', + type: 'string', + length: 32 +}, { + prop: 'WifiKey', + type: 'string', + length: 64 +}, { + prop: 'WifiSSID2', + type: 'string', + length: 32 +}, { + prop: 'WifiKey2', + type: 'string', + length: 64 +}, { + prop: 'WifiAPKey', + type: 'string', + length: 64 +}, [...Array(CONTROLLER_MAX)].map((x, i) => ({ + prop: `controllers[${i}].user`, + type: 'string', + length: 26 +})), [...Array(CONTROLLER_MAX)].map((x, i) => ({ + prop: `controllers[${i}].password`, + type: 'string', + length: 64 +})), { + prop: 'password', + type: 'string', + length: 26 +}, { + prop: 'AllowedIPrangeLow', + type: 'bytes', + length: 4 +}, { + prop: 'AllowedIPrangeHigh', + type: 'bytes', + length: 4 +}, { + prop: 'IPblockLevel', + type: 'byte' +}, { + prop: 'ProgmemMd5', + type: 'bytes', + length: 16 +}, { + prop: 'md5', + type: 'bytes', + length: 16 +}].flat(); +const loadConfig = () => { + return fetch('config.dat').then(response => response.arrayBuffer()).then(async response => { + const settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, configDatParseConfig); + [...Array(12)].map((x, i) => { + settings.tasks[i].settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, TaskSettings, 1024 * 4 + 1024 * 2 * i); + settings.tasks[i].extra = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, TaskSettings, 1024 * 5 + 1024 * 2 * i); + }); + [...Array(3)].map((x, i) => { + settings.controllers[i].settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, ControllerSettings, 1024 * 27 + 1024 * 2 * i); + settings.controllers[i].extra = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, ControllerSettings, 1024 * 28 + 1024 * 2 * i); + }); + const notificationResponse = await fetch('notification.dat').then(response => response.arrayBuffer()); + [...Array(3)].map((x, i) => { + settings.notifications[i].settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(notificationResponse, NotificationSettings, 1024 * i); + }); + const securityResponse = await fetch('security.dat').then(response => response.arrayBuffer()); + settings.config.security = [...Array(3)].map((x, i) => { + console.log(i); + return Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(securityResponse, SecuritySettings, 1024 * i); + }); + return { + response, + settings + }; + }).then(conf => { + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].init(conf.settings); + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].binary = new Uint8Array(conf.response); + console.log(conf.settings); + }); +}; + +const saveData = function () { + const a = document.createElement("a"); + document.body.appendChild(a); + a.style = "display: none"; + return function (data, fileName) { + const blob = new Blob([new Uint8Array(data)]); + const url = window.URL.createObjectURL(blob); + a.href = url; + a.download = fileName; + a.click(); + window.URL.revokeObjectURL(url); + }; +}(); + +let ii = 0; +const saveConfig = (save = true) => { + if (ii === 0) { + const buffer = new ArrayBuffer(65536); + Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings, configDatParseConfig); + [...Array(12)].map((x, i) => { + return { + settings: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.tasks[i].settings, TaskSettings, 1024 * 4 + 1024 * 2 * i), + extra: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.tasks[i].extra, TaskSettings, 1024 * 5 + 1024 * 2 * i) + }; + }); + [...Array(3)].map((x, i) => { + return { + settings: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.controllers[i].settings, ControllerSettings, 1024 * 28 + 1024 * 2 * i), + extra: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.controllers[i].extra, ControllerSettings, 1024 * 29 + 1024 * 2 * i) + }; + }); + if (save) saveData(buffer, 'config.dat');else return buffer; + } else if (ii === 1) { + const bufferNotifications = new ArrayBuffer(4096); + [...Array(3)].map((x, i) => { + return Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(bufferNotifications, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.notifications[i], NotificationSettings, 1024 * i); + }); + saveData(bufferNotifications, 'notification.dat'); + } else if (ii === 2) { + const bufferSecurity = new ArrayBuffer(4096); + [...Array(3)].map((x, i) => { + return Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(bufferSecurity, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.security[i], SecuritySettings, 1024 * i); + }); + saveData(bufferSecurity, 'security.dat'); + } + + ii = (ii + 1) % 3; +}; + +/***/ }), + +/***/ "./src/devices/10_light_lux.js": +/*!*************************************!*\ + !*** ./src/devices/10_light_lux.js ***! + \*************************************/ +/*! exports provided: bh1750 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bh1750", function() { return bh1750; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const measurmentMode = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const bh1750 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + mode: { + name: 'Measurement mode', + type: 'select', + options: measurmentMode, + var: 'configs[1]' + }, + send_to_sleep: { + name: 'Send sensor to sleep', + type: 'checkbox', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/11_pme.js": +/*!*******************************!*\ + !*** ./src/devices/11_pme.js ***! + \*******************************/ +/*! exports provided: pme */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pme", function() { return pme; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mode = [{ + value: 0, + name: 'Digital' +}, { + value: 1, + name: 'Analog' +}]; +const pme = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'Port', + type: 'number', + var: 'gpio4' + }, + mode: { + name: 'Port Type', + type: 'select', + options: mode, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/12_lcd.js": +/*!*******************************!*\ + !*** ./src/devices/12_lcd.js ***! + \*******************************/ +/*! exports provided: lcd2004 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lcd2004", function() { return lcd2004; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const displaySize = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const lcdCommand = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const lcd2004 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + size: { + name: 'Display Size', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + line1: { + name: 'Line 1', + type: 'string', + var: 'configs[2]' + }, + line2: { + name: 'Line 2', + type: 'string', + var: 'configs[2]' + }, + line3: { + name: 'Line 3', + type: 'string', + var: 'configs[2]' + }, + line4: { + name: 'Line 4', + type: 'string', + var: 'configs[2]' + }, + button: { + name: 'Display Button', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + command: { + name: 'LCD Command Mode', + type: 'select', + options: lcdCommand, + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/13_hcsr04.js": +/*!**********************************!*\ + !*** ./src/devices/13_hcsr04.js ***! + \**********************************/ +/*! exports provided: hcsr04 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hcsr04", function() { return hcsr04; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mode = [{ + value: 0, + name: 'Value' +}, { + value: 1, + name: 'State' +}]; +const units = [{ + value: 0, + name: 'Metric' +}, { + value: 1, + name: 'Imperial' +}]; +const filters = [{ + value: 0, + name: 'None' +}, { + value: 1, + name: 'Median' +}]; +const hcsr04 = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO Trigger', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO Echo, 5V', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + mode: { + name: 'Mode', + type: 'select', + options: mode, + var: 'configs[0]' + }, + treshold: { + name: 'Treshold', + type: 'number', + var: 'configs[1]' + }, + max_distance: { + name: 'Max Distance', + type: 'number', + var: 'configs[2]' + }, + unit: { + name: 'Unit', + type: 'select', + options: units, + var: 'configs[3]' + }, + filter: { + name: 'Filter', + type: 'select', + options: filters, + var: 'configs[4]' + }, + filter_size: { + name: 'Filter Size', + type: 'number', + var: 'configs[5]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/14_si7021.js": +/*!**********************************!*\ + !*** ./src/devices/14_si7021.js ***! + \**********************************/ +/*! exports provided: si7021 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "si7021", function() { return si7021; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const resolution = [{ + value: 0, + name: 'Temp 14 bits, RH 12 bits' +}, { + value: 128, + name: 'Temp 13 bits, RH 10 bits' +}, { + value: 1, + name: 'Temp 12 bits, RH 8 bits' +}, { + value: 129, + name: 'Temp 11 bits, RH 11 bits' +}]; +const si7021 = { + sensor: { + name: 'Sensor', + configs: { + resolution: { + name: 'Resolution', + type: 'select', + options: resolution, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/15_tls2561.js": +/*!***********************************!*\ + !*** ./src/devices/15_tls2561.js ***! + \***********************************/ +/*! exports provided: tls2561 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tls2561", function() { return tls2561; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 57, + name: '0x39 (57) - default' +}, { + value: 73, + name: '0x49 (73)' +}, { + value: 41, + name: '0x29 (41)' +}]; +const measurmentMode = [{ + value: 0, + name: '13 ms' +}, { + value: 1, + name: '101 ms' +}, { + value: 2, + name: '402 ms' +}]; +const tls2561 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + mode: { + name: 'Integration time', + type: 'select', + options: measurmentMode, + var: 'configs[1]' + }, + send_to_sleep: { + name: 'Send sensor to sleep', + type: 'checkbox', + var: 'configs[2]' + }, + gain: { + name: 'Enable 16x gain', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/17_pn532.js": +/*!*********************************!*\ + !*** ./src/devices/17_pn532.js ***! + \*********************************/ +/*! exports provided: pn532 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pn532", function() { return pn532; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const pn532 = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'Reset Pin', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/18_dust.js": +/*!********************************!*\ + !*** ./src/devices/18_dust.js ***! + \********************************/ +/*! exports provided: dust */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dust", function() { return dust; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const measurmentMode = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const dust = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO - LED', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/19_pcf8574.js": +/*!***********************************!*\ + !*** ./src/devices/19_pcf8574.js ***! + \***********************************/ +/*! exports provided: pcf8574 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pcf8574", function() { return pcf8574; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const pcf8574 = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'PORT', + type: 'number', + var: 'gpio4' + }, + inversed: { + name: 'Inversed logic', + type: 'checkbox', + var: 'pin1inversed' + }, + send_boot_state: { + name: 'Send Boot State', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + advanced: { + name: 'Advanced event management', + configs: { + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs_float[0]' + }, + dblclick: { + name: 'Doublclick Event', + type: 'select', + options: eventTypes, + var: 'configs[4]' + }, + dblclick_interval: { + name: 'Doubleclick Max interval (ms)', + type: 'number', + var: 'configs_float[1]' + }, + longpress: { + name: 'Longpress event', + type: 'select', + options: eventTypes, + var: 'configs[5]' + }, + longpress_interval: { + name: 'Longpress min interval (ms)', + type: 'number', + var: 'configs_float[2]' + }, + safe_button: { + name: 'Use safe button', + type: 'checkbox', + var: 'configs_float[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/1_input_switch.js": +/*!***************************************!*\ + !*** ./src/devices/1_input_switch.js ***! + \***************************************/ +/*! exports provided: inputSwitch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inputSwitch", function() { return inputSwitch; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const inputSwitch = { + sensor: { + name: 'Sensor', + configs: { + pullup: { + name: 'Internal PullUp', + type: 'checkbox', + var: 'pin1pullup' + }, + inversed: { + name: 'Inversed logic', + type: 'checkbox', + var: 'pin1inversed' + }, + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + switch_type: { + name: 'Switch Type', + type: 'select', + options: [{ + name: 'switch', + value: 0 + }, { + name: 'dimmer', + value: 3 + }], + var: 'configs[0]' + }, + switch_button_type: { + name: 'Switch Button Type', + type: 'select', + options: [{ + name: 'normal', + value: 0 + }, { + name: 'active low', + value: 1 + }, { + name: 'active high', + value: 2 + }], + var: 'configs[2]' + }, + send_boot_state: { + name: 'Send Boot State', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + advanced: { + name: 'Advanced event management', + configs: { + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs_float[0]' + }, + dblclick: { + name: 'Doublclick Event', + type: 'select', + options: eventTypes, + var: 'configs[4]' + }, + dblclick_interval: { + name: 'Doubleclick Max interval (ms)', + type: 'number', + var: 'configs_float[1]' + }, + longpress: { + name: 'Longpress event', + type: 'select', + options: eventTypes, + var: 'configs[5]' + }, + longpress_interval: { + name: 'Longpress min interval (ms)', + type: 'number', + var: 'configs_float[2]' + }, + safe_button: { + name: 'Use safe button', + type: 'checkbox', + var: 'configs_float[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/20_ser2net.js": +/*!***********************************!*\ + !*** ./src/devices/20_ser2net.js ***! + \***********************************/ +/*! exports provided: ser2net */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ser2net", function() { return ser2net; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const parity = [{ + value: 0, + name: 'No Parity' +}, { + value: 1, + name: 'Even' +}, { + value: 2, + name: 'Odd' +}]; +const eventProcessing = [{ + value: 0, + name: 'None' +}, { + value: 1, + name: 'Generic' +}, { + value: 2, + name: 'RFLink' +}]; +const ser2net = { + sensor: { + name: 'Settings', + configs: { + port: { + name: 'TCP Port', + type: 'number', + var: 'configs_float[0]' + }, + baudrate: { + name: 'Baudrate', + type: 'number', + var: 'configs_float[0]' + }, + data_bits: { + name: 'Data Bits', + type: 'number', + var: 'configs_float[0]' + }, + parity: { + name: 'Parity', + type: 'select', + options: parity, + var: 'configs[0]' + }, + stop_bits: { + name: 'Stop Bits', + type: 'number', + var: 'configs_float[0]' + }, + reset_after_boot: { + name: 'Reset target after boot', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'configs[1]' + }, + timeout: { + name: 'RX Receive Timeout', + type: 'number', + var: 'configs_float[0]' + }, + event_processing: { + name: 'Event Processing', + type: 'select', + options: eventProcessing, + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/21_level_control.js": +/*!*****************************************!*\ + !*** ./src/devices/21_level_control.js ***! + \*****************************************/ +/*! exports provided: levelControl */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "levelControl", function() { return levelControl; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sensorModel = [{ + value: 11, + name: 'DHT11' +}, { + value: 22, + name: 'DHT22' +}, { + value: 12, + name: 'DHT12' +}, { + value: 23, + name: 'Sonoff am2301' +}, { + value: 70, + name: 'Sonoff si7021' +}]; +const levelControl = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO Level Low', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + check_task: { + name: 'Check Task', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["getTasks"], + var: 'configs[0]' + }, + check_value: { + name: 'Check Value', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["getTaskValues"], + var: 'configs[1]' + }, + level: { + name: 'Set Level', + type: 'number', + var: 'configs_float[0]' + }, + hysteresis: { + name: 'Hysteresis', + type: 'number', + var: 'configs_float[1]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/22_pca9685.js": +/*!***********************************!*\ + !*** ./src/devices/22_pca9685.js ***! + \***********************************/ +/*! exports provided: pca9685 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pca9685", function() { return pca9685; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mode = [...Array(32)].map((v, i) => ({ + value: i, + name: `0x${i.toString(16)} (${i})` +})); +const i2c_address = [...Array(32)].map((v, i) => ({ + value: i + 64, + name: `0x${(i + 64).toString(16)} (${i + 64})` +})); +const pca9685 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + mode: { + name: 'Mode 2', + type: 'select', + options: mode, + var: 'configs[1]' + }, + frequency: { + name: 'Frequency (23 - 1500)', + type: 'number', + var: 'configs_float[0]' + }, + range: { + name: 'Range (1-10000)', + type: 'number', + var: 'configs_float[1]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/23_oled1306.js": +/*!************************************!*\ + !*** ./src/devices/23_oled1306.js ***! + \************************************/ +/*! exports provided: oled1306 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "oled1306", function() { return oled1306; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const displaySize = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const oled1306 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + rotation: { + name: 'Rotation', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + size: { + name: 'Display Size', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + font: { + name: 'Font Width', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + line1: { + name: 'Line 1', + type: 'text', + var: 'configs[2]' + }, + line2: { + name: 'Line 2', + type: 'text', + var: 'configs[2]' + }, + line3: { + name: 'Line 3', + type: 'text', + var: 'configs[2]' + }, + line4: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line5: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line6: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line7: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line8: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + button: { + name: 'Display Button', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + timeout: { + name: 'Display Timeout', + type: 'number', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/24_mlx90614.js": +/*!************************************!*\ + !*** ./src/devices/24_mlx90614.js ***! + \************************************/ +/*! exports provided: mlx90614 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mlx90614", function() { return mlx90614; }); +const options = [{ + value: 0, + name: 'IR Object Temperature' +}, { + value: 1, + name: 'Ambient Temperature' +}]; +const mlx90614 = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'Port', + type: 'number', + var: 'gpio4' + }, + option: { + name: 'Option', + type: 'select', + options: options, + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/25_ads1115.js": +/*!***********************************!*\ + !*** ./src/devices/25_ads1115.js ***! + \***********************************/ +/*! exports provided: ads1115 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ads1115", function() { return ads1115; }); +const i2c_address = [{ + value: 72, + name: '0x48 (72)' +}, { + value: 73, + name: '0x49 (73)' +}, { + value: 74, + name: '0x4A (74)' +}, { + value: 75, + name: '0x4B (75)' +}]; +const gainOptions = [{ + value: 0, + name: '2/3x gain (FS=6.144V)' +}, { + value: 1, + name: '1x gain (FS=4.096V)' +}, { + value: 2, + name: '2x gain (FS=2.048V)' +}, { + value: 3, + name: '4x gain (FS=1.024V)' +}, { + value: 4, + name: '8x gain (FS=0.512V)' +}, { + value: 5, + name: '16x gain (FS=0.256V)' +}]; +const multiplexerOptions = [{ + value: 0, + name: 'AIN0 - AIN1 (Differential)' +}, { + value: 1, + name: 'AIN0 - AIN3 (Differential)' +}, { + value: 2, + name: 'AIN1 - AIN3 (Differential)' +}, { + value: 3, + name: 'AIN2 - AIN3 (Differential)' +}, { + value: 4, + name: 'AIN0 - GND (Single-Ended)' +}, { + value: 5, + name: 'AIN1 - GND (Single-Ended)' +}, { + value: 6, + name: 'AIN2 - GND (Single-Ended)' +}, { + value: 7, + name: 'AIN3 - GND (Single-Ended)' +}]; +const ads1115 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + gain: { + name: 'Gain', + type: 'select', + options: gainOptions, + var: 'configs[1]' + }, + multiplexer: { + name: 'Input Multiplexer', + type: 'select', + options: multiplexerOptions, + var: 'configs[2]' + } + } + }, + advanced: { + name: 'Two point calibration', + configs: { + enabled: { + name: 'Calibration Enabled', + type: 'number', + var: 'configs[3]' + }, + point1: [{ + name: 'Point 1', + type: 'number', + var: 'configs_long[0]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }], + point2: [{ + name: 'Point 2', + type: 'number', + var: 'configs_long[1]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }] + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/26_system_info.js": +/*!***************************************!*\ + !*** ./src/devices/26_system_info.js ***! + \***************************************/ +/*! exports provided: systemInfo */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "systemInfo", function() { return systemInfo; }); +const indicator = [{ + value: 0, + name: 'Uptime' +}, { + value: 1, + name: 'Free Ram' +}, { + value: 2, + name: 'WiFi RSSI' +}, { + value: 3, + name: 'Input VCC' +}, { + value: 4, + name: 'System load' +}, { + value: 5, + name: 'IP 1.Octet' +}, { + value: 6, + name: 'IP 2.Octet' +}, { + value: 7, + name: 'IP 3.Octet' +}, { + value: 8, + name: 'IP 4.Octet' +}, { + value: 9, + name: 'Web activity' +}, { + value: 10, + name: 'Free Stack' +}, { + value: 11, + name: 'None' +}]; +const systemInfo = { + sensor: { + name: 'Settings', + configs: { + indicator1: { + name: 'Indicator 1', + type: 'select', + options: indicator, + var: 'configs_long[0]' + }, + indicator1: { + name: 'Indicator 2', + type: 'select', + options: indicator, + var: 'configs_long[1]' + }, + indicator1: { + name: 'Indicator 3', + type: 'select', + options: indicator, + var: 'configs_long[2]' + }, + indicator1: { + name: 'Indicator 4', + type: 'select', + options: indicator, + var: 'configs_long[3]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/27_ina219.js": +/*!**********************************!*\ + !*** ./src/devices/27_ina219.js ***! + \**********************************/ +/*! exports provided: ina219 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ina219", function() { return ina219; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const measurmentRange = [{ + value: 0, + name: '32V, 2A' +}, { + value: 1, + name: '32V, 1A' +}, { + value: 2, + name: '16V, 0.4A' +}]; +const measurmentType = [{ + value: 0, + name: 'Voltage' +}, { + value: 1, + name: 'Current' +}, { + value: 2, + name: 'Power' +}, { + value: 3, + name: 'Voltage/Current/Power' +}]; +const i2c_address = [{ + value: 64, + name: '0x40 (64) - (default)' +}, { + value: 65, + name: '0x41 (65)' +}, { + value: 68, + name: '0x44 (68)' +}, { + value: 69, + name: '0x45 (69)' +}]; +const ina219 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + check_task: { + name: 'Measurment Range', + type: 'select', + options: measurmentRange, + var: 'configs[1]' + }, + check_value: { + name: 'Measurment Type', + type: 'select', + options: measurmentType, + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/28_bmx280.js": +/*!**********************************!*\ + !*** ./src/devices/28_bmx280.js ***! + \**********************************/ +/*! exports provided: bmx280 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmx280", function() { return bmx280; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 118, + name: '0x76 (118) - (default)' +}, { + value: 119, + name: '0x77 (119) - (default)' +}]; +const bmx280 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + }, + offset: { + name: 'Temperature Offset', + type: 'number', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/29_mqtt_domoticz.js": +/*!*****************************************!*\ + !*** ./src/devices/29_mqtt_domoticz.js ***! + \*****************************************/ +/*! exports provided: mqttDomoticz */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mqttDomoticz", function() { return mqttDomoticz; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mqttDomoticz = { + sensor: { + name: 'Actuator', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + idx: { + name: 'IDX', + type: 'number', + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/2_analog_input.js": +/*!***************************************!*\ + !*** ./src/devices/2_analog_input.js ***! + \***************************************/ +/*! exports provided: analogInput */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "analogInput", function() { return analogInput; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const analogInput = { + sensor: { + name: 'Sensor', + configs: { + oversampling: { + name: 'Oversampling', + type: 'checkbox', + var: 'configs[0]' + } + } + }, + advanced: { + name: 'Two point calibration', + configs: { + enabled: { + name: 'Calibration Enabled', + type: 'number', + var: 'configs[3]' + }, + point1: [{ + name: 'Point 1', + type: 'number', + var: 'configs_long[0]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }], + point2: [{ + name: 'Point 2', + type: 'number', + var: 'configs_long[1]' + }, { + name: '=', + type: 'number', + var: 'configs_float[1]' + }] + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/30_bmp280.js": +/*!**********************************!*\ + !*** ./src/devices/30_bmp280.js ***! + \**********************************/ +/*! exports provided: bmp280 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmp280", function() { return bmp280; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 118, + name: '0x76 (118) - (default)' +}, { + value: 119, + name: '0x77 (119) - (default)' +}]; +const bmp280 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/31_sht1x.js": +/*!*********************************!*\ + !*** ./src/devices/31_sht1x.js ***! + \*********************************/ +/*! exports provided: sht1x */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sht1x", function() { return sht1x; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sht1x = { + sensor: { + name: 'Sensor', + configs: { + pullup: { + name: 'Internal PullUp', + type: 'checkbox', + var: 'pin1pullup' + }, + gpio1: { + name: 'GPIO Data', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO SCK', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/32_ms5611.js": +/*!**********************************!*\ + !*** ./src/devices/32_ms5611.js ***! + \**********************************/ +/*! exports provided: ms5611 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ms5611", function() { return ms5611; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 118, + name: '0x76 (118)' +}, { + value: 119, + name: '0x77 (119) - (default)' +}]; +const ms5611 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/33_dummy_device.js": +/*!****************************************!*\ + !*** ./src/devices/33_dummy_device.js ***! + \****************************************/ +/*! exports provided: dummyDevice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dummyDevice", function() { return dummyDevice; }); +const sensorModel = [{ + value: 1, + name: 'SENSOR_TYPE_SINGLE' +}, { + value: 2, + name: 'SENSOR_TYPE_TEMP_HUM' +}, { + value: 3, + name: 'SENSOR_TYPE_TEMP_BARO' +}, { + value: 4, + name: 'SENSOR_TYPE_TEMP_HUM_BARO' +}, { + value: 5, + name: 'SENSOR_TYPE_DUAL' +}, { + value: 5, + name: 'SENSOR_TYPE_TRIPLE' +}, { + value: 7, + name: 'SENSOR_TYPE_QUAD' +}, { + value: 10, + name: 'SENSOR_TYPE_SWITCH' +}, { + value: 11, + name: 'SENSOR_TYPE_DIMMER' +}, { + value: 20, + name: 'SENSOR_TYPE_LONG' +}, { + value: 21, + name: 'SENSOR_TYPE_WIND' +}]; +const dummyDevice = { + data: { + name: 'Data Acquisition', + configs: { + switch_type: { + name: 'Simulate Sensor Type', + type: 'select', + options: sensorModel, + var: 'configs[0]' + }, + interval: { + name: 'Interval', + type: 'number' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/34_dht12.js": +/*!*********************************!*\ + !*** ./src/devices/34_dht12.js ***! + \*********************************/ +/*! exports provided: dht12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dht12", function() { return dht12; }); +const sensorModel = [{ + value: 1, + name: 'SENSOR_TYPE_SINGLE' +}, { + value: 2, + name: 'SENSOR_TYPE_TEMP_HUM' +}, { + value: 3, + name: 'SENSOR_TYPE_TEMP_BARO' +}, { + value: 4, + name: 'SENSOR_TYPE_TEMP_HUM_BARO' +}, { + value: 5, + name: 'SENSOR_TYPE_DUAL' +}, { + value: 5, + name: 'SENSOR_TYPE_TRIPLE' +}, { + value: 7, + name: 'SENSOR_TYPE_QUAD' +}, { + value: 10, + name: 'SENSOR_TYPE_SWITCH' +}, { + value: 11, + name: 'SENSOR_TYPE_DIMMER' +}, { + value: 20, + name: 'SENSOR_TYPE_LONG' +}, { + value: 21, + name: 'SENSOR_TYPE_WIND' +}]; +const dht12 = { + data: { + name: 'Data Acquisition', + configs: { + interval: { + name: 'Interval', + type: 'number' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/36_sh1106.js": +/*!**********************************!*\ + !*** ./src/devices/36_sh1106.js ***! + \**********************************/ +/*! exports provided: sh1106 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sh1106", function() { return sh1106; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const i2c_address = [{ + value: 35, + name: '0x23 (35) - default' +}, { + value: 92, + name: '0x5c (92)' +}]; +const displaySize = [{ + value: 1, + name: 'RESOLUTION_LOW' +}, { + value: 2, + name: 'RESOLUTION_NORMAL' +}, { + value: 3, + name: 'RESOLUTION_HIGH' +}, { + value: 99, + name: 'RESOLUTION_AUTO_HIGH' +}]; +const sh1106 = { + sensor: { + name: 'Sensor', + configs: { + i2c_address: { + name: 'I2C Address', + type: 'select', + options: i2c_address, + var: 'configs[0]' + }, + rotation: { + name: 'Rotation', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + size: { + name: 'Display Size', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + font: { + name: 'Font Width', + type: 'select', + options: displaySize, + var: 'configs[1]' + }, + line1: { + name: 'Line 1', + type: 'text', + var: 'configs[2]' + }, + line2: { + name: 'Line 2', + type: 'text', + var: 'configs[2]' + }, + line3: { + name: 'Line 3', + type: 'text', + var: 'configs[2]' + }, + line4: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line5: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line6: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line7: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + line8: { + name: 'Line 4', + type: 'text', + var: 'configs[2]' + }, + button: { + name: 'Display Button', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + timeout: { + name: 'Display Timeout', + type: 'number', + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/37_mqtt_import.js": +/*!***************************************!*\ + !*** ./src/devices/37_mqtt_import.js ***! + \***************************************/ +/*! exports provided: mqttImport */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mqttImport", function() { return mqttImport; }); +const mqttImport = { + data: { + name: 'Data Acquisition', + configs: { + switch_type: { + name: 'MQTT Topic 1', + type: 'text', + var: 'configs[0]' + }, + switch_type: { + name: 'MQTT Topic 2', + type: 'text', + var: 'configs[0]' + }, + switch_type: { + name: 'MQTT Topic 3', + type: 'text', + var: 'configs[0]' + }, + switch_type: { + name: 'MQTT Topic 4', + type: 'text', + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/38_neopixel_basic.js": +/*!******************************************!*\ + !*** ./src/devices/38_neopixel_basic.js ***! + \******************************************/ +/*! exports provided: neopixelBasic */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelBasic", function() { return neopixelBasic; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const type = [{ + value: 1, + name: 'GRB' +}, { + value: 2, + name: 'GRBW' +}]; +const neopixelBasic = { + sensor: { + name: 'Sensor', + configs: { + leds: { + name: 'LEd Count', + type: 'number', + var: 'configs[0]' + }, + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + type: { + name: 'Strip Type', + type: 'select', + options: type, + var: 'configs[1]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/39_thermocouple.js": +/*!****************************************!*\ + !*** ./src/devices/39_thermocouple.js ***! + \****************************************/ +/*! exports provided: thermocouple */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thermocouple", function() { return thermocouple; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const type = [{ + value: 1, + name: 'MAX 6675' +}, { + value: 2, + name: 'MAX 31855' +}]; +const thermocouple = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + type: { + name: 'Adapter IC', + type: 'select', + options: type, + var: 'configs[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/3_generic_pulse.js": +/*!****************************************!*\ + !*** ./src/devices/3_generic_pulse.js ***! + \****************************************/ +/*! exports provided: genericPulse */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genericPulse", function() { return genericPulse; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const modeTypes = [{ + value: 0, + name: 'LOW' +}, { + value: 1, + name: 'CHANGE' +}, { + value: 2, + name: 'RISING' +}, { + value: 3, + name: 'FALLING' +}]; +const counterTypes = [{ + value: 0, + name: 'Delta' +}, { + value: 1, + name: 'Delta/Total/Time' +}, { + value: 2, + name: 'Total' +}, { + value: 3, + name: 'Delta/Total' +}]; +const genericPulse = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs[0]' + }, + counter_type: { + name: 'Counter Type', + type: 'select', + options: counterTypes, + var: 'configs[1]' + }, + mode_type: { + name: 'Switch Button Type', + type: 'select', + options: modeTypes, + var: 'configs[2]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/41_neopixel_clock.js": +/*!******************************************!*\ + !*** ./src/devices/41_neopixel_clock.js ***! + \******************************************/ +/*! exports provided: neopixelClock */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelClock", function() { return neopixelClock; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const neopixelClock = { + sensor: { + name: 'Actuator', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + R: { + name: 'Red', + type: 'number', + min: 0, + max: 255, + var: 'configs[0]' + }, + G: { + name: 'Green', + type: 'number', + min: 0, + max: 255, + var: 'configs[1]' + }, + B: { + name: 'Blue', + type: 'number', + min: 0, + max: 255, + var: 'configs[2]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/42_neopixel_candle.js": +/*!*******************************************!*\ + !*** ./src/devices/42_neopixel_candle.js ***! + \*******************************************/ +/*! exports provided: neopixelCandle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelCandle", function() { return neopixelCandle; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const neopixelCandle = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/43_output_clock.js": +/*!****************************************!*\ + !*** ./src/devices/43_output_clock.js ***! + \****************************************/ +/*! exports provided: clock */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clock", function() { return clock; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const type = [{ + value: 0, + name: '' +}, { + value: 1, + name: 'Off' +}, { + value: 2, + name: 'On' +}]; +const clock = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO - Clock Event', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + event1: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event2: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event3: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event4: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event5: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event6: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event7: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }], + event8: [{ + name: 'Day, Time 1', + type: 'string', + var: 'configs[0]' + }, { + name: '', + type: 'select', + options: type, + var: 'configs[1]' + }] + } + } +}; + +/***/ }), + +/***/ "./src/devices/44_wifi_gateway.js": +/*!****************************************!*\ + !*** ./src/devices/44_wifi_gateway.js ***! + \****************************************/ +/*! exports provided: wifiGateway */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wifiGateway", function() { return wifiGateway; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const parity = [{ + value: 0, + name: 'No Parity' +}, { + value: 1, + name: 'Even' +}, { + value: 2, + name: 'Odd' +}]; +const wifiGateway = { + sensor: { + name: 'Settings', + configs: { + port: { + name: 'TCP Port', + type: 'number', + var: 'configs_float[0]' + }, + baudrate: { + name: 'Baudrate', + type: 'number', + var: 'configs_float[0]' + }, + data_bits: { + name: 'Data Bits', + type: 'number', + var: 'configs_float[0]' + }, + parity: { + name: 'Parity', + type: 'select', + options: parity, + var: 'configs[0]' + }, + stop_bits: { + name: 'Stop Bits', + type: 'number', + var: 'configs_float[0]' + }, + reset_after_boot: { + name: 'Reset target after boot', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'configs[1]' + }, + timeout: { + name: 'RX Receive Timeout', + type: 'number', + var: 'configs_float[0]' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/49_mhz19.js": +/*!*********************************!*\ + !*** ./src/devices/49_mhz19.js ***! + \*********************************/ +/*! exports provided: mhz19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mhz19", function() { return mhz19; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const mhz19 = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO - TX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO - RX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/4_ds18b20.js": +/*!**********************************!*\ + !*** ./src/devices/4_ds18b20.js ***! + \**********************************/ +/*! exports provided: ds18b20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ds18b20", function() { return ds18b20; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const ds18b20 = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/52_senseair.js": +/*!************************************!*\ + !*** ./src/devices/52_senseair.js ***! + \************************************/ +/*! exports provided: senseAir */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "senseAir", function() { return senseAir; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const senseAir = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO - TX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO - RX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/56_sds011.js": +/*!**********************************!*\ + !*** ./src/devices/56_sds011.js ***! + \**********************************/ +/*! exports provided: sds011 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sds011", function() { return sds011; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sds011 = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO - TX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO - RX', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/59_rotary_encoder.js": +/*!******************************************!*\ + !*** ./src/devices/59_rotary_encoder.js ***! + \******************************************/ +/*! exports provided: rotaryEncoder */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotaryEncoder", function() { return rotaryEncoder; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const rotaryEncoder = { + sensor: { + name: 'Data Acquisition', + configs: { + gpio1: { + name: 'GPIO A - CLK', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO B - DT', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + gpio3: { + name: 'GPIO I - Z', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio3' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/5_dht.js": +/*!******************************!*\ + !*** ./src/devices/5_dht.js ***! + \******************************/ +/*! exports provided: dht */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dht", function() { return dht; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const sensorModel = [{ + value: 11, + name: 'DHT11' +}, { + value: 22, + name: 'DHT22' +}, { + value: 12, + name: 'DHT12' +}, { + value: 23, + name: 'Sonoff am2301' +}, { + value: 70, + name: 'Sonoff si7021' +}]; +const dht = { + sensor: { + name: 'Sensor', + configs: { + gpio: { + name: 'GPIO Data', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + switch_type: { + name: 'Sensor model', + type: 'select', + options: sensorModel, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + interval: { + name: 'Interval', + type: 'number' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/63_ttp229.js": +/*!**********************************!*\ + !*** ./src/devices/63_ttp229.js ***! + \**********************************/ +/*! exports provided: ttp229 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ttp229", function() { return ttp229; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const ttp229 = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO A - CLK', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO B - DT', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + scancode: { + name: 'ScanCode', + type: 'checkbox', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/6_bmp085.js": +/*!*********************************!*\ + !*** ./src/devices/6_bmp085.js ***! + \*********************************/ +/*! exports provided: bmp085 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmp085", function() { return bmp085; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const bmp085 = { + sensor: { + name: 'Sensor', + configs: { + altitude: { + name: 'Altitude', + type: 'number', + var: 'configs[1]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/7_pcf8591.js": +/*!**********************************!*\ + !*** ./src/devices/7_pcf8591.js ***! + \**********************************/ +/*! exports provided: pcf8591 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pcf8591", function() { return pcf8591; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const pcf8591 = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'PORT', + type: 'number', + var: 'gpio4' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/8_rfid.js": +/*!*******************************!*\ + !*** ./src/devices/8_rfid.js ***! + \*******************************/ +/*! exports provided: rfidWeigand */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rfidWeigand", function() { return rfidWeigand; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const weigandType = [{ + value: 26, + name: '26 Bits' +}, { + value: 34, + name: '34 Bits' +}]; +const rfidWeigand = { + sensor: { + name: 'Sensor', + configs: { + gpio1: { + name: 'GPIO D0 (green, 5V)', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio1' + }, + gpio2: { + name: 'GPIO D1 (white, 5V)', + type: 'select', + options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"], + var: 'gpio2' + }, + type: { + name: 'Weigand Type', + type: 'select', + options: weigandType, + var: 'configs[0]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/9_io_mcp.js": +/*!*********************************!*\ + !*** ./src/devices/9_io_mcp.js ***! + \*********************************/ +/*! exports provided: inputMcp */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inputMcp", function() { return inputMcp; }); +/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js"); + +const eventTypes = [{ + value: 0, + name: 'Disabled' +}, { + value: 1, + name: 'Active on LOW' +}, { + value: 2, + name: 'Active on HIGH' +}, { + value: 3, + name: 'Active on LOW and HIGH' +}]; +const inputMcp = { + sensor: { + name: 'Sensor', + configs: { + port: { + name: 'PORT', + type: 'number', + var: 'gpio4' + }, + inversed: { + name: 'Inversed logic', + type: 'checkbox', + var: 'pin1inversed' + }, + send_boot_state: { + name: 'Send Boot State', + type: 'checkbox', + var: 'configs[3]' + } + } + }, + advanced: { + name: 'Advanced event management', + configs: { + debounce: { + name: 'De-bounce (ms)', + type: 'number', + var: 'configs_float[0]' + }, + dblclick: { + name: 'Doublclick Event', + type: 'select', + options: eventTypes, + var: 'configs[4]' + }, + dblclick_interval: { + name: 'Doubleclick Max interval (ms)', + type: 'number', + var: 'configs_float[1]' + }, + longpress: { + name: 'Longpress event', + type: 'select', + options: eventTypes, + var: 'configs[5]' + }, + longpress_interval: { + name: 'Longpress min interval (ms)', + type: 'number', + var: 'configs_float[2]' + }, + safe_button: { + name: 'Use safe button', + type: 'checkbox', + var: 'configs_float[3]' + } + } + }, + data: { + name: 'Data Acquisition', + configs: { + send1: { + name: 'Send to Controller 1', + type: 'checkbox', + var: 'TaskDeviceSendData[0]' + }, + send2: { + name: 'Send to Controller 2', + type: 'checkbox', + var: 'TaskDeviceSendData[1]' + }, + send3: { + name: 'Send to Controller 3', + type: 'checkbox', + var: 'TaskDeviceSendData[2]' + }, + idx1: { + name: 'IDX1', + type: 'number', + var: 'TaskDeviceID[0]' + }, + idx2: { + name: 'IDX2', + type: 'number', + var: 'TaskDeviceID[1]' + }, + idx3: { + name: 'IDX3', + type: 'number', + var: 'TaskDeviceID[2]' + }, + interval: { + name: 'Interval', + type: 'number', + var: 'interval' + } + } + } +}; + +/***/ }), + +/***/ "./src/devices/_defs.js": +/*!******************************!*\ + !*** ./src/devices/_defs.js ***! + \******************************/ +/*! exports provided: pins, getTasks, getTaskValues */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTasks", function() { return getTasks; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTaskValues", function() { return getTaskValues; }); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _pages_config_hardware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pages/config.hardware */ "./src/pages/config.hardware.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return _pages_config_hardware__WEBPACK_IMPORTED_MODULE_1__["pins"]; }); + + + +const getTasks = () => { + return _lib_settings__WEBPACK_IMPORTED_MODULE_0__["settings"].get('tasks').filter(task => task.enabled).map(task => ({ + value: task.settings.index, + name: task.settings.name + })); +}; +const getTaskValues = () => { + return [1, 2, 3, 4]; +}; + +/***/ }), + +/***/ "./src/devices/index.js": +/*!******************************!*\ + !*** ./src/devices/index.js ***! + \******************************/ +/*! exports provided: devices */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "devices", function() { return devices; }); +/* harmony import */ var _1_input_switch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./1_input_switch */ "./src/devices/1_input_switch.js"); +/* harmony import */ var _2_analog_input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./2_analog_input */ "./src/devices/2_analog_input.js"); +/* harmony import */ var _3_generic_pulse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./3_generic_pulse */ "./src/devices/3_generic_pulse.js"); +/* harmony import */ var _4_ds18b20__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./4_ds18b20 */ "./src/devices/4_ds18b20.js"); +/* harmony import */ var _5_dht__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./5_dht */ "./src/devices/5_dht.js"); +/* harmony import */ var _6_bmp085__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./6_bmp085 */ "./src/devices/6_bmp085.js"); +/* harmony import */ var _7_pcf8591__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./7_pcf8591 */ "./src/devices/7_pcf8591.js"); +/* harmony import */ var _8_rfid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./8_rfid */ "./src/devices/8_rfid.js"); +/* harmony import */ var _9_io_mcp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./9_io_mcp */ "./src/devices/9_io_mcp.js"); +/* harmony import */ var _10_light_lux__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./10_light_lux */ "./src/devices/10_light_lux.js"); +/* harmony import */ var _11_pme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./11_pme */ "./src/devices/11_pme.js"); +/* harmony import */ var _12_lcd__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./12_lcd */ "./src/devices/12_lcd.js"); +/* harmony import */ var _13_hcsr04__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./13_hcsr04 */ "./src/devices/13_hcsr04.js"); +/* harmony import */ var _14_si7021__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./14_si7021 */ "./src/devices/14_si7021.js"); +/* harmony import */ var _15_tls2561__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./15_tls2561 */ "./src/devices/15_tls2561.js"); +/* harmony import */ var _17_pn532__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./17_pn532 */ "./src/devices/17_pn532.js"); +/* harmony import */ var _18_dust__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./18_dust */ "./src/devices/18_dust.js"); +/* harmony import */ var _19_pcf8574__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./19_pcf8574 */ "./src/devices/19_pcf8574.js"); +/* harmony import */ var _20_ser2net__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./20_ser2net */ "./src/devices/20_ser2net.js"); +/* harmony import */ var _21_level_control__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./21_level_control */ "./src/devices/21_level_control.js"); +/* harmony import */ var _22_pca9685__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./22_pca9685 */ "./src/devices/22_pca9685.js"); +/* harmony import */ var _23_oled1306__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./23_oled1306 */ "./src/devices/23_oled1306.js"); +/* harmony import */ var _24_mlx90614__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./24_mlx90614 */ "./src/devices/24_mlx90614.js"); +/* harmony import */ var _25_ads1115__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./25_ads1115 */ "./src/devices/25_ads1115.js"); +/* harmony import */ var _26_system_info__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./26_system_info */ "./src/devices/26_system_info.js"); +/* harmony import */ var _27_ina219__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./27_ina219 */ "./src/devices/27_ina219.js"); +/* harmony import */ var _28_bmx280__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./28_bmx280 */ "./src/devices/28_bmx280.js"); +/* harmony import */ var _29_mqtt_domoticz__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./29_mqtt_domoticz */ "./src/devices/29_mqtt_domoticz.js"); +/* harmony import */ var _30_bmp280__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./30_bmp280 */ "./src/devices/30_bmp280.js"); +/* harmony import */ var _31_sht1x__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./31_sht1x */ "./src/devices/31_sht1x.js"); +/* harmony import */ var _32_ms5611__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./32_ms5611 */ "./src/devices/32_ms5611.js"); +/* harmony import */ var _33_dummy_device__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./33_dummy_device */ "./src/devices/33_dummy_device.js"); +/* harmony import */ var _34_dht12__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./34_dht12 */ "./src/devices/34_dht12.js"); +/* harmony import */ var _36_sh1106__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./36_sh1106 */ "./src/devices/36_sh1106.js"); +/* harmony import */ var _37_mqtt_import__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./37_mqtt_import */ "./src/devices/37_mqtt_import.js"); +/* harmony import */ var _38_neopixel_basic__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./38_neopixel_basic */ "./src/devices/38_neopixel_basic.js"); +/* harmony import */ var _39_thermocouple__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./39_thermocouple */ "./src/devices/39_thermocouple.js"); +/* harmony import */ var _41_neopixel_clock__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./41_neopixel_clock */ "./src/devices/41_neopixel_clock.js"); +/* harmony import */ var _42_neopixel_candle__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./42_neopixel_candle */ "./src/devices/42_neopixel_candle.js"); +/* harmony import */ var _43_output_clock__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./43_output_clock */ "./src/devices/43_output_clock.js"); +/* harmony import */ var _44_wifi_gateway__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./44_wifi_gateway */ "./src/devices/44_wifi_gateway.js"); +/* harmony import */ var _49_mhz19__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./49_mhz19 */ "./src/devices/49_mhz19.js"); +/* harmony import */ var _52_senseair__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./52_senseair */ "./src/devices/52_senseair.js"); +/* harmony import */ var _56_sds011__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./56_sds011 */ "./src/devices/56_sds011.js"); +/* harmony import */ var _59_rotary_encoder__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./59_rotary_encoder */ "./src/devices/59_rotary_encoder.js"); +/* harmony import */ var _63_ttp229__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./63_ttp229 */ "./src/devices/63_ttp229.js"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +const devices = [{ + name: '- None -', + value: 0, + fields: [] +}, { + name: 'Switch input - Switch', + value: 1, + fields: _1_input_switch__WEBPACK_IMPORTED_MODULE_0__["inputSwitch"] +}, { + name: 'Analog input - internal', + value: 2, + fields: _2_analog_input__WEBPACK_IMPORTED_MODULE_1__["analogInput"] +}, { + name: 'Generic - Pulse counter', + value: 3, + fields: _3_generic_pulse__WEBPACK_IMPORTED_MODULE_2__["genericPulse"] +}, { + name: 'Environment - DS18b20', + value: 4, + fields: _4_ds18b20__WEBPACK_IMPORTED_MODULE_3__["ds18b20"] +}, { + name: 'Environment - DHT11/12/22 SONOFF2301/7021', + value: 5, + fields: _5_dht__WEBPACK_IMPORTED_MODULE_4__["dht"] +}, { + name: 'Environment - BMP085/180', + value: 6, + fields: _6_bmp085__WEBPACK_IMPORTED_MODULE_5__["bmp085"] +}, { + name: 'Analog input - PCF8591', + value: 7, + fields: _7_pcf8591__WEBPACK_IMPORTED_MODULE_6__["pcf8591"] +}, { + name: 'RFID - Wiegand', + value: 8, + fields: _8_rfid__WEBPACK_IMPORTED_MODULE_7__["rfidWeigand"] +}, { + name: 'Switch input - MCP23017', + value: 9, + fields: _9_io_mcp__WEBPACK_IMPORTED_MODULE_8__["inputMcp"] +}, { + name: 'Light/Lux - BH1750', + value: 10, + fields: _10_light_lux__WEBPACK_IMPORTED_MODULE_9__["bh1750"] +}, { + name: 'Extra IO - ProMini Extender', + value: 11, + fields: _11_pme__WEBPACK_IMPORTED_MODULE_10__["pme"] +}, { + name: 'Display - LCD2004', + value: 12, + fields: _12_lcd__WEBPACK_IMPORTED_MODULE_11__["lcd2004"] +}, { + name: 'Position - HC-SR04, RCW-0001, etc.', + value: 13, + fields: _13_hcsr04__WEBPACK_IMPORTED_MODULE_12__["hcsr04"] +}, { + name: 'Environment - SI7021/HTU21D', + value: 14, + fields: _14_si7021__WEBPACK_IMPORTED_MODULE_13__["si7021"] +}, { + name: 'Light/Lux - TSL2561', + value: 15, + fields: _15_tls2561__WEBPACK_IMPORTED_MODULE_14__["tls2561"] +}, //{ name: 'Communication - IR', value: 16, fields: bh1750 }, +{ + name: 'RFID - PN532', + value: 17, + fields: _17_pn532__WEBPACK_IMPORTED_MODULE_15__["pn532"] +}, { + name: 'Dust - Sharp GP2Y10', + value: 18, + fields: _18_dust__WEBPACK_IMPORTED_MODULE_16__["dust"] +}, { + name: 'Switch input - PCF8574', + value: 19, + fields: _19_pcf8574__WEBPACK_IMPORTED_MODULE_17__["pcf8574"] +}, { + name: 'Communication - Serial Server', + value: 20, + fields: _20_ser2net__WEBPACK_IMPORTED_MODULE_18__["ser2net"] +}, { + name: 'Regulator - Level Control', + value: 21, + fields: _21_level_control__WEBPACK_IMPORTED_MODULE_19__["levelControl"] +}, { + name: 'Extra IO - PCA9685', + value: 22, + fields: _22_pca9685__WEBPACK_IMPORTED_MODULE_20__["pca9685"] +}, { + name: 'Display - OLED SSD1306', + value: 23, + fields: _23_oled1306__WEBPACK_IMPORTED_MODULE_21__["oled1306"] +}, { + name: 'Environment - MLX90614', + value: 24, + fields: _24_mlx90614__WEBPACK_IMPORTED_MODULE_22__["mlx90614"] +}, { + name: 'Analog input - ADS1115', + value: 25, + fields: _25_ads1115__WEBPACK_IMPORTED_MODULE_23__["ads1115"] +}, { + name: 'Generic - System Info', + value: 26, + fields: _26_system_info__WEBPACK_IMPORTED_MODULE_24__["systemInfo"] +}, { + name: 'Energy (DC) - INA219', + value: 27, + fields: _27_ina219__WEBPACK_IMPORTED_MODULE_25__["ina219"] +}, { + name: 'Environment - BMx280', + value: 28, + fields: _28_bmx280__WEBPACK_IMPORTED_MODULE_26__["bmx280"] +}, { + name: 'Output - Domoticz MQTT Helper', + value: 29, + fields: _29_mqtt_domoticz__WEBPACK_IMPORTED_MODULE_27__["mqttDomoticz"] +}, { + name: 'Environment - BMP280', + value: 30, + fields: _30_bmp280__WEBPACK_IMPORTED_MODULE_28__["bmp280"] +}, { + name: 'Environment - SHT1X', + value: 31, + fields: _31_sht1x__WEBPACK_IMPORTED_MODULE_29__["sht1x"] +}, { + name: 'Environment - MS5611 (GY-63)', + value: 32, + fields: _32_ms5611__WEBPACK_IMPORTED_MODULE_30__["ms5611"] +}, { + name: 'Generic - Dummy Device', + value: 33, + fields: _33_dummy_device__WEBPACK_IMPORTED_MODULE_31__["dummyDevice"] +}, { + name: 'Environment - DHT12 (I2C)', + value: 34, + fields: _34_dht12__WEBPACK_IMPORTED_MODULE_32__["dht12"] +}, { + name: 'Display - OLED SSD1306/SH1106 Framed', + value: 36, + fields: _36_sh1106__WEBPACK_IMPORTED_MODULE_33__["sh1106"] +}, { + name: 'Generic - MQTT Import', + value: 37, + fields: _37_mqtt_import__WEBPACK_IMPORTED_MODULE_34__["mqttImport"] +}, { + name: 'Output - NeoPixel (Basic)', + value: 38, + fields: _38_neopixel_basic__WEBPACK_IMPORTED_MODULE_35__["neopixelBasic"] +}, { + name: 'Environment - Thermocouple', + value: 39, + fields: _39_thermocouple__WEBPACK_IMPORTED_MODULE_36__["thermocouple"] +}, { + name: 'Output - NeoPixel (Word Clock)', + value: 41, + fields: _41_neopixel_clock__WEBPACK_IMPORTED_MODULE_37__["neopixelClock"] +}, { + name: 'Output - NeoPixel (Candle)', + value: 42, + fields: _42_neopixel_candle__WEBPACK_IMPORTED_MODULE_38__["neopixelCandle"] +}, { + name: 'Output - Clock', + value: 43, + fields: _43_output_clock__WEBPACK_IMPORTED_MODULE_39__["clock"] +}, { + name: 'Communication - P1 Wifi Gateway', + value: 44, + fields: _44_wifi_gateway__WEBPACK_IMPORTED_MODULE_40__["wifiGateway"] +}, { + name: 'Gases - CO2 MH-Z19', + value: 49, + fields: _49_mhz19__WEBPACK_IMPORTED_MODULE_41__["mhz19"] +}, { + name: 'Gases - CO2 Senseair', + value: 52, + fields: _52_senseair__WEBPACK_IMPORTED_MODULE_42__["senseAir"] +}, { + name: 'Dust - SDS011/018/198', + value: 56, + fields: _56_sds011__WEBPACK_IMPORTED_MODULE_43__["sds011"] +}, { + name: 'Switch Input - Rotary Encoder', + value: 59, + fields: _59_rotary_encoder__WEBPACK_IMPORTED_MODULE_44__["rotaryEncoder"] +}, { + name: 'Keypad - TTP229 Touc', + value: 63, + fields: _63_ttp229__WEBPACK_IMPORTED_MODULE_45__["ttp229"] +}]; + +/***/ }), + +/***/ "./src/lib/espeasy.js": +/*!****************************!*\ + !*** ./src/lib/espeasy.js ***! + \****************************/ +/*! exports provided: getJsonStat, loadDevices, getConfigNodes, getVariables, getDashboardConfigNodes, storeFile, deleteFile, storeDashboardConfig, storeRuleConfig, loadRuleConfig, loadDashboardConfig, storeRule */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getJsonStat", function() { return getJsonStat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDevices", function() { return loadDevices; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfigNodes", function() { return getConfigNodes; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariables", function() { return getVariables; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDashboardConfigNodes", function() { return getDashboardConfigNodes; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeFile", function() { return storeFile; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteFile", function() { return deleteFile; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeDashboardConfig", function() { return storeDashboardConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRuleConfig", function() { return storeRuleConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadRuleConfig", function() { return loadRuleConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDashboardConfig", function() { return loadDashboardConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRule", function() { return storeRule; }); +/* harmony import */ var mini_toastr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mini-toastr */ "./node_modules/mini-toastr/mini-toastr.js"); +/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js"); + + +const getJsonStat = async (url = '') => { + return await fetch(`${url}/json`).then(response => response.json()); +}; +const loadDevices = async url => { + return getJsonStat(url).then(response => response.Sensors); +}; +const getConfigNodes = async () => { + const devices = await loadDevices(); + const vars = []; + const nodes = devices.map(device => { + const taskValues = device.TaskValues || []; + taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`)); + const result = [{ + group: 'TRIGGERS', + type: device.TaskName || `${device.TaskNumber}-${device.Type}`, + inputs: [], + outputs: [1], + config: [{ + name: 'variable', + type: 'select', + values: taskValues.map(value => value.Name), + value: taskValues.length ? taskValues[0].Name : '' + }, { + name: 'euqality', + type: 'select', + values: ['', '=', '<', '>', '<=', '>=', '!='], + value: '' + }, { + name: 'value', + type: 'number' + }], + indent: true, + toString: function () { + const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`; + return `when ${this.type}.${this.config[0].value} ${comparison}`; + }, + toDsl: function () { + const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`; + return [`on ${this.type}#${this.config[0].value}${comparison} do\n%%output%%\nEndon\n`]; + } + }]; + let fnNames, fnName, name; + + switch (device.Type) { + // todo: need access to GPIO number + // case 'Switch input - Switch': + // result.push({ + // group: 'ACTIONS', + // type: `${device.TaskName} - switch`, + // inputs: [1], + // outputs: [1], + // config: [{ + // name: 'value', + // type: 'number', + // }], + // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; }, + // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; } + // }); + // break; + case 'Regulator - Level Control': + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - setlevel`, + inputs: [1], + outputs: [1], + config: [{ + name: 'value', + type: 'number' + }], + toString: function () { + return `${device.TaskName}.level = ${this.config[0].value}`; + }, + toDsl: function () { + return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; + } + }); + break; + + case 'Extra IO - PCA9685': + case 'Switch input - PCF8574': + case 'Switch input - MCP23017': + fnNames = { + 'Extra IO - PCA9685': 'PCF', + 'Switch input - PCF8574': 'PCF', + 'Switch input - MCP23017': 'MCP' + }; + fnName = fnNames[device.Type]; + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - GPIO`, + inputs: [1], + outputs: [1], + config: [{ + name: 'pin', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }], + toString: function () { + return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; + } + }); + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - Pulse`, + inputs: [1], + outputs: [1], + config: [{ + name: 'pin', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }, { + name: 'unit', + type: 'select', + values: ['ms', 's'] + }, { + name: 'duration', + type: 'number' + }], + toString: function () { + return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; + }, + toDsl: function () { + if (this.config[2].value === 's') { + return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; + } else { + return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; + } + } + }); + break; + + case 'Extra IO - ProMini Extender': + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - GPIO`, + inputs: [1], + outputs: [1], + config: [{ + name: 'pin', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }], + toString: function () { + return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; + } + }); + break; + + case 'Display - OLED SSD1306': + case 'Display - LCD2004': + fnNames = { + 'Display - OLED SSD1306': 'OLED', + 'Display - LCD2004': 'LCD' + }; + fnName = fnNames[device.Type]; + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - Write`, + inputs: [1], + outputs: [1], + config: [{ + name: 'row', + type: 'select', + values: [1, 2, 3, 4] + }, { + name: 'column', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] + }, { + name: 'text', + type: 'text' + }], + toString: function () { + return `${device.TaskName}.text = ${this.config[2].value}`; + }, + toDsl: function () { + return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; + } + }); + break; + + case 'Generic - Dummy Device': + result.push({ + group: 'ACTIONS', + type: `${device.TaskName} - Write`, + inputs: [1], + outputs: [1], + config: [{ + name: 'variable', + type: 'select', + values: taskValues.map(value => value.Name) + }, { + name: 'value', + type: 'text' + }], + toString: function () { + return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; + } + }); + break; + } + + return result; + }).flat(); + return { + nodes, + vars + }; +}; +const getVariables = async () => { + const urls = ['']; //, 'http://192.168.1.130' + + const vars = {}; + await Promise.all(urls.map(async url => { + const stat = await getJsonStat(url); + stat.Sensors.map(device => { + device.TaskValues.map(value => { + vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value; + }); + }); + })); + return vars; +}; +const getDashboardConfigNodes = async url => { + const devices = await loadDevices(url); + const vars = []; + const nodes = devices.map(device => { + device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`)); + return []; + }).flat(); + return { + nodes, + vars + }; +}; +const storeFile = async (filename, data) => { + _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].show(); + const file = data ? new File([new Blob([data])], filename) : filename; + const formData = new FormData(); + formData.append('edit', 1); + formData.append('file', file); + return await fetch('/upload', { + method: 'post', + body: formData + }).then(() => { + _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide(); + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000); + }, e => { + _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide(); + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000); + }); +}; +const deleteFile = async filename => { + return await fetch('/filelist?delete=' + filename).then(() => { + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000); + }, e => { + mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000); + }); +}; +const storeDashboardConfig = async config => { + storeFile('d1.txt', config); +}; +const storeRuleConfig = async config => { + storeFile('r1.txt', config); +}; +const loadRuleConfig = async () => { + return await fetch('/r1.txt').then(response => response.json()); +}; +const loadDashboardConfig = async nodes => { + return await fetch('/d1.txt').then(response => response.json()); +}; +const storeRule = async rule => { + const formData = new FormData(); + formData.append('set', 1); + formData.append('rules', rule); + return await fetch('/rules', { + method: 'post', + body: formData + }); +}; + +/***/ }), + +/***/ "./src/lib/floweditor.js": +/*!*******************************!*\ + !*** ./src/lib/floweditor.js ***! + \*******************************/ +/*! exports provided: FlowEditor */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FlowEditor", function() { return FlowEditor; }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); + // todo: +// improve relability of moving elements around +// global config + +const color = '#000000'; + +const saveChart = renderedNodes => { + // find initial nodes (triggers); + const triggers = renderedNodes.filter(node => node.inputs.length === 0); // for each initial node walk the tree and produce one 'rule' + + const result = triggers.map(trigger => { + const walkRule = rule => { + return { + t: rule.type, + v: rule.config.map(config => config.value), + o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))), + c: [rule.position.x, rule.position.y] + }; + }; + + return walkRule(trigger); + }); + return result; +}; + +const loadChart = (config, chart, from) => { + config.map(config => { + let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]); + + if (!node) { + const configNode = chart.nodes.find(n => config.t == n.type); + node = new NodeUI(chart.canvas, configNode, { + x: config.c[0], + y: config.c[1] + }); + node.config.map((cfg, i) => { + cfg.value = config.v[i]; + }); + node.render(); + chart.renderedNodes.push(node); + } + + if (from) { + const fromDimension = from.getBoundingClientRect(); + const toDimension = node.inputs[0].getBoundingClientRect(); + const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color); + chart.canvas.appendChild(lineSvg.element); + const x1 = fromDimension.x + fromDimension.width; + const y1 = fromDimension.y + fromDimension.height / 2; + const x2 = toDimension.x; + const y2 = toDimension.y + toDimension.height / 2; + lineSvg.setPath(x1, y1, x2, y2); + const connection = { + output: from, + input: node.inputs[0], + svg: lineSvg, + start: { + x: x1, + y: y1 + }, + end: { + x: x2, + y: y2 + } + }; + node.inputs[0].lines.push(connection); + from.lines.push(connection); + } + + config.o.map((output, outputI) => { + loadChart(output, chart, node.outputs[outputI]); + }); + }); +}; + +const exportChart = renderedNodes => { + // find initial nodes (triggers); + const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS'); + let result = ''; // for each initial node walk the tree and produce one 'rule' + + triggers.map(trigger => { + const walkRule = (r, i) => { + const rules = r.toDsl ? r.toDsl() : []; + let ruleset = ''; + let padding = r.indent ? ' ' : ''; + r.outputs.map((out, outI) => { + let rule = rules[outI] || r.type; + let subrule = ''; + + if (out.lines) { + out.lines.map(line => { + subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i); + }); + subrule = subrule.split('\n').map(line => padding + line).filter(line => line.trim() !== '').join('\n') + '\n'; + } + + if (rule.includes('%%output%%')) { + rule = rule.replace('%%output%%', subrule); + } else { + rule += subrule; + } + + ruleset += rule; + }); + return ruleset; + }; + + const rule = walkRule(trigger, 0); + result += rule + "\n\n"; + }); + return result; +}; // drag and drop helpers + + +const dNd = { + enableNativeDrag: (nodeElement, data) => { + nodeElement.draggable = true; + + nodeElement.ondragstart = ev => { + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(data).map(key => { + ev.dataTransfer.setData(key, data[key]); + }); + }; + }, + enableNativeDrop: (nodeElement, fn) => { + nodeElement.ondragover = ev => { + ev.preventDefault(); + }; + + nodeElement.ondrop = fn; + } // svg helpers + +}; + +class svgArrow { + constructor(width, height, fill, color) { + this.element = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px'); + this.element.setAttribute('width', width); + this.element.setAttribute('height', height); + this.element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + this.line = document.createElementNS("http://www.w3.org/2000/svg", "path"); + this.line.setAttributeNS(null, "fill", fill); + this.line.setAttributeNS(null, "stroke", color); + this.element.appendChild(this.line); + } + + setPath(x1, y1, x2, y2, tension = 0.5) { + const delta = (x2 - x1) * tension; + const hx1 = x1 + delta; + const hy1 = y1; + const hx2 = x2 - delta; + const hy2 = y2; + const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`; + this.line.setAttributeNS(null, "d", path); + } + +} // node configuration (each node in the left menu is represented by an instance of this object) + + +class Node { + constructor(conf) { + this.type = conf.type; + this.group = conf.group; + this.config = conf.config.map(config => Object.assign({}, config)); + this.inputs = conf.inputs.map(input => {}); + this.outputs = conf.outputs.map(output => {}); + this.toDsl = conf.toDsl; + this.toString = conf.toString; + this.toHtml = conf.toHtml; + this.indent = conf.indent; + } + +} // node UI (each node in your flow diagram is represented by an instance of this object) + + +class NodeUI extends Node { + constructor(canvas, conf, position) { + super(conf); + this.canvas = canvas; + this.position = position; + this.lines = []; + this.linesEnd = []; + this.toDsl = conf.toDsl; + this.toString = conf.toString; + this.toHtml = conf.toHtml; + this.indent = conf.indent; + } + + updateInputsOutputs(inputs, outputs) { + inputs.map(input => { + const rect = input.getBoundingClientRect(); + input.lines.map(line => { + line.end.x = rect.x; + line.end.y = rect.y + rect.height / 2; + line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y); + }); + }); + outputs.map(output => { + const rect = output.getBoundingClientRect(); + output.lines.map(line => { + line.start.x = rect.x + rect.width; + line.start.y = rect.y + rect.height / 2; + line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y); + }); + }); + } + + handleMoveEvent(ev) { + if (!this.canvas.canEdit) return; + const shiftX = ev.clientX - this.element.getBoundingClientRect().left; + const shiftY = ev.clientY - this.element.getBoundingClientRect().top; + + const onMouseMove = ev => { + const newy = ev.y - shiftY; + const newx = ev.x - shiftX; + this.position.y = newy - newy % this.canvas.gridSize; + this.position.x = newx - newx % this.canvas.gridSize; + this.element.style.top = `${this.position.y}px`; + this.element.style.left = `${this.position.x}px`; + this.updateInputsOutputs(this.inputs, this.outputs); + }; + + const onMouseUp = ev => { + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + }; + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + } + + handleDblClickEvent(ev) { + if (!this.canvas.canEdit) return; + if (this.config.length) showConfigBox(this.type, this.config, () => { + if (this.toHtml) { + this.text.innerHTML = this.toHtml(); + } else { + this.text.textContent = this.toString(); + } + }); + } + + handleRightClickEvent(ev) { + if (!this.canvas.canEdit) return; + this.inputs.map(input => { + input.lines.map(line => { + line.output.lines = []; + line.svg.element.parentNode.removeChild(line.svg.element); + }); + input.lines = []; + }); + this.outputs.map(output => { + output.lines.map(line => { + const index = line.input.lines.indexOf(line); + line.input.lines.splice(index, 1); + line.svg.element.parentNode.removeChild(line.svg.element); + }); + output.lines = []; + }); + this.element.parentNode.removeChild(this.element); + if (this.destroy) this.destroy(); + ev.preventDefault(); + ev.stopPropagation(); + return false; + } + + render() { + this.element = document.createElement('div'); + this.element.nodeObject = this; + this.element.className = `node node-chart group-${this.group}`; + this.text = document.createElement('span'); + + if (this.toHtml) { + this.text.innerHTML = this.toHtml(); + } else { + this.text.textContent = this.toString(); + } + + this.element.appendChild(this.text); + this.element.style.top = `${this.position.y}px`; + this.element.style.left = `${this.position.x}px`; + const inputs = document.createElement('div'); + inputs.className = 'node-inputs'; + this.element.appendChild(inputs); + this.inputs.map((val, index) => { + const input = this.inputs[index] = document.createElement('div'); + input.className = 'node-input'; + input.nodeObject = this; + input.lines = []; + + input.onmousedown = ev => { + ev.preventDefault(); + ev.stopPropagation(); + }; + + inputs.appendChild(input); + }); + const outputs = document.createElement('div'); + outputs.className = 'node-outputs'; + this.element.appendChild(outputs); + this.outputs.map((val, index) => { + const output = this.outputs[index] = document.createElement('div'); + output.className = 'node-output'; + output.nodeObject = this; + output.lines = []; + + output.oncontextmenu = ev => { + output.lines.map(line => { + line.svg.element.parentNode.removeChild(line.svg.element); + }); + output.lines = []; + ev.stopPropagation(); + ev.preventDefault(); + return false; + }; + + output.onmousedown = ev => { + ev.stopPropagation(); + if (output.lines.length) return; + const rects = output.getBoundingClientRect(); + const x1 = rects.x + rects.width; + const y1 = rects.y + rects.height / 2; + const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color); + this.canvas.appendChild(lineSvg.element); + + const onMouseMove = ev => { + lineSvg.setPath(x1, y1, ev.pageX, ev.pageY); + }; + + const onMouseUp = ev => { + const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY); + const input = elemBelow ? elemBelow.closest('.node-input') : null; + + if (!input) { + lineSvg.element.remove(); + } else { + const inputRect = input.getBoundingClientRect(); + const x2 = inputRect.x; + const y2 = inputRect.y + inputRect.height / 2; + lineSvg.setPath(x1, y1, x2, y2); + const connection = { + output, + input, + svg: lineSvg, + start: { + x: x1, + y: y1 + }, + end: { + x: x2, + y: y2 + } + }; + output.lines.push(connection); + input.lines.push(connection); + } + + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + }; + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); + }; + + outputs.appendChild(output); + }); + this.element.ondblclick = this.handleDblClickEvent.bind(this); + this.element.onmousedown = this.handleMoveEvent.bind(this); + this.element.oncontextmenu = this.handleRightClickEvent.bind(this); + this.canvas.appendChild(this.element); + } + +} + +const getCfgUI = cfg => { + const template = document.createElement('template'); + + const getSelectOptions = val => { + const selected = val == cfg.value ? 'selected' : ''; + return ``; + }; + + switch (cfg.type) { + case 'text': + template.innerHTML = `
    `; + break; + + case 'number': + template.innerHTML = `
    `; + break; + + case 'select': + template.innerHTML = `
    `; + break; + + case 'textselect': + template.innerHTML = `
    + + + +
    `; + } + + return template.content.cloneNode(true); +}; + +const showConfigBox = (type, config, onclose) => { + const template = document.createElement('template'); + template.innerHTML = ` +
    +
    +
    + +
    +
    +
    + +
    + `; + document.body.appendChild(template.content.cloneNode(true)); + const configBox = document.body.querySelectorAll('.configbox')[0]; + const body = document.body.querySelectorAll('.configbox-body')[0]; + const okButton = document.getElementById('ob'); + const cancelButton = document.getElementById('cb'); + + cancelButton.onclick = () => { + configBox.remove(); + }; + + okButton.onclick = () => { + // set configuration to node + config.map(cfg => { + cfg.value = document.forms['configform'].elements[cfg.name].value; + }); + configBox.remove(); + onclose(); + }; + + config.map(cfg => { + const cfgUI = getCfgUI(cfg); + body.appendChild(cfgUI); + }); +}; + +class FlowEditor { + constructor(element, nodes, config) { + this.nodes = []; + this.renderedNodes = []; + this.onSave = config.onSave; + this.canEdit = !config.readOnly; + this.debug = config.debug != null ? config.debug : true; + this.gridSize = config.gridSize || 1; + this.element = element; + nodes.map(nodeConfig => { + const node = new Node(nodeConfig); + this.nodes.push(node); + }); + this.render(); + if (this.canEdit) dNd.enableNativeDrop(this.canvas, ev => { + const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type')); + let node = new NodeUI(this.canvas, configNode, { + x: ev.x, + y: ev.y + }); + node.render(); + + node.destroy = () => { + this.renderedNodes.splice(this.renderedNodes.indexOf(node), 1); + node = null; + }; + + this.renderedNodes.push(node); + }); + } + + loadConfig(config) { + loadChart(config, this); + } + + saveConfig() { + return saveChart(this.renderedNodes); + } + + renderContainers() { + if (this.canEdit) { + this.sidebar = document.createElement('div'); + this.sidebar.className = 'sidebar'; + this.element.appendChild(this.sidebar); + } + + this.canvas = document.createElement('div'); + this.canvas.className = 'canvas'; + this.canvas.canEdit = this.canEdit; + this.canvas.gridSize = this.gridSize; + this.element.appendChild(this.canvas); + + if (this.canEdit && this.debug) { + this.debug = document.createElement('div'); + this.debug.className = 'debug'; + const text = document.createElement('div'); + this.debug.appendChild(text); + const saveBtn = document.createElement('button'); + saveBtn.textContent = 'SAVE'; + + saveBtn.onclick = () => { + const config = JSON.stringify(saveChart(this.renderedNodes)); + const rules = exportChart(this.renderedNodes); + this.onSave(config, rules); + }; + + const loadBtn = document.createElement('button'); + loadBtn.textContent = 'LOAD'; + + loadBtn.onclick = () => { + const input = prompt('enter config'); + loadChart(JSON.parse(input), this); + }; + + const exportBtn = document.createElement('button'); + exportBtn.textContent = 'EXPORT'; + + exportBtn.onclick = () => { + const exported = exportChart(this.renderedNodes); + text.textContent = exported; + }; + + this.debug.appendChild(exportBtn); + this.debug.appendChild(saveBtn); + this.debug.appendChild(loadBtn); + this.debug.appendChild(text); + this.element.appendChild(this.debug); + } + } + + renderConfigNodes() { + const groups = {}; + this.nodes.map(node => { + if (!groups[node.group]) { + const group = document.createElement('div'); + group.className = 'group'; + group.textContent = node.group; + this.sidebar.appendChild(group); + groups[node.group] = group; + } + + const nodeElement = document.createElement('div'); + nodeElement.className = `node group-${node.group}`; + nodeElement.textContent = node.type; + groups[node.group].appendChild(nodeElement); + dNd.enableNativeDrag(nodeElement, { + type: node.type + }); + }); + } + + render() { + this.renderContainers(); + if (this.canEdit) this.renderConfigNodes(); + } + +} + +/***/ }), + +/***/ "./src/lib/helpers.js": +/*!****************************!*\ + !*** ./src/lib/helpers.js ***! + \****************************/ +/*! exports provided: get, set, getKeys */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getKeys", function() { return getKeys; }); +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js"); +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "get", function() { return lodash_get__WEBPACK_IMPORTED_MODULE_0___default.a; }); +/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/set */ "./node_modules/lodash/set.js"); +/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_set__WEBPACK_IMPORTED_MODULE_1__); +/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "set", function() { return lodash_set__WEBPACK_IMPORTED_MODULE_1___default.a; }); + + // const get = (obj, path, defaultValue) => path.replace(/\[/g, '.').replace(/\]/g, '').split(".") +// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj) +// const set = (obj, path, value) => { +// path.replace(/\[/g, '.').replace(/\]/g, '').split('.').reduce((a, c, i, src) => { +// if (!a[c]) a[c] = {}; +// if (i === src.length - 1) a[c] = value; +// }, obj) +// } + +const getKeys = object => { + const keys = []; + + for (let key in object) { + if (object.hasOwnProperty(key)) { + keys.push(key); + } + } + + return keys; +}; + + + +/***/ }), + +/***/ "./src/lib/loader.js": +/*!***************************!*\ + !*** ./src/lib/loader.js ***! + \***************************/ +/*! exports provided: loader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loader", function() { return loader; }); +class Loader { + constructor() { + const loader = document.createElement('div'); + loader.className = 'loader'; + loader.innerHTML = 'loading'; + document.body.appendChild(loader); + this.loader = loader; + } + + show() { + this.loader.classList.add('show'); + } + + hide() { + this.loader.classList.add('hide'); + setTimeout(() => { + this.loader.classList.remove('hide'); + this.loader.classList.remove('show'); + }, 1000); + } + +} + +const loader = new Loader(); + +/***/ }), + +/***/ "./src/lib/menu.js": +/*!*************************!*\ + !*** ./src/lib/menu.js ***! + \*************************/ +/*! exports provided: menu */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "menu", function() { return menu; }); +/* harmony import */ var _pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pages */ "./src/pages/index.js"); +/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../conf/config.dat */ "./src/conf/config.dat.js"); + + + +class Menus { + constructor() { + this.menus = []; + this.routes = []; + + this.addMenu = menu => { + this.menus.push(menu); + this.addRoute(menu); + }; + + this.addRoute = route => { + this.routes.push(route); + + if (route.children) { + route.children.forEach(child => this.routes.push(child)); + } + }; + } + +} + +const menus = [{ + title: 'Devices', + href: 'devices', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DevicesPage"], + children: [] +}, { + title: 'Controllers', + href: 'controllers', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ControllersPage"], + children: [] +}, { + title: 'Automation', + href: 'rules', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["RulesEditorPage"], + class: 'full', + children: [] +}, { + title: 'Config', + href: 'config', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigPage"], + children: [{ + title: 'Hardware', + href: 'config/hardware', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigHardwarePage"] + }, { + title: 'Advanced', + href: 'config/advanced', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigAdvancedPage"] + }, { + title: 'Rules', + href: 'config/rules', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["RulesPage"] + }, { + title: 'Save', + href: 'config/save', + action: _conf_config_dat__WEBPACK_IMPORTED_MODULE_1__["saveConfig"] + }, { + title: 'Load', + href: 'config/load', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["LoadPage"] + }, { + title: 'Reboot', + href: 'config/reboot', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["RebootPage"] + }, { + title: 'Factory Reset', + href: 'config/factory', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["FactoryResetPage"] + }] +}, { + title: 'Tools', + href: 'tools', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ToolsPage"], + children: [{ + title: 'Discover', + href: 'tools/discover', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DiscoverPage"] + }, { + title: 'Update', + href: 'tools/update', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["UpdatePage"] + }, { + title: 'Filesystem', + href: 'tools/fs', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["FSPage"] + }] +}]; +const routes = [{ + title: 'Edit Controller', + href: 'controllers/edit', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["ControllerEditPage"] +}, { + title: 'Edit Device', + href: 'devices/edit', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DevicesEditPage"] +}, { + title: 'Save to Flash', + href: 'tools/diff', + component: _pages__WEBPACK_IMPORTED_MODULE_0__["DiffPage"] +}]; +const menu = new Menus(); +routes.forEach(menu.addRoute); +menus.forEach(menu.addMenu); + + +/***/ }), + +/***/ "./src/lib/node_definitions.js": +/*!*************************************!*\ + !*** ./src/lib/node_definitions.js ***! + \*************************************/ +/*! exports provided: nodes */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nodes", function() { return nodes; }); +const nodes = [// TRIGGERS +{ + group: 'TRIGGERS', + type: 'timer', + inputs: [], + outputs: [1], + config: [{ + name: 'timer', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8] + }], + indent: true, + toString: function () { + return `timer ${this.config[0].value}`; + }, + toDsl: function () { + return [`on Rules#Timer=${this.config[0].value} do\n%%output%%\nEndon\n`]; + } +}, { + group: 'TRIGGERS', + type: 'event', + inputs: [], + outputs: [1], + config: [{ + name: 'name', + type: 'text' + }], + indent: true, + toString: function () { + return `event ${this.config[0].value}`; + }, + toDsl: function () { + return [`on ${this.config[0].value} do\n%%output%%\nEndon\n`]; + } +}, { + group: 'TRIGGERS', + type: 'clock', + inputs: [], + outputs: [1], + config: [], + indent: true, + toString: () => { + return 'clock'; + }, + toDsl: () => { + return ['on Clock#Time do\n%%output%%\nEndon\n']; + } +}, { + group: 'TRIGGERS', + type: 'system boot', + inputs: [], + outputs: [1], + config: [], + indent: true, + toString: function () { + return `on boot`; + }, + toDsl: function () { + return [`On System#Boot do\n%%output%%\nEndon\n`]; + } +}, { + group: 'TRIGGERS', + type: 'Device', + inputs: [], + outputs: [1], + config: [], + indent: true, + toString: function () { + return `on boot`; + }, + toDsl: function () { + return [`On Device#Value do\n%%output%%\nEndon\n`]; + } +}, // LOGIC +{ + group: 'LOGIC', + type: 'if/else', + inputs: [1], + outputs: [1, 2], + config: [{ + name: 'variable', + type: 'textselect', + values: ['Clock#Time'] + }, { + name: 'equality', + type: 'select', + values: ['=', '<', '>', '<=', '>=', '!='] + }, { + name: 'value', + type: 'text' + }], + indent: true, + toString: function () { + return `IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`; + }, + toDsl: function () { + return [`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\n%%output%%`, `Else\n%%output%%\nEndif`]; + } +}, { + group: 'LOGIC', + type: 'delay', + inputs: [1], + outputs: [1], + config: [{ + name: 'delay', + type: 'number' + }], + toString: function () { + return `delay: ${this.config[0].value}`; + }, + toDsl: function () { + return [`Delay ${this.config[0].value}\n`]; + } +}, // ACTIONS +{ + group: 'ACTIONS', + type: 'GPIO', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + }, { + name: 'value', + type: 'select', + values: [0, 1] + }], + toString: function () { + return `GPIO ${this.config[0].value}, ${this.config[1].value}`; + }, + toDsl: function () { + return [`GPIO,${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'Pulse', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + value: 0 + }, { + name: 'value', + type: 'select', + values: [0, 1], + value: 1 + }, { + name: 'unit', + type: 'select', + values: ['s', 'ms'], + value: 'ms' + }, { + name: 'duration', + type: 'number', + value: 1000 + }], + toString: function () { + return `Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; + }, + toDsl: function () { + const fn = this.config[2].value === 's' ? 'LongPulse' : 'Pulse'; + return [`${fn},${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'PWM', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + value: 0 + }, { + name: 'value', + type: 'number', + value: 1023 + }], + toString: function () { + return `PWM.GPIO${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`PWM,${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'SERVO', + inputs: [1], + outputs: [1], + config: [{ + name: 'gpio', + type: 'select', + values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + value: 0 + }, { + name: 'servo', + type: 'select', + values: [1, 2], + value: 0 + }, { + name: 'position', + type: 'number', + value: 90 + }], + toString: function () { + return `SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`; + }, + toDsl: function () { + return [`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'fire event', + inputs: [1], + outputs: [1], + config: [{ + name: 'name', + type: 'text' + }], + toString: function () { + return `event ${this.config[0].value}`; + }, + toDsl: function () { + return [`event,${this.config[0].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'settimer', + inputs: [1], + outputs: [1], + config: [{ + name: 'timer', + type: 'select', + values: [1, 2, 3, 4, 5, 6, 7, 8] + }, { + name: 'value', + type: 'number' + }], + toString: function () { + return `timer${this.config[0].value} = ${this.config[1].value}`; + }, + toDsl: function () { + return [`timerSet,${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'MQTT', + inputs: [1], + outputs: [1], + config: [{ + name: 'topic', + type: 'text' + }, { + name: 'command', + type: 'text' + }], + toString: function () { + return `mqtt ${this.config[1].value}`; + }, + toDsl: function () { + return [`Publish ${this.config[0].value},${this.config[1].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'UDP', + inputs: [1], + outputs: [1], + config: [{ + name: 'ip', + type: 'text' + }, { + name: 'port', + type: 'number' + }, { + name: 'command', + type: 'text' + }], + toString: function () { + return `UDP ${this.config[1].value}`; + }, + toDsl: function () { + return [`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'HTTP', + inputs: [1], + outputs: [1], + config: [{ + name: 'host', + type: 'text' + }, { + name: 'port', + type: 'number', + value: 80 + }, { + name: 'url', + type: 'text' + }], + toString: function () { + return `HTTP ${this.config[2].value}`; + }, + toDsl: function () { + return [`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]; + } +}, { + group: 'ACTIONS', + type: 'ESPEASY', + inputs: [1], + outputs: [1], + config: [{ + name: 'device', + type: 'number' + }, { + name: 'command', + type: 'text' + }], + toString: function () { + return `mqtt ${this.config[1].value}`; + }, + toDsl: function () { + return [`SendTo ${this.config[0].value},${this.config[1].value}\n`]; + } +}]; + +/***/ }), + +/***/ "./src/lib/parser.js": +/*!***************************!*\ + !*** ./src/lib/parser.js ***! + \***************************/ +/*! exports provided: parseConfig, writeConfig */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseConfig", function() { return parseConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeConfig", function() { return writeConfig; }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); + + +class DataParser { + constructor(data) { + this.view = new DataView(data); + this.offset = 0; + this.bitbyte = 0; + this.bitbytepos = 7; + } + + pad(nr) { + while (this.offset % nr) { + this.offset++; + } + } + + bit(signed = false, write = false, val) { + if (this.bitbytepos === 7) { + if (!write) { + this.bitbyte = this.byte(); + this.bitbytepos = 0; + } else { + this.byte(signed, write, this.bitbyte); + } + } + + if (!write) { + return this.bitbyte >> this.bitbytepos++ & 1; + } else { + this.bitbyte = val ? this.bitbyte | 1 << this.bitbytepos++ : this.bitbyte & ~(1 << this.bitbytepos++); + } + } + + byte(signed = false, write = false, val) { + this.pad(1); + const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`; + const res = this.view[fn](this.offset, val); + this.offset += 1; + return res; + } + + int16(signed = false, write = false, val) { + this.pad(2); + let fn = signed ? 'Int16' : 'Uint16'; + const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true); + this.offset += 2; + return res; + } + + int32(signed = false, write = false, val) { + this.pad(4); + let fn = signed ? 'Int32' : 'Uint32'; + const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true); + this.offset += 4; + return res; + } + + float(signed = false, write = false, val) { + this.pad(4); + const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true); + this.offset += 4; + return res; + } + + bytes(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.byte(signed, write, vals ? vals[x] : null)); + } + + return res; + } + + ints(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.int16(signed, write, vals ? vals[x] : null)); + } + + return res; + } + + longs(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.int32(signed, write, vals ? vals[x] : null)); + } + + return res; + } + + floats(nr, signed = false, write = false, vals) { + const res = []; + + for (var x = 0; x < nr; x++) { + res.push(this.float(write, vals ? vals[x] : null)); + } + + return res; + } + + string(nr, signed = false, write = false, val) { + if (write) { + for (var i = 0; i < nr; ++i) { + var code = val.charCodeAt(i) || '\0'; + this.byte(false, true, code); + } + } else { + const res = this.bytes(nr); + return String.fromCharCode.apply(null, res).replace(/\x00/g, ''); + } + } + +} + +const parseConfig = (data, config, start) => { + const p = new DataParser(data); + if (start) p.offset = start; + const result = {}; + config.map(value => { + const prop = value.length ? value.length : value.signed; + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(result, value.prop, p[value.type](prop, value.signed)); + }); + return result; +}; +const writeConfig = (buffer, data, config, start) => { + const p = new DataParser(buffer); + if (start) p.offset = start; + config.map(value => { + const val = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(data, value.prop); + + if (value.length) { + p[value.type](value.length, value.signed, true, val); + } else { + p[value.type](value.signed, true, val); + } + }); +}; + +/***/ }), + +/***/ "./src/lib/plugins.js": +/*!****************************!*\ + !*** ./src/lib/plugins.js ***! + \****************************/ +/*! exports provided: loadPlugins */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadPlugins", function() { return loadPlugins; }); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./src/lib/settings.js"); +/* harmony import */ var _espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./espeasy */ "./src/lib/espeasy.js"); +/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js"); +/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./menu */ "./src/lib/menu.js"); + + + + +const PLUGINS = ['dash.js', 'flow.js']; + +const dynamicallyLoadScript = url => { + return new Promise(resolve => { + var script = document.createElement("script"); // create a script DOM node + + script.src = url; // set its src to the provided URL + + script.onreadystatechange = resolve; + script.onload = resolve; + script.onerror = resolve; + document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead) + }); +}; + +const getPluginAPI = () => { + return { + settings: _settings__WEBPACK_IMPORTED_MODULE_0__["settings"], + loader: _loader__WEBPACK_IMPORTED_MODULE_2__["loader"], + menu: _menu__WEBPACK_IMPORTED_MODULE_3__["menu"], + espeasy: _espeasy__WEBPACK_IMPORTED_MODULE_1__["default"] + }; +}; + +window.getPluginAPI = getPluginAPI; +const loadPlugins = async () => { + return Promise.all(PLUGINS.map(async plugin => { + return dynamicallyLoadScript(plugin); + })); +}; + +/***/ }), + +/***/ "./src/lib/settings.js": +/*!*****************************!*\ + !*** ./src/lib/settings.js ***! + \*****************************/ +/*! exports provided: settings */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js"); + + +const diff = (obj1, obj2, path = '') => { + return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(obj1).map(key => { + const val1 = obj1[key]; + const val2 = obj2[key]; + if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);else if (val1 !== val2) { + return [{ + path: `${path}.${key}`, + val1, + val2 + }]; + } else return []; + }).flat(); +}; + +class Settings { + init(settings) { + this.settings = settings; + this.apply(); + } + + get(prop) { + return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop); + } + /** + * sets changes to the current version and sets changed flag + * @param {*} prop + * @param {*} value + */ + + + set(prop, value) { + const obj = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop); + + if (typeof obj === 'object') { + console.warn('settings an object!'); + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value); + } else { + Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value); + } + + if (this.diff().length) this.changed = true; + } + /** + * returns diff between applied and current version + */ + + + diff() { + return diff(this.stored, this.settings); + } + /*** + * applys changes and creates new version in localStorage + */ + + + apply() { + this.stored = JSON.parse(JSON.stringify(this.settings)); + this.changed = false; + } + +} + +const settings = window.settings1 = new Settings(); + +/***/ }), + +/***/ "./src/pages/config.advanced.js": +/*!**************************************!*\ + !*** ./src/pages/config.advanced.js ***! + \**************************************/ +/*! exports provided: ConfigAdvancedPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigAdvancedPage", function() { return ConfigAdvancedPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const logLevelOptions = [{ + name: 'None', + value: 0 +}, { + name: 'Error', + value: 1 +}, { + name: 'Info', + value: 2 +}, { + name: 'Debug', + value: 3 +}, { + name: 'Debug More', + value: 4 +}, { + name: 'Debug Dev', + value: 9 +}]; +const formConfig = { + onSave: vals => { + console.log(vals); + }, + groups: { + rules: { + name: 'Rules Settings', + configs: { + enabled: { + name: 'Enabled', + type: 'checkbox' + }, + oldengine: { + name: 'Old Engine', + type: 'checkbox' + } + } + }, + mqtt: { + name: 'Controller Settings', + configs: { + retain_flag: { + name: 'MQTT Retain Msg', + type: 'checkbox' + }, + interval: { + name: 'Message Interval', + type: 'number' + }, + useunitname: { + name: 'MQTT use unit name as ClientId', + type: 'checkbox' + }, + changeclientid: { + name: 'MQTT change ClientId at reconnect', + type: 'checkbox' + } + } + }, + ntp: { + name: 'NTP Settings', + configs: { + enabled: { + name: 'Use NTP', + type: 'checkbox' + }, + host: { + name: 'NTP Hostname', + type: 'string' + } + } + }, + dst: { + name: 'DST Settings', + configs: { + enabled: { + name: 'Use DST', + type: 'checkbox' + } + } + }, + location: { + name: 'Location Settings', + configs: { + long: { + name: 'Longitude', + type: 'number' + }, + lat: { + name: 'Latitude', + type: 'number' + } + } + }, + log: { + name: 'Log Settings', + configs: { + syslog_ip: { + name: 'Syslog IP', + type: 'ip' + }, + syslog_level: { + name: 'Syslog Level', + type: 'select', + options: logLevelOptions + }, + syslog_facility: { + name: 'Syslog Level', + type: 'select', + options: [{ + name: 'Kernel', + value: 0 + }, { + name: 'User', + value: 1 + }, { + name: 'Daemon', + value: 3 + }, { + name: 'Message', + value: 5 + }, { + name: 'Local0', + value: 16 + }, { + name: 'Local1', + value: 17 + }, { + name: 'Local2', + value: 18 + }, { + name: 'Local3', + value: 19 + }, { + name: 'Local4', + value: 20 + }, { + name: 'Local5', + value: 21 + }, { + name: 'Local6', + value: 22 + }, { + name: 'Local7', + value: 23 + }] + }, + serial_level: { + name: 'Serial Level', + type: 'select', + options: logLevelOptions + }, + web_level: { + name: 'Web Level', + type: 'select', + options: logLevelOptions + } + } + }, + serial: { + name: 'Serial Settings', + configs: { + enabled: { + name: 'Enable Serial', + type: 'checkbox' + }, + baudrate: { + name: 'Baud Rate', + type: 'number' + } + } + }, + espnetwork: { + name: 'Inter-ESPEasy Network', + configs: { + enabled: { + name: 'Enable', + type: 'checkbox' + }, + port: { + name: 'Port', + type: 'number' + } + } + }, + experimental: { + name: 'Experimental Settings', + configs: { + ip_octet: { + name: 'Fixed IP Octet', + type: 'number' + }, + WDI2CAddress: { + name: 'WD I2C Address', + type: 'number' + }, + ssdp: { + name: 'Use SSDP', + type: 'checkbox', + var: 'ssdp.enabled' + }, + ConnectionFailuresThreshold: { + name: 'Connection Failiure Treshold', + type: 'number' + }, + WireClockStretchLimit: { + name: 'I2C ClockStretchLimit', + type: 'number' + } + } + } + } +}; +class ConfigAdvancedPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set('config', values); + window.location.href = '#devices'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('config') + }); + } + +} + +/***/ }), + +/***/ "./src/pages/config.hardware.js": +/*!**************************************!*\ + !*** ./src/pages/config.hardware.js ***! + \**************************************/ +/*! exports provided: pins, ConfigHardwarePage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return pins; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigHardwarePage", function() { return ConfigHardwarePage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const pins = [{ + name: 'None', + value: 255 +}, { + name: 'GPIO-0', + value: 0 +}, { + name: 'GPIO-1', + value: 1 +}, { + name: 'GPIO-2', + value: 2 +}, { + name: 'GPIO-3', + value: 3 +}, { + name: 'GPIO-4', + value: 4 +}, { + name: 'GPIO-5', + value: 5 +}, { + name: 'GPIO-9', + value: 9 +}, { + name: 'GPIO-10', + value: 10 +}, { + name: 'GPIO-12', + value: 12 +}, { + name: 'GPIO-13', + value: 13 +}, { + name: 'GPIO-14', + value: 14 +}, { + name: 'GPIO-15', + value: 15 +}, { + name: 'GPIO-16', + value: 16 +}]; +const pinState = [{ + name: 'Default', + value: 0 +}, { + name: 'Low', + value: 1 +}, { + name: 'High', + value: 2 +}, { + name: 'Input', + value: 3 +}]; +const formConfig = { + groups: { + led: { + name: 'WiFi Status LED', + configs: { + gpio: { + name: 'GPIO --> LED', + type: 'select', + options: pins + }, + inverse: { + name: 'Inversed LED', + type: 'checkbox' + } + } + }, + reset: { + name: 'Reset Pin', + configs: { + pin: { + name: 'GPIO <-- Switch', + type: 'select', + options: pins + } + } + }, + i2c: { + name: 'I2C Settings', + configs: { + sda: { + name: 'GPIO - SDA', + type: 'select', + options: pins + }, + scl: { + name: 'GPIO - SCL', + type: 'select', + options: pins + } + } + }, + spi: { + name: 'SPI Settings', + configs: { + enabled: { + name: 'Init SPI', + type: 'checkbox' + } + } + }, + gpio: { + name: 'GPIO boot states', + configs: { + 0: { + name: 'Pin Mode GPIO-0', + type: 'select', + options: pinState + }, + 1: { + name: 'Pin Mode GPIO-1', + type: 'select', + options: pinState + }, + 2: { + name: 'Pin Mode GPIO-2', + type: 'select', + options: pinState + }, + 3: { + name: 'Pin Mode GPIO-3', + type: 'select', + options: pinState + }, + 4: { + name: 'Pin Mode GPIO-4', + type: 'select', + options: pinState + }, + 5: { + name: 'Pin Mode GPIO-5', + type: 'select', + options: pinState + }, + 9: { + name: 'Pin Mode GPIO-9', + type: 'select', + options: pinState + }, + 10: { + name: 'Pin Mode GPIO-10', + type: 'select', + options: pinState + }, + 12: { + name: 'Pin Mode GPIO-12', + type: 'select', + options: pinState + }, + 13: { + name: 'Pin Mode GPIO-13', + type: 'select', + options: pinState + }, + 14: { + name: 'Pin Mode GPIO-14', + type: 'select', + options: pinState + }, + 15: { + name: 'Pin Mode GPIO-15', + type: 'select', + options: pinState + } + } + } + } +}; +class ConfigHardwarePage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + const config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('hardware'); + + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set('hardware', values); + window.location.href = '#devices'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/config.js": +/*!*****************************!*\ + !*** ./src/pages/config.js ***! + \*****************************/ +/*! exports provided: ConfigPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigPage", function() { return ConfigPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const ipBlockLevel = [{ + name: 'Allow All', + value: 0 +}, { + name: 'Allow Local Subnet', + value: 1 +}, { + name: 'Allow IP Range', + value: 2 +}]; +const formConfig = { + groups: { + general: { + name: 'General', + configs: { + unitname: { + name: 'Unit Name', + type: 'string' + }, + unitnr: { + name: 'Unit Number', + type: 'number' + }, + appendunit: { + name: 'Append Unit Name to Hostname', + type: 'checkbox' + }, + password: { + name: 'Admin Password', + type: 'password', + var: 'security[0].password' + } + } + }, + wifi: { + name: 'WiFi', + configs: { + ssid: { + name: 'SSID', + type: 'string', + var: 'security[0].WifiSSID' + }, + passwd: { + name: 'Password', + type: 'password', + var: 'security[0].WifiKey' + }, + fallbackssid: { + name: 'Fallback SSID', + type: 'string', + var: 'security[0].WifiSSID2' + }, + fallbackpasswd: { + name: 'Fallback Password', + type: 'password', + var: 'security[0].WifiKey2' + }, + wpaapmode: { + name: 'WPA AP Mode Key:', + type: 'string', + var: 'security[0].WifiAPKey' + } + } + }, + clientIP: { + name: 'Client IP Filtering', + configs: { + blocklevel: { + name: 'IP Block Level', + type: 'select', + options: ipBlockLevel, + var: 'security[0].IPblockLevel' + }, + lowerrange: { + name: 'Access IP lower range', + type: 'ip', + var: 'security[0].AllowedIPrangeLow' + }, + upperrange: { + name: 'Access IP upper range', + type: 'ip', + var: 'security[0].AllowedIPrangeHigh' + } + } + }, + IP: { + name: 'IP Settings', + configs: { + ip: { + name: 'IP', + type: 'ip' + }, + gw: { + name: 'Gateway', + type: 'ip' + }, + subnet: { + name: 'Subnet', + type: 'ip' + }, + dns: { + name: 'DNS', + type: 'ip' + } + } + }, + sleep: { + name: 'Sleep Mode', + configs: { + awaketime: { + name: 'Sleep awake time', + type: 'number' + }, + sleeptime: { + name: 'Sleep time', + type: 'number' + }, + sleeponfailiure: { + name: 'Sleep on connection failure', + type: 'checkbox' + } + } + } + } +}; +class ConfigPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`config`, values); + window.location.href = '#devices'; + }; + + const config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('config'); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/controllers.edit.js": +/*!***************************************!*\ + !*** ./src/pages/controllers.edit.js ***! + \***************************************/ +/*! exports provided: protocols, ControllerEditPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "protocols", function() { return protocols; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllerEditPage", function() { return ControllerEditPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); + + + +const protocols = [{ + name: '- Standalone -', + value: 0 +}, { + name: 'Domoticz HTTP', + value: 1 +}, { + name: 'Domoticz MQTT', + value: 2 +}, { + name: 'Nodo Telnet', + value: 3 +}, { + name: 'ThingSpeak', + value: 4 +}, { + name: 'OpenHAB MQTT', + value: 5 +}, { + name: 'PiDome MQTT', + value: 6 +}, { + name: 'Emoncms', + value: 7 +}, { + name: 'Generic HTTP', + value: 8 +}, { + name: 'FHEM HTTP', + value: 9 +}, { + name: 'Generic UDP', + value: 10 +}, { + name: 'ESPEasy P2P Networking', + value: 13 +}, { + name: 'Email', + value: 25 +}]; +const baseFields = { + dns: { + name: 'Locate Controller', + type: 'select', + options: [{ + value: 0, + name: 'Use IP Address' + }, { + value: 1, + name: 'Use Hostname' + }] + }, + IP: { + name: 'IP', + type: 'ip' + }, + hostname: { + name: 'Hostname', + type: 'string' + }, + port: { + name: 'Port', + type: 'number' + }, + minimal_time_between: { + name: 'Minimum Send Interval', + type: 'number' + }, + max_queue_depth: { + name: 'Max Queue Depth', + type: 'number' + }, + max_retry: { + name: 'Max Retries', + type: 'number' + }, + delete_oldest: { + name: 'Full Queue Action', + type: 'select', + options: [{ + value: 0, + name: 'Ignore New' + }, { + value: 1, + name: 'Delete Oldest' + }] + }, + must_check_reply: { + name: 'Check Reply', + type: 'select', + options: [{ + value: 0, + name: 'Ignore Acknowledgement' + }, { + value: 1, + name: 'Check Acknowledgement' + }] + }, + client_timeout: { + name: 'Client Timeout', + type: 'number' + } +}; +const user = { + name: 'Controller User', + type: 'string' +}; +const password = { + name: 'Controller Password', + type: 'password' +}; +const subscribe = { + name: 'Controller Subscribe', + type: 'string' +}; +const publish = { + name: 'Controller Publish', + type: 'string' +}; +const lwtTopicField = { + MQTT_lwt_topic: { + name: 'Controller LWT topic:', + type: 'string' + }, + lwt_message_connect: { + name: 'LWT Connect Message', + type: 'string' + }, + lwt_message_disconnect: { + name: 'LWT Disconnect Message', + type: 'string' + } +}; + +const getFormConfig = type => { + let additionalFields = {}; + + switch (Number(type)) { + case 2: // Domoticz MQTT + + case 5: + // OpenHAB MQTT + additionalFields = { ...baseFields, + user, + password, + subscribe, + publish, + ...lwtTopicField + }; + break; + + case 6: + // 'PiDome MQTT' + additionalFields = { ...baseFields, + subscribe, + publish, + ...lwtTopicField + }; + break; + + case 3: //'Nodo Telnet' + + case 7: + //'Emoncms': + additionalFields = { ...baseFields, + password + }; + break; + + case 8: + // 'Generic HTTP' + additionalFields = { ...baseFields, + user, + password, + subscribe, + publish + }; + break; + + case 1: // Domoticz HTTP + + case 9: + // 'FHEM HTTP' + additionalFields = { ...baseFields, + user, + password + }; + break; + + case 10: + //'Generic UDP': + additionalFields = { ...baseFields, + subscribe, + publish + }; + break; + + case 0: + case 13: + //'ESPEasy P2P Networking': + break; + + default: + additionalFields = { ...baseFields + }; + } + + return { + groups: { + settings: { + name: 'Controller Settings', + configs: { + protocol: { + name: 'Protocol', + type: 'select', + var: 'protocol', + options: protocols + }, + enabled: { + name: 'Enabled', + type: 'checkbox', + var: 'enabled' + }, + ...additionalFields + } + } + } + }; +}; // todo: changing protocol needs to update: +// -- back to default (correct default) +// -- field list + + +class ControllerEditPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(`controllers[${props.params[0]}]`); + this.state = { + protocol: this.config.protocol + }; + } + + render(props) { + const formConfig = getFormConfig(this.state.protocol); + + formConfig.groups.settings.configs.protocol.onChange = e => { + this.setState({ + protocol: e.currentTarget.value + }); + }; + + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`controllers[${props.params[0]}]`, values); + window.location.href = '#controllers'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: this.config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/controllers.js": +/*!**********************************!*\ + !*** ./src/pages/controllers.js ***! + \**********************************/ +/*! exports provided: ControllersPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllersPage", function() { return ControllersPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _controllers_edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./controllers.edit */ "./src/pages/controllers.edit.js"); + + + +class ControllersPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + const controllers = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('controllers'); + const notifications = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('notifications'); + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, " ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("h3", null, "Controllers"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, controllers.map((c, i) => { + const editUrl = `#controllers/edit/${i}`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "info" + }, i + 1, ": ", c.enabled ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2713") : Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2717"), "\xA0\xA0[", _controllers_edit__WEBPACK_IMPORTED_MODULE_2__["protocols"].find(p => p.value === c.protocol).name, "] PORT:", c.settings.port, " HOST:", c.settings.host, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: editUrl + }, "edit"))); + })), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("h3", null, "Notifications"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, notifications.map((n, i) => { + const editUrl = `#notifications/edit/${i}`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "info" + }, i + 1, ": ", n.enabled ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2713") : Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2717"), "\xA0\xA0[", n.type, "] PORT:", n.settings.port, " HOST:", n.settings.host, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: editUrl + }, "edit"))); + }))); + } + +} + +/***/ }), + +/***/ "./src/pages/devices.edit.js": +/*!***********************************!*\ + !*** ./src/pages/devices.edit.js ***! + \***********************************/ +/*! exports provided: DevicesEditPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DevicesEditPage", function() { return DevicesEditPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../devices */ "./src/devices/index.js"); + + + + +const baseFields = { + enabled: { + name: 'Enabled', + type: 'checkbox', + var: 'enabled' + }, + name: { + name: 'Name', + type: 'string' + } +}; + +const getFormConfig = type => { + const device = _devices__WEBPACK_IMPORTED_MODULE_3__["devices"].find(d => d.value === parseInt(type)); + if (!device) return null; + return { + groups: { + settings: { + name: 'Device Settings', + configs: { + device: { + name: 'Device', + type: 'select', + var: 'device', + options: _devices__WEBPACK_IMPORTED_MODULE_3__["devices"] + }, + ...baseFields + } + }, + ...device.fields, + values: { + name: 'Values', + configs: { ...[...new Array(4)].reduce((acc, x, i) => { + acc[`value${i}`] = [{ + name: 'Name', + var: `settings.values[${i}].name`, + type: 'string' + }, { + name: 'Formula', + var: `settings.values[${i}].formula`, + type: 'string' + }]; + return acc; + }, {}) + } + } + } + }; +}; // todo: changing protocol needs to update: +// -- back to default (correct default) +// -- field list + + +class DevicesEditPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(`tasks[${props.params[0]}]`); + this.state = { + device: this.config.device + }; + } + + render(props) { + const formConfig = getFormConfig(this.state.device); + + if (!formConfig) { + alert('something went wrong, cant edit device'); + window.location.href = '#devices'; + } + + formConfig.groups.settings.configs.device.onChange = e => { + this.setState({ + device: e.currentTarget.value + }); + }; + + formConfig.onSave = values => { + _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`tasks[${props.params[0]}]`, values); + window.location.href = '#devices'; + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: this.config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/devices.js": +/*!******************************!*\ + !*** ./src/pages/devices.js ***! + \******************************/ +/*! exports provided: DevicesPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DevicesPage", function() { return DevicesPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../devices */ "./src/devices/index.js"); + + + +class DevicesPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + + this.handleEnableToggle = e => { + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].set(e.currentTarget.dataset.prop, e.currentTarget.checked ? 1 : 0); + }; + } + + render(props) { + const tasks = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('tasks'); + if (!tasks) return; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, tasks.map((task, i) => { + const editUrl = `#devices/edit/${i}`; + const device = _devices__WEBPACK_IMPORTED_MODULE_2__["devices"].find(d => d.value === task.device); + const deviceType = device ? device.name : '--unknown--'; + const enabledProp = `tasks[${i}].enabled`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "info" + }, i + 1, ": ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + type: "checkbox", + defaultChecked: task.enabled, + "data-prop": enabledProp, + onChange: this.handleEnableToggle + }), "\xA0\xA0", task.settings.name, " [", deviceType, "] ", task.gpio1 !== 255 ? `GPIO:${task.gpio1}` : '', Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: editUrl + }, "edit")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", { + class: "vars" + })); + })); + } + +} + +/***/ }), + +/***/ "./src/pages/diff.js": +/*!***************************!*\ + !*** ./src/pages/diff.js ***! + \***************************/ +/*! exports provided: DiffPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiffPage", function() { return DiffPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js"); +/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conf/config.dat */ "./src/conf/config.dat.js"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); + + + + +class DiffPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.diff = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].diff(); + this.stage = 0; + + this.applyChanges = () => { + if (this.stage === 0) { + this.diff.map(d => { + const input = this.form.elements[d.path]; + + if (!input.checked) { + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].set(input.name, d.val1); + } + }); + _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].apply(); + this.diff = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].diff(); + this.data = Object(_conf_config_dat__WEBPACK_IMPORTED_MODULE_2__["saveConfig"])(false); + this.bytediff = Array.from(new Uint8Array(this.data)); + this.bytediff = this.bytediff.map((byte, i) => { + if (byte !== _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].binary[i]) { + return `${byte.toString(16)}`; + } else return `${byte.toString(16)}`; + }); + this.bytediff = this.bytediff.join(' '); + this.stage = 1; + return; + } + + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeFile"])('config.dat', this.data).then(() => { + this.stage = 0; + window.location.href = '#devices'; + }); + }; + } + + render(props) { + if (this.bytediff) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + dangerouslySetInnerHTML: { + __html: this.bytediff + } + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.applyChanges + }, "APPLY")); + } + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + ref: ref => this.form = ref + }, this.diff.map(change => { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, change.path), ": before: ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, JSON.stringify(change.val1)), " now:", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, JSON.stringify(change.val2)), " ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + name: change.path, + type: "checkbox", + defaultChecked: true + })); + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.applyChanges + }, "APPLY")); + } + +} + +/***/ }), + +/***/ "./src/pages/discover.js": +/*!*******************************!*\ + !*** ./src/pages/discover.js ***! + \*******************************/ +/*! exports provided: DiscoverPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiscoverPage", function() { return DiscoverPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); + +const devices = [{ + nr: 1, + name: 'Senzor', + type: 'DH11', + vars: [{ + name: 'Temperature', + formula: '', + value: 21 + }, { + name: 'Humidity', + formula: '', + value: 65 + }] +}, { + nr: 1, + name: 'Humidity', + type: 'Linear Regulator', + vars: [{ + name: 'Output', + formula: '', + value: 1 + }] +}]; +class DiscoverPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.state = { + devices: [] + }; + + this.scani2c = () => { + fetch('/i2cscanner').then(r => r.json()).then(r => { + this.setState({ + devices: r + }); + }); + }; + + this.scanwifi = () => { + fetch('/wifiscanner').then(r => r.json()).then(r => { + this.setState({ + devices: r + }); + }); + }; + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.scani2c + }, "Scan I2C"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.scanwifi + }, "Scan WiFi")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("table", null, this.state.devices.map(device => { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", { + class: "device" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", { + class: "info" + }, JSON.stringify(device))); + }))); + } + +} + +/***/ }), + +/***/ "./src/pages/factory_reset.js": +/*!************************************!*\ + !*** ./src/pages/factory_reset.js ***! + \************************************/ +/*! exports provided: FactoryResetPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FactoryResetPage", function() { return FactoryResetPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js"); + + +const formConfig = { + onSave: vals => { + console.log(vals); + }, + groups: { + keep: { + name: 'Settings to keep', + configs: { + unit: { + name: 'Keep Unit/Name', + type: 'checkbox' + }, + wifi: { + name: 'Keep WiFi config', + type: 'checkbox' + }, + network: { + name: 'Keep network config', + type: 'checkbox' + }, + ntp: { + name: 'Keep NTP/DST config', + type: 'checkbox' + }, + log: { + name: 'Keep log config', + type: 'checkbox' + } + } + }, + load: { + name: 'Pre-defined configurations', + configs: { + config: { + name: 'Pre-Defined config', + type: 'select', + options: [{ + name: 'default', + value: 0 + }, { + name: 'Sonoff Basic', + value: 1 + }, { + name: 'Sonoff TH1x', + value: 2 + }, { + name: 'Sonoff S2x', + value: 3 + }, { + name: 'Sonoff TouchT1', + value: 4 + }, { + name: 'Sonoff TouchT2', + value: 5 + }, { + name: 'Sonoff TouchT3', + value: 6 + }, { + name: 'Sonoff 4ch', + value: 7 + }, { + name: 'Sonoff POW', + value: 8 + }, { + name: 'Sonoff POW-r2', + value: 9 + }, { + name: 'Shelly1', + value: 10 + }] + } + } + } + } +}; +const config = {}; +class FactoryResetPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + formConfig.onSave = config => { + const data = new FormData(); + if (config.keep.unit) data.append('kun', 'on'); + if (config.keep.wifi) data.append('kw', 'on'); + if (config.keep.network) data.append('knet', 'on'); + if (config.keep.ntp) data.append('kntp', 'on'); + if (config.keep.log) data.append('klog', 'on'); + data.append('fdm', config.load.config); + data.append('savepref', 'Save Preferences'); + fetch('/factoryreset', { + method: 'POST', + body: data + }).then(() => { + data.delete('savepref'); + data.append('performfactoryreset', 'Factory Reset'); + fetch('/factoryreset', { + method: 'POST', + body: data + }).then(() => { + setTimeout(() => { + window.location.href = "#devices"; + }, 5000); + }, e => {}); + }, e => {}); + }; + + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], { + config: formConfig, + selected: config + }); + } + +} + +/***/ }), + +/***/ "./src/pages/fs.js": +/*!*************************!*\ + !*** ./src/pages/fs.js ***! + \*************************/ +/*! exports provided: FSPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FSPage", function() { return FSPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); + + +class FSPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.state = { + files: [] + }; + + this.saveForm = () => { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["storeFile"])(this.file.files[0]); + }; + + this.deleteFile = e => { + const fileName = e.currentTarget.data.name; + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["deleteFile"])(fileName).then(() => this.fetch()); + }; + } + + fetch() { + fetch('/filelist').then(response => response.json()).then(fileList => { + this.setState({ + files: fileList + }); + }); + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: "file", + class: "pure-checkbox" + }, "File:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: "file", + type: "file", + ref: ref => this.file = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveForm + }, "upload"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("table", { + class: "pure-table" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("thead", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null, "File"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null, "Size"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tbody", null, this.state.files.map(file => { + const url = `/${file.fileName}`; + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", { + href: url + }, file.fileName)), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, file.size), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.deleteFile, + "data-name": file.fileName + }, "X"))); + })))); + } + + componentDidMount() { + this.fetch(); + } + +} + +/***/ }), + +/***/ "./src/pages/index.js": +/*!****************************!*\ + !*** ./src/pages/index.js ***! + \****************************/ +/*! exports provided: ControllersPage, DevicesPage, ConfigPage, ConfigAdvancedPage, pins, ConfigHardwarePage, RebootPage, LoadPage, UpdatePage, RulesPage, ToolsPage, FSPage, FactoryResetPage, DiscoverPage, protocols, ControllerEditPage, DevicesEditPage, DiffPage, RulesEditorPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _controllers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./controllers */ "./src/pages/controllers.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ControllersPage", function() { return _controllers__WEBPACK_IMPORTED_MODULE_0__["ControllersPage"]; }); + +/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./devices */ "./src/pages/devices.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicesPage", function() { return _devices__WEBPACK_IMPORTED_MODULE_1__["DevicesPage"]; }); + +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ "./src/pages/config.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigPage", function() { return _config__WEBPACK_IMPORTED_MODULE_2__["ConfigPage"]; }); + +/* harmony import */ var _config_advanced__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./config.advanced */ "./src/pages/config.advanced.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigAdvancedPage", function() { return _config_advanced__WEBPACK_IMPORTED_MODULE_3__["ConfigAdvancedPage"]; }); + +/* harmony import */ var _config_hardware__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config.hardware */ "./src/pages/config.hardware.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return _config_hardware__WEBPACK_IMPORTED_MODULE_4__["pins"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigHardwarePage", function() { return _config_hardware__WEBPACK_IMPORTED_MODULE_4__["ConfigHardwarePage"]; }); + +/* harmony import */ var _reboot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reboot */ "./src/pages/reboot.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RebootPage", function() { return _reboot__WEBPACK_IMPORTED_MODULE_5__["RebootPage"]; }); + +/* harmony import */ var _load__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./load */ "./src/pages/load.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LoadPage", function() { return _load__WEBPACK_IMPORTED_MODULE_6__["LoadPage"]; }); + +/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./update */ "./src/pages/update.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "UpdatePage", function() { return _update__WEBPACK_IMPORTED_MODULE_7__["UpdatePage"]; }); + +/* harmony import */ var _rules__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rules */ "./src/pages/rules.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RulesPage", function() { return _rules__WEBPACK_IMPORTED_MODULE_8__["RulesPage"]; }); + +/* harmony import */ var _tools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tools */ "./src/pages/tools.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ToolsPage", function() { return _tools__WEBPACK_IMPORTED_MODULE_9__["ToolsPage"]; }); + +/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./fs */ "./src/pages/fs.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FSPage", function() { return _fs__WEBPACK_IMPORTED_MODULE_10__["FSPage"]; }); + +/* harmony import */ var _factory_reset__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./factory_reset */ "./src/pages/factory_reset.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FactoryResetPage", function() { return _factory_reset__WEBPACK_IMPORTED_MODULE_11__["FactoryResetPage"]; }); + +/* harmony import */ var _discover__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./discover */ "./src/pages/discover.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DiscoverPage", function() { return _discover__WEBPACK_IMPORTED_MODULE_12__["DiscoverPage"]; }); + +/* harmony import */ var _controllers_edit__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./controllers.edit */ "./src/pages/controllers.edit.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "protocols", function() { return _controllers_edit__WEBPACK_IMPORTED_MODULE_13__["protocols"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ControllerEditPage", function() { return _controllers_edit__WEBPACK_IMPORTED_MODULE_13__["ControllerEditPage"]; }); + +/* harmony import */ var _devices_edit__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./devices.edit */ "./src/pages/devices.edit.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicesEditPage", function() { return _devices_edit__WEBPACK_IMPORTED_MODULE_14__["DevicesEditPage"]; }); + +/* harmony import */ var _diff__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diff */ "./src/pages/diff.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DiffPage", function() { return _diff__WEBPACK_IMPORTED_MODULE_15__["DiffPage"]; }); + +/* harmony import */ var _rules_editor__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./rules.editor */ "./src/pages/rules.editor.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RulesEditorPage", function() { return _rules_editor__WEBPACK_IMPORTED_MODULE_16__["RulesEditorPage"]; }); + + + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "./src/pages/load.js": +/*!***************************!*\ + !*** ./src/pages/load.js ***! + \***************************/ +/*! exports provided: LoadPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadPage", function() { return LoadPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); + + +class LoadPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + + this.saveForm = () => { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["storeFile"])(this.file.files[0]); + }; + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: "file", + class: "pure-checkbox" + }, "File:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: "file", + type: "file", + ref: ref => this.file = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveForm + }, "upload"))); + } + +} + +/***/ }), + +/***/ "./src/pages/reboot.js": +/*!*****************************!*\ + !*** ./src/pages/reboot.js ***! + \*****************************/ +/*! exports provided: RebootPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RebootPage", function() { return RebootPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); + +class RebootPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, "ESPEasy is rebooting ... please wait a while, this page will auto refresh."); + } + + componentDidMount() { + fetch('/reboot').then(() => { + setTimeout(() => { + window.location.hash = '#devices'; + }, 5000); + }); + } + +} + +/***/ }), + +/***/ "./src/pages/rules.editor.js": +/*!***********************************!*\ + !*** ./src/pages/rules.editor.js ***! + \***********************************/ +/*! exports provided: RulesEditorPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RulesEditorPage", function() { return RulesEditorPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); +/* harmony import */ var _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/floweditor */ "./src/lib/floweditor.js"); +/* harmony import */ var _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/node_definitions */ "./src/lib/node_definitions.js"); +/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js"); + + + + +class RulesEditorPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.nodes = _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"]; + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "editor", + ref: ref => this.element = ref + }); + } + + componentDidMount() { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["getConfigNodes"])().then(out => { + out.nodes.forEach(device => _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].unshift(device)); + const ifElseNode = _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'if/else'); + + if (!ifElseNode.config[0].loaded) { + out.vars.forEach(v => ifElseNode.config[0].values.push(v)); + ifElseNode.config[0].loaded = true; + } + + this.chart = new _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__["FlowEditor"](this.element, _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"], { + onSave: (config, rules) => { + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeRuleConfig"])(config); + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeRule"])(rules); + } + }); + Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["loadRuleConfig"])().then(config => { + this.chart.loadConfig(config); + }); + }); + } + +} + +/***/ }), + +/***/ "./src/pages/rules.js": +/*!****************************!*\ + !*** ./src/pages/rules.js ***! + \****************************/ +/*! exports provided: RulesPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RulesPage", function() { return RulesPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); + +const rules = [{ + name: 'Rule 1', + file: 'rules1.txt', + index: 1 +}, { + name: 'Rule 2', + file: 'rules2.txt', + index: 2 +}, { + name: 'Rule 3', + file: 'rules3.txt', + index: 3 +}, { + name: 'Rule 4', + file: 'rules4.txt', + index: 4 +}]; +class RulesPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.state = { + selected: rules[0] + }; + + this.selectionChanged = e => { + this.setState({ + selected: rules[e.currentTarget.value] + }); + }; + + this.saveRule = () => { + const data = new FormData(); + data.append('set', this.state.selected.index); + data.append('rules', this.text.value); + fetch('/rules', { + method: 'POST', + body: data + }).then(res => { + console.log('succesfully saved'); + console.log(res.text()); + }); + }; + + this.fetch(); + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("select", { + onChange: this.selectionChanged + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "0" + }, "Rule 1"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "1" + }, "Rule 2"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "2" + }, "Rule 3"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", { + value: "3" + }, "Rule 4"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("textarea", { + style: "width: 100%; height: 400px", + ref: ref => this.text = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveRule + }, "Save")))); + } + + async fetch() { + const text = await fetch(this.state.selected.file).then(response => response.text()); + this.text.value = text; + } + + async componentDidUpdate() { + this.fetch(); + } + +} + +/***/ }), + +/***/ "./src/pages/tools.js": +/*!****************************!*\ + !*** ./src/pages/tools.js ***! + \****************************/ +/*! exports provided: ToolsPage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ToolsPage", function() { return ToolsPage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); + +class ToolsPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + this.history = ''; + + this.sendCommand = e => { + fetch(`/control?cmd=${this.cmd.value}`).then(response => response.text()).then(response => { + this.cmdOutput.value = response; + }); + }; + } + + fetch() { + fetch('/logjson').then(response => response.json()).then(response => { + response.Log.Entries.map(log => { + this.history += `
    ${new Date(log.timestamp).toLocaleTimeString()}${log.text}
    `; + this.log.innerHTML = this.history; + + if (true) { + this.log.scrollTop = this.log.scrollHeight; + } + }); + }); + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + style: "width: 100%; height: 200px; overflow-y: scroll;", + ref: ref => this.log = ref + }, "loading logs ..."), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, "Command: ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + type: "text", + ref: ref => this.cmd = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.sendCommand + }, "send")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("textarea", { + style: "width: 100%; height: 200px", + ref: ref => this.cmdOutput = ref + })); + } + + componentDidMount() { + this.interval = setInterval(() => { + this.fetch(); + }, 1000); + } + + componentWillUnmount() { + if (this.interval) clearInterval(this.interval); + } + +} + +/***/ }), + +/***/ "./src/pages/update.js": +/*!*****************************!*\ + !*** ./src/pages/update.js ***! + \*****************************/ +/*! exports provided: UpdatePage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UpdatePage", function() { return UpdatePage; }); +/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs"); + +class UpdatePage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] { + constructor(props) { + super(props); + + this.saveForm = () => { + const data = new FormData(); + data.append('file', this.file.files[0]); + data.append('user', 'hubot'); + fetch('/update', { + method: 'POST', + body: data + }).then(() => {}); + }; + } + + render(props) { + return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", { + class: "pure-form pure-form-aligned" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { + class: "pure-control-group" + }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", { + for: "file", + class: "pure-checkbox" + }, "Firmware:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", { + id: "file", + type: "file", + ref: ref => this.file = ref + }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { + type: "button", + onClick: this.saveForm + }, "upload"))); + } + +} + +/***/ }) + +/******/ }); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/build/main.js.map b/build/main.js.map new file mode 100644 index 0000000..13d8158 --- /dev/null +++ b/build/main.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/mini-toastr/mini-toastr.js","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///(webpack)/buildin/global.js","webpack:///./src/app.js","webpack:///./src/components/form/index.js","webpack:///./src/components/menu/index.js","webpack:///./src/components/page/index.js","webpack:///./src/conf/config.dat.js","webpack:///./src/devices/10_light_lux.js","webpack:///./src/devices/11_pme.js","webpack:///./src/devices/12_lcd.js","webpack:///./src/devices/13_hcsr04.js","webpack:///./src/devices/14_si7021.js","webpack:///./src/devices/15_tls2561.js","webpack:///./src/devices/17_pn532.js","webpack:///./src/devices/18_dust.js","webpack:///./src/devices/19_pcf8574.js","webpack:///./src/devices/1_input_switch.js","webpack:///./src/devices/20_ser2net.js","webpack:///./src/devices/21_level_control.js","webpack:///./src/devices/22_pca9685.js","webpack:///./src/devices/23_oled1306.js","webpack:///./src/devices/24_mlx90614.js","webpack:///./src/devices/25_ads1115.js","webpack:///./src/devices/26_system_info.js","webpack:///./src/devices/27_ina219.js","webpack:///./src/devices/28_bmx280.js","webpack:///./src/devices/29_mqtt_domoticz.js","webpack:///./src/devices/2_analog_input.js","webpack:///./src/devices/30_bmp280.js","webpack:///./src/devices/31_sht1x.js","webpack:///./src/devices/32_ms5611.js","webpack:///./src/devices/33_dummy_device.js","webpack:///./src/devices/34_dht12.js","webpack:///./src/devices/36_sh1106.js","webpack:///./src/devices/37_mqtt_import.js","webpack:///./src/devices/38_neopixel_basic.js","webpack:///./src/devices/39_thermocouple.js","webpack:///./src/devices/3_generic_pulse.js","webpack:///./src/devices/41_neopixel_clock.js","webpack:///./src/devices/42_neopixel_candle.js","webpack:///./src/devices/43_output_clock.js","webpack:///./src/devices/44_wifi_gateway.js","webpack:///./src/devices/49_mhz19.js","webpack:///./src/devices/4_ds18b20.js","webpack:///./src/devices/52_senseair.js","webpack:///./src/devices/56_sds011.js","webpack:///./src/devices/59_rotary_encoder.js","webpack:///./src/devices/5_dht.js","webpack:///./src/devices/63_ttp229.js","webpack:///./src/devices/6_bmp085.js","webpack:///./src/devices/7_pcf8591.js","webpack:///./src/devices/8_rfid.js","webpack:///./src/devices/9_io_mcp.js","webpack:///./src/devices/_defs.js","webpack:///./src/devices/index.js","webpack:///./src/lib/espeasy.js","webpack:///./src/lib/floweditor.js","webpack:///./src/lib/helpers.js","webpack:///./src/lib/loader.js","webpack:///./src/lib/menu.js","webpack:///./src/lib/node_definitions.js","webpack:///./src/lib/parser.js","webpack:///./src/lib/plugins.js","webpack:///./src/lib/settings.js","webpack:///./src/pages/config.advanced.js","webpack:///./src/pages/config.hardware.js","webpack:///./src/pages/config.js","webpack:///./src/pages/controllers.edit.js","webpack:///./src/pages/controllers.js","webpack:///./src/pages/devices.edit.js","webpack:///./src/pages/devices.js","webpack:///./src/pages/diff.js","webpack:///./src/pages/discover.js","webpack:///./src/pages/factory_reset.js","webpack:///./src/pages/fs.js","webpack:///./src/pages/index.js","webpack:///./src/pages/load.js","webpack:///./src/pages/reboot.js","webpack:///./src/pages/rules.editor.js","webpack:///./src/pages/rules.js","webpack:///./src/pages/tools.js","webpack:///./src/pages/update.js"],"names":["miniToastr","init","clearSlashes","path","toString","replace","getFragment","match","window","location","href","fragment","App","Component","constructor","state","menuActive","menu","menus","page","changed","menuToggle","setState","render","props","params","split","slice","active","componentDidMount","loader","hide","current","fn","newFragment","diff","settings","length","parts","m","find","routes","route","interval","setInterval","componentWillUnmount","load","loadConfig","loadPlugins","document","body","Form","saveForm","values","groups","getKeys","config","map","groupKey","group","keys","configs","key","val","form","elements","value","type","onSave","resetForm","reset","onChange","id","prop","e","checked","parseFloat","isNaN","parseInt","set","selected","renderConfig","varName","options","option","name","Object","if","clickEvent","click","renderConfigGroup","configArray","Array","isArray","conf","i","varId","var","get","renderGroup","ref","Menu","renderMenuItem","action","title","children","child","open","Page","PageComponent","component","pagetitle","class","TASKS_MAX","NOTIFICATION_MAX","CONTROLLER_MAX","PLUGIN_CONFIGVAR_MAX","PLUGIN_CONFIGFLOATVAR_MAX","PLUGIN_CONFIGLONGVAR_MAX","PLUGIN_EXTRACONFIGVAR_MAX","NAME_FORMULA_LENGTH_MAX","VARS_PER_TASK","configDatParseConfig","signed","x","flat","TaskSettings","ControllerSettings","NotificationSettings","SecuritySettings","fetch","then","response","arrayBuffer","parseConfig","tasks","extra","controllers","notificationResponse","notifications","securityResponse","security","console","log","binary","Uint8Array","saveData","a","createElement","appendChild","style","data","fileName","blob","Blob","url","URL","createObjectURL","download","revokeObjectURL","ii","saveConfig","save","buffer","ArrayBuffer","writeConfig","bufferNotifications","bufferSecurity","i2c_address","measurmentMode","bh1750","sensor","mode","send_to_sleep","send1","send2","send3","idx1","idx2","idx3","pme","port","displaySize","lcdCommand","lcd2004","size","line1","line2","line3","line4","button","pins","command","units","filters","hcsr04","gpio1","gpio2","treshold","max_distance","unit","filter","filter_size","resolution","si7021","tls2561","gain","pn532","dust","eventTypes","pcf8574","inversed","send_boot_state","advanced","debounce","dblclick","dblclick_interval","longpress","longpress_interval","safe_button","inputSwitch","pullup","gpio","switch_type","switch_button_type","parity","eventProcessing","ser2net","baudrate","data_bits","stop_bits","reset_after_boot","timeout","event_processing","sensorModel","levelControl","check_task","getTasks","check_value","getTaskValues","level","hysteresis","v","pca9685","frequency","range","oled1306","rotation","font","line5","line6","line7","line8","mlx90614","gainOptions","multiplexerOptions","ads1115","multiplexer","enabled","point1","point2","indicator","systemInfo","indicator1","measurmentRange","measurmentType","ina219","bmx280","altitude","offset","mqttDomoticz","idx","analogInput","oversampling","bmp280","sht1x","ms5611","dummyDevice","dht12","sh1106","mqttImport","neopixelBasic","leds","thermocouple","modeTypes","counterTypes","genericPulse","counter_type","mode_type","neopixelClock","R","min","max","G","B","neopixelCandle","clock","event1","event2","event3","event4","event5","event6","event7","event8","wifiGateway","mhz19","ds18b20","senseAir","sds011","rotaryEncoder","gpio3","dht","ttp229","scancode","bmp085","pcf8591","weigandType","rfidWeigand","inputMcp","task","index","devices","fields","getJsonStat","json","loadDevices","Sensors","getConfigNodes","vars","nodes","device","taskValues","TaskValues","push","TaskName","Name","result","TaskNumber","Type","inputs","outputs","indent","comparison","toDsl","fnNames","fnName","findIndex","getVariables","urls","Promise","all","stat","System","Value","getDashboardConfigNodes","storeFile","filename","show","file","File","formData","FormData","append","method","success","error","message","deleteFile","storeDashboardConfig","storeRuleConfig","loadRuleConfig","loadDashboardConfig","storeRule","rule","color","saveChart","renderedNodes","triggers","node","trigger","walkRule","t","o","out","lines","line","input","nodeObject","c","position","y","loadChart","chart","from","n","configNode","NodeUI","canvas","cfg","fromDimension","getBoundingClientRect","toDimension","lineSvg","svgArrow","clientWidth","clientHeight","element","x1","width","y1","height","x2","y2","setPath","connection","output","svg","start","end","outputI","exportChart","r","rules","ruleset","padding","outI","subrule","trim","join","includes","dNd","enableNativeDrag","nodeElement","draggable","ondragstart","ev","dataTransfer","setData","enableNativeDrop","ondragover","preventDefault","ondrop","fill","createElementNS","setAttribute","setAttributeNS","tension","delta","hx1","hy1","hx2","hy2","Node","assign","toHtml","linesEnd","updateInputsOutputs","rect","handleMoveEvent","canEdit","shiftX","clientX","left","shiftY","clientY","top","onMouseMove","newy","newx","gridSize","onMouseUp","removeEventListener","addEventListener","handleDblClickEvent","showConfigBox","text","innerHTML","textContent","handleRightClickEvent","parentNode","removeChild","indexOf","splice","destroy","stopPropagation","className","onmousedown","oncontextmenu","rects","pageX","pageY","elemBelow","elementFromPoint","closest","remove","inputRect","ondblclick","bind","getCfgUI","template","getSelectOptions","content","cloneNode","onclose","configBox","querySelectorAll","okButton","getElementById","cancelButton","onclick","forms","cfgUI","FlowEditor","readOnly","debug","nodeConfig","getData","renderContainers","sidebar","saveBtn","JSON","stringify","loadBtn","prompt","parse","exportBtn","exported","renderConfigNodes","object","hasOwnProperty","Loader","classList","add","setTimeout","Menus","addMenu","addRoute","forEach","DevicesPage","ControllersPage","RulesEditorPage","ConfigPage","ConfigHardwarePage","ConfigAdvancedPage","RulesPage","LoadPage","RebootPage","FactoryResetPage","ToolsPage","DiscoverPage","UpdatePage","FSPage","ControllerEditPage","DevicesEditPage","DiffPage","DataParser","view","DataView","bitbyte","bitbytepos","pad","nr","bit","write","byte","res","int16","int32","float","setFloat32","getFloat32","bytes","vals","ints","longs","floats","string","code","charCodeAt","String","fromCharCode","apply","p","PLUGINS","dynamicallyLoadScript","resolve","script","src","onreadystatechange","onload","onerror","head","getPluginAPI","espeasy","plugin","obj1","obj2","val1","val2","Settings","obj","warn","stored","settings1","logLevelOptions","formConfig","oldengine","mqtt","retain_flag","useunitname","changeclientid","ntp","host","dst","long","lat","syslog_ip","syslog_level","syslog_facility","serial_level","web_level","serial","espnetwork","experimental","ip_octet","WDI2CAddress","ssdp","ConnectionFailuresThreshold","WireClockStretchLimit","pinState","led","inverse","pin","i2c","sda","scl","spi","ipBlockLevel","general","unitname","unitnr","appendunit","password","wifi","ssid","passwd","fallbackssid","fallbackpasswd","wpaapmode","clientIP","blocklevel","lowerrange","upperrange","IP","ip","gw","subnet","dns","sleep","awaketime","sleeptime","sleeponfailiure","protocols","baseFields","hostname","minimal_time_between","max_queue_depth","max_retry","delete_oldest","must_check_reply","client_timeout","user","subscribe","publish","lwtTopicField","MQTT_lwt_topic","lwt_message_connect","lwt_message_disconnect","getFormConfig","additionalFields","Number","protocol","currentTarget","editUrl","d","reduce","acc","alert","handleEnableToggle","dataset","deviceType","enabledProp","stage","applyChanges","bytediff","__html","change","formula","scani2c","scanwifi","keep","network","delete","files","fileList","hash","unshift","ifElseNode","loaded","selectionChanged","saveRule","componentDidUpdate","history","sendCommand","cmd","cmdOutput","Log","Entries","Date","timestamp","toLocaleTimeString","scrollTop","scrollHeight","clearInterval"],"mappings":"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;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7BA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,cAAc,mBAAO,CAAC,mDAAW;AACjC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,WAAW,mBAAO,CAAC,+CAAS;AAC5B,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,UAAU,mBAAO,CAAC,6CAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,mDAAW;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACRA,oBAAoB,mBAAO,CAAC,iEAAkB;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;;;;;;;;;;;AC1BA,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxEA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEO;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,SAAS;AACvC,uBAAuB,SAAS;AAChC,sBAAsB,SAAS;AAC/B,yBAAyB,SAAS;AAClC,wBAAwB,MAAM;AAC9B,uBAAuB,KAAK;AAC5B,0BAA0B,QAAQ;AAClC,uBAAuB,KAAK;AAC5B;;AAEP;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA,oDAAoD;AACpD,eAAe,OAAO;AACtB;;AAEA,wCAAwC;;AAExC;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEO;AACP,UAAU,2BAA2B;AACrC;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,mBAAmB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP,YAAY,cAAc;AAC1B;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,YAAY;AACrB;AACA,KAAK;AACL,SAAS,cAAc;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,mBAAmB,GAAG,mBAAmB;;AAE7E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA,+BAA+B;AAC/B;AACA;;AAEe,yE;;;;;;;;;;;;AC3Of;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA,GAAG;AACH;;AAEA;AACA,kCAAkC,0DAA0D;AAC5F;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;;AAEA;AACA,2CAA2C;AAC3C;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,EAAE;AACF;;AAEA;AACA,sFAAsF;AACtF,GAAG;AACH,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,UAAU;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC;;AAED;AACA,8BAA8B;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,qEAAM,EAAC;AAC0E;AAChG;;;;;;;;;;;;ACntBA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEAA,mDAAU,CAACC,IAAX,CAAgB,EAAhB;;AAEA,MAAMC,YAAY,GAAGC,IAAI,IAAI;AACzB,SAAOA,IAAI,CAACC,QAAL,GAAgBC,OAAhB,CAAwB,KAAxB,EAA+B,EAA/B,EAAmCA,OAAnC,CAA2C,KAA3C,EAAkD,EAAlD,CAAP;AACH,CAFD;;AAIA,MAAMC,WAAW,GAAG,MAAM;AACtB,QAAMC,KAAK,GAAGC,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAqBH,KAArB,CAA2B,QAA3B,CAAd;AACA,QAAMI,QAAQ,GAAGJ,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAc,EAApC;AACA,SAAOL,YAAY,CAACS,QAAD,CAAnB;AACH,CAJD;;AAMA,MAAMC,GAAN,SAAkBC,gDAAlB,CAA4B;AACxBC,aAAW,GAAG;AACV;AACA,SAAKC,KAAL,GAAa;AACTC,gBAAU,EAAE,KADH;AAETC,UAAI,EAAEA,8CAAI,CAACC,KAAL,CAAW,CAAX,CAFG;AAGTC,UAAI,EAAGF,8CAAI,CAACC,KAAL,CAAW,CAAX,CAHE;AAITE,aAAO,EAAE;AAJA,KAAb;;AAOA,SAAKC,UAAL,GAAkB,MAAM;AACpB,WAAKC,QAAL,CAAc;AAAEN,kBAAU,EAAE,CAAC,KAAKD,KAAL,CAAWC;AAA1B,OAAd;AACH,KAFD;AAGH;;AAEDO,QAAM,CAACC,KAAD,EAAQT,KAAR,EAAe;AAEjB,UAAMU,MAAM,GAAGnB,WAAW,GAAGoB,KAAd,CAAoB,GAApB,EAAyBC,KAAzB,CAA+B,CAA/B,CAAf;AACA,UAAMC,MAAM,GAAG,KAAKb,KAAL,CAAWC,UAAX,GAAwB,QAAxB,GAAmC,EAAlD;AACA,WACI;AAAK,QAAE,EAAC,QAAR;AAAiB,WAAK,EAAEY;AAAxB,OACI;AAAG,QAAE,EAAC,UAAN;AAAiB,WAAK,EAAC,WAAvB;AAAmC,aAAO,EAAE,KAAKP;AAAjD,OACI,8DADJ,CADJ,EAII,iDAAC,qDAAD;AAAM,WAAK,EAAEJ,8CAAI,CAACC,KAAlB;AAAyB,cAAQ,EAAEH,KAAK,CAACE;AAAzC,MAJJ,EAKI,iDAAC,qDAAD;AAAM,UAAI,EAAEF,KAAK,CAACI,IAAlB;AAAwB,YAAM,EAAEM,MAAhC;AAAwC,aAAO,EAAE,KAAKV,KAAL,CAAWK;AAA5D,MALJ,CADJ;AASH;;AAEDS,mBAAiB,GAAG;AAChBC,sDAAM,CAACC,IAAP;AAEA,QAAIC,OAAO,GAAG,EAAd;;AACA,UAAMC,EAAE,GAAG,MAAM;AACb,YAAMC,WAAW,GAAG5B,WAAW,EAA/B;AACA,YAAM6B,IAAI,GAAGC,sDAAQ,CAACD,IAAT,EAAb;;AACA,UAAG,KAAKpB,KAAL,CAAWK,OAAX,KAAuB,CAAC,CAACe,IAAI,CAACE,MAAjC,EAAyC;AACrC,aAAKf,QAAL,CAAc;AAACF,iBAAO,EAAE,CAAC,KAAKL,KAAL,CAAWK;AAAtB,SAAd;AACH;;AACD,UAAGY,OAAO,KAAKE,WAAf,EAA4B;AACxBF,eAAO,GAAGE,WAAV;AACA,cAAMI,KAAK,GAAGN,OAAO,CAACN,KAAR,CAAc,GAAd,CAAd;AACA,cAAMa,CAAC,GAAGtB,8CAAI,CAACC,KAAL,CAAWsB,IAAX,CAAgBvB,IAAI,IAAIA,IAAI,CAACP,IAAL,KAAc4B,KAAK,CAAC,CAAD,CAA3C,CAAV;AACA,cAAMnB,IAAI,GAAGmB,KAAK,CAACD,MAAN,GAAe,CAAf,GAAmBpB,8CAAI,CAACwB,MAAL,CAAYD,IAAZ,CAAiBE,KAAK,IAAIA,KAAK,CAAChC,IAAN,KAAgB,GAAE4B,KAAK,CAAC,CAAD,CAAI,IAAGA,KAAK,CAAC,CAAD,CAAI,EAAjE,CAAnB,GAAyFC,CAAtG;;AACA,YAAIpB,IAAJ,EAAU;AACN,eAAKG,QAAL,CAAc;AAAEH,gBAAF;AAAQoB,aAAR;AAAWvB,sBAAU,EAAE;AAAvB,WAAd;AACH;AACJ;AACJ,KAfD;;AAgBA,SAAK2B,QAAL,GAAgBC,WAAW,CAACX,EAAD,EAAK,GAAL,CAA3B;AACH;;AAEDY,sBAAoB,GAAG,CAAE;;AArDD;;AAwD5B,MAAMC,IAAI,GAAG,YAAY;AACrB,QAAMC,mEAAU,EAAhB;AACA,QAAMC,gEAAW,EAAjB;AACAzB,uDAAM,CAAC,iDAAC,GAAD,OAAD,EAAU0B,QAAQ,CAACC,IAAnB,CAAN;AACH,CAJD;;AAMAJ,IAAI,G;;;;;;;;;;;;ACpFJ;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEO,MAAMK,IAAN,SAAmBtC,gDAAnB,CAA6B;AAChCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;;AAEA,SAAK4B,QAAL,GAAgB,MAAM;AAClB,YAAMC,MAAM,GAAG,EAAf;AACA,YAAMC,MAAM,GAAGC,4DAAO,CAAC,KAAK/B,KAAL,CAAWgC,MAAX,CAAkBF,MAAnB,CAAtB;AACAA,YAAM,CAACG,GAAP,CAAWC,QAAQ,IAAI;AACnB,cAAMC,KAAK,GAAG,KAAKnC,KAAL,CAAWgC,MAAX,CAAkBF,MAAlB,CAAyBI,QAAzB,CAAd;AACA,cAAME,IAAI,GAAGL,4DAAO,CAACI,KAAK,CAACE,OAAP,CAApB;AACA,YAAI,CAACR,MAAM,CAACK,QAAD,CAAX,EAAuBL,MAAM,CAACK,QAAD,CAAN,GAAmB,EAAnB;AACvBE,YAAI,CAACH,GAAL,CAASK,GAAG,IAAI;AACZ,cAAIC,GAAG,GAAG,KAAKC,IAAL,CAAUC,QAAV,CAAoB,GAAEP,QAAS,IAAGI,GAAI,EAAtC,EAAyCI,KAAnD;;AACA,cAAIP,KAAK,CAACE,OAAN,CAAcC,GAAd,EAAmBK,IAAnB,KAA4B,UAAhC,EAA4C;AACxCJ,eAAG,GAAGA,GAAG,KAAK,IAAR,GAAe,CAAf,GAAmB,CAAzB;AACH;;AACDV,gBAAM,CAACK,QAAD,CAAN,CAAiBI,GAAjB,IAAwBC,GAAxB;AACH,SAND;AAOH,OAXD;AAYA,WAAKvC,KAAL,CAAWgC,MAAX,CAAkBY,MAAlB,CAAyBf,MAAzB;AACH,KAhBD;;AAkBA,SAAKgB,SAAL,GAAiB,MAAM;AACnB,WAAKL,IAAL,CAAUM,KAAV;AACH,KAFD;;AAIA,SAAKC,QAAL,GAAgB,CAACC,EAAD,EAAKC,IAAL,EAAWjB,MAAM,GAAG,EAApB,KAA2B;AACvC,aAAQkB,CAAD,IAAO;AACV,YAAIX,GAAG,GAAG,KAAKC,IAAL,CAAUC,QAAV,CAAmBO,EAAnB,EAAuBN,KAAjC;;AACA,YAAIV,MAAM,CAACW,IAAP,KAAgB,UAApB,EAAgC;AAC5BJ,aAAG,GAAI,KAAKC,IAAL,CAAUC,QAAV,CAAmBO,EAAnB,EAAuBG,OAAvB,GAAiC,CAAjC,GAAqC,CAA5C;AACH,SAFD,MAEO,IAAInB,MAAM,CAACW,IAAP,KAAgB,QAAhB,IAA4BX,MAAM,CAACW,IAAP,KAAgB,IAAhD,EAAsD;AACzDJ,aAAG,GAAGa,UAAU,CAACb,GAAD,CAAhB;AACH,SAFM,MAEA,IAAIP,MAAM,CAACW,IAAP,KAAgB,QAApB,EAA8B;AACjCJ,aAAG,GAAGc,KAAK,CAACd,GAAD,CAAL,GAAaA,GAAb,GAAmBe,QAAQ,CAACf,GAAD,CAAjC;AACH;;AACDgB,gEAAG,CAAC,KAAKvD,KAAL,CAAWwD,QAAZ,EAAsBP,IAAtB,EAA4BV,GAA5B,CAAH;;AACA,YAAIP,MAAM,CAACe,QAAX,EAAqB;AACjBf,gBAAM,CAACe,QAAP,CAAgBG,CAAhB;AACH;AACJ,OAbD;AAcH,KAfD;AAgBH;;AAEDO,cAAY,CAACT,EAAD,EAAKhB,MAAL,EAAaU,KAAb,EAAoBgB,OAApB,EAA6B;AACrC,YAAQ1B,MAAM,CAACW,IAAf;AACI,WAAK,QAAL;AACI,eACI;AAAO,YAAE,EAAEK,EAAX;AAAe,cAAI,EAAC,MAApB;AAA2B,eAAK,EAAEN,KAAlC;AAAyC,kBAAQ,EAAE,KAAKK,QAAL,CAAcC,EAAd,EAAkBU,OAAlB,EAA2B1B,MAA3B;AAAnD,UADJ;;AAGJ,WAAK,QAAL;AACI,eACI;AAAO,YAAE,EAAEgB,EAAX;AAAe,cAAI,EAAC,QAApB;AAA6B,eAAK,EAAEN,KAApC;AAA2C,kBAAQ,EAAE,KAAKK,QAAL,CAAcC,EAAd,EAAkBU,OAAlB,EAA2B1B,MAA3B;AAArD,UADJ;;AAGJ,WAAK,IAAL;AACI,eAAO,CACF;AAAO,YAAE,EAAG,GAAEgB,EAAG,IAAjB;AAAsB,cAAI,EAAC,QAA3B;AAAoC,aAAG,EAAC,GAAxC;AAA4C,aAAG,EAAC,KAAhD;AAAsD,kBAAQ,EAAE,KAAKD,QAAL,CAAe,GAAEC,EAAG,IAApB,EAA0B,GAAEU,OAAQ,IAApC,EAAyC1B,MAAzC,CAAhE;AAAkH,eAAK,EAAC,aAAxH;AAAsI,eAAK,EAAEU,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAc;AAAhK,UADE,EAEF;AAAO,YAAE,EAAG,GAAEM,EAAG,IAAjB;AAAsB,cAAI,EAAC,QAA3B;AAAoC,aAAG,EAAC,GAAxC;AAA4C,aAAG,EAAC,KAAhD;AAAsD,kBAAQ,EAAE,KAAKD,QAAL,CAAe,GAAEC,EAAG,IAApB,EAA0B,GAAEU,OAAQ,IAApC,EAAyC1B,MAAzC,CAAhE;AAAkH,eAAK,EAAC,aAAxH;AAAsI,eAAK,EAAEU,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAc;AAAhK,UAFE,EAGF;AAAO,YAAE,EAAG,GAAEM,EAAG,IAAjB;AAAsB,cAAI,EAAC,QAA3B;AAAoC,aAAG,EAAC,GAAxC;AAA4C,aAAG,EAAC,KAAhD;AAAsD,kBAAQ,EAAE,KAAKD,QAAL,CAAe,GAAEC,EAAG,IAApB,EAA0B,GAAEU,OAAQ,IAApC,EAAyC1B,MAAzC,CAAhE;AAAkH,eAAK,EAAC,aAAxH;AAAsI,eAAK,EAAEU,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAc;AAAhK,UAHE,EAIF;AAAO,YAAE,EAAG,GAAEM,EAAG,IAAjB;AAAsB,cAAI,EAAC,QAA3B;AAAoC,aAAG,EAAC,GAAxC;AAA4C,aAAG,EAAC,KAAhD;AAAsD,kBAAQ,EAAE,KAAKD,QAAL,CAAe,GAAEC,EAAG,IAApB,EAA0B,GAAEU,OAAQ,IAApC,EAAyC1B,MAAzC,CAAhE;AAAkH,eAAK,EAAC,aAAxH;AAAsI,eAAK,EAAEU,KAAK,GAAGA,KAAK,CAAC,CAAD,CAAR,GAAc;AAAhK,UAJE,CAAP;;AAMJ,WAAK,UAAL;AACI,eACI;AAAO,YAAE,EAAEM,EAAX;AAAe,cAAI,EAAC,UAApB;AAA+B,kBAAQ,EAAE,KAAKD,QAAL,CAAcC,EAAd,EAAkBU,OAAlB,EAA2B1B,MAA3B;AAAzC,UADJ;;AAGJ,WAAK,UAAL;AACI,eACI;AAAO,YAAE,EAAEgB,EAAX;AAAe,cAAI,EAAC,UAApB;AAA+B,wBAAc,EAAEN,KAA/C;AAAsD,kBAAQ,EAAE,KAAKK,QAAL,CAAcC,EAAd,EAAkBU,OAAlB,EAA2B1B,MAA3B;AAAhE,UADJ;;AAGJ,WAAK,QAAL;AACI,cAAM2B,OAAO,GAAI,OAAO3B,MAAM,CAAC2B,OAAd,KAA0B,UAA3B,GAAyC3B,MAAM,CAAC2B,OAAP,EAAzC,GAA4D3B,MAAM,CAAC2B,OAAnF;AACA,eACI;AAAQ,YAAE,EAAEX,EAAZ;AAAgB,cAAI,EAAC,UAArB;AAAgC,kBAAQ,EAAE,KAAKD,QAAL,CAAcC,EAAd,EAAkBU,OAAlB,EAA2B1B,MAA3B;AAA1C,WACK2B,OAAO,CAAC1B,GAAR,CAAY2B,MAAM,IAAI;AACnB,gBAAMC,IAAI,GAAGD,MAAM,YAAYE,MAAlB,GAA2BF,MAAM,CAACC,IAAlC,GAAyCD,MAAtD;AACA,gBAAMrB,GAAG,GAAGqB,MAAM,YAAYE,MAAlB,GAA2BF,MAAM,CAAClB,KAAlC,GAA0CkB,MAAtD;;AACA,cAAIrB,GAAG,KAAKG,KAAZ,EAAmB;AACf,mBAAQ;AAAQ,mBAAK,EAAEH,GAAf;AAAoB,sBAAQ;AAA5B,eAA8BsB,IAA9B,CAAR;AACH,WAFD,MAEO;AACH,mBAAQ;AAAQ,mBAAK,EAAEtB;AAAf,eAAqBsB,IAArB,CAAR;AACH;AACJ,SARA,CADL,CADJ;;AAaJ,WAAK,MAAL;AACI,eACI;AAAO,YAAE,EAAEb,EAAX;AAAe,cAAI,EAAC;AAApB,UADJ;;AAGJ,WAAK,QAAL;AACI,YAAIhB,MAAM,CAAC+B,EAAP,IAAa,IAAb,IAAqB,CAAC/B,MAAM,CAAC+B,EAAjC,EAAqC,OAAQ,IAAR;;AACrC,cAAMC,UAAU,GAAG,MAAM;AACrB,cAAI,CAAChC,MAAM,CAACiC,KAAZ,EAAmB;AACnBjC,gBAAM,CAACiC,KAAP,CAAa,KAAKjE,KAAL,CAAWwD,QAAxB;AACH,SAHD;;AAIA,eACI;AAAQ,cAAI,EAAC,QAAb;AAAsB,iBAAO,EAAEQ;AAA/B,oBADJ;AAjDR;AAqDH;;AAEDE,mBAAiB,CAAClB,EAAD,EAAKX,OAAL,EAAcR,MAAd,EAAsB;AACnC,UAAMsC,WAAW,GAAGC,KAAK,CAACC,OAAN,CAAchC,OAAd,IAAyBA,OAAzB,GAAmC,CAACA,OAAD,CAAvD;AAEA,WACI;AAAK,WAAK,EAAC;AAAX,OACK8B,WAAW,CAAClC,GAAZ,CAAgB,CAACqC,IAAD,EAAOC,CAAP,KAAa;AAC1B,YAAMC,KAAK,GAAGL,WAAW,CAACtD,MAAZ,GAAqB,CAArB,GAA0B,GAAEmC,EAAG,IAAGuB,CAAE,EAApC,GAAwCvB,EAAtD;AACA,YAAMU,OAAO,GAAGY,IAAI,CAACG,GAAL,GAAWH,IAAI,CAACG,GAAhB,GAAsBD,KAAtC;AACA,YAAMjC,GAAG,GAAGmC,wDAAG,CAAC7C,MAAD,EAAS6B,OAAT,EAAkB,IAAlB,CAAf;AAEA,aAAO,CACF;AAAO,WAAG,EAAEc;AAAZ,SAAoBF,IAAI,CAACT,IAAzB,CADE,EAEH,KAAKJ,YAAL,CAAkBe,KAAlB,EAAyBF,IAAzB,EAA+B/B,GAA/B,EAAoCmB,OAApC,CAFG,CAAP;AAIH,KATA,CADL,CADJ;AAcH;;AAEDiB,aAAW,CAAC3B,EAAD,EAAKb,KAAL,EAAYN,MAAZ,EAAoB;AAC3B,UAAMO,IAAI,GAAGL,4DAAO,CAACI,KAAK,CAACE,OAAP,CAApB;AACA,WACI;AAAU,UAAI,EAAEW;AAAhB,OACI,gEAAQb,KAAK,CAAC0B,IAAd,CADJ,EAEKzB,IAAI,CAACH,GAAL,CAASK,GAAG,IAAI;AACb,YAAMgC,IAAI,GAAGnC,KAAK,CAACE,OAAN,CAAcC,GAAd,CAAb;AACA,aAAO,KAAK4B,iBAAL,CAAwB,GAAElB,EAAG,IAAGV,GAAI,EAApC,EAAuCgC,IAAvC,EAA6CzC,MAA7C,CAAP;AACH,KAHA,CAFL,CADJ;AASH;;AAED9B,QAAM,CAACC,KAAD,EAAQ;AACV,UAAMoC,IAAI,GAAGL,4DAAO,CAAC/B,KAAK,CAACgC,MAAN,CAAaF,MAAd,CAApB;AACA,WAAQ;AAAM,WAAK,EAAC,6BAAZ;AAA0C,SAAG,EAAE8C,GAAG,IAAI,KAAKpC,IAAL,GAAYoC;AAAlE,OACHxC,IAAI,CAACH,GAAL,CAASK,GAAG,IAAI,KAAKqC,WAAL,CAAiBrC,GAAjB,EAAsBtC,KAAK,CAACgC,MAAN,CAAaF,MAAb,CAAoBQ,GAApB,CAAtB,EAAgDtC,KAAK,CAACwD,QAAtD,CAAhB,CADG,CAAR;AAOH;;AA7I+B,C;;;;;;;;;;;;ACJpC;AAAA;AAAA;AAAA;AAEO,MAAMqB,IAAN,SAAmBxF,gDAAnB,CAA6B;AAChCyF,gBAAc,CAACrF,IAAD,EAAO;AACjB,QAAIA,IAAI,CAACsF,MAAT,EAAiB;AACb,aACA;AAAI,aAAK,EAAC;AAAV,SACI;AAAG,YAAI,EAAG,IAAGtF,IAAI,CAACP,IAAK,EAAvB;AAA0B,eAAO,EAAEO,IAAI,CAACsF,MAAxC;AAAgD,aAAK,EAAC;AAAtD,SAAwEtF,IAAI,CAACuF,KAA7E,CADJ,CADA;AAKH;;AACD,QAAIvF,IAAI,CAACP,IAAL,KAAc,KAAKc,KAAL,CAAWwD,QAAX,CAAoBtE,IAAtC,EAA4C;AACxC,aAAO,CACF;AAAI,aAAK,EAAC;AAAV,SACG;AAAG,YAAI,EAAG,IAAGO,IAAI,CAACP,IAAK,EAAvB;AAA0B,aAAK,EAAC;AAAhC,SAAkDO,IAAI,CAACuF,KAAvD,CADH,CADE,EAIH,GAAGvF,IAAI,CAACwF,QAAL,CAAchD,GAAd,CAAkBiD,KAAK,IAAI;AAC1B,YAAIA,KAAK,CAACH,MAAV,EAAkB;AACd,iBACA;AAAI,iBAAK,EAAC;AAAV,aACI;AAAG,gBAAI,EAAG,IAAGG,KAAK,CAAChG,IAAK,EAAxB;AAA2B,mBAAO,EAAEgG,KAAK,CAACH,MAA1C;AAAkD,iBAAK,EAAC;AAAxD,aAA0EG,KAAK,CAACF,KAAhF,CADJ,CADA;AAKH;;AACD,eAAQ;AAAI,eAAK,EAAC;AAAV,WACJ;AAAG,cAAI,EAAG,IAAGE,KAAK,CAAChG,IAAK,EAAxB;AAA2B,eAAK,EAAC;AAAjC,WAAmDgG,KAAK,CAACF,KAAzD,CADI,CAAR;AAGH,OAXE,CAJA,CAAP;AAiBH;;AACD,WAAQ;AAAI,WAAK,EAAC;AAAV,OACJ;AAAG,UAAI,EAAG,IAAGvF,IAAI,CAACP,IAAK,EAAvB;AAA0B,WAAK,EAAC;AAAhC,OAAkDO,IAAI,CAACuF,KAAvD,CADI,CAAR;AAGH;;AAEDjF,QAAM,CAACC,KAAD,EAAQ;AACV,QAAIA,KAAK,CAACmF,IAAN,KAAe,KAAnB,EAA0B;AAE1B,WACA;AAAK,QAAE,EAAC;AAAR,OACI;AAAK,WAAK,EAAC;AAAX,OACI;AAAG,WAAK,EAAC,mBAAT;AAA6B,UAAI,EAAC;AAAlC,OAAsC,kEAAtC,SADJ,EAEI;AAAI,WAAK,EAAC;AAAV,OACKnF,KAAK,CAACN,KAAN,CAAYuC,GAAZ,CAAgBxC,IAAI,IAAK,KAAKqF,cAAL,CAAoBrF,IAApB,CAAzB,CADL,CAFJ,CADJ,CADA;AAUH;;AA9C+B,C;;;;;;;;;;;;ACFpC;AAAA;AAAA;AAAA;AAEO,MAAM2F,IAAN,SAAmB/F,gDAAnB,CAA6B;AAEhCU,QAAM,CAACC,KAAD,EAAQ;AACV,UAAMqF,aAAa,GAAGrF,KAAK,CAACL,IAAN,CAAW2F,SAAjC;AACA,WACA;AAAK,QAAE,EAAC;AAAR,OACI;AAAK,WAAK,EAAC;AAAX,aACOtF,KAAK,CAACL,IAAN,CAAW4F,SAAX,IAAwB,IAAxB,GAA+BvF,KAAK,CAACL,IAAN,CAAWqF,KAA1C,GAAkDhF,KAAK,CAACL,IAAN,CAAW4F,SADpE,EAEMvF,KAAK,CAACJ,OAAN,GACE;AAAG,WAAK,EAAC,cAAT;AAAwB,UAAI,EAAC;AAA7B,qCADF,GAEG,IAJT,CADJ,EAQI;AAAK,WAAK,EAAG,WAAUI,KAAK,CAACL,IAAN,CAAW6F,KAAM;AAAxC,OACI,iDAAC,aAAD;AAAe,YAAM,EAAExF,KAAK,CAACC;AAA7B,MADJ,CARJ,CADA;AAcH;;AAlB+B,C;;;;;;;;;;;;ACFpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,MAAMwF,SAAS,GAAG,EAAlB;AACA,MAAMC,gBAAgB,GAAG,CAAzB;AACA,MAAMC,cAAc,GAAG,CAAvB;AACA,MAAMC,oBAAoB,GAAG,CAA7B;AACA,MAAMC,yBAAyB,GAAG,CAAlC;AACA,MAAMC,wBAAwB,GAAG,CAAjC;AACA,MAAMC,yBAAyB,GAAG,EAAlC;AACA,MAAMC,uBAAuB,GAAG,EAAhC;AACA,MAAMC,aAAa,GAAG,CAAtB;AAEO,MAAMC,oBAAoB,GAAG,CAChC;AAAEjD,MAAI,EAAE,YAAR;AAAsBN,MAAI,EAAE;AAA5B,CADgC,EAEhC;AAAEM,MAAI,EAAE,gBAAR;AAA0BN,MAAI,EAAE;AAAhC,CAFgC,EAGhC;AAAEM,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAE;AAA9B,CAHgC,EAIhC;AAAEM,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAE,OAA9B;AAAuC9B,QAAM,EAAE;AAA/C,CAJgC,EAKhC;AAAEoC,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAE,OAA9B;AAAuC9B,QAAM,EAAE;AAA/C,CALgC,EAMhC;AAAEoC,MAAI,EAAE,kBAAR;AAA4BN,MAAI,EAAE,OAAlC;AAA2C9B,QAAM,EAAE;AAAnD,CANgC,EAOhC;AAAEoC,MAAI,EAAE,eAAR;AAAyBN,MAAI,EAAE,OAA/B;AAAwC9B,QAAM,EAAE;AAAhD,CAPgC,EAQhC;AAAEoC,MAAI,EAAE,8BAAR;AAAwCN,MAAI,EAAE;AAA9C,CARgC,EAShC;AAAEM,MAAI,EAAE,uBAAR;AAAiCN,MAAI,EAAE;AAAvC,CATgC,EAUhC;AAAEM,MAAI,EAAE,yBAAR;AAAmCN,MAAI,EAAE,QAAzC;AAAmD9B,QAAM,EAAE;AAA3D,CAVgC,EAWhC;AAAEoC,MAAI,EAAE,iBAAR;AAA2BN,MAAI,EAAE,QAAjC;AAA2C9B,QAAM,EAAE;AAAnD,CAXgC,EAYhC;AAAEoC,MAAI,EAAE,wBAAR;AAAkCN,MAAI,EAAE;AAAxC,CAZgC,EAahC;AAAEM,MAAI,EAAE,kBAAR;AAA4BN,MAAI,EAAE;AAAlC,CAbgC,EAchC;AAAEM,MAAI,EAAE,kBAAR;AAA4BN,MAAI,EAAE;AAAlC,CAdgC,EAehC;AAAEM,MAAI,EAAE,mBAAR;AAA6BN,MAAI,EAAE;AAAnC,CAfgC,EAgBhC;AAAEM,MAAI,EAAE,WAAR;AAAqBN,MAAI,EAAE;AAA3B,CAhBgC,EAgBK;AACrC;AAAEM,MAAI,EAAE,eAAR;AAAyBN,MAAI,EAAE,OAA/B;AAAwC9B,QAAM,EAAE;AAAhD,CAjBgC,EAkBhC;AAAEoC,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE,OAAtC;AAA+C9B,QAAM,EAAE;AAAvD,CAlBgC,EAmBhC;AAAEoC,MAAI,EAAE,wBAAR;AAAkCN,MAAI,EAAE;AAAxC,CAnBgC,EAoBhC;AAAEM,MAAI,EAAE,yBAAR;AAAmCN,MAAI,EAAE;AAAzC,CApBgC,EAqBhC;AAAEM,MAAI,EAAE,yBAAR;AAAmCN,MAAI,EAAE;AAAzC,CArBgC,EAsBhC;AAAEM,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE;AAAtC,CAtBgC,EAuBhC;AAAEM,MAAI,EAAE,qBAAR;AAA+BN,MAAI,EAAE;AAArC,CAvBgC,EAwBhC;AAAEM,MAAI,EAAE,wBAAR;AAAkCN,MAAI,EAAE;AAAxC,CAxBgC,EAyBhC;AAAEM,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE;AAAtC,CAzBgC,EA0BhC;AAAEM,MAAI,EAAE,wBAAR;AAAkCN,MAAI,EAAE;AAAxC,CA1BgC,EA2BhC;AAAEM,MAAI,EAAE,WAAR;AAAqBN,MAAI,EAAE;AAA3B,CA3BgC,EA2BK;AACrC;AAAEM,MAAI,EAAE,oBAAR;AAA8BN,MAAI,EAAE;AAApC,CA5BgC,EA6BhC;AAAEM,MAAI,EAAE,kCAAR;AAA4CN,MAAI,EAAE;AAAlD,CA7BgC,EA8BhC;AAAEM,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE;AAAtC,CA9BgC,EA+BhC;AAAEM,MAAI,EAAE,uBAAR;AAAiCN,MAAI,EAAE;AAAvC,CA/BgC,EAgChC;AAAEM,MAAI,EAAE,qBAAR;AAA+BN,MAAI,EAAE;AAArC,CAhCgC,EAiChC;AAAEM,MAAI,EAAE,oBAAR;AAA8BN,MAAI,EAAE;AAApC,CAjCgC,EAkChC;AAAEM,MAAI,EAAE,2CAAR;AAAqDN,MAAI,EAAE;AAA3D,CAlCgC,EAmChC;AAAEM,MAAI,EAAE,YAAR;AAAsBN,MAAI,EAAE;AAA5B,CAnCgC,EAmCM;AACtC;AAAEM,MAAI,EAAE,iDAAR;AAA2DN,MAAI,EAAE;AAAjE,CApCgC,EAqChC;AAAEM,MAAI,EAAE,UAAR;AAAoBN,MAAI,EAAE,OAA1B;AAAmCwD,QAAM,EAAE;AAA3C,CArCgC,EAqCiB;AACjD;AAAElD,MAAI,EAAE,yBAAR;AAAmCN,MAAI,EAAE;AAAzC,CAtCgC,EAuChC;AAAEM,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE;AAAtC,CAvCgC,EAwChC,CAAC,GAAGyB,KAAK,CAACuB,cAAD,CAAT,EAA2B1D,GAA3B,CAA+B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,eAAcsB,CAAE,YAAzB;AAAsC5B,MAAI,EAAC;AAA3C,CAAX,CAA/B,CAxCgC,EAyChC,CAAC,GAAGyB,KAAK,CAACsB,gBAAD,CAAT,EAA6BzD,GAA7B,CAAiC,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,iBAAgBsB,CAAE,QAA3B;AAAoC5B,MAAI,EAAC;AAAzC,CAAX,CAAjC,CAzCgC,EA0ChC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,UAAnB;AAA8B5B,MAAI,EAAC;AAAnC,CAAX,CAA1B,CA1CgC,EA2ChC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,oBAAnB;AAAwC5B,MAAI,EAAC;AAA7C,CAAX,CAA1B,CA3CgC,EA4ChC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,SAAnB;AAA6B5B,MAAI,EAAC;AAAlC,CAAX,CAA1B,CA5CgC,EA6ChC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,SAAnB;AAA6B5B,MAAI,EAAC;AAAlC,CAAX,CAA1B,CA7CgC,EA8ChC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,SAAnB;AAA6B5B,MAAI,EAAC;AAAlC,CAAX,CAA1B,CA9CgC,EA+ChC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,SAAnB;AAA6B5B,MAAI,EAAC;AAAlC,CAAX,CAA1B,CA/CgC,EAgDhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,cAAnB;AAAkC5B,MAAI,EAAC;AAAvC,CAAX,CAA1B,CAhDgC,EAiDhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,WAAnB;AAA+B5B,MAAI,EAAC,MAApC;AAA4C9B,QAAM,EAAE+E;AAApD,CAAX,CAA1B,CAjDgC,EAkDhC,CAAC,GAAGxB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,gBAAnB;AAAoC5B,MAAI,EAAC;AAAzC,CAAX,CAA1B,CAlDgC,EAmDhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,iBAAnB;AAAqC5B,MAAI,EAAC,QAA1C;AAAoD9B,QAAM,EAAEgF;AAA5D,CAAX,CAA1B,CAnDgC,EAoDhC,CAAC,GAAGzB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,gBAAnB;AAAoC5B,MAAI,EAAC,OAAzC;AAAkD9B,QAAM,EAAEgF;AAA1D,CAAX,CAA1B,CApDgC,EAqDhC,CAAC,GAAGzB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,gBAAnB;AAAoC5B,MAAI,EAAC;AAAzC,CAAX,CAA1B,CArDgC,EAsDhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,eAAnB;AAAmC5B,MAAI,EAAC;AAAxC,CAAX,CAA1B,CAtDgC,EAuDhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,aAAnB;AAAiC5B,MAAI,EAAC;AAAtC,CAAX,CAA1B,CAvDgC,EAwDhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,YAAnB;AAAgC5B,MAAI,EAAC;AAArC,CAAX,CAA1B,CAxDgC,EAyDhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,WAAnB;AAA+B5B,MAAI,EAAC;AAApC,CAAX,CAA1B,CAzDgC,EA0DhC,CAAC,GAAGyB,KAAK,CAACuB,cAAD,CAAT,EAA2B1D,GAA3B,CAA+B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,eAAcsB,CAAE,WAAzB;AAAqC5B,MAAI,EAAC;AAA1C,CAAX,CAA/B,CA1DgC,EA2DhC,CAAC,GAAGyB,KAAK,CAACsB,gBAAD,CAAT,EAA6BzD,GAA7B,CAAiC,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,iBAAgBsB,CAAE,WAA3B;AAAuC5B,MAAI,EAAC;AAA5C,CAAX,CAAjC,CA3DgC,EA4DhC,CAAC,GAAGyB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,gBAAnB;AAAoC5B,MAAI,EAAC,OAAzC;AAAkD9B,QAAM,EAAE8E;AAA1D,CAAX,CAA1B,CA5DgC,EA6DhC,CAAC,GAAGvB,KAAK,CAACqB,SAAD,CAAT,EAAsBxD,GAAtB,CAA0B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,SAAQsB,CAAE,sBAAnB;AAA0C5B,MAAI,EAAC,OAA/C;AAAwD9B,QAAM,EAAE8E;AAAhE,CAAX,CAA1B,CA7DgC,EA8DhC;AAAE1C,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE;AAAtC,CA9DgC,EA+DhC;AAAEM,MAAI,EAAE,8BAAR;AAAwCN,MAAI,EAAE;AAA9C,CA/DgC,EAgEhC;AAAEM,MAAI,EAAE,gBAAR;AAA0BN,MAAI,EAAE;AAAhC,CAhEgC,EAgES;AACzC;AAAEM,MAAI,EAAE,kBAAR;AAA4BN,MAAI,EAAE;AAAlC,CAjEgC,EAiEW;AAC3C;AAAEM,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE;AAAtC,CAlEgC,EAmEhC;AAAEM,MAAI,EAAE,oBAAR;AAA8BN,MAAI,EAAE;AAApC,CAnEgC,EAoEhC;AAAEM,MAAI,EAAE,qBAAR;AAA+BN,MAAI,EAAE;AAArC,CApEgC,EAoEc;AAC9C;AAAEM,MAAI,EAAE,oBAAR;AAA8BN,MAAI,EAAE;AAApC,CArEgC,EAsEhC;AAAEM,MAAI,EAAE,4BAAR;AAAsCN,MAAI,EAAE;AAA5C,CAtEgC,EAuEhC;AAAEM,MAAI,EAAE,YAAR;AAAsBN,MAAI,EAAE;AAA5B,CAvEgC,EAuEM;AACtC;AAAEM,MAAI,EAAE,yBAAR;AAAmCN,MAAI,EAAE;AAAzC,CAxEgC,EAyEhC;AAAEM,MAAI,EAAE,qBAAR;AAA+BN,MAAI,EAAE;AAArC,CAzEgC,EA0EhC;AAAEM,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAE;AAAtC,CA1EgC,EA2EhC;AAAEM,MAAI,EAAE,kBAAR;AAA4BN,MAAI,EAAE;AAAlC,CA3EgC,EA4EhC;AAAEM,MAAI,EAAE,2BAAR;AAAqCN,MAAI,EAAE;AAA3C,CA5EgC,EA6EhC;AAAEM,MAAI,EAAE,4BAAR;AAAsCN,MAAI,EAAE;AAA5C,CA7EgC,EA8EhC;AAAEM,MAAI,EAAE,wBAAR;AAAkCN,MAAI,EAAE;AAAxC,CA9EgC,EA+EhC;AAAEM,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAE;AAA9B,CA/EgC,EAgFhC;AAAEM,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAE;AAA9B,CAhFgC,EAiFhC;AAAEM,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAE;AAA9B,CAjFgC,EAkFhC;AAAEM,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAE;AAA9B,CAlFgC,EAmFhC;AAAEM,MAAI,EAAE,eAAR;AAAyBN,MAAI,EAAE;AAA/B,CAnFgC,EAoFhC;AAAEM,MAAI,EAAE,eAAR;AAAyBN,MAAI,EAAE;AAA/B,CApFgC,EAqFhC;AAAEM,MAAI,EAAE,eAAR;AAAyBN,MAAI,EAAE;AAA/B,CArFgC,EAsFhC;AAAEM,MAAI,EAAE,+BAAR;AAAyCN,MAAI,EAAE;AAA/C,CAtFgC,EAuFlC0D,IAvFkC,EAA7B;AAyFA,MAAMC,YAAY,GAAG,CACxB;AAAErD,MAAI,EAAE,OAAR;AAAiBN,MAAI,EAAC;AAAtB,CADwB,EAExB;AAAEM,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC,QAArB;AAA+B9B,QAAM,EAAEmF,uBAAuB,GAAG;AAAjE,CAFwB,EAGxB,CAAC,GAAG5B,KAAK,CAAC6B,aAAD,CAAT,EAA0BhE,GAA1B,CAA8B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,UAASsB,CAAE,WAApB;AAAgC5B,MAAI,EAAC,QAArC;AAA+C9B,QAAM,EAAEmF,uBAAuB,GAAG;AAAjF,CAAX,CAA9B,CAHwB,EAIxB,CAAC,GAAG5B,KAAK,CAAC6B,aAAD,CAAT,EAA0BhE,GAA1B,CAA8B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,UAASsB,CAAE,QAApB;AAA6B5B,MAAI,EAAC,QAAlC;AAA4C9B,QAAM,EAAEmF,uBAAuB,GAAG;AAA9E,CAAX,CAA9B,CAJwB,EAKxB;AAAE/C,MAAI,EAAE,aAAR;AAAuBN,MAAI,EAAC,QAA5B;AAAsC9B,QAAM,EAAEmF,uBAAuB,GAAG;AAAxE,CALwB,EAMxB;AAAE/C,MAAI,EAAE,oBAAR;AAA8BN,MAAI,EAAC,OAAnC;AAA4C9B,QAAM,EAAEkF;AAApD,CANwB,EAOxB;AAAE9C,MAAI,EAAE,UAAR;AAAoBN,MAAI,EAAC,OAAzB;AAAkC9B,QAAM,EAAEoF;AAA1C,CAPwB,EAQxB;AAAEhD,MAAI,EAAE,eAAR;AAAyBN,MAAI,EAAC,MAA9B;AAAsC9B,QAAM,EAAEkF;AAA9C,CARwB,EAS1BM,IAT0B,EAArB;AAWA,MAAME,kBAAkB,GAAG,CAC9B;AAAEtD,MAAI,EAAE,KAAR;AAAeN,MAAI,EAAC;AAApB,CAD8B,EAE9B;AAAEM,MAAI,EAAE,IAAR;AAAcN,MAAI,EAAC,OAAnB;AAA4B9B,QAAM,EAAE;AAApC,CAF8B,EAG9B;AAAEoC,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC;AAArB,CAH8B,EAI9B;AAAEM,MAAI,EAAE,UAAR;AAAoBN,MAAI,EAAC,QAAzB;AAAmC9B,QAAM,EAAE;AAA3C,CAJ8B,EAK9B;AAAEoC,MAAI,EAAE,SAAR;AAAmBN,MAAI,EAAC,QAAxB;AAAkC9B,QAAM,EAAE;AAA1C,CAL8B,EAM9B;AAAEoC,MAAI,EAAE,WAAR;AAAqBN,MAAI,EAAC,QAA1B;AAAoC9B,QAAM,EAAE;AAA5C,CAN8B,EAO9B;AAAEoC,MAAI,EAAE,gBAAR;AAA0BN,MAAI,EAAC,QAA/B;AAAyC9B,QAAM,EAAE;AAAjD,CAP8B,EAQ9B;AAAEoC,MAAI,EAAE,qBAAR;AAA+BN,MAAI,EAAC,QAApC;AAA8C9B,QAAM,EAAE;AAAtD,CAR8B,EAS9B;AAAEoC,MAAI,EAAE,wBAAR;AAAkCN,MAAI,EAAC,QAAvC;AAAiD9B,QAAM,EAAE;AAAzD,CAT8B,EAU9B;AAAEoC,MAAI,EAAE,sBAAR;AAAgCN,MAAI,EAAC;AAArC,CAV8B,EAW9B;AAAEM,MAAI,EAAE,iBAAR;AAA2BN,MAAI,EAAC;AAAhC,CAX8B,EAY9B;AAAEM,MAAI,EAAE,WAAR;AAAqBN,MAAI,EAAC;AAA1B,CAZ8B,EAa9B;AAAEM,MAAI,EAAE,eAAR;AAAyBN,MAAI,EAAC;AAA9B,CAb8B,EAc9B;AAAEM,MAAI,EAAE,gBAAR;AAA0BN,MAAI,EAAC;AAA/B,CAd8B,EAe9B;AAAEM,MAAI,EAAE,kBAAR;AAA4BN,MAAI,EAAC;AAAjC,CAf8B,CAA3B;AAkBA,MAAM6D,oBAAoB,GAAG,CAChC;AAAEvD,MAAI,EAAE,QAAR;AAAkBN,MAAI,EAAC,QAAvB;AAAiC9B,QAAM,EAAE;AAAzC,CADgC,EAEhC;AAAEoC,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC;AAArB,CAFgC,EAGhC;AAAEM,MAAI,EAAE,QAAR;AAAkBN,MAAI,EAAC,QAAvB;AAAiC9B,QAAM,EAAE;AAAzC,CAHgC,EAIhC;AAAEoC,MAAI,EAAE,QAAR;AAAkBN,MAAI,EAAC,QAAvB;AAAiC9B,QAAM,EAAE;AAAzC,CAJgC,EAKhC;AAAEoC,MAAI,EAAE,UAAR;AAAoBN,MAAI,EAAC,QAAzB;AAAmC9B,QAAM,EAAE;AAA3C,CALgC,EAMhC;AAAEoC,MAAI,EAAE,SAAR;AAAmBN,MAAI,EAAC,QAAxB;AAAkC9B,QAAM,EAAE;AAA1C,CANgC,EAOhC;AAAEoC,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC,QAArB;AAA+B9B,QAAM,EAAE;AAAvC,CAPgC,EAQhC;AAAEoC,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC;AAArB,CARgC,EAShC;AAAEM,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC;AAArB,CATgC,EAUhC;AAAEM,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC,QAArB;AAA+B9B,QAAM,EAAE;AAAvC,CAVgC,EAWhC;AAAEoC,MAAI,EAAE,MAAR;AAAgBN,MAAI,EAAC,QAArB;AAA+B9B,QAAM,EAAE;AAAvC,CAXgC,CAA7B;AAcA,MAAM4F,gBAAgB,GAAG,CAC5B;AAAExD,MAAI,EAAE,UAAR;AAAoBN,MAAI,EAAC,QAAzB;AAAmC9B,QAAM,EAAE;AAA3C,CAD4B,EAE5B;AAAEoC,MAAI,EAAE,SAAR;AAAmBN,MAAI,EAAC,QAAxB;AAAkC9B,QAAM,EAAE;AAA1C,CAF4B,EAG5B;AAAEoC,MAAI,EAAE,WAAR;AAAqBN,MAAI,EAAC,QAA1B;AAAoC9B,QAAM,EAAE;AAA5C,CAH4B,EAI5B;AAAEoC,MAAI,EAAE,UAAR;AAAoBN,MAAI,EAAC,QAAzB;AAAmC9B,QAAM,EAAE;AAA3C,CAJ4B,EAK5B;AAAEoC,MAAI,EAAE,WAAR;AAAqBN,MAAI,EAAC,QAA1B;AAAoC9B,QAAM,EAAE;AAA5C,CAL4B,EAM5B,CAAC,GAAGuD,KAAK,CAACuB,cAAD,CAAT,EAA2B1D,GAA3B,CAA+B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,eAAcsB,CAAE,QAAzB;AAAkC5B,MAAI,EAAC,QAAvC;AAAiD9B,QAAM,EAAE;AAAzD,CAAX,CAA/B,CAN4B,EAO5B,CAAC,GAAGuD,KAAK,CAACuB,cAAD,CAAT,EAA2B1D,GAA3B,CAA+B,CAACmE,CAAD,EAAI7B,CAAJ,MAAW;AAAEtB,MAAI,EAAG,eAAcsB,CAAE,YAAzB;AAAsC5B,MAAI,EAAC,QAA3C;AAAqD9B,QAAM,EAAE;AAA7D,CAAX,CAA/B,CAP4B,EAQ5B;AAAEoC,MAAI,EAAE,UAAR;AAAoBN,MAAI,EAAC,QAAzB;AAAmC9B,QAAM,EAAE;AAA3C,CAR4B,EAS5B;AAAEoC,MAAI,EAAE,mBAAR;AAA6BN,MAAI,EAAC,OAAlC;AAA2C9B,QAAM,EAAE;AAAnD,CAT4B,EAU5B;AAAEoC,MAAI,EAAE,oBAAR;AAA8BN,MAAI,EAAC,OAAnC;AAA4C9B,QAAM,EAAE;AAApD,CAV4B,EAW5B;AAAEoC,MAAI,EAAE,cAAR;AAAwBN,MAAI,EAAC;AAA7B,CAX4B,EAY5B;AAAEM,MAAI,EAAE,YAAR;AAAsBN,MAAI,EAAC,OAA3B;AAAoC9B,QAAM,EAAE;AAA5C,CAZ4B,EAa5B;AAAEoC,MAAI,EAAE,KAAR;AAAeN,MAAI,EAAC,OAApB;AAA6B9B,QAAM,EAAE;AAArC,CAb4B,EAc9BwF,IAd8B,EAAzB;AAgBA,MAAM9E,UAAU,GAAG,MAAM;AAC5B,SAAOmF,KAAK,CAAC,YAAD,CAAL,CAAoBC,IAApB,CAAyBC,QAAQ,IAAIA,QAAQ,CAACC,WAAT,EAArC,EAA6DF,IAA7D,CAAkE,MAAMC,QAAN,IAAkB;AACvF,UAAMhG,QAAQ,GAAGkG,+DAAW,CAACF,QAAD,EAAWV,oBAAX,CAA5B;AAEA,KAAC,GAAG9B,KAAK,CAAC,EAAD,CAAT,EAAenC,GAAf,CAAmB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACzB3D,cAAQ,CAACmG,KAAT,CAAexC,CAAf,EAAkB3D,QAAlB,GAA6BkG,+DAAW,CAACF,QAAD,EAAWN,YAAX,EAAyB,OAAK,CAAL,GAAS,OAAO,CAAP,GAAW/B,CAA7C,CAAxC;AACA3D,cAAQ,CAACmG,KAAT,CAAexC,CAAf,EAAkByC,KAAlB,GAA0BF,+DAAW,CAACF,QAAD,EAAWN,YAAX,EAAyB,OAAK,CAAL,GAAS,OAAO,CAAP,GAAW/B,CAA7C,CAArC;AACH,KAHD;AAKA,KAAC,GAAGH,KAAK,CAAC,CAAD,CAAT,EAAcnC,GAAd,CAAkB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACxB3D,cAAQ,CAACqG,WAAT,CAAqB1C,CAArB,EAAwB3D,QAAxB,GAAmCkG,+DAAW,CAACF,QAAD,EAAWL,kBAAX,EAA+B,OAAK,EAAL,GAAU,OAAO,CAAP,GAAWhC,CAApD,CAA9C;AACA3D,cAAQ,CAACqG,WAAT,CAAqB1C,CAArB,EAAwByC,KAAxB,GAAgCF,+DAAW,CAACF,QAAD,EAAWL,kBAAX,EAA+B,OAAK,EAAL,GAAU,OAAO,CAAP,GAAWhC,CAApD,CAA3C;AACH,KAHD;AAKA,UAAM2C,oBAAoB,GAAG,MAAMR,KAAK,CAAC,kBAAD,CAAL,CAA0BC,IAA1B,CAA+BC,QAAQ,IAAIA,QAAQ,CAACC,WAAT,EAA3C,CAAnC;AACA,KAAC,GAAGzC,KAAK,CAAC,CAAD,CAAT,EAAcnC,GAAd,CAAkB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACxB3D,cAAQ,CAACuG,aAAT,CAAuB5C,CAAvB,EAA0B3D,QAA1B,GAAqCkG,+DAAW,CAACI,oBAAD,EAAuBV,oBAAvB,EAA6C,OAAOjC,CAApD,CAAhD;AACH,KAFD;AAIA,UAAM6C,gBAAgB,GAAG,MAAMV,KAAK,CAAC,cAAD,CAAL,CAAsBC,IAAtB,CAA2BC,QAAQ,IAAIA,QAAQ,CAACC,WAAT,EAAvC,CAA/B;AACAjG,YAAQ,CAACoB,MAAT,CAAgBqF,QAAhB,GAA2B,CAAC,GAAGjD,KAAK,CAAC,CAAD,CAAT,EAAcnC,GAAd,CAAkB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACnD+C,aAAO,CAACC,GAAR,CAAYhD,CAAZ;AACC,aAAOuC,+DAAW,CAACM,gBAAD,EAAmBX,gBAAnB,EAAqC,OAAOlC,CAA5C,CAAlB;AACJ,KAH0B,CAA3B;AAKA,WAAO;AAAEqC,cAAF;AAAYhG;AAAZ,KAAP;AACH,GAzBM,EAyBJ+F,IAzBI,CAyBCrC,IAAI,IAAI;AACZ1D,0DAAQ,CAACnC,IAAT,CAAc6F,IAAI,CAAC1D,QAAnB;AACAA,0DAAQ,CAAC4G,MAAT,GAAkB,IAAIC,UAAJ,CAAenD,IAAI,CAACsC,QAApB,CAAlB;AACAU,WAAO,CAACC,GAAR,CAAYjD,IAAI,CAAC1D,QAAjB;AACH,GA7BM,CAAP;AA8BH,CA/BM;;AAiCP,MAAM8G,QAAQ,GAAI,YAAY;AAC1B,QAAMC,CAAC,GAAGlG,QAAQ,CAACmG,aAAT,CAAuB,GAAvB,CAAV;AACAnG,UAAQ,CAACC,IAAT,CAAcmG,WAAd,CAA0BF,CAA1B;AACAA,GAAC,CAACG,KAAF,GAAU,eAAV;AACA,SAAO,UAAUC,IAAV,EAAgBC,QAAhB,EAA0B;AAC7B,UAAMC,IAAI,GAAG,IAAIC,IAAJ,CAAS,CAAC,IAAIT,UAAJ,CAAeM,IAAf,CAAD,CAAT,CAAb;AACA,UAAMI,GAAG,GAAGnJ,MAAM,CAACoJ,GAAP,CAAWC,eAAX,CAA2BJ,IAA3B,CAAZ;AACAN,KAAC,CAACzI,IAAF,GAASiJ,GAAT;AACAR,KAAC,CAACW,QAAF,GAAaN,QAAb;AACAL,KAAC,CAAC1D,KAAF;AACAjF,UAAM,CAACoJ,GAAP,CAAWG,eAAX,CAA2BJ,GAA3B;AACH,GAPD;AAQH,CAZiB,EAAlB;;AAcA,IAAIK,EAAE,GAAG,CAAT;AACO,MAAMC,UAAU,GAAG,CAACC,IAAI,GAAG,IAAR,KAAiB;AACvC,MAAIF,EAAE,KAAK,CAAX,EAAc;AACV,UAAMG,MAAM,GAAG,IAAIC,WAAJ,CAAgB,KAAhB,CAAf;AACAC,mEAAW,CAACF,MAAD,EAAS/H,sDAAQ,CAACA,QAAlB,EAA4BsF,oBAA5B,CAAX;AACA,KAAC,GAAG9B,KAAK,CAAC,EAAD,CAAT,EAAenC,GAAf,CAAmB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACzB,aAAO;AACH3D,gBAAQ,EAAEiI,+DAAW,CAACF,MAAD,EAAS/H,sDAAQ,CAACA,QAAT,CAAkBmG,KAAlB,CAAwBxC,CAAxB,EAA2B3D,QAApC,EAA8C0F,YAA9C,EAA4D,OAAK,CAAL,GAAS,OAAO,CAAP,GAAW/B,CAAhF,CADlB;AAEHyC,aAAK,EAAE6B,+DAAW,CAACF,MAAD,EAAS/H,sDAAQ,CAACA,QAAT,CAAkBmG,KAAlB,CAAwBxC,CAAxB,EAA2ByC,KAApC,EAA2CV,YAA3C,EAAyD,OAAK,CAAL,GAAS,OAAO,CAAP,GAAW/B,CAA7E;AAFf,OAAP;AAIH,KALD;AAOA,KAAC,GAAGH,KAAK,CAAC,CAAD,CAAT,EAAcnC,GAAd,CAAkB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACxB,aAAO;AACH3D,gBAAQ,EAAEiI,+DAAW,CAACF,MAAD,EAAS/H,sDAAQ,CAACA,QAAT,CAAkBqG,WAAlB,CAA8B1C,CAA9B,EAAiC3D,QAA1C,EAAoD2F,kBAApD,EAAwE,OAAK,EAAL,GAAU,OAAO,CAAP,GAAWhC,CAA7F,CADlB;AAEHyC,aAAK,EAAE6B,+DAAW,CAACF,MAAD,EAAS/H,sDAAQ,CAACA,QAAT,CAAkBqG,WAAlB,CAA8B1C,CAA9B,EAAiCyC,KAA1C,EAAiDT,kBAAjD,EAAqE,OAAK,EAAL,GAAU,OAAO,CAAP,GAAWhC,CAA1F;AAFf,OAAP;AAIH,KALD;AAMA,QAAImE,IAAJ,EAAUhB,QAAQ,CAACiB,MAAD,EAAS,YAAT,CAAR,CAAV,KACK,OAAOA,MAAP;AACR,GAlBD,MAkBO,IAAIH,EAAE,KAAK,CAAX,EAAc;AACjB,UAAMM,mBAAmB,GAAG,IAAIF,WAAJ,CAAgB,IAAhB,CAA5B;AACA,KAAC,GAAGxE,KAAK,CAAC,CAAD,CAAT,EAAcnC,GAAd,CAAkB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACxB,aAAOsE,+DAAW,CAACC,mBAAD,EAAsBlI,sDAAQ,CAACA,QAAT,CAAkBuG,aAAlB,CAAgC5C,CAAhC,CAAtB,EAA0DiC,oBAA1D,EAAgF,OAAOjC,CAAvF,CAAlB;AACH,KAFD;AAGAmD,YAAQ,CAACoB,mBAAD,EAAsB,kBAAtB,CAAR;AACH,GANM,MAMA,IAAIN,EAAE,KAAK,CAAX,EAAc;AACjB,UAAMO,cAAc,GAAG,IAAIH,WAAJ,CAAgB,IAAhB,CAAvB;AACA,KAAC,GAAGxE,KAAK,CAAC,CAAD,CAAT,EAAcnC,GAAd,CAAkB,CAACmE,CAAD,EAAI7B,CAAJ,KAAU;AACxB,aAAOsE,+DAAW,CAACE,cAAD,EAAiBnI,sDAAQ,CAACA,QAAT,CAAkByG,QAAlB,CAA2B9C,CAA3B,CAAjB,EAAgDkC,gBAAhD,EAAkE,OAAOlC,CAAzE,CAAlB;AACH,KAFD;AAGAmD,YAAQ,CAACqB,cAAD,EAAiB,cAAjB,CAAR;AACH;;AACDP,IAAE,GAAG,CAACA,EAAE,GAAG,CAAN,IAAW,CAAhB;AACH,CAjCM,C;;;;;;;;;;;;ACjNP;AAAA;AAAA;AAAA;AAEA,MAAMQ,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,CAApB;AAKA,MAAMoF,cAAc,GAAG,CACnB;AAAEvG,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADmB,EAEnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFmB,EAGnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHmB,EAInB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJmB,CAAvB;AAOO,MAAMqF,MAAM,GAAG;AAClBC,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL2E,UAAI,EAAE;AAAEvF,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAEsF,cAArD;AAAqExE,WAAG,EAAE;AAA1E,OAFD;AAGL4E,mBAAa,EAAE;AAAExF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD;AAHV;AAFL,GADU;AASlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AATY,CAAf,C;;;;;;;;;;;;ACdP;AAAA;AAAA;AAAA;AAEA,MAAM2E,IAAI,GAAG,CACT;AAAE1G,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADS,EAET;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFS,CAAb;AAKO,MAAM+F,GAAG,GAAG;AACfT,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLwH,UAAI,EAAE;AAAEhG,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OADD;AAEL2E,UAAI,EAAE;AAAEvF,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAEyF,IAA9C;AAAoD3E,WAAG,EAAE;AAAzD;AAFD;AAFL,GADO;AAQfsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AARS,CAAZ,C;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,CAApB;AAKA,MAAMiG,WAAW,GAAG,CAChB;AAAEpH,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJgB,CAApB;AAOA,MAAMkG,UAAU,GAAG,CACf;AAAErH,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADe,EAEf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFe,EAGf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHe,EAIf;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJe,CAAnB;AAOO,MAAMmG,OAAO,GAAG;AACnBb,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAELwF,UAAI,EAAE;AAAEpG,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAEmG,WAAjD;AAA8DrF,WAAG,EAAE;AAAnE,OAFD;AAGLyF,WAAK,EAAE;AAAErG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkC8B,WAAG,EAAE;AAAvC,OAHF;AAIL0F,WAAK,EAAE;AAAEtG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkC8B,WAAG,EAAE;AAAvC,OAJF;AAKL2F,WAAK,EAAE;AAAEvG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkC8B,WAAG,EAAE;AAAvC,OALF;AAML4F,WAAK,EAAE;AAAExG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkC8B,WAAG,EAAE;AAAvC,OANF;AAOL6F,YAAM,EAAE;AAAEzG,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0CgB,eAAO,EAAE4G,0CAAnD;AAAyD9F,WAAG,EAAE;AAA9D,OAPH;AAQL+F,aAAO,EAAE;AAAE3G,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAEoG,UAArD;AAAiEtF,WAAG,EAAE;AAAtE;AARJ;AAFL,GADW;AAcnBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAda,CAAhB,C;;;;;;;;;;;;ACrBP;AAAA;AAAA;AAAA;AAEA,MAAM2E,IAAI,GAAG,CACT;AAAE1G,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADS,EAET;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFS,CAAb;AAKA,MAAM4G,KAAK,GAAG,CACV;AAAE/H,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADU,EAEV;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFU,CAAd;AAKA,MAAM6G,OAAO,GAAG,CACZ;AAAEhI,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADY,EAEZ;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFY,CAAhB;AAKO,MAAM8G,MAAM,GAAG;AAClBxB,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAE4G,0CAAjD;AAAuD9F,WAAG,EAAE;AAA5D,OADF;AAELoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,eAAR;AAAyBlB,YAAI,EAAE,QAA/B;AAAyCgB,eAAO,EAAE4G,0CAAlD;AAAwD9F,WAAG,EAAE;AAA7D,OAFF;AAGL2E,UAAI,EAAE;AAAEvF,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAEyF,IAAzC;AAA+C3E,WAAG,EAAE;AAApD,OAHD;AAILqG,cAAQ,EAAE;AAAEjH,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC,OAJL;AAKLsG,kBAAY,EAAE;AAAElH,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwC8B,WAAG,EAAE;AAA7C,OALT;AAMLuG,UAAI,EAAE;AAAEnH,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE8G,KAAzC;AAAgDhG,WAAG,EAAE;AAArD,OAND;AAOLwG,YAAM,EAAE;AAAEpH,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkCgB,eAAO,EAAE+G,OAA3C;AAAoDjG,WAAG,EAAE;AAAzD,OAPH;AAQLyG,iBAAW,EAAE;AAAErH,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C;AARR;AAFL,GADU;AAclBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAdY,CAAf,C;;;;;;;;;;;;ACjBP;AAAA;AAAA;AAAA;AAGA,MAAM0G,UAAU,GAAG,CACf;AAAEzI,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADe,EAEf;AAAEnB,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CAFe,EAGf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHe,EAIf;AAAEnB,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CAJe,CAAnB;AAOO,MAAMuH,MAAM,GAAG;AAClBjC,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL8I,gBAAU,EAAE;AAAEtH,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAEwH,UAA/C;AAA2D1G,WAAG,EAAE;AAAhE;AADP;AAFL,GADU;AAOlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAPY,CAAf,C;;;;;;;;;;;;ACVP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAHgB,CAApB;AAMA,MAAMoF,cAAc,GAAG,CACnB;AAAEvG,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADmB,EAEnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFmB,EAGnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHmB,CAAvB;AAMO,MAAMwH,OAAO,GAAG;AACnBlC,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL2E,UAAI,EAAE;AAAEvF,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAEsF,cAArD;AAAqExE,WAAG,EAAE;AAA1E,OAFD;AAGL4E,mBAAa,EAAE;AAAExF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHV;AAIL6G,UAAI,EAAE;AAAEzH,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD;AAJD;AAFL,GADW;AAUnBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAVa,CAAhB,C;;;;;;;;;;;;ACdP;AAAA;AAAA;AAAA;AAEO,MAAM8G,KAAK,GAAG;AACjBpC,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD;AADF;AAFL,GADS;AAOjBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAPW,CAAd,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,CAApB;AAKA,MAAMoF,cAAc,GAAG,CACnB;AAAEvG,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADmB,EAEnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFmB,EAGnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHmB,EAInB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJmB,CAAvB;AAOO,MAAM2H,IAAI,GAAG;AAChBrC,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAE4G,0CAA/C;AAAqD9F,WAAG,EAAE;AAA1D;AADF;AAFL,GADQ;AAOhBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAPU,CAAb,C;;;;;;;;;;;;ACdP;AAAA;AAAA;AAAA;AAEA,MAAMgH,UAAU,GAAG,CACf;AAAE/I,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADe,EAEf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFe,EAGf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHe,EAIf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJe,CAAnB;AAOO,MAAM6H,OAAO,GAAG;AACnBvC,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLwH,UAAI,EAAE;AAAEhG,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OADD;AAELkH,cAAQ,EAAE;AAAE9H,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,UAAhC;AAA4C8B,WAAG,EAAE;AAAjD,OAFL;AAGLmH,qBAAe,EAAE;AAAE/H,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD;AAHZ;AAFL,GADW;AASnBoH,UAAQ,EAAE;AACNhI,QAAI,EAAE,2BADA;AAENxB,WAAO,EAAE;AACLyJ,cAAQ,EAAE;AAAEjI,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0C8B,WAAG,EAAE;AAA/C,OADL;AAELsH,cAAQ,EAAE;AAAElI,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAE8H,UAArD;AAAiEhH,WAAG,EAAE;AAAtE,OAFL;AAGLuH,uBAAiB,EAAE;AAAEnI,YAAI,EAAE,+BAAR;AAAyClB,YAAI,EAAE,QAA/C;AAAyD8B,WAAG,EAAE;AAA9D,OAHd;AAILwH,eAAS,EAAE;AAAEpI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,QAAjC;AAA2CgB,eAAO,EAAE8H,UAApD;AAAgEhH,WAAG,EAAE;AAArE,OAJN;AAKLyH,wBAAkB,EAAE;AAAErI,YAAI,EAAE,6BAAR;AAAuClB,YAAI,EAAE,QAA7C;AAAwD8B,WAAG,EAAE;AAA7D,OALf;AAML0H,iBAAW,EAAE;AAAEtI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD;AANR;AAFH,GATS;AAoBnBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AApBa,CAAhB,C;;;;;;;;;;;;ACTP;AAAA;AAAA;AAAA;AAEA,MAAMgH,UAAU,GAAG,CACf;AAAE/I,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADe,EAEf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFe,EAGf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHe,EAIf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJe,CAAnB;AAOO,MAAMuI,WAAW,GAAG;AACvBjD,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLgK,YAAM,EAAE;AAAExI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD,OADH;AAELkH,cAAQ,EAAE;AAAE9H,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,UAAhC;AAA4C8B,WAAG,EAAE;AAAjD,OAFL;AAGL6H,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD,OAHD;AAIL8H,iBAAW,EAAE;AAAE1I,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAE,CAAC;AAAEE,cAAI,EAAE,QAAR;AAAkBnB,eAAK,EAAE;AAAzB,SAAD,EAA8B;AAAEmB,cAAI,EAAE,QAAR;AAAkBnB,eAAK,EAAE;AAAzB,SAA9B,CAAhD;AAA6G+B,WAAG,EAAE;AAAlH,OAJR;AAKL+H,wBAAkB,EAAE;AAAE3I,YAAI,EAAE,oBAAR;AAA8BlB,YAAI,EAAE,QAApC;AAA8CgB,eAAO,EAAE,CACvE;AAAEE,cAAI,EAAE,QAAR;AAAkBnB,eAAK,EAAE;AAAzB,SADuE,EAC1C;AAAEmB,cAAI,EAAE,YAAR;AAAsBnB,eAAK,EAAE;AAA7B,SAD0C,EACR;AAAEmB,cAAI,EAAE,aAAR;AAAuBnB,eAAK,EAAE;AAA9B,SADQ,CAAvD;AAEjB+B,WAAG,EAAE;AAFY,OALf;AAQLmH,qBAAe,EAAE;AAAE/H,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD;AARZ;AAFL,GADe;AAcvBoH,UAAQ,EAAE;AACNhI,QAAI,EAAE,2BADA;AAENxB,WAAO,EAAE;AACLyJ,cAAQ,EAAE;AAAEjI,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0C8B,WAAG,EAAE;AAA/C,OADL;AAELsH,cAAQ,EAAE;AAAElI,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAE8H,UAArD;AAAiEhH,WAAG,EAAE;AAAtE,OAFL;AAGLuH,uBAAiB,EAAE;AAAEnI,YAAI,EAAE,+BAAR;AAAyClB,YAAI,EAAE,QAA/C;AAAyD8B,WAAG,EAAE;AAA9D,OAHd;AAILwH,eAAS,EAAE;AAAEpI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,QAAjC;AAA2CgB,eAAO,EAAE8H,UAApD;AAAgEhH,WAAG,EAAE;AAArE,OAJN;AAKLyH,wBAAkB,EAAE;AAAErI,YAAI,EAAE,6BAAR;AAAuClB,YAAI,EAAE,QAA7C;AAAwD8B,WAAG,EAAE;AAA7D,OALf;AAML0H,iBAAW,EAAE;AAAEtI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD;AANR;AAFH,GAda;AAyBvBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAzBiB,CAApB,C;;;;;;;;;;;;ACTP;AAAA;AAAA;AAAA;AAEA,MAAMgI,MAAM,GAAG,CACX;AAAE/J,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADW,EAEX;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFW,EAGX;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHW,CAAf;AAMA,MAAM6I,eAAe,GAAG,CACpB;AAAEhK,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADoB,EAEpB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFoB,EAGpB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHoB,CAAxB;AAMO,MAAM8I,OAAO,GAAG;AACnBxD,QAAM,EAAE;AACJtF,QAAI,EAAE,UADF;AAEJxB,WAAO,EAAE;AACLwH,UAAI,EAAE;AAAEhG,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC,OADD;AAELmI,cAAQ,EAAE;AAAE/I,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC,OAFL;AAGLoI,eAAS,EAAE;AAAEhJ,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqC8B,WAAG,EAAE;AAA1C,OAHN;AAILgI,YAAM,EAAE;AAAE5I,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkCgB,eAAO,EAAE8I,MAA3C;AAAmDhI,WAAG,EAAE;AAAxD,OAJH;AAKLqI,eAAS,EAAE;AAAEjJ,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqC8B,WAAG,EAAE;AAA1C,OALN;AAMLsI,sBAAgB,EAAE;AAAElJ,YAAI,EAAE,yBAAR;AAAmClB,YAAI,EAAE,QAAzC;AAAmDgB,eAAO,EAAE4G,0CAA5D;AAAkE9F,WAAG,EAAE;AAAvE,OANb;AAOLuI,aAAO,EAAE;AAAEnJ,YAAI,EAAE,oBAAR;AAA8BlB,YAAI,EAAE,QAApC;AAA8C8B,WAAG,EAAE;AAAnD,OAPJ;AAQLwI,sBAAgB,EAAE;AAAEpJ,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAE+I,eAArD;AAAsEjI,WAAG,EAAE;AAA3E;AARb;AAFL,GADW;AAcnBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAda,CAAhB,C;;;;;;;;;;;;ACdP;AAAA;AAAA;AAAA;AAEA,MAAMyI,WAAW,GAAG,CAChB;AAAExK,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJgB,EAKhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CALgB,CAApB;AAQO,MAAMsJ,YAAY,GAAG;AACxBhE,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0CgB,eAAO,EAAE4G,0CAAnD;AAAyD9F,WAAG,EAAE;AAA9D,OADD;AAEL2I,gBAAU,EAAE;AAAEvJ,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAE0J,8CAA/C;AAAyD5I,WAAG,EAAE;AAA9D,OAFP;AAGL6I,iBAAW,EAAE;AAAEzJ,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAE4J,mDAAhD;AAA+D9I,WAAG,EAAE;AAApE,OAHR;AAIL+I,WAAK,EAAE;AAAE3J,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqC8B,WAAG,EAAE;AAA1C,OAJF;AAKLgJ,gBAAU,EAAE;AAAE5J,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsC8B,WAAG,EAAE;AAA3C;AALP;AAFL;AADgB,CAArB,C;;;;;;;;;;;;ACVP;AAAA;AAAA;AAAA;AAEA,MAAM2E,IAAI,GAAG,CAAC,GAAGhF,KAAK,CAAC,EAAD,CAAT,EAAenC,GAAf,CAAmB,CAACyL,CAAD,EAAInJ,CAAJ,MAAW;AAAE7B,OAAK,EAAE6B,CAAT;AAAYV,MAAI,EAAG,KAAIU,CAAC,CAAC3F,QAAF,CAAW,EAAX,CAAe,KAAI2F,CAAE;AAA5C,CAAX,CAAnB,CAAb;AACA,MAAMyE,WAAW,GAAG,CAAC,GAAG5E,KAAK,CAAC,EAAD,CAAT,EAAenC,GAAf,CAAmB,CAACyL,CAAD,EAAInJ,CAAJ,MAAW;AAAE7B,OAAK,EAAE6B,CAAC,GAAC,EAAX;AAAeV,MAAI,EAAG,KAAI,CAACU,CAAC,GAAC,EAAH,EAAO3F,QAAP,CAAgB,EAAhB,CAAoB,KAAI2F,CAAC,GAAC,EAAG;AAAvD,CAAX,CAAnB,CAApB;AAEO,MAAMoJ,OAAO,GAAG;AACnBxE,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL2E,UAAI,EAAE;AAAEvF,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkCgB,eAAO,EAAEyF,IAA3C;AAAiD3E,WAAG,EAAE;AAAtD,OAFD;AAGLmJ,eAAS,EAAE;AAAE/J,YAAI,EAAE,uBAAR;AAAiClB,YAAI,EAAE,QAAvC;AAAiD8B,WAAG,EAAE;AAAtD,OAHN;AAILoJ,WAAK,EAAE;AAAEhK,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,QAAjC;AAA2C8B,WAAG,EAAE;AAAhD;AAJF;AAFL;AADW,CAAhB,C;;;;;;;;;;;;ACLP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,CAApB;AAKA,MAAMiG,WAAW,GAAG,CAChB;AAAEpH,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJgB,CAApB;AAOO,MAAMiK,QAAQ,GAAG;AACpB3E,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAELsJ,cAAQ,EAAE;AAAElK,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoCgB,eAAO,EAAEmG,WAA7C;AAA0DrF,WAAG,EAAE;AAA/D,OAFL;AAGLwF,UAAI,EAAE;AAAEpG,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAEmG,WAAjD;AAA8DrF,WAAG,EAAE;AAAnE,OAHD;AAILuJ,UAAI,EAAE;AAAEnK,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAEmG,WAA/C;AAA4DrF,WAAG,EAAE;AAAjE,OAJD;AAKLyF,WAAK,EAAE;AAAErG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OALF;AAML0F,WAAK,EAAE;AAAEtG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OANF;AAOL2F,WAAK,EAAE;AAAEvG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAPF;AAQL4F,WAAK,EAAE;AAAExG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OARF;AASLwJ,WAAK,EAAE;AAAEpK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OATF;AAULyJ,WAAK,EAAE;AAAErK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAVF;AAWL0J,WAAK,EAAE;AAAEtK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAXF;AAYL2J,WAAK,EAAE;AAAEvK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAZF;AAaL6F,YAAM,EAAE;AAAEzG,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0CgB,eAAO,EAAE4G,0CAAnD;AAAyD9F,WAAG,EAAE;AAA9D,OAbH;AAcLuI,aAAO,EAAE;AAAEnJ,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,QAAjC;AAA2C8B,WAAG,EAAE;AAAhD;AAdJ;AAFL,GADY;AAoBpBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AApBc,CAAjB,C;;;;;;;;;;;;ACdP;AAAA;AAAA,MAAMd,OAAO,GAAG,CACZ;AAAEjB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADY,EAEZ;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFY,CAAhB;AAKO,MAAMwK,QAAQ,GAAG;AACpBlF,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLwH,UAAI,EAAE;AAAEhG,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OADD;AAELb,YAAM,EAAE;AAAEC,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkCgB,eAAO,EAAEA,OAA3C;AAAoDc,WAAG,EAAE;AAAzD;AAFH;AAFL;AADY,CAAjB,C;;;;;;;;;;;;ACJP;AAAA;AAAA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJgB,CAApB;AAOA,MAAMyK,WAAW,GAAG,CAChB;AAAE5L,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJgB,EAKhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CALgB,EAMhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CANgB,CAApB;AASA,MAAM0K,kBAAkB,GAAG,CACvB;AAAE7L,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADuB,EAEvB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFuB,EAGvB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHuB,EAIvB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJuB,EAKvB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CALuB,EAMvB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CANuB,EAOvB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAPuB,EAQvB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CARuB,CAA3B;AAYO,MAAM2K,OAAO,GAAG;AACnBrF,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL6G,UAAI,EAAE;AAAEzH,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE2K,WAAzC;AAAsD7J,WAAG,EAAE;AAA3D,OAFD;AAGLgK,iBAAW,EAAE;AAAE5K,YAAI,EAAE,mBAAR;AAA6BlB,YAAI,EAAE,QAAnC;AAA6CgB,eAAO,EAAE4K,kBAAtD;AAA0E9J,WAAG,EAAE;AAA/E;AAHR;AAFL,GADW;AASnBoH,UAAQ,EAAE;AACNhI,QAAI,EAAE,uBADA;AAENxB,WAAO,EAAE;AACLqM,aAAO,EAAE;AAAE7K,YAAI,EAAE,qBAAR;AAA+BlB,YAAI,EAAE,QAArC;AAA+C8B,WAAG,EAAE;AAApD,OADJ;AAELkK,YAAM,EAAE,CAAC;AAAE9K,YAAI,EAAE,SAAR;AAAmBlB,YAAI,EAAE,QAAzB;AAAmC8B,WAAG,EAAE;AAAxC,OAAD,EAA8D;AAAEZ,YAAI,EAAE,GAAR;AAAalB,YAAI,EAAE,QAAnB;AAA6B8B,WAAG,EAAE;AAAlC,OAA9D,CAFH;AAGLmK,YAAM,EAAE,CAAC;AAAE/K,YAAI,EAAE,SAAR;AAAmBlB,YAAI,EAAE,QAAzB;AAAmC8B,WAAG,EAAE;AAAxC,OAAD,EAA8D;AAAEZ,YAAI,EAAE,GAAR;AAAalB,YAAI,EAAE,QAAnB;AAA6B8B,WAAG,EAAE;AAAlC,OAA9D;AAHH;AAFH,GATS;AAiBnBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAjBa,CAAhB,C;;;;;;;;;;;;AC7BP;AAAA;AAAA,MAAMoK,SAAS,GAAG,CACd;AAAEnM,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADc,EAEd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFc,EAGd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHc,EAId;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJc,EAKd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CALc,EAMd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CANc,EAOd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAPc,EAQd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CARc,EASd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CATc,EAUd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAVc,EAWd;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAXc,EAYd;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAZc,CAAlB;AAeO,MAAMiL,UAAU,GAAG;AACtB3F,QAAM,EAAE;AACJtF,QAAI,EAAE,UADF;AAEJxB,WAAO,EAAE;AACL0M,gBAAU,EAAE;AAAElL,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEkL,SAAhD;AAA2DpK,WAAG,EAAE;AAAhE,OADP;AAELsK,gBAAU,EAAE;AAAElL,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEkL,SAAhD;AAA2DpK,WAAG,EAAE;AAAhE,OAFP;AAGLsK,gBAAU,EAAE;AAAElL,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEkL,SAAhD;AAA2DpK,WAAG,EAAE;AAAhE,OAHP;AAILsK,gBAAU,EAAE;AAAElL,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEkL,SAAhD;AAA2DpK,WAAG,EAAE;AAAhE;AAJP;AAFL;AADc,CAAnB,C;;;;;;;;;;;;ACfP;AAAA;AAAA;AAAA;AAEA,MAAMuK,eAAe,GAAG,CACpB;AAAEtM,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADoB,EAEpB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFoB,EAGpB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHoB,CAAxB;AAMA,MAAMoL,cAAc,GAAG,CACnB;AAAEvM,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADmB,EAEnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFmB,EAGnB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHmB,EAInB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJmB,CAAvB;AAOA,MAAMmF,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJgB,CAApB;AAOO,MAAMqL,MAAM,GAAG;AAClB/F,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL2I,gBAAU,EAAE;AAAEvJ,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAEqL,eAArD;AAAsEvK,WAAG,EAAE;AAA3E,OAFP;AAGL6I,iBAAW,EAAE;AAAEzJ,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,QAAjC;AAA2CgB,eAAO,EAAEsL,cAApD;AAAoExK,WAAG,EAAE;AAAzE;AAHR;AAFL,GADU;AASlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AATY,CAAf,C;;;;;;;;;;;;ACtBP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CAFgB,CAApB;AAKO,MAAMsL,MAAM,GAAG;AAClBhG,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL2K,cAAQ,EAAE;AAAEvL,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC,OAFL;AAGL4K,YAAM,EAAE;AAAExL,YAAI,EAAE,oBAAR;AAA8BlB,YAAI,EAAE,QAApC;AAA8C8B,WAAG,EAAE;AAAnD;AAHH;AAFL,GADU;AASlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AATY,CAAf,C;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAEO,MAAM6K,YAAY,GAAG;AACxBnG,QAAM,EAAE;AACJtF,QAAI,EAAE,UADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD,OADD;AAEL8K,SAAG,EAAE;AAAE1L,YAAI,EAAE,KAAR;AAAelB,YAAI,EAAE,QAArB;AAA+B8B,WAAG,EAAE;AAApC;AAFA;AAFL;AADgB,CAArB,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEO,MAAM+K,WAAW,GAAG;AACvBrG,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLoN,kBAAY,EAAE;AAAE5L,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,UAA9B;AAA0C8B,WAAG,EAAE;AAA/C;AADT;AAFL,GADe;AAOvBoH,UAAQ,EAAE;AACNhI,QAAI,EAAE,uBADA;AAENxB,WAAO,EAAE;AACLqM,aAAO,EAAE;AAAE7K,YAAI,EAAE,qBAAR;AAA+BlB,YAAI,EAAE,QAArC;AAA+C8B,WAAG,EAAE;AAApD,OADJ;AAELkK,YAAM,EAAE,CAAC;AAAE9K,YAAI,EAAE,SAAR;AAAmBlB,YAAI,EAAE,QAAzB;AAAmC8B,WAAG,EAAE;AAAxC,OAAD,EAA8D;AAAEZ,YAAI,EAAE,GAAR;AAAalB,YAAI,EAAE,QAAnB;AAA6B8B,WAAG,EAAE;AAAlC,OAA9D,CAFH;AAGLmK,YAAM,EAAE,CAAC;AAAE/K,YAAI,EAAE,SAAR;AAAmBlB,YAAI,EAAE,QAAzB;AAAmC8B,WAAG,EAAE;AAAxC,OAAD,EAA8D;AAAEZ,YAAI,EAAE,GAAR;AAAalB,YAAI,EAAE,QAAnB;AAA6B8B,WAAG,EAAE;AAAlC,OAA9D;AAHH;AAFH,GAPa;AAevBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAfiB,CAApB,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CAFgB,CAApB;AAKO,MAAM6L,MAAM,GAAG;AAClBvG,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL2K,cAAQ,EAAE;AAAEvL,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAFL;AAFL,GADU;AAQlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AARY,CAAf,C;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAEO,MAAMkL,KAAK,GAAG;AACjBxG,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLgK,YAAM,EAAE;AAAExI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD,OADH;AAELmG,WAAK,EAAE;AAAE/G,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD,OAFF;AAGLoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoCgB,eAAO,EAAE4G,0CAA7C;AAAmD9F,WAAG,EAAE;AAAxD;AAHF,KAFL;AAOJsD,QAAI,EAAE;AACFlE,UAAI,EAAE,kBADJ;AAEFxB,aAAO,EAAE;AACLiH,aAAK,EAAE;AAAEzF,cAAI,EAAE,sBAAR;AAAgClB,cAAI,EAAE,UAAtC;AAAkD8B,aAAG,EAAE;AAAvD,SADF;AAEL8E,aAAK,EAAE;AAAE1F,cAAI,EAAE,sBAAR;AAAgClB,cAAI,EAAE,UAAtC;AAAkD8B,aAAG,EAAE;AAAvD,SAFF;AAGL+E,aAAK,EAAE;AAAE3F,cAAI,EAAE,sBAAR;AAAgClB,cAAI,EAAE,UAAtC;AAAkD8B,aAAG,EAAE;AAAvD,SAHF;AAILgF,YAAI,EAAE;AAAE5F,cAAI,EAAE,MAAR;AAAgBlB,cAAI,EAAE,QAAtB;AAAgC8B,aAAG,EAAE;AAArC,SAJD;AAKLiF,YAAI,EAAE;AAAE7F,cAAI,EAAE,MAAR;AAAgBlB,cAAI,EAAE,QAAtB;AAAgC8B,aAAG,EAAE;AAArC,SALD;AAMLkF,YAAI,EAAE;AAAE9F,cAAI,EAAE,MAAR;AAAgBlB,cAAI,EAAE,QAAtB;AAAgC8B,aAAG,EAAE;AAArC,SAND;AAOLtD,gBAAQ,EAAE;AAAE0C,cAAI,EAAE,UAAR;AAAoBlB,cAAI,EAAE,QAA1B;AAAoC8B,aAAG,EAAE;AAAzC;AAPL;AAFP;AAPF;AADS,CAAd,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,GAAT;AAAcmB,MAAI,EAAE;AAApB,CAFgB,CAApB;AAMO,MAAM+L,MAAM,GAAG;AAClBzG,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAEL2K,cAAQ,EAAE;AAAEvL,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAFL;AAFL,GADU;AAQlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AARY,CAAf,C;;;;;;;;;;;;ACPP;AAAA;AAAA,MAAMyI,WAAW,GAAG,CAChB;AAAExK,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJgB,EAKhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CALgB,EAMhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CANgB,EAOhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAPgB,EAQhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CARgB,EAShB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CATgB,EAUhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAVgB,EAWhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAXgB,CAApB;AAcO,MAAMgM,WAAW,GAAG;AACvB9H,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLkK,iBAAW,EAAE;AAAE1I,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,QAAtC;AAAgDgB,eAAO,EAAEuJ,WAAzD;AAAsEzI,WAAG,EAAE;AAA3E,OADR;AAELtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE;AAA1B;AAFL;AAFP;AADiB,CAApB,C;;;;;;;;;;;;ACdP;AAAA;AAAA,MAAMuK,WAAW,GAAG,CAChB;AAAExK,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJgB,EAKhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CALgB,EAMhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CANgB,EAOhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAPgB,EAQhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CARgB,EAShB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CATgB,EAUhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAVgB,EAWhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAXgB,CAApB;AAcO,MAAMiM,KAAK,GAAG;AACjB/H,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLlB,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE;AAA1B;AADL;AAFP,GADW;AAOjBoF,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAPW,CAAd,C;;;;;;;;;;;;ACfP;AAAA;AAAA;AAAA;AAEA,MAAMuE,WAAW,GAAG,CAChB;AAAEtG,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,CAApB;AAKA,MAAMiG,WAAW,GAAG,CAChB;AAAEpH,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJgB,CAApB;AAOO,MAAMkM,MAAM,GAAG;AAClB5G,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL2G,iBAAW,EAAE;AAAEnF,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAEqF,WAAhD;AAA6DvE,WAAG,EAAE;AAAlE,OADR;AAELsJ,cAAQ,EAAE;AAAElK,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoCgB,eAAO,EAAEmG,WAA7C;AAA0DrF,WAAG,EAAE;AAA/D,OAFL;AAGLwF,UAAI,EAAE;AAAEpG,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAEmG,WAAjD;AAA8DrF,WAAG,EAAE;AAAnE,OAHD;AAILuJ,UAAI,EAAE;AAAEnK,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAEmG,WAA/C;AAA4DrF,WAAG,EAAE;AAAjE,OAJD;AAKLyF,WAAK,EAAE;AAAErG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OALF;AAML0F,WAAK,EAAE;AAAEtG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OANF;AAOL2F,WAAK,EAAE;AAAEvG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAPF;AAQL4F,WAAK,EAAE;AAAExG,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OARF;AASLwJ,WAAK,EAAE;AAAEpK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OATF;AAULyJ,WAAK,EAAE;AAAErK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAVF;AAWL0J,WAAK,EAAE;AAAEtK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAXF;AAYL2J,WAAK,EAAE;AAAEvK,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,MAAxB;AAAgC8B,WAAG,EAAE;AAArC,OAZF;AAaL6F,YAAM,EAAE;AAAEzG,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0CgB,eAAO,EAAE4G,0CAAnD;AAAyD9F,WAAG,EAAE;AAA9D,OAbH;AAcLuI,aAAO,EAAE;AAAEnJ,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,QAAjC;AAA2C8B,WAAG,EAAE;AAAhD;AAdJ;AAFL,GADU;AAoBlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AApBY,CAAf,C;;;;;;;;;;;;ACZP;AAAA;AAAO,MAAMuL,UAAU,GAAG;AACtBjI,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLkK,iBAAW,EAAE;AAAE1I,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,MAA9B;AAAsC8B,WAAG,EAAE;AAA3C,OADR;AAEL8H,iBAAW,EAAE;AAAE1I,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,MAA9B;AAAsC8B,WAAG,EAAE;AAA3C,OAFR;AAGL8H,iBAAW,EAAE;AAAE1I,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,MAA9B;AAAsC8B,WAAG,EAAE;AAA3C,OAHR;AAIL8H,iBAAW,EAAE;AAAE1I,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,MAA9B;AAAsC8B,WAAG,EAAE;AAA3C;AAJR;AAFP;AADgB,CAAnB,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEA,MAAM9B,IAAI,GAAG,CACT;AAAED,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADS,EAET;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFS,CAAb;AAKO,MAAMoM,aAAa,GAAG;AACzB9G,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL6N,UAAI,EAAE;AAAErM,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqC8B,WAAG,EAAE;AAA1C,OADD;AAEL6H,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD,OAFD;AAGL9B,UAAI,EAAE;AAAEkB,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAEhB,IAA/C;AAAqD8B,WAAG,EAAE;AAA1D;AAHD;AAFL;AADiB,CAAtB,C;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAEA,MAAM9B,IAAI,GAAG,CACT;AAAED,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADS,EAET;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFS,CAAb;AAKO,MAAMsM,YAAY,GAAG;AACxBhH,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD,OADD;AAEL9B,UAAI,EAAE;AAAEkB,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAEhB,IAA/C;AAAqD8B,WAAG,EAAE;AAA1D;AAFD;AAFL;AADgB,CAArB,C;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAEA,MAAM2L,SAAS,GAAG,CACd;AAAE1N,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADc,EAEd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFc,EAGd;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHc,EAId;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJc,CAAlB;AAOA,MAAMwM,YAAY,GAAG,CACjB;AAAE3N,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADiB,EAEjB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFiB,EAGjB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHiB,EAIjB;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJiB,CAArB;AAOO,MAAMyM,YAAY,GAAG;AACxBnH,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD,OADD;AAELqH,cAAQ,EAAE;AAAEjI,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0C8B,WAAG,EAAE;AAA/C,OAFL;AAGL8L,kBAAY,EAAE;AAAE1M,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAE0M,YAAjD;AAA+D5L,WAAG,EAAE;AAApE,OAHT;AAIL+L,eAAS,EAAE;AAAE3M,YAAI,EAAE,oBAAR;AAA8BlB,YAAI,EAAE,QAApC;AAA8CgB,eAAO,EAAEyM,SAAvD;AAAkE3L,WAAG,EAAE;AAAvE;AAJN;AAFL,GADgB;AAUxBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAVkB,CAArB,C;;;;;;;;;;;;AChBP;AAAA;AAAA;AAAA;AAEO,MAAMgM,aAAa,GAAG;AACzBtH,QAAM,EAAE;AACJtF,QAAI,EAAE,UADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD,OADD;AAELiM,OAAC,EAAE;AAAE7M,YAAI,EAAE,KAAR;AAAelB,YAAI,EAAE,QAArB;AAA+BgO,WAAG,EAAE,CAApC;AAAuCC,WAAG,EAAE,GAA5C;AAAiDnM,WAAG,EAAE;AAAtD,OAFE;AAGLoM,OAAC,EAAE;AAAEhN,YAAI,EAAE,OAAR;AAAiBlB,YAAI,EAAE,QAAvB;AAAiCgO,WAAG,EAAE,CAAtC;AAAyCC,WAAG,EAAE,GAA9C;AAAmDnM,WAAG,EAAE;AAAxD,OAHE;AAILqM,OAAC,EAAE;AAAEjN,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgO,WAAG,EAAE,CAArC;AAAwCC,WAAG,EAAE,GAA7C;AAAkDnM,WAAG,EAAE;AAAvD;AAJE;AAFL;AADiB,CAAtB,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEO,MAAMsM,cAAc,GAAG;AAC1B5H,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD;AADD;AAFL;AADkB,CAAvB,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEA,MAAM9B,IAAI,GAAG,CACT;AAAED,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADS,EAET;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFS,EAGT;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHS,CAAb;AAMO,MAAMmN,KAAK,GAAG;AACjB7H,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,oBAAR;AAA8BlB,YAAI,EAAE,QAApC;AAA8CgB,eAAO,EAAE4G,0CAAvD;AAA6D9F,WAAG,EAAE;AAAlE,OADD;AAELwM,YAAM,EAAE,CAAC;AAAEpN,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D,CAFH;AAGLyM,YAAM,EAAE,CAAC;AAAErN,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D,CAHH;AAIL0M,YAAM,EAAE,CAAC;AAAEtN,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D,CAJH;AAKL2M,YAAM,EAAE,CAAC;AAAEvN,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D,CALH;AAML4M,YAAM,EAAE,CAAC;AAAExN,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D,CANH;AAOL6M,YAAM,EAAE,CAAC;AAAEzN,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D,CAPH;AAQL8M,YAAM,EAAE,CAAC;AAAE1N,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D,CARH;AASL+M,YAAM,EAAE,CAAC;AAAE3N,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuC8B,WAAG,EAAE;AAA5C,OAAD,EAA6D;AAAEZ,YAAI,EAAE,EAAR;AAAYlB,YAAI,EAAE,QAAlB;AAA4BgB,eAAO,EAAEhB,IAArC;AAA2C8B,WAAG,EAAE;AAAhD,OAA7D;AATH;AAFL;AADS,CAAd,C;;;;;;;;;;;;ACRP;AAAA;AAAA;AAAA;AAEA,MAAMgI,MAAM,GAAG,CACX;AAAE/J,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADW,EAEX;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFW,EAGX;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHW,CAAf;AAMO,MAAM4N,WAAW,GAAG;AACvBtI,QAAM,EAAE;AACJtF,QAAI,EAAE,UADF;AAEJxB,WAAO,EAAE;AACLwH,UAAI,EAAE;AAAEhG,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC,OADD;AAELmI,cAAQ,EAAE;AAAE/I,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC,OAFL;AAGLoI,eAAS,EAAE;AAAEhJ,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqC8B,WAAG,EAAE;AAA1C,OAHN;AAILgI,YAAM,EAAE;AAAE5I,YAAI,EAAE,QAAR;AAAkBlB,YAAI,EAAE,QAAxB;AAAkCgB,eAAO,EAAE8I,MAA3C;AAAmDhI,WAAG,EAAE;AAAxD,OAJH;AAKLqI,eAAS,EAAE;AAAEjJ,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqC8B,WAAG,EAAE;AAA1C,OALN;AAMLsI,sBAAgB,EAAE;AAAElJ,YAAI,EAAE,yBAAR;AAAmClB,YAAI,EAAE,QAAzC;AAAmDgB,eAAO,EAAE4G,0CAA5D;AAAkE9F,WAAG,EAAE;AAAvE,OANb;AAOLuI,aAAO,EAAE;AAAEnJ,YAAI,EAAE,oBAAR;AAA8BlB,YAAI,EAAE,QAApC;AAA8C8B,WAAG,EAAE;AAAnD;AAPJ;AAFL;AADe,CAApB,C;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAEO,MAAMiN,KAAK,GAAG;AACjBvI,QAAM,EAAE;AACJtF,QAAI,EAAE,kBADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD,OADF;AAELoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD;AAFF;AAFL,GADS;AAQjBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AARW,CAAd,C;;;;;;;;;;;;ACHP;AAAA;AAAA;AAAA;AAEO,MAAMkN,OAAO,GAAG;AACnBxI,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgCgB,eAAO,EAAE4G,0CAAzC;AAA+C9F,WAAG,EAAE;AAApD;AADD;AAFL,GADW;AAOnBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAPa,CAAhB,C;;;;;;;;;;;;ACDP;AAAA;AAAA;AAAA;AAEO,MAAMmN,QAAQ,GAAG;AACpBzI,QAAM,EAAE;AACJtF,QAAI,EAAE,kBADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD,OADF;AAELoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD;AAFF;AAFL,GADY;AAQpBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AARc,CAAjB,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEO,MAAMoN,MAAM,GAAG;AAClB1I,QAAM,EAAE;AACJtF,QAAI,EAAE,kBADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD,OADF;AAELoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD;AAFF;AAFL,GADU;AAQlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AARY,CAAf,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAEO,MAAMqN,aAAa,GAAG;AACzB3I,QAAM,EAAE;AACJtF,QAAI,EAAE,kBADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAE4G,0CAAjD;AAAuD9F,WAAG,EAAE;AAA5D,OADF;AAELoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAE4G,0CAAhD;AAAsD9F,WAAG,EAAE;AAA3D,OAFF;AAGLsN,WAAK,EAAE;AAAElO,YAAI,EAAE,YAAR;AAAsBlB,YAAI,EAAE,QAA5B;AAAsCgB,eAAO,EAAE4G,0CAA/C;AAAqD9F,WAAG,EAAE;AAA1D;AAHF;AAFL,GADiB;AASzBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AATmB,CAAtB,C;;;;;;;;;;;;ACHP;AAAA;AAAA;AAAA;AAEA,MAAMyI,WAAW,GAAG,CAChB;AAAExK,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,EAGhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAHgB,EAIhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAJgB,EAKhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CALgB,CAApB;AAQO,MAAMmO,GAAG,GAAG;AACf7I,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLiK,UAAI,EAAE;AAAEzI,YAAI,EAAE,WAAR;AAAqBlB,YAAI,EAAE,QAA3B;AAAqCgB,eAAO,EAAE4G,0CAA9C;AAAoD9F,WAAG,EAAE;AAAzD,OADD;AAEL8H,iBAAW,EAAE;AAAE1I,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAEuJ,WAAjD;AAA8DzI,WAAG,EAAE;AAAnE;AAFR;AAFL,GADO;AAQfsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLlB,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE;AAA1B;AADL;AAFP;AARS,CAAZ,C;;;;;;;;;;;;ACTP;AAAA;AAAA;AAAA;AAEO,MAAMsP,MAAM,GAAG;AAClB9I,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAE4G,0CAAjD;AAAuD9F,WAAG,EAAE;AAA5D,OADF;AAELoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,aAAR;AAAuBlB,YAAI,EAAE,QAA7B;AAAuCgB,eAAO,EAAE4G,0CAAhD;AAAsD9F,WAAG,EAAE;AAA3D,OAFF;AAGLyN,cAAQ,EAAE;AAAErO,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,UAA1B;AAAsCgB,eAAO,EAAE4G,0CAA/C;AAAqD9F,WAAG,EAAE;AAA1D;AAHL;AAFL,GADU;AASlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AATY,CAAf,C;;;;;;;;;;;;ACHP;AAAA;AAAA;AAAA;AAEA,MAAMgH,UAAU,GAAG,CACf;AAAE/I,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADe,EAEf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFe,EAGf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHe,EAIf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJe,CAAnB;AAOO,MAAMsO,MAAM,GAAG;AAClBhJ,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACL+M,cAAQ,EAAE;AAAEvL,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AADL;AAFL,GADU;AAOlBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAPY,CAAf,C;;;;;;;;;;;;ACTP;AAAA;AAAA;AAAA;AAEA,MAAMgH,UAAU,GAAG,CACf;AAAE/I,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADe,EAEf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFe,EAGf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHe,EAIf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJe,CAAnB;AAOO,MAAMuO,OAAO,GAAG;AACnBjJ,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLwH,UAAI,EAAE;AAAEhG,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC;AADD;AAFL,GADW;AAOnBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AAPa,CAAhB,C;;;;;;;;;;;;ACTP;AAAA;AAAA;AAAA;AAEA,MAAM4N,WAAW,GAAG,CAChB;AAAE3P,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CADgB,EAEhB;AAAEnB,OAAK,EAAE,EAAT;AAAamB,MAAI,EAAE;AAAnB,CAFgB,CAApB;AAKO,MAAMyO,WAAW,GAAG;AACvBnJ,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLuI,WAAK,EAAE;AAAE/G,YAAI,EAAE,qBAAR;AAA+BlB,YAAI,EAAE,QAArC;AAA+CgB,eAAO,EAAE4G,0CAAxD;AAA8D9F,WAAG,EAAE;AAAnE,OADF;AAELoG,WAAK,EAAE;AAAEhH,YAAI,EAAE,qBAAR;AAA+BlB,YAAI,EAAE,QAArC;AAA+CgB,eAAO,EAAE4G,0CAAxD;AAA8D9F,WAAG,EAAE;AAAnE,OAFF;AAGL9B,UAAI,EAAE;AAAEkB,YAAI,EAAE,cAAR;AAAwBlB,YAAI,EAAE,QAA9B;AAAwCgB,eAAO,EAAE0O,WAAjD;AAA8D5N,WAAG,EAAE;AAAnE;AAHD;AAFL,GADe;AASvBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AATiB,CAApB,C;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAEA,MAAMgH,UAAU,GAAG,CACf;AAAE/I,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CADe,EAEf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAFe,EAGf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAHe,EAIf;AAAEnB,OAAK,EAAE,CAAT;AAAYmB,MAAI,EAAE;AAAlB,CAJe,CAAnB;AAOO,MAAM0O,QAAQ,GAAG;AACpBpJ,QAAM,EAAE;AACJtF,QAAI,EAAE,QADF;AAEJxB,WAAO,EAAE;AACLwH,UAAI,EAAE;AAAEhG,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OADD;AAELkH,cAAQ,EAAE;AAAE9H,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,UAAhC;AAA4C8B,WAAG,EAAE;AAAjD,OAFL;AAGLmH,qBAAe,EAAE;AAAE/H,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD;AAHZ;AAFL,GADY;AASpBoH,UAAQ,EAAE;AACNhI,QAAI,EAAE,2BADA;AAENxB,WAAO,EAAE;AACLyJ,cAAQ,EAAE;AAAEjI,YAAI,EAAE,gBAAR;AAA0BlB,YAAI,EAAE,QAAhC;AAA0C8B,WAAG,EAAE;AAA/C,OADL;AAELsH,cAAQ,EAAE;AAAElI,YAAI,EAAE,kBAAR;AAA4BlB,YAAI,EAAE,QAAlC;AAA4CgB,eAAO,EAAE8H,UAArD;AAAiEhH,WAAG,EAAE;AAAtE,OAFL;AAGLuH,uBAAiB,EAAE;AAAEnI,YAAI,EAAE,+BAAR;AAAyClB,YAAI,EAAE,QAA/C;AAAyD8B,WAAG,EAAE;AAA9D,OAHd;AAILwH,eAAS,EAAE;AAAEpI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,QAAjC;AAA2CgB,eAAO,EAAE8H,UAApD;AAAgEhH,WAAG,EAAE;AAArE,OAJN;AAKLyH,wBAAkB,EAAE;AAAErI,YAAI,EAAE,6BAAR;AAAuClB,YAAI,EAAE,QAA7C;AAAwD8B,WAAG,EAAE;AAA7D,OALf;AAML0H,iBAAW,EAAE;AAAEtI,YAAI,EAAE,iBAAR;AAA2BlB,YAAI,EAAE,UAAjC;AAA6C8B,WAAG,EAAE;AAAlD;AANR;AAFH,GATU;AAoBpBsD,MAAI,EAAE;AACFlE,QAAI,EAAE,kBADJ;AAEFxB,WAAO,EAAE;AACLiH,WAAK,EAAE;AAAEzF,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OADF;AAEL8E,WAAK,EAAE;AAAE1F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAFF;AAGL+E,WAAK,EAAE;AAAE3F,YAAI,EAAE,sBAAR;AAAgClB,YAAI,EAAE,UAAtC;AAAkD8B,WAAG,EAAE;AAAvD,OAHF;AAILgF,UAAI,EAAE;AAAE5F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAJD;AAKLiF,UAAI,EAAE;AAAE7F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OALD;AAMLkF,UAAI,EAAE;AAAE9F,YAAI,EAAE,MAAR;AAAgBlB,YAAI,EAAE,QAAtB;AAAgC8B,WAAG,EAAE;AAArC,OAND;AAOLtD,cAAQ,EAAE;AAAE0C,YAAI,EAAE,UAAR;AAAoBlB,YAAI,EAAE,QAA1B;AAAoC8B,WAAG,EAAE;AAAzC;AAPL;AAFP;AApBc,CAAjB,C;;;;;;;;;;;;ACTP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGO,MAAM4I,QAAQ,GAAG,MAAM;AAC1B,SAAOzM,sDAAQ,CAAC8D,GAAT,CAAa,OAAb,EAAsBuG,MAAtB,CAA6BuH,IAAI,IAAIA,IAAI,CAAC9D,OAA1C,EAAmDzM,GAAnD,CAAuDuQ,IAAI,KAAK;AAAE9P,SAAK,EAAE8P,IAAI,CAAC5R,QAAL,CAAc6R,KAAvB;AAA8B5O,QAAI,EAAE2O,IAAI,CAAC5R,QAAL,CAAciD;AAAlD,GAAL,CAA3D,CAAP;AACH,CAFM;AAIA,MAAM0J,aAAa,GAAG,MAAM;AAC/B,SAAO,CAAE,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,CAAP;AACH,CAFM,C;;;;;;;;;;;;ACTP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAMmF,OAAO,GAAG,CACnB;AAAE7O,MAAI,EAAE,UAAR;AAAoBnB,OAAK,EAAE,CAA3B;AAA8BiQ,QAAM,EAAE;AAAtC,CADmB,EAEnB;AAAE9O,MAAI,EAAE,uBAAR;AAAiCnB,OAAK,EAAE,CAAxC;AAA2CiQ,QAAM,EAAEvG,2DAAWA;AAA9D,CAFmB,EAGnB;AAAEvI,MAAI,EAAE,yBAAR;AAAmCnB,OAAK,EAAE,CAA1C;AAA6CiQ,QAAM,EAAEnD,2DAAWA;AAAhE,CAHmB,EAInB;AAAE3L,MAAI,EAAE,yBAAR;AAAmCnB,OAAK,EAAE,CAA1C;AAA6CiQ,QAAM,EAAErC,6DAAYA;AAAjE,CAJmB,EAKnB;AAAEzM,MAAI,EAAE,uBAAR;AAAiCnB,OAAK,EAAE,CAAxC;AAA2CiQ,QAAM,EAAEhB,kDAAOA;AAA1D,CALmB,EAMnB;AAAE9N,MAAI,EAAE,4CAAR;AAAsDnB,OAAK,EAAE,CAA7D;AAAgEiQ,QAAM,EAAEX,0CAAGA;AAA3E,CANmB,EAOnB;AAAEnO,MAAI,EAAE,0BAAR;AAAoCnB,OAAK,EAAE,CAA3C;AAA8CiQ,QAAM,EAAER,gDAAMA;AAA5D,CAPmB,EAQnB;AAAEtO,MAAI,EAAE,wBAAR;AAAkCnB,OAAK,EAAE,CAAzC;AAA4CiQ,QAAM,EAAEP,kDAAOA;AAA3D,CARmB,EASnB;AAAEvO,MAAI,EAAE,gBAAR;AAA0BnB,OAAK,EAAE,CAAjC;AAAoCiQ,QAAM,EAAEL,mDAAWA;AAAvD,CATmB,EAUnB;AAAEzO,MAAI,EAAE,yBAAR;AAAmCnB,OAAK,EAAE,CAA1C;AAA6CiQ,QAAM,EAAEJ,kDAAQA;AAA7D,CAVmB,EAWnB;AAAE1O,MAAI,EAAE,oBAAR;AAA8BnB,OAAK,EAAE,EAArC;AAAyCiQ,QAAM,EAAEzJ,oDAAMA;AAAvD,CAXmB,EAYnB;AAAErF,MAAI,EAAE,6BAAR;AAAuCnB,OAAK,EAAE,EAA9C;AAAkDiQ,QAAM,EAAE/I,4CAAGA;AAA7D,CAZmB,EAanB;AAAE/F,MAAI,EAAE,mBAAR;AAA6BnB,OAAK,EAAE,EAApC;AAAwCiQ,QAAM,EAAE3I,gDAAOA;AAAvD,CAbmB,EAcnB;AAAEnG,MAAI,EAAE,oCAAR;AAA8CnB,OAAK,EAAE,EAArD;AAAyDiQ,QAAM,EAAEhI,kDAAMA;AAAvE,CAdmB,EAenB;AAAE9G,MAAI,EAAE,6BAAR;AAAuCnB,OAAK,EAAE,EAA9C;AAAkDiQ,QAAM,EAAEvH,kDAAMA;AAAhE,CAfmB,EAgBnB;AAAEvH,MAAI,EAAE,qBAAR;AAA+BnB,OAAK,EAAE,EAAtC;AAA0CiQ,QAAM,EAAEtH,oDAAOA;AAAzD,CAhBmB,EAiBnB;AACA;AAAExH,MAAI,EAAE,cAAR;AAAwBnB,OAAK,EAAE,EAA/B;AAAmCiQ,QAAM,EAAEpH,gDAAKA;AAAhD,CAlBmB,EAmBnB;AAAE1H,MAAI,EAAE,qBAAR;AAA+BnB,OAAK,EAAE,EAAtC;AAA0CiQ,QAAM,EAAEnH,8CAAIA;AAAtD,CAnBmB,EAoBnB;AAAE3H,MAAI,EAAE,wBAAR;AAAkCnB,OAAK,EAAE,EAAzC;AAA6CiQ,QAAM,EAAEjH,oDAAOA;AAA5D,CApBmB,EAqBnB;AAAE7H,MAAI,EAAE,+BAAR;AAAyCnB,OAAK,EAAE,EAAhD;AAAoDiQ,QAAM,EAAEhG,oDAAOA;AAAnE,CArBmB,EAsBnB;AAAE9I,MAAI,EAAE,2BAAR;AAAqCnB,OAAK,EAAE,EAA5C;AAAgDiQ,QAAM,EAAExF,+DAAYA;AAApE,CAtBmB,EAuBnB;AAAEtJ,MAAI,EAAE,oBAAR;AAA8BnB,OAAK,EAAE,EAArC;AAAyCiQ,QAAM,EAAEhF,oDAAOA;AAAxD,CAvBmB,EAwBnB;AAAE9J,MAAI,EAAE,wBAAR;AAAkCnB,OAAK,EAAE,EAAzC;AAA6CiQ,QAAM,EAAE7E,sDAAQA;AAA7D,CAxBmB,EAyBnB;AAAEjK,MAAI,EAAE,wBAAR;AAAkCnB,OAAK,EAAE,EAAzC;AAA6CiQ,QAAM,EAAEtE,sDAAQA;AAA7D,CAzBmB,EA0BnB;AAAExK,MAAI,EAAE,wBAAR;AAAkCnB,OAAK,EAAE,EAAzC;AAA6CiQ,QAAM,EAAEnE,oDAAOA;AAA5D,CA1BmB,EA2BnB;AAAE3K,MAAI,EAAE,uBAAR;AAAiCnB,OAAK,EAAE,EAAxC;AAA4CiQ,QAAM,EAAE7D,2DAAUA;AAA9D,CA3BmB,EA4BnB;AAAEjL,MAAI,EAAE,sBAAR;AAAgCnB,OAAK,EAAE,EAAvC;AAA2CiQ,QAAM,EAAEzD,kDAAMA;AAAzD,CA5BmB,EA6BnB;AAAErL,MAAI,EAAE,sBAAR;AAAgCnB,OAAK,EAAE,EAAvC;AAA2CiQ,QAAM,EAAExD,kDAAMA;AAAzD,CA7BmB,EA8BnB;AAAEtL,MAAI,EAAE,+BAAR;AAAyCnB,OAAK,EAAE,EAAhD;AAAoDiQ,QAAM,EAAErD,+DAAYA;AAAxE,CA9BmB,EA+BnB;AAAEzL,MAAI,EAAE,sBAAR;AAAgCnB,OAAK,EAAE,EAAvC;AAA2CiQ,QAAM,EAAEjD,kDAAMA;AAAzD,CA/BmB,EAgCnB;AAAE7L,MAAI,EAAE,qBAAR;AAA+BnB,OAAK,EAAE,EAAtC;AAA0CiQ,QAAM,EAAEhD,gDAAKA;AAAvD,CAhCmB,EAiCnB;AAAE9L,MAAI,EAAE,8BAAR;AAAwCnB,OAAK,EAAE,EAA/C;AAAmDiQ,QAAM,EAAE/C,kDAAMA;AAAjE,CAjCmB,EAkCnB;AAAE/L,MAAI,EAAE,wBAAR;AAAkCnB,OAAK,EAAE,EAAzC;AAA6CiQ,QAAM,EAAE9C,6DAAWA;AAAhE,CAlCmB,EAmCnB;AAAEhM,MAAI,EAAE,2BAAR;AAAqCnB,OAAK,EAAE,EAA5C;AAAgDiQ,QAAM,EAAE7C,gDAAKA;AAA7D,CAnCmB,EAoCnB;AAAEjM,MAAI,EAAE,sCAAR;AAAgDnB,OAAK,EAAE,EAAvD;AAA2DiQ,QAAM,EAAE5C,kDAAMA;AAAzE,CApCmB,EAqCnB;AAAElM,MAAI,EAAE,uBAAR;AAAiCnB,OAAK,EAAE,EAAxC;AAA4CiQ,QAAM,EAAE3C,2DAAUA;AAA9D,CArCmB,EAsCnB;AAAEnM,MAAI,EAAE,2BAAR;AAAqCnB,OAAK,EAAE,EAA5C;AAAgDiQ,QAAM,EAAE1C,iEAAaA;AAArE,CAtCmB,EAuCnB;AAAEpM,MAAI,EAAE,4BAAR;AAAsCnB,OAAK,EAAE,EAA7C;AAAiDiQ,QAAM,EAAExC,8DAAYA;AAArE,CAvCmB,EAwCnB;AAAEtM,MAAI,EAAE,gCAAR;AAA0CnB,OAAK,EAAE,EAAjD;AAAqDiQ,QAAM,EAAElC,iEAAaA;AAA1E,CAxCmB,EAyCnB;AAAE5M,MAAI,EAAE,4BAAR;AAAsCnB,OAAK,EAAE,EAA7C;AAAiDiQ,QAAM,EAAE5B,mEAAcA;AAAvE,CAzCmB,EA0CnB;AAAElN,MAAI,EAAE,gBAAR;AAA0BnB,OAAK,EAAE,EAAjC;AAAqCiQ,QAAM,EAAE3B,uDAAKA;AAAlD,CA1CmB,EA2CnB;AAAEnN,MAAI,EAAE,iCAAR;AAA2CnB,OAAK,EAAE,EAAlD;AAAsDiQ,QAAM,EAAElB,6DAAWA;AAAzE,CA3CmB,EA4CnB;AAAE5N,MAAI,EAAE,oBAAR;AAA8BnB,OAAK,EAAE,EAArC;AAAyCiQ,QAAM,EAAEjB,gDAAKA;AAAtD,CA5CmB,EA6CnB;AAAE7N,MAAI,EAAE,sBAAR;AAAgCnB,OAAK,EAAE,EAAvC;AAA2CiQ,QAAM,EAAEf,sDAAQA;AAA3D,CA7CmB,EA8CnB;AAAE/N,MAAI,EAAE,uBAAR;AAAiCnB,OAAK,EAAE,EAAxC;AAA4CiQ,QAAM,EAAEd,kDAAMA;AAA1D,CA9CmB,EA+CnB;AAAEhO,MAAI,EAAE,+BAAR;AAAyCnB,OAAK,EAAE,EAAhD;AAAoDiQ,QAAM,EAAEb,iEAAaA;AAAzE,CA/CmB,EAgDnB;AAAEjO,MAAI,EAAE,sBAAR;AAAgCnB,OAAK,EAAE,EAAvC;AAA2CiQ,QAAM,EAAEV,kDAAMA;AAAzD,CAhDmB,CAAhB,C;;;;;;;;;;;;AC/CP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEO,MAAMW,WAAW,GAAG,OAAOzK,GAAG,GAAG,EAAb,KAAoB;AAC3C,SAAO,MAAMzB,KAAK,CAAE,GAAEyB,GAAI,OAAR,CAAL,CAAqBxB,IAArB,CAA0BC,QAAQ,IAAIA,QAAQ,CAACiM,IAAT,EAAtC,CAAb;AACH,CAFM;AAIA,MAAMC,WAAW,GAAG,MAAO3K,GAAP,IAAe;AACtC,SAAOyK,WAAW,CAACzK,GAAD,CAAX,CAAiBxB,IAAjB,CAAsBC,QAAQ,IAAIA,QAAQ,CAACmM,OAA3C,CAAP;AACH,CAFM;AAIA,MAAMC,cAAc,GAAG,YAAY;AACtC,QAAMN,OAAO,GAAG,MAAMI,WAAW,EAAjC;AACA,QAAMG,IAAI,GAAG,EAAb;AACA,QAAMC,KAAK,GAAGR,OAAO,CAACzQ,GAAR,CAAYkR,MAAM,IAAI;AAChC,UAAMC,UAAU,GAAGD,MAAM,CAACE,UAAP,IAAqB,EAAxC;AACAD,cAAU,CAACnR,GAAX,CAAeS,KAAK,IAAIuQ,IAAI,CAACK,IAAL,CAAW,GAAEH,MAAM,CAACI,QAAS,IAAG7Q,KAAK,CAAC8Q,IAAK,EAA3C,CAAxB;AACA,UAAMC,MAAM,GAAG,CAAC;AACZtR,WAAK,EAAE,UADK;AAEZQ,UAAI,EAAEwQ,MAAM,CAACI,QAAP,IAAoB,GAAEJ,MAAM,CAACO,UAAW,IAAGP,MAAM,CAACQ,IAAK,EAFjD;AAGZC,YAAM,EAAE,EAHI;AAIZC,aAAO,EAAE,CAAC,CAAD,CAJG;AAKZ7R,YAAM,EAAE,CAAC;AACL6B,YAAI,EAAE,UADD;AAELlB,YAAI,EAAE,QAFD;AAGLd,cAAM,EAAEuR,UAAU,CAACnR,GAAX,CAAeS,KAAK,IAAIA,KAAK,CAAC8Q,IAA9B,CAHH;AAIL9Q,aAAK,EAAE0Q,UAAU,CAACvS,MAAX,GAAoBuS,UAAU,CAAC,CAAD,CAAV,CAAcI,IAAlC,GAAyC;AAJ3C,OAAD,EAKL;AACC3P,YAAI,EAAE,UADP;AAEClB,YAAI,EAAE,QAFP;AAGCd,cAAM,EAAE,CAAC,EAAD,EAAK,GAAL,EAAU,GAAV,EAAe,GAAf,EAAoB,IAApB,EAA0B,IAA1B,EAAgC,IAAhC,CAHT;AAICa,aAAK,EAAE;AAJR,OALK,EAUL;AACCmB,YAAI,EAAE,OADP;AAEClB,YAAI,EAAE;AAFP,OAVK,CALI;AAmBZmR,YAAM,EAAE,IAnBI;AAoBZlV,cAAQ,EAAE,YAAY;AAClB,cAAMmV,UAAU,GAAG,KAAK/R,MAAL,CAAY,CAAZ,EAAeU,KAAf,KAAyB,EAAzB,GAA8B,SAA9B,GAA2C,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA7G;AACA,eAAQ,QAAO,KAAKC,IAAK,IAAG,KAAKX,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAGqR,UAAW,EAA/D;AACH,OAvBW;AAwBZC,WAAK,EAAE,YAAY;AACf,cAAMD,UAAU,GAAG,KAAK/R,MAAL,CAAY,CAAZ,EAAeU,KAAf,KAAyB,EAAzB,GAA8B,EAA9B,GAAoC,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAArG;AACA,eAAO,CAAE,MAAK,KAAKC,IAAK,IAAG,KAAKX,MAAL,CAAY,CAAZ,EAAeU,KAAM,GAAEqR,UAAW,0BAAtD,CAAP;AACH;AA3BW,KAAD,CAAf;AA8BA,QAAIE,OAAJ,EAAaC,MAAb,EAAqBrQ,IAArB;;AACA,YAAQsP,MAAM,CAACQ,IAAf;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAK,2BAAL;AACIF,cAAM,CAACH,IAAP,CAAY;AACRnR,eAAK,EAAE,SADC;AAERQ,cAAI,EAAG,GAAEwQ,MAAM,CAACI,QAAS,aAFjB;AAGRK,gBAAM,EAAE,CAAC,CAAD,CAHA;AAIRC,iBAAO,EAAE,CAAC,CAAD,CAJD;AAKR7R,gBAAM,EAAE,CAAC;AACL6B,gBAAI,EAAE,OADD;AAELlB,gBAAI,EAAE;AAFD,WAAD,CALA;AASR/D,kBAAQ,EAAE,YAAY;AAAE,mBAAQ,GAAEuU,MAAM,CAACI,QAAS,YAAW,KAAKvR,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA1D;AAA8D,WAT9E;AAURsR,eAAK,EAAE,YAAY;AAAE,mBAAO,CAAE,eAAcb,MAAM,CAACI,QAAS,aAAY,KAAKvR,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAjE,CAAP;AAA6E;AAV1F,SAAZ;AAYA;;AACJ,WAAK,oBAAL;AACA,WAAK,wBAAL;AACA,WAAK,yBAAL;AACIuR,eAAO,GAAG;AACN,gCAAsB,KADhB;AAEN,oCAA0B,KAFpB;AAGN,qCAA2B;AAHrB,SAAV;AAKAC,cAAM,GAAGD,OAAO,CAACd,MAAM,CAACQ,IAAR,CAAhB;AACAF,cAAM,CAACH,IAAP,CAAY;AACRnR,eAAK,EAAE,SADC;AAERQ,cAAI,EAAG,GAAEwQ,MAAM,CAACI,QAAS,SAFjB;AAGRK,gBAAM,EAAE,CAAC,CAAD,CAHA;AAIRC,iBAAO,EAAE,CAAC,CAAD,CAJD;AAKR7R,gBAAM,EAAE,CAAC;AACL6B,gBAAI,EAAE,KADD;AAELlB,gBAAI,EAAE,QAFD;AAGLd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAgD,EAAhD,EAAoD,EAApD;AAHH,WAAD,EAIL;AACCgC,gBAAI,EAAE,OADP;AAEClB,gBAAI,EAAE,QAFP;AAGCd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ;AAHT,WAJK,CALA;AAcRjD,kBAAQ,EAAE,YAAY;AAAE,mBAAQ,GAAEuU,MAAM,CAACI,QAAS,OAAM,KAAKvR,MAAL,CAAY,CAAZ,EAAeU,KAAM,MAAK,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA/E;AAAmF,WAdnG;AAeRsR,eAAK,EAAE,YAAY;AAAE,mBAAO,CAAE,GAAEE,MAAO,QAAO,KAAKlS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA/D,CAAP;AAA2E;AAfxF,SAAZ;AAiBA+Q,cAAM,CAACH,IAAP,CAAY;AACRnR,eAAK,EAAE,SADC;AAERQ,cAAI,EAAG,GAAEwQ,MAAM,CAACI,QAAS,UAFjB;AAGRK,gBAAM,EAAE,CAAC,CAAD,CAHA;AAIRC,iBAAO,EAAE,CAAC,CAAD,CAJD;AAKR7R,gBAAM,EAAE,CAAC;AACL6B,gBAAI,EAAE,KADD;AAELlB,gBAAI,EAAE,QAFD;AAGLd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAgD,EAAhD,EAAoD,EAApD;AAHH,WAAD,EAIL;AACCgC,gBAAI,EAAE,OADP;AAEClB,gBAAI,EAAE,QAFP;AAGCd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ;AAHT,WAJK,EAQN;AACEgC,gBAAI,EAAE,MADR;AAEElB,gBAAI,EAAE,QAFR;AAGEd,kBAAM,EAAE,CAAC,IAAD,EAAO,GAAP;AAHV,WARM,EAYN;AACEgC,gBAAI,EAAE,UADR;AAEElB,gBAAI,EAAE;AAFR,WAZM,CALA;AAqBR/D,kBAAQ,EAAE,YAAY;AAAE,mBAAQ,GAAEuU,MAAM,CAACI,QAAS,OAAM,KAAKvR,MAAL,CAAY,CAAZ,EAAeU,KAAM,MAAK,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,QAAO,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAlI;AAAsI,WArBtJ;AAsBRsR,eAAK,EAAE,YAAY;AACf,gBAAI,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAf,KAAyB,GAA7B,EAAkC;AAC9B,qBAAO,CAAE,GAAEwR,MAAO,aAAY,KAAKlS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA5F,CAAP;AACH,aAFD,MAEO;AACH,qBAAO,CAAE,GAAEwR,MAAO,SAAQ,KAAKlS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAxF,CAAP;AACH;AACJ;AA5BO,SAAZ;AA8BA;;AACJ,WAAK,6BAAL;AACI+Q,cAAM,CAACH,IAAP,CAAY;AACRnR,eAAK,EAAE,SADC;AAERQ,cAAI,EAAG,GAAEwQ,MAAM,CAACI,QAAS,SAFjB;AAGRK,gBAAM,EAAE,CAAC,CAAD,CAHA;AAIRC,iBAAO,EAAE,CAAC,CAAD,CAJD;AAKR7R,gBAAM,EAAE,CAAC;AACL6B,gBAAI,EAAE,KADD;AAELlB,gBAAI,EAAE,QAFD;AAGLd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAgD,EAAhD,EAAoD,EAApD;AAHH,WAAD,EAIL;AACCgC,gBAAI,EAAE,OADP;AAEClB,gBAAI,EAAE,QAFP;AAGCd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ;AAHT,WAJK,CALA;AAcRjD,kBAAQ,EAAE,YAAY;AAAE,mBAAQ,GAAEuU,MAAM,CAACI,QAAS,OAAM,KAAKvR,MAAL,CAAY,CAAZ,EAAeU,KAAM,MAAK,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA/E;AAAmF,WAdnG;AAeRsR,eAAK,EAAE,YAAY;AAAE,mBAAO,CAAE,WAAU,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAzD,CAAP;AAAqE;AAflF,SAAZ;AAiBA;;AACJ,WAAK,wBAAL;AACA,WAAK,mBAAL;AACIuR,eAAO,GAAG;AACN,oCAA0B,MADpB;AAEN,+BAAqB;AAFf,SAAV;AAIAC,cAAM,GAAGD,OAAO,CAACd,MAAM,CAACQ,IAAR,CAAhB;AACAF,cAAM,CAACH,IAAP,CAAY;AACRnR,eAAK,EAAE,SADC;AAERQ,cAAI,EAAG,GAAEwQ,MAAM,CAACI,QAAS,UAFjB;AAGRK,gBAAM,EAAE,CAAC,CAAD,CAHA;AAIRC,iBAAO,EAAE,CAAC,CAAD,CAJD;AAKR7R,gBAAM,EAAE,CAAC;AACL6B,gBAAI,EAAE,KADD;AAELlB,gBAAI,EAAE,QAFD;AAGLd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV;AAHH,WAAD,EAIL;AACCgC,gBAAI,EAAE,QADP;AAEClB,gBAAI,EAAE,QAFP;AAGCd,kBAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAgD,EAAhD,EAAoD,EAApD,EAAwD,EAAxD,EAA4D,EAA5D,EAAgE,EAAhE,EAAoE,EAApE;AAHT,WAJK,EAQL;AACCgC,gBAAI,EAAE,MADP;AAEClB,gBAAI,EAAE;AAFP,WARK,CALA;AAiBR/D,kBAAQ,EAAE,YAAY;AAAE,mBAAQ,GAAEuU,MAAM,CAACI,QAAS,WAAU,KAAKvR,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAzD;AAA6D,WAjB7E;AAkBRsR,eAAK,EAAE,YAAY;AAAE,mBAAO,CAAE,GAAEE,MAAO,IAAG,KAAKlS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAnF,CAAP;AAA+F;AAlB5G,SAAZ;AAoBA;;AACJ,WAAK,wBAAL;AACI+Q,cAAM,CAACH,IAAP,CAAY;AACRnR,eAAK,EAAE,SADC;AAERQ,cAAI,EAAG,GAAEwQ,MAAM,CAACI,QAAS,UAFjB;AAGRK,gBAAM,EAAE,CAAC,CAAD,CAHA;AAIRC,iBAAO,EAAE,CAAC,CAAD,CAJD;AAKR7R,gBAAM,EAAE,CAAC;AACL6B,gBAAI,EAAE,UADD;AAELlB,gBAAI,EAAE,QAFD;AAGLd,kBAAM,EAAEuR,UAAU,CAACnR,GAAX,CAAeS,KAAK,IAAIA,KAAK,CAAC8Q,IAA9B;AAHH,WAAD,EAIL;AACC3P,gBAAI,EAAE,OADP;AAEClB,gBAAI,EAAE;AAFP,WAJK,CALA;AAaR/D,kBAAQ,EAAE,YAAY;AAAE,mBAAQ,GAAEuU,MAAM,CAACI,QAAS,IAAG,KAAKvR,MAAL,CAAY,CAAZ,EAAeU,KAAM,MAAK,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA5E;AAAgF,WAbhG;AAcRsR,eAAK,EAAE,YAAY;AAAE,mBAAO,CAAE,gBAAeb,MAAM,CAACO,UAAW,IAAG,KAAK1R,MAAL,CAAY,CAAZ,EAAeH,MAAf,CAAsBsS,SAAtB,CAAgC,KAAKnS,MAAL,CAAY,CAAZ,EAAeU,KAA/C,CAAsD,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAApH,CAAP;AAAgI;AAd7I,SAAZ;AAgBA;AAvJR;;AA0JA,WAAO+Q,MAAP;AACH,GA7La,EA6LXpN,IA7LW,EAAd;AA+LA,SAAO;AAAE6M,SAAF;AAASD;AAAT,GAAP;AACH,CAnMM;AAqMA,MAAMmB,YAAY,GAAG,YAAY;AACpC,QAAMC,IAAI,GAAG,CAAC,EAAD,CAAb,CADoC,CACjB;;AACnB,QAAMpB,IAAI,GAAG,EAAb;AACA,QAAMqB,OAAO,CAACC,GAAR,CAAYF,IAAI,CAACpS,GAAL,CAAS,MAAMkG,GAAN,IAAa;AACpC,UAAMqM,IAAI,GAAG,MAAM5B,WAAW,CAACzK,GAAD,CAA9B;AACAqM,QAAI,CAACzB,OAAL,CAAa9Q,GAAb,CAAiBkR,MAAM,IAAI;AACvBA,YAAM,CAACE,UAAP,CAAkBpR,GAAlB,CAAsBS,KAAK,IAAI;AAC3BuQ,YAAI,CAAE,GAAEuB,IAAI,CAACC,MAAL,CAAYjB,IAAK,IAAGL,MAAM,CAACI,QAAS,IAAG7Q,KAAK,CAAC8Q,IAAK,EAAtD,CAAJ,GAAgE9Q,KAAK,CAACgS,KAAtE;AACH,OAFD;AAGH,KAJD;AAKH,GAPiB,CAAZ,CAAN;AAQA,SAAOzB,IAAP;AACH,CAZM;AAcA,MAAM0B,uBAAuB,GAAG,MAAOxM,GAAP,IAAe;AAClD,QAAMuK,OAAO,GAAG,MAAMI,WAAW,CAAC3K,GAAD,CAAjC;AACA,QAAM8K,IAAI,GAAG,EAAb;AACA,QAAMC,KAAK,GAAGR,OAAO,CAACzQ,GAAR,CAAYkR,MAAM,IAAI;AAChCA,UAAM,CAACE,UAAP,CAAkBpR,GAAlB,CAAsBS,KAAK,IAAIuQ,IAAI,CAACK,IAAL,CAAW,GAAEH,MAAM,CAACI,QAAS,IAAG7Q,KAAK,CAAC8Q,IAAK,EAA3C,CAA/B;AACA,WAAO,EAAP;AACH,GAHa,EAGXnN,IAHW,EAAd;AAKA,SAAO;AAAE6M,SAAF;AAASD;AAAT,GAAP;AACH,CATM;AAWA,MAAM2B,SAAS,GAAG,OAAOC,QAAP,EAAiB9M,IAAjB,KAA0B;AAC/CzH,gDAAM,CAACwU,IAAP;AACA,QAAMC,IAAI,GAAGhN,IAAI,GAAG,IAAIiN,IAAJ,CAAS,CAAC,IAAI9M,IAAJ,CAAS,CAACH,IAAD,CAAT,CAAD,CAAT,EAA6B8M,QAA7B,CAAH,GAA4CA,QAA7D;AACA,QAAMI,QAAQ,GAAG,IAAIC,QAAJ,EAAjB;AACAD,UAAQ,CAACE,MAAT,CAAgB,MAAhB,EAAwB,CAAxB;AACAF,UAAQ,CAACE,MAAT,CAAgB,MAAhB,EAAwBJ,IAAxB;AAEA,SAAO,MAAMrO,KAAK,CAAC,SAAD,EAAY;AAC1B0O,UAAM,EAAE,MADkB;AAE1B1T,QAAI,EAAEuT;AAFoB,GAAZ,CAAL,CAGVtO,IAHU,CAGL,MAAM;AACVrG,kDAAM,CAACC,IAAP;AACA/B,uDAAU,CAAC6W,OAAX,CAAmB,8BAAnB,EAAmD,EAAnD,EAAuD,IAAvD;AACH,GANY,EAMVnS,CAAC,IAAI;AACJ5C,kDAAM,CAACC,IAAP;AACA/B,uDAAU,CAAC8W,KAAX,CAAiBpS,CAAC,CAACqS,OAAnB,EAA4B,EAA5B,EAAgC,IAAhC;AACH,GATY,CAAb;AAUH,CAjBM;AAmBA,MAAMC,UAAU,GAAG,MAAOX,QAAP,IAAqB;AAC3C,SAAO,MAAMnO,KAAK,CAAC,sBAAoBmO,QAArB,CAAL,CAAoClO,IAApC,CAAyC,MAAM;AACxDnI,uDAAU,CAAC6W,OAAX,CAAmB,8BAAnB,EAAmD,EAAnD,EAAuD,IAAvD;AACH,GAFY,EAEVnS,CAAC,IAAI;AACJ1E,uDAAU,CAAC8W,KAAX,CAAiBpS,CAAC,CAACqS,OAAnB,EAA4B,EAA5B,EAAgC,IAAhC;AACH,GAJY,CAAb;AAKH,CANM;AAQA,MAAME,oBAAoB,GAAG,MAAOzT,MAAP,IAAkB;AAClD4S,WAAS,CAAC,QAAD,EAAW5S,MAAX,CAAT;AACH,CAFM;AAIA,MAAM0T,eAAe,GAAG,MAAO1T,MAAP,IAAkB;AAC7C4S,WAAS,CAAC,QAAD,EAAW5S,MAAX,CAAT;AACH,CAFM;AAIA,MAAM2T,cAAc,GAAG,YAAY;AACtC,SAAO,MAAMjP,KAAK,CAAC,SAAD,CAAL,CAAiBC,IAAjB,CAAsBC,QAAQ,IAAIA,QAAQ,CAACiM,IAAT,EAAlC,CAAb;AACH,CAFM;AAIA,MAAM+C,mBAAmB,GAAG,MAAO1C,KAAP,IAAiB;AAChD,SAAO,MAAMxM,KAAK,CAAC,SAAD,CAAL,CAAiBC,IAAjB,CAAsBC,QAAQ,IAAIA,QAAQ,CAACiM,IAAT,EAAlC,CAAb;AACH,CAFM;AAIA,MAAMgD,SAAS,GAAG,MAAOC,IAAP,IAAgB;AACrC,QAAMb,QAAQ,GAAG,IAAIC,QAAJ,EAAjB;AACAD,UAAQ,CAACE,MAAT,CAAgB,KAAhB,EAAuB,CAAvB;AACAF,UAAQ,CAACE,MAAT,CAAgB,OAAhB,EAAyBW,IAAzB;AAEA,SAAO,MAAMpP,KAAK,CAAC,QAAD,EAAW;AACzB0O,UAAM,EAAE,MADiB;AAEzB1T,QAAI,EAAEuT;AAFmB,GAAX,CAAlB;AAIH,CATM,C;;;;;;;;;;;;ACpRP;AAAA;AAAA;CAEA;AACA;AAEA;;AACA,MAAMc,KAAK,GAAG,SAAd;;AAEA,MAAMC,SAAS,GAAGC,aAAa,IAAI;AAC/B;AACA,QAAMC,QAAQ,GAAGD,aAAa,CAAChL,MAAd,CAAqBkL,IAAI,IAAIA,IAAI,CAACvC,MAAL,CAAY/S,MAAZ,KAAuB,CAApD,CAAjB,CAF+B,CAI/B;;AACA,QAAM4S,MAAM,GAAGyC,QAAQ,CAACjU,GAAT,CAAamU,OAAO,IAAI;AACnC,UAAMC,QAAQ,GAAGP,IAAI,IAAI;AACrB,aAAO;AACHQ,SAAC,EAAER,IAAI,CAACnT,IADL;AAEH+K,SAAC,EAAEoI,IAAI,CAAC9T,MAAL,CAAYC,GAAZ,CAAgBD,MAAM,IAAIA,MAAM,CAACU,KAAjC,CAFA;AAGH6T,SAAC,EAAET,IAAI,CAACjC,OAAL,CAAa5R,GAAb,CAAiBuU,GAAG,IAAIA,GAAG,CAACC,KAAJ,CAAUxU,GAAV,CAAcyU,IAAI,IAAIL,QAAQ,CAACK,IAAI,CAACC,KAAL,CAAWC,UAAZ,CAA9B,CAAxB,CAHA;AAIHC,SAAC,EAAE,CAACf,IAAI,CAACgB,QAAL,CAAc1Q,CAAf,EAAkB0P,IAAI,CAACgB,QAAL,CAAcC,CAAhC;AAJA,OAAP;AAMH,KAPD;;AASA,WAAOV,QAAQ,CAACD,OAAD,CAAf;AACH,GAXc,CAAf;AAaA,SAAO3C,MAAP;AACH,CAnBD;;AAqBA,MAAMuD,SAAS,GAAG,CAAChV,MAAD,EAASiV,KAAT,EAAgBC,IAAhB,KAAyB;AACvClV,QAAM,CAACC,GAAP,CAAWD,MAAM,IAAI;AACjB,QAAImU,IAAI,GAAGc,KAAK,CAAChB,aAAN,CAAoBjV,IAApB,CAAyBmW,CAAC,IAAIA,CAAC,CAACL,QAAF,CAAW1Q,CAAX,KAAiBpE,MAAM,CAAC6U,CAAP,CAAS,CAAT,CAAjB,IAAgCM,CAAC,CAACL,QAAF,CAAWC,CAAX,KAAiB/U,MAAM,CAAC6U,CAAP,CAAS,CAAT,CAA/E,CAAX;;AACA,QAAI,CAACV,IAAL,EAAW;AACP,YAAMiB,UAAU,GAAGH,KAAK,CAAC/D,KAAN,CAAYlS,IAAZ,CAAiBmW,CAAC,IAAInV,MAAM,CAACsU,CAAP,IAAYa,CAAC,CAACxU,IAApC,CAAnB;AACAwT,UAAI,GAAG,IAAIkB,MAAJ,CAAWJ,KAAK,CAACK,MAAjB,EAAyBF,UAAzB,EAAqC;AAAEhR,SAAC,EAAEpE,MAAM,CAAC6U,CAAP,CAAS,CAAT,CAAL;AAAkBE,SAAC,EAAE/U,MAAM,CAAC6U,CAAP,CAAS,CAAT;AAArB,OAArC,CAAP;AACAV,UAAI,CAACnU,MAAL,CAAYC,GAAZ,CAAgB,CAACsV,GAAD,EAAMhT,CAAN,KAAY;AACxBgT,WAAG,CAAC7U,KAAJ,GAAYV,MAAM,CAAC0L,CAAP,CAASnJ,CAAT,CAAZ;AACH,OAFD;AAGA4R,UAAI,CAACpW,MAAL;AACAkX,WAAK,CAAChB,aAAN,CAAoB3C,IAApB,CAAyB6C,IAAzB;AACH;;AAGD,QAAIe,IAAJ,EAAU;AACN,YAAMM,aAAa,GAAGN,IAAI,CAACO,qBAAL,EAAtB;AACA,YAAMC,WAAW,GAAGvB,IAAI,CAACvC,MAAL,CAAY,CAAZ,EAAe6D,qBAAf,EAApB;AACA,YAAME,OAAO,GAAG,IAAIC,QAAJ,CAAanW,QAAQ,CAACC,IAAT,CAAcmW,WAA3B,EAAwCpW,QAAQ,CAACC,IAAT,CAAcoW,YAAtD,EAAoE,MAApE,EAA4E/B,KAA5E,CAAhB;AACAkB,WAAK,CAACK,MAAN,CAAazP,WAAb,CAAyB8P,OAAO,CAACI,OAAjC;AACA,YAAMC,EAAE,GAAGR,aAAa,CAACpR,CAAd,GAAkBoR,aAAa,CAACS,KAA3C;AACA,YAAMC,EAAE,GAAGV,aAAa,CAACT,CAAd,GAAkBS,aAAa,CAACW,MAAd,GAAqB,CAAlD;AACA,YAAMC,EAAE,GAAGV,WAAW,CAACtR,CAAvB;AACA,YAAMiS,EAAE,GAAGX,WAAW,CAACX,CAAZ,GAAgBW,WAAW,CAACS,MAAZ,GAAmB,CAA9C;AACAR,aAAO,CAACW,OAAR,CAAgBN,EAAhB,EAAoBE,EAApB,EAAwBE,EAAxB,EAA4BC,EAA5B;AAEA,YAAME,UAAU,GAAG;AACfC,cAAM,EAAEtB,IADO;AAEfP,aAAK,EAAER,IAAI,CAACvC,MAAL,CAAY,CAAZ,CAFQ;AAGf6E,WAAG,EAAEd,OAHU;AAIfe,aAAK,EAAE;AAAEtS,WAAC,EAAE4R,EAAL;AAASjB,WAAC,EAAEmB;AAAZ,SAJQ;AAKfS,WAAG,EAAE;AAAEvS,WAAC,EAAEgS,EAAL;AAASrB,WAAC,EAAEsB;AAAZ;AALU,OAAnB;AAOAlC,UAAI,CAACvC,MAAL,CAAY,CAAZ,EAAe6C,KAAf,CAAqBnD,IAArB,CAA0BiF,UAA1B;AACArB,UAAI,CAACT,KAAL,CAAWnD,IAAX,CAAgBiF,UAAhB;AACH;;AAEDvW,UAAM,CAACuU,CAAP,CAAStU,GAAT,CAAa,CAACuW,MAAD,EAASI,OAAT,KAAqB;AAC9B5B,eAAS,CAACwB,MAAD,EAASvB,KAAT,EAAgBd,IAAI,CAACtC,OAAL,CAAa+E,OAAb,CAAhB,CAAT;AACH,KAFD;AAGH,GAtCD;AAuCH,CAxCD;;AA0CA,MAAMC,WAAW,GAAG5C,aAAa,IAAI;AACjC;AACA,QAAMC,QAAQ,GAAGD,aAAa,CAAChL,MAAd,CAAqBkL,IAAI,IAAIA,IAAI,CAAChU,KAAL,KAAe,UAA5C,CAAjB;AAEA,MAAIsR,MAAM,GAAG,EAAb,CAJiC,CAKjC;;AACAyC,UAAQ,CAACjU,GAAT,CAAamU,OAAO,IAAI;AAEpB,UAAMC,QAAQ,GAAG,CAACyC,CAAD,EAAIvU,CAAJ,KAAU;AACvB,YAAMwU,KAAK,GAAGD,CAAC,CAAC9E,KAAF,GAAU8E,CAAC,CAAC9E,KAAF,EAAV,GAAsB,EAApC;AACA,UAAIgF,OAAO,GAAG,EAAd;AACA,UAAIC,OAAO,GAAGH,CAAC,CAAChF,MAAF,GAAW,IAAX,GAAkB,EAAhC;AAEAgF,OAAC,CAACjF,OAAF,CAAU5R,GAAV,CAAc,CAACuU,GAAD,EAAM0C,IAAN,KAAe;AACzB,YAAIpD,IAAI,GAAGiD,KAAK,CAACG,IAAD,CAAL,IAAeJ,CAAC,CAACnW,IAA5B;AACA,YAAIwW,OAAO,GAAG,EAAd;;AACA,YAAI3C,GAAG,CAACC,KAAR,EAAe;AACXD,aAAG,CAACC,KAAJ,CAAUxU,GAAV,CAAcyU,IAAI,IAAI;AAClByC,mBAAO,IAAI9C,QAAQ,CAACK,IAAI,CAACC,KAAL,CAAWC,UAAZ,EAAwBkC,CAAC,CAAChF,MAAF,GAAWvP,CAAC,GAAG,CAAf,GAAmBA,CAA3C,CAAnB;AACH,WAFD;AAGA4U,iBAAO,GAAGA,OAAO,CAACjZ,KAAR,CAAc,IAAd,EAAoB+B,GAApB,CAAwByU,IAAI,IAAKuC,OAAO,GAAGvC,IAA3C,EAAkDzL,MAAlD,CAAyDyL,IAAI,IAAIA,IAAI,CAAC0C,IAAL,OAAgB,EAAjF,EAAqFC,IAArF,CAA0F,IAA1F,IAAkG,IAA5G;AACH;;AACD,YAAIvD,IAAI,CAACwD,QAAL,CAAc,YAAd,CAAJ,EAAiC;AAC7BxD,cAAI,GAAGA,IAAI,CAACjX,OAAL,CAAa,YAAb,EAA2Bsa,OAA3B,CAAP;AACH,SAFD,MAEO;AACHrD,cAAI,IAAIqD,OAAR;AACH;;AACDH,eAAO,IAAIlD,IAAX;AACH,OAfD;AAiBA,aAAOkD,OAAP;AACH,KAvBD;;AAyBA,UAAMlD,IAAI,GAAGO,QAAQ,CAACD,OAAD,EAAU,CAAV,CAArB;AACA3C,UAAM,IAAIqC,IAAI,GAAG,MAAjB;AACH,GA7BD;AA+BA,SAAOrC,MAAP;AACH,CAtCD,C,CAwCA;;;AACA,MAAM8F,GAAG,GAAG;AACRC,kBAAgB,EAAE,CAACC,WAAD,EAAc1R,IAAd,KAAuB;AACrC0R,eAAW,CAACC,SAAZ,GAAwB,IAAxB;;AACAD,eAAW,CAACE,WAAZ,GAA0BC,EAAE,IAAI;AAC5B7X,8DAAO,CAACgG,IAAD,CAAP,CAAc9F,GAAd,CAAkBK,GAAG,IAAI;AACrBsX,UAAE,CAACC,YAAH,CAAgBC,OAAhB,CAAwBxX,GAAxB,EAA6ByF,IAAI,CAACzF,GAAD,CAAjC;AACH,OAFD;AAGH,KAJD;AAKH,GARO;AAQLyX,kBAAgB,EAAE,CAACN,WAAD,EAAchZ,EAAd,KAAqB;AACtCgZ,eAAW,CAACO,UAAZ,GAAyBJ,EAAE,IAAI;AAC3BA,QAAE,CAACK,cAAH;AACH,KAFD;;AAGAR,eAAW,CAACS,MAAZ,GAAqBzZ,EAArB;AACH,GAbO,CAgBZ;;AAhBY,CAAZ;;AAiBA,MAAMmX,QAAN,CAAe;AACXtY,aAAW,CAAC2Y,KAAD,EAAQE,MAAR,EAAgBgC,IAAhB,EAAsBpE,KAAtB,EAA6B;AACpC,SAAKgC,OAAL,GAAetW,QAAQ,CAAC2Y,eAAT,CAAyB,4BAAzB,EAAuD,KAAvD,CAAf;AACA,SAAKrC,OAAL,CAAasC,YAAb,CAA0B,OAA1B,EAAmC,gDAAnC;AACA,SAAKtC,OAAL,CAAasC,YAAb,CAA0B,OAA1B,EAAmCpC,KAAnC;AACA,SAAKF,OAAL,CAAasC,YAAb,CAA0B,QAA1B,EAAoClC,MAApC;AACA,SAAKJ,OAAL,CAAauC,cAAb,CAA4B,+BAA5B,EAA6D,aAA7D,EAA4E,8BAA5E;AAEA,SAAK5D,IAAL,GAAYjV,QAAQ,CAAC2Y,eAAT,CAAyB,4BAAzB,EAAuD,MAAvD,CAAZ;AACA,SAAK1D,IAAL,CAAU4D,cAAV,CAAyB,IAAzB,EAA+B,MAA/B,EAAuCH,IAAvC;AACA,SAAKzD,IAAL,CAAU4D,cAAV,CAAyB,IAAzB,EAA+B,QAA/B,EAAyCvE,KAAzC;AACA,SAAKgC,OAAL,CAAalQ,WAAb,CAAyB,KAAK6O,IAA9B;AACH;;AAED4B,SAAO,CAACN,EAAD,EAAKE,EAAL,EAASE,EAAT,EAAaC,EAAb,EAAiBkC,OAAO,GAAG,GAA3B,EAAgC;AACnC,UAAMC,KAAK,GAAG,CAACpC,EAAE,GAACJ,EAAJ,IAAQuC,OAAtB;AACA,UAAME,GAAG,GAACzC,EAAE,GAACwC,KAAb;AACA,UAAME,GAAG,GAACxC,EAAV;AACA,UAAMyC,GAAG,GAACvC,EAAE,GAACoC,KAAb;AACA,UAAMI,GAAG,GAACvC,EAAV;AAEA,UAAM1Z,IAAI,GAAI,KAAIqZ,EAAG,IAAGE,EAAG,MAAKuC,GAAI,IAAGC,GAAI,IAAGC,GAAI,IAAGC,GAAI,IAAGxC,EAAG,IAAGC,EAAG,EAArE;AACA,SAAK3B,IAAL,CAAU4D,cAAV,CAAyB,IAAzB,EAA+B,GAA/B,EAAoC3b,IAApC;AACH;;AAvBU,C,CA0Bf;;;AACA,MAAMkc,IAAN,CAAW;AACPvb,aAAW,CAACgF,IAAD,EAAO;AACd,SAAK3B,IAAL,GAAY2B,IAAI,CAAC3B,IAAjB;AACA,SAAKR,KAAL,GAAamC,IAAI,CAACnC,KAAlB;AACA,SAAKH,MAAL,GAAcsC,IAAI,CAACtC,MAAL,CAAYC,GAAZ,CAAgBD,MAAM,IAAK8B,MAAM,CAACgX,MAAP,CAAc,EAAd,EAAkB9Y,MAAlB,CAA3B,CAAd;AACA,SAAK4R,MAAL,GAActP,IAAI,CAACsP,MAAL,CAAY3R,GAAZ,CAAgB0U,KAAK,IAAI,CAAE,CAA3B,CAAd;AACA,SAAK9C,OAAL,GAAevP,IAAI,CAACuP,OAAL,CAAa5R,GAAb,CAAiBuW,MAAM,IAAI,CAAE,CAA7B,CAAf;AACA,SAAKxE,KAAL,GAAa1P,IAAI,CAAC0P,KAAlB;AACA,SAAKpV,QAAL,GAAgB0F,IAAI,CAAC1F,QAArB;AACA,SAAKmc,MAAL,GAAczW,IAAI,CAACyW,MAAnB;AACA,SAAKjH,MAAL,GAAcxP,IAAI,CAACwP,MAAnB;AACH;;AAXM,C,CAcX;;;AACA,MAAMuD,MAAN,SAAqBwD,IAArB,CAA0B;AACtBvb,aAAW,CAACgY,MAAD,EAAShT,IAAT,EAAewS,QAAf,EAAyB;AAChC,UAAMxS,IAAN;AACA,SAAKgT,MAAL,GAAcA,MAAd;AACA,SAAKR,QAAL,GAAgBA,QAAhB;AACA,SAAKL,KAAL,GAAa,EAAb;AACA,SAAKuE,QAAL,GAAgB,EAAhB;AACA,SAAKhH,KAAL,GAAa1P,IAAI,CAAC0P,KAAlB;AACA,SAAKpV,QAAL,GAAgB0F,IAAI,CAAC1F,QAArB;AACA,SAAKmc,MAAL,GAAczW,IAAI,CAACyW,MAAnB;AACA,SAAKjH,MAAL,GAAcxP,IAAI,CAACwP,MAAnB;AACH;;AAEDmH,qBAAmB,CAACrH,MAAD,EAASC,OAAT,EAAkB;AACjCD,UAAM,CAAC3R,GAAP,CAAW0U,KAAK,IAAI;AAChB,YAAMuE,IAAI,GAAGvE,KAAK,CAACc,qBAAN,EAAb;AACAd,WAAK,CAACF,KAAN,CAAYxU,GAAZ,CAAgByU,IAAI,IAAI;AACpBA,YAAI,CAACiC,GAAL,CAASvS,CAAT,GAAa8U,IAAI,CAAC9U,CAAlB;AACAsQ,YAAI,CAACiC,GAAL,CAAS5B,CAAT,GAAamE,IAAI,CAACnE,CAAL,GAASmE,IAAI,CAAC/C,MAAL,GAAY,CAAlC;AACAzB,YAAI,CAAC+B,GAAL,CAASH,OAAT,CAAiB5B,IAAI,CAACgC,KAAL,CAAWtS,CAA5B,EAA+BsQ,IAAI,CAACgC,KAAL,CAAW3B,CAA1C,EAA6CL,IAAI,CAACiC,GAAL,CAASvS,CAAtD,EAAyDsQ,IAAI,CAACiC,GAAL,CAAS5B,CAAlE;AACH,OAJD;AAKH,KAPD;AAQAlD,WAAO,CAAC5R,GAAR,CAAYuW,MAAM,IAAI;AAClB,YAAM0C,IAAI,GAAG1C,MAAM,CAACf,qBAAP,EAAb;AACAe,YAAM,CAAC/B,KAAP,CAAaxU,GAAb,CAAiByU,IAAI,IAAI;AACrBA,YAAI,CAACgC,KAAL,CAAWtS,CAAX,GAAe8U,IAAI,CAAC9U,CAAL,GAAS8U,IAAI,CAACjD,KAA7B;AACAvB,YAAI,CAACgC,KAAL,CAAW3B,CAAX,GAAemE,IAAI,CAACnE,CAAL,GAASmE,IAAI,CAAC/C,MAAL,GAAY,CAApC;AACAzB,YAAI,CAAC+B,GAAL,CAASH,OAAT,CAAiB5B,IAAI,CAACgC,KAAL,CAAWtS,CAA5B,EAA+BsQ,IAAI,CAACgC,KAAL,CAAW3B,CAA1C,EAA6CL,IAAI,CAACiC,GAAL,CAASvS,CAAtD,EAAyDsQ,IAAI,CAACiC,GAAL,CAAS5B,CAAlE;AACH,OAJD;AAKH,KAPD;AAQH;;AAEDoE,iBAAe,CAACvB,EAAD,EAAK;AAChB,QAAI,CAAC,KAAKtC,MAAL,CAAY8D,OAAjB,EAA0B;AAC1B,UAAMC,MAAM,GAAGzB,EAAE,CAAC0B,OAAH,GAAa,KAAKvD,OAAL,CAAaN,qBAAb,GAAqC8D,IAAjE;AACA,UAAMC,MAAM,GAAG5B,EAAE,CAAC6B,OAAH,GAAa,KAAK1D,OAAL,CAAaN,qBAAb,GAAqCiE,GAAjE;;AACA,UAAMC,WAAW,GAAG/B,EAAE,IAAI;AACtB,YAAMgC,IAAI,GAAGhC,EAAE,CAAC7C,CAAH,GAAOyE,MAApB;AACA,YAAMK,IAAI,GAAGjC,EAAE,CAACxT,CAAH,GAAOiV,MAApB;AACA,WAAKvE,QAAL,CAAcC,CAAd,GAAkB6E,IAAI,GAAGA,IAAI,GAAG,KAAKtE,MAAL,CAAYwE,QAA5C;AACA,WAAKhF,QAAL,CAAc1Q,CAAd,GAAkByV,IAAI,GAAGA,IAAI,GAAG,KAAKvE,MAAL,CAAYwE,QAA5C;AACA,WAAK/D,OAAL,CAAajQ,KAAb,CAAmB4T,GAAnB,GAA0B,GAAE,KAAK5E,QAAL,CAAcC,CAAE,IAA5C;AACA,WAAKgB,OAAL,CAAajQ,KAAb,CAAmByT,IAAnB,GAA2B,GAAE,KAAKzE,QAAL,CAAc1Q,CAAE,IAA7C;AACA,WAAK6U,mBAAL,CAAyB,KAAKrH,MAA9B,EAAsC,KAAKC,OAA3C;AACH,KARD;;AASA,UAAMkI,SAAS,GAAGnC,EAAE,IAAI;AACpBnY,cAAQ,CAACua,mBAAT,CAA6B,WAA7B,EAA0CL,WAA1C;AACAla,cAAQ,CAACua,mBAAT,CAA6B,SAA7B,EAAwCD,SAAxC;AACH,KAHD;;AAKAta,YAAQ,CAACwa,gBAAT,CAA0B,WAA1B,EAAuCN,WAAvC;AACAla,YAAQ,CAACwa,gBAAT,CAA0B,SAA1B,EAAqCF,SAArC;AACH;;AAEDG,qBAAmB,CAACtC,EAAD,EAAK;AACpB,QAAI,CAAC,KAAKtC,MAAL,CAAY8D,OAAjB,EAA0B;AAC1B,QAAI,KAAKpZ,MAAL,CAAYnB,MAAhB,EACIsb,aAAa,CAAC,KAAKxZ,IAAN,EAAY,KAAKX,MAAjB,EAAyB,MAAM;AACxC,UAAI,KAAK+Y,MAAT,EAAiB;AACb,aAAKqB,IAAL,CAAUC,SAAV,GAAsB,KAAKtB,MAAL,EAAtB;AACH,OAFD,MAEO;AACH,aAAKqB,IAAL,CAAUE,WAAV,GAAwB,KAAK1d,QAAL,EAAxB;AACH;AACJ,KANY,CAAb;AAOP;;AAED2d,uBAAqB,CAAC3C,EAAD,EAAK;AACtB,QAAI,CAAC,KAAKtC,MAAL,CAAY8D,OAAjB,EAA0B;AAC1B,SAAKxH,MAAL,CAAY3R,GAAZ,CAAgB0U,KAAK,IAAI;AACrBA,WAAK,CAACF,KAAN,CAAYxU,GAAZ,CAAgByU,IAAI,IAAI;AACpBA,YAAI,CAAC8B,MAAL,CAAY/B,KAAZ,GAAoB,EAApB;AACAC,YAAI,CAAC+B,GAAL,CAASV,OAAT,CAAiByE,UAAjB,CAA4BC,WAA5B,CAAwC/F,IAAI,CAAC+B,GAAL,CAASV,OAAjD;AACH,OAHD;AAIApB,WAAK,CAACF,KAAN,GAAc,EAAd;AACH,KAND;AAOA,SAAK5C,OAAL,CAAa5R,GAAb,CAAiBuW,MAAM,IAAI;AACvBA,YAAM,CAAC/B,KAAP,CAAaxU,GAAb,CAAiByU,IAAI,IAAI;AACrB,cAAMjE,KAAK,GAAGiE,IAAI,CAACC,KAAL,CAAWF,KAAX,CAAiBiG,OAAjB,CAAyBhG,IAAzB,CAAd;AACAA,YAAI,CAACC,KAAL,CAAWF,KAAX,CAAiBkG,MAAjB,CAAwBlK,KAAxB,EAA+B,CAA/B;AACAiE,YAAI,CAAC+B,GAAL,CAASV,OAAT,CAAiByE,UAAjB,CAA4BC,WAA5B,CAAwC/F,IAAI,CAAC+B,GAAL,CAASV,OAAjD;AACH,OAJD;AAKAS,YAAM,CAAC/B,KAAP,GAAe,EAAf;AACH,KAPD;AAQA,SAAKsB,OAAL,CAAayE,UAAb,CAAwBC,WAAxB,CAAoC,KAAK1E,OAAzC;AACA,QAAI,KAAK6E,OAAT,EAAkB,KAAKA,OAAL;AAClBhD,MAAE,CAACK,cAAH;AACAL,MAAE,CAACiD,eAAH;AACA,WAAO,KAAP;AACH;;AAED9c,QAAM,GAAG;AACL,SAAKgY,OAAL,GAAetW,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAf;AACA,SAAKmQ,OAAL,CAAanB,UAAb,GAA0B,IAA1B;AACA,SAAKmB,OAAL,CAAa+E,SAAb,GAA0B,yBAAwB,KAAK3a,KAAM,EAA7D;AAEA,SAAKia,IAAL,GAAY3a,QAAQ,CAACmG,aAAT,CAAuB,MAAvB,CAAZ;;AACA,QAAI,KAAKmT,MAAT,EAAiB;AACb,WAAKqB,IAAL,CAAUC,SAAV,GAAsB,KAAKtB,MAAL,EAAtB;AACH,KAFD,MAEO;AACH,WAAKqB,IAAL,CAAUE,WAAV,GAAwB,KAAK1d,QAAL,EAAxB;AACH;;AAED,SAAKmZ,OAAL,CAAalQ,WAAb,CAAyB,KAAKuU,IAA9B;AAEA,SAAKrE,OAAL,CAAajQ,KAAb,CAAmB4T,GAAnB,GAA0B,GAAE,KAAK5E,QAAL,CAAcC,CAAE,IAA5C;AACA,SAAKgB,OAAL,CAAajQ,KAAb,CAAmByT,IAAnB,GAA2B,GAAE,KAAKzE,QAAL,CAAc1Q,CAAE,IAA7C;AAEA,UAAMwN,MAAM,GAAGnS,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAf;AACAgM,UAAM,CAACkJ,SAAP,GAAmB,aAAnB;AACA,SAAK/E,OAAL,CAAalQ,WAAb,CAAyB+L,MAAzB;AAEA,SAAKA,MAAL,CAAY3R,GAAZ,CAAgB,CAACM,GAAD,EAAMkQ,KAAN,KAAgB;AAC5B,YAAMkE,KAAK,GAAG,KAAK/C,MAAL,CAAYnB,KAAZ,IAAqBhR,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAnC;AACA+O,WAAK,CAACmG,SAAN,GAAkB,YAAlB;AACAnG,WAAK,CAACC,UAAN,GAAmB,IAAnB;AACAD,WAAK,CAACF,KAAN,GAAc,EAAd;;AACAE,WAAK,CAACoG,WAAN,GAAoBnD,EAAE,IAAI;AACtBA,UAAE,CAACK,cAAH;AACAL,UAAE,CAACiD,eAAH;AACH,OAHD;;AAIAjJ,YAAM,CAAC/L,WAAP,CAAmB8O,KAAnB;AACH,KAVD;AAYA,UAAM9C,OAAO,GAAGpS,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAhB;AACAiM,WAAO,CAACiJ,SAAR,GAAoB,cAApB;AACA,SAAK/E,OAAL,CAAalQ,WAAb,CAAyBgM,OAAzB;AAEA,SAAKA,OAAL,CAAa5R,GAAb,CAAiB,CAACM,GAAD,EAAMkQ,KAAN,KAAgB;AAC7B,YAAM+F,MAAM,GAAG,KAAK3E,OAAL,CAAapB,KAAb,IAAsBhR,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAArC;AACA4Q,YAAM,CAACsE,SAAP,GAAmB,aAAnB;AACAtE,YAAM,CAAC5B,UAAP,GAAoB,IAApB;AACA4B,YAAM,CAAC/B,KAAP,GAAe,EAAf;;AACA+B,YAAM,CAACwE,aAAP,GAAuBpD,EAAE,IAAI;AACzBpB,cAAM,CAAC/B,KAAP,CAAaxU,GAAb,CAAiByU,IAAI,IAAI;AACrBA,cAAI,CAAC+B,GAAL,CAASV,OAAT,CAAiByE,UAAjB,CAA4BC,WAA5B,CAAwC/F,IAAI,CAAC+B,GAAL,CAASV,OAAjD;AACH,SAFD;AAGAS,cAAM,CAAC/B,KAAP,GAAe,EAAf;AACAmD,UAAE,CAACiD,eAAH;AACAjD,UAAE,CAACK,cAAH;AACA,eAAO,KAAP;AACH,OARD;;AASAzB,YAAM,CAACuE,WAAP,GAAqBnD,EAAE,IAAI;AACvBA,UAAE,CAACiD,eAAH;AACA,YAAIrE,MAAM,CAAC/B,KAAP,CAAa5V,MAAjB,EAAyB;AACzB,cAAMoc,KAAK,GAAGzE,MAAM,CAACf,qBAAP,EAAd;AACA,cAAMO,EAAE,GAAGiF,KAAK,CAAC7W,CAAN,GAAU6W,KAAK,CAAChF,KAA3B;AACA,cAAMC,EAAE,GAAG+E,KAAK,CAAClG,CAAN,GAAUkG,KAAK,CAAC9E,MAAN,GAAa,CAAlC;AAEA,cAAMR,OAAO,GAAG,IAAIC,QAAJ,CAAanW,QAAQ,CAACC,IAAT,CAAcmW,WAA3B,EAAwCpW,QAAQ,CAACC,IAAT,CAAcoW,YAAtD,EAAoE,MAApE,EAA4E/B,KAA5E,CAAhB;AACA,aAAKuB,MAAL,CAAYzP,WAAZ,CAAwB8P,OAAO,CAACI,OAAhC;;AAEA,cAAM4D,WAAW,GAAG/B,EAAE,IAAI;AACtBjC,iBAAO,CAACW,OAAR,CAAgBN,EAAhB,EAAoBE,EAApB,EAAwB0B,EAAE,CAACsD,KAA3B,EAAkCtD,EAAE,CAACuD,KAArC;AACH,SAFD;;AAIA,cAAMpB,SAAS,GAAGnC,EAAE,IAAI;AACpB,gBAAMwD,SAAS,GAAG3b,QAAQ,CAAC4b,gBAAT,CAA0BzD,EAAE,CAAC0B,OAA7B,EAAsC1B,EAAE,CAAC6B,OAAzC,CAAlB;AACA,gBAAM9E,KAAK,GAAGyG,SAAS,GAAGA,SAAS,CAACE,OAAV,CAAkB,aAAlB,CAAH,GAAsC,IAA7D;;AACA,cAAI,CAAC3G,KAAL,EAAY;AACRgB,mBAAO,CAACI,OAAR,CAAgBwF,MAAhB;AACH,WAFD,MAEO;AACH,kBAAMC,SAAS,GAAG7G,KAAK,CAACc,qBAAN,EAAlB;AACA,kBAAMW,EAAE,GAAGoF,SAAS,CAACpX,CAArB;AACA,kBAAMiS,EAAE,GAAGmF,SAAS,CAACzG,CAAV,GAAcyG,SAAS,CAACrF,MAAV,GAAiB,CAA1C;AACAR,mBAAO,CAACW,OAAR,CAAgBN,EAAhB,EAAoBE,EAApB,EAAwBE,EAAxB,EAA4BC,EAA5B;AACA,kBAAME,UAAU,GAAG;AACfC,oBADe;AAEf7B,mBAFe;AAGf8B,iBAAG,EAAEd,OAHU;AAIfe,mBAAK,EAAE;AAAEtS,iBAAC,EAAE4R,EAAL;AAASjB,iBAAC,EAAEmB;AAAZ,eAJQ;AAKfS,iBAAG,EAAE;AAAEvS,iBAAC,EAAEgS,EAAL;AAASrB,iBAAC,EAAEsB;AAAZ;AALU,aAAnB;AAOAG,kBAAM,CAAC/B,KAAP,CAAanD,IAAb,CAAkBiF,UAAlB;AACA5B,iBAAK,CAACF,KAAN,CAAYnD,IAAZ,CAAiBiF,UAAjB;AACH;;AACD9W,kBAAQ,CAACua,mBAAT,CAA6B,WAA7B,EAA0CL,WAA1C;AACAla,kBAAQ,CAACua,mBAAT,CAA6B,SAA7B,EAAwCD,SAAxC;AACH,SAtBD;;AAwBAta,gBAAQ,CAACwa,gBAAT,CAA0B,WAA1B,EAAuCN,WAAvC;AACAla,gBAAQ,CAACwa,gBAAT,CAA0B,SAA1B,EAAqCF,SAArC;AACH,OAxCD;;AAyCAlI,aAAO,CAAChM,WAAR,CAAoB2Q,MAApB;AACH,KAxDD;AA0DA,SAAKT,OAAL,CAAa0F,UAAb,GAA0B,KAAKvB,mBAAL,CAAyBwB,IAAzB,CAA8B,IAA9B,CAA1B;AACA,SAAK3F,OAAL,CAAagF,WAAb,GAA2B,KAAK5B,eAAL,CAAqBuC,IAArB,CAA0B,IAA1B,CAA3B;AACA,SAAK3F,OAAL,CAAaiF,aAAb,GAA6B,KAAKT,qBAAL,CAA2BmB,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKpG,MAAL,CAAYzP,WAAZ,CAAwB,KAAKkQ,OAA7B;AACH;;AA7LqB;;AAgM1B,MAAM4F,QAAQ,GAAGpG,GAAG,IAAI;AACpB,QAAMqG,QAAQ,GAAGnc,QAAQ,CAACmG,aAAT,CAAuB,UAAvB,CAAjB;;AAEA,QAAMiW,gBAAgB,GAAGtb,GAAG,IAAI;AAC5B,UAAMiB,QAAQ,GAAGjB,GAAG,IAAIgV,GAAG,CAAC7U,KAAX,GAAmB,UAAnB,GAAgC,EAAjD;AACA,WAAQ,WAAUc,QAAS,IAAGjB,GAAI,WAAlC;AACH,GAHD;;AAKA,UAAQgV,GAAG,CAAC5U,IAAZ;AACI,SAAK,MAAL;AACIib,cAAQ,CAACvB,SAAT,GAAsB,0CAAyC9E,GAAG,CAAC1T,IAAK,oCAAmC0T,GAAG,CAAC1T,IAAK,YAAW0T,GAAG,CAAC7U,KAAM,YAAzI;AACA;;AACJ,SAAK,QAAL;AACIkb,cAAQ,CAACvB,SAAT,GAAsB,0CAAyC9E,GAAG,CAAC1T,IAAK,sCAAqC0T,GAAG,CAAC1T,IAAK,YAAW0T,GAAG,CAAC7U,KAAM,YAA3I;AACA;;AACJ,SAAK,QAAL;AACIkb,cAAQ,CAACvB,SAAT,GAAsB,0CAAyC9E,GAAG,CAAC1T,IAAK,yBAAwB0T,GAAG,CAAC1T,IAAK,KAAI0T,GAAG,CAAC1V,MAAJ,CAAWI,GAAX,CAAeM,GAAG,IAAKsb,gBAAgB,CAACtb,GAAD,CAAvC,CAA+C,iBAA5J;AACA;;AACJ,SAAK,YAAL;AACIqb,cAAQ,CAACvB,SAAT,GAAsB,0CAAyC9E,GAAG,CAAC1T,IAAK;;;sBAG9D0T,GAAG,CAAC1V,MAAJ,CAAWI,GAAX,CAAeM,GAAG,IAAKsb,gBAAgB,CAACtb,GAAD,CAAvC,CAA+C;;uCAE9BgV,GAAG,CAAC1T,IAAK;;;;uBALpC;AAXR;;AAsBA,SAAO+Z,QAAQ,CAACE,OAAT,CAAiBC,SAAjB,CAA2B,IAA3B,CAAP;AACH,CA/BD;;AAiCA,MAAM5B,aAAa,GAAG,CAACxZ,IAAD,EAAOX,MAAP,EAAegc,OAAf,KAA2B;AAC7C,QAAMJ,QAAQ,GAAGnc,QAAQ,CAACmG,aAAT,CAAuB,UAAvB,CAAjB;AACAgW,UAAQ,CAACvB,SAAT,GAAsB;;;;6BAIG1Z,IAAK;;;;;;;;;KAJ9B;AAeAlB,UAAQ,CAACC,IAAT,CAAcmG,WAAd,CAA0B+V,QAAQ,CAACE,OAAT,CAAiBC,SAAjB,CAA2B,IAA3B,CAA1B;AACA,QAAME,SAAS,GAAGxc,QAAQ,CAACC,IAAT,CAAcwc,gBAAd,CAA+B,YAA/B,EAA6C,CAA7C,CAAlB;AACA,QAAMxc,IAAI,GAAGD,QAAQ,CAACC,IAAT,CAAcwc,gBAAd,CAA+B,iBAA/B,EAAkD,CAAlD,CAAb;AACA,QAAMC,QAAQ,GAAG1c,QAAQ,CAAC2c,cAAT,CAAwB,IAAxB,CAAjB;AACA,QAAMC,YAAY,GAAG5c,QAAQ,CAAC2c,cAAT,CAAwB,IAAxB,CAArB;;AACAC,cAAY,CAACC,OAAb,GAAuB,MAAM;AACzBL,aAAS,CAACV,MAAV;AACH,GAFD;;AAGAY,UAAQ,CAACG,OAAT,GAAmB,MAAM;AACrB;AACAtc,UAAM,CAACC,GAAP,CAAWsV,GAAG,IAAI;AACdA,SAAG,CAAC7U,KAAJ,GAAYjB,QAAQ,CAAC8c,KAAT,CAAe,YAAf,EAA6B9b,QAA7B,CAAsC8U,GAAG,CAAC1T,IAA1C,EAAgDnB,KAA5D;AACH,KAFD;AAGAub,aAAS,CAACV,MAAV;AACAS,WAAO;AACV,GAPD;;AAQAhc,QAAM,CAACC,GAAP,CAAWsV,GAAG,IAAI;AACd,UAAMiH,KAAK,GAAGb,QAAQ,CAACpG,GAAD,CAAtB;AACA7V,QAAI,CAACmG,WAAL,CAAiB2W,KAAjB;AACH,GAHD;AAIH,CArCD;;AAuCO,MAAMC,UAAN,CAAiB;AACpBnf,aAAW,CAACyY,OAAD,EAAU7E,KAAV,EAAiBlR,MAAjB,EAAyB;AAChC,SAAKkR,KAAL,GAAa,EAAb;AACA,SAAK+C,aAAL,GAAqB,EAArB;AACA,SAAKrT,MAAL,GAAcZ,MAAM,CAACY,MAArB;AACA,SAAKwY,OAAL,GAAe,CAACpZ,MAAM,CAAC0c,QAAvB;AACA,SAAKC,KAAL,GAAa3c,MAAM,CAAC2c,KAAP,IAAe,IAAf,GAAsB3c,MAAM,CAAC2c,KAA7B,GAAqC,IAAlD;AACA,SAAK7C,QAAL,GAAgB9Z,MAAM,CAAC8Z,QAAP,IAAmB,CAAnC;AAEA,SAAK/D,OAAL,GAAeA,OAAf;AAEA7E,SAAK,CAACjR,GAAN,CAAU2c,UAAU,IAAI;AACpB,YAAMzI,IAAI,GAAG,IAAI0E,IAAJ,CAAS+D,UAAT,CAAb;AACA,WAAK1L,KAAL,CAAWI,IAAX,CAAgB6C,IAAhB;AACH,KAHD;AAIA,SAAKpW,MAAL;AAEA,QAAI,KAAKqb,OAAT,EACA7B,GAAG,CAACQ,gBAAJ,CAAqB,KAAKzC,MAA1B,EAAkCsC,EAAE,IAAI;AACpC,YAAMxC,UAAU,GAAG,KAAKlE,KAAL,CAAWlS,IAAX,CAAgBmV,IAAI,IAAIA,IAAI,CAACxT,IAAL,IAAaiX,EAAE,CAACC,YAAH,CAAgBgF,OAAhB,CAAwB,MAAxB,CAArC,CAAnB;AACA,UAAI1I,IAAI,GAAG,IAAIkB,MAAJ,CAAW,KAAKC,MAAhB,EAAwBF,UAAxB,EAAoC;AAAEhR,SAAC,EAAEwT,EAAE,CAACxT,CAAR;AAAW2Q,SAAC,EAAE6C,EAAE,CAAC7C;AAAjB,OAApC,CAAX;AACAZ,UAAI,CAACpW,MAAL;;AACAoW,UAAI,CAACyG,OAAL,GAAe,MAAM;AACjB,aAAK3G,aAAL,CAAmB0G,MAAnB,CAA2B,KAAK1G,aAAL,CAAmByG,OAAnB,CAA2BvG,IAA3B,CAA3B,EAA6D,CAA7D;AACAA,YAAI,GAAG,IAAP;AACH,OAHD;;AAIA,WAAKF,aAAL,CAAmB3C,IAAnB,CAAwB6C,IAAxB;AACH,KATD;AAUH;;AAED5U,YAAU,CAACS,MAAD,EAAS;AACfgV,aAAS,CAAChV,MAAD,EAAS,IAAT,CAAT;AACH;;AAEDyG,YAAU,GAAG;AACT,WAAOuN,SAAS,CAAC,KAAKC,aAAN,CAAhB;AACH;;AAED6I,kBAAgB,GAAG;AACf,QAAI,KAAK1D,OAAT,EAAkB;AACd,WAAK2D,OAAL,GAAetd,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAf;AACA,WAAKmX,OAAL,CAAajC,SAAb,GAAyB,SAAzB;AACA,WAAK/E,OAAL,CAAalQ,WAAb,CAAyB,KAAKkX,OAA9B;AACH;;AAED,SAAKzH,MAAL,GAAc7V,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAd;AACA,SAAK0P,MAAL,CAAYwF,SAAZ,GAAwB,QAAxB;AACA,SAAKxF,MAAL,CAAY8D,OAAZ,GAAsB,KAAKA,OAA3B;AACA,SAAK9D,MAAL,CAAYwE,QAAZ,GAAuB,KAAKA,QAA5B;AACA,SAAK/D,OAAL,CAAalQ,WAAb,CAAyB,KAAKyP,MAA9B;;AAEA,QAAI,KAAK8D,OAAL,IAAgB,KAAKuD,KAAzB,EAAgC;AAC5B,WAAKA,KAAL,GAAald,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAb;AACA,WAAK+W,KAAL,CAAW7B,SAAX,GAAuB,OAAvB;AAEA,YAAMV,IAAI,GAAG3a,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAb;AACA,WAAK+W,KAAL,CAAW9W,WAAX,CAAuBuU,IAAvB;AAEA,YAAM4C,OAAO,GAAGvd,QAAQ,CAACmG,aAAT,CAAuB,QAAvB,CAAhB;AACAoX,aAAO,CAAC1C,WAAR,GAAsB,MAAtB;;AACA0C,aAAO,CAACV,OAAR,GAAkB,MAAM;AACpB,cAAMtc,MAAM,GAAGid,IAAI,CAACC,SAAL,CAAelJ,SAAS,CAAC,KAAKC,aAAN,CAAxB,CAAf;AACA,cAAM8C,KAAK,GAAGF,WAAW,CAAC,KAAK5C,aAAN,CAAzB;AACA,aAAKrT,MAAL,CAAYZ,MAAZ,EAAoB+W,KAApB;AACH,OAJD;;AAMA,YAAMoG,OAAO,GAAG1d,QAAQ,CAACmG,aAAT,CAAuB,QAAvB,CAAhB;AACAuX,aAAO,CAAC7C,WAAR,GAAsB,MAAtB;;AACA6C,aAAO,CAACb,OAAR,GAAkB,MAAM;AACpB,cAAM3H,KAAK,GAAGyI,MAAM,CAAC,cAAD,CAApB;AACApI,iBAAS,CAACiI,IAAI,CAACI,KAAL,CAAW1I,KAAX,CAAD,EAAoB,IAApB,CAAT;AACH,OAHD;;AAKA,YAAM2I,SAAS,GAAG7d,QAAQ,CAACmG,aAAT,CAAuB,QAAvB,CAAlB;AACA0X,eAAS,CAAChD,WAAV,GAAwB,QAAxB;;AACAgD,eAAS,CAAChB,OAAV,GAAoB,MAAM;AACtB,cAAMiB,QAAQ,GAAG1G,WAAW,CAAC,KAAK5C,aAAN,CAA5B;AACAmG,YAAI,CAACE,WAAL,GAAmBiD,QAAnB;AACH,OAHD;;AAIA,WAAKZ,KAAL,CAAW9W,WAAX,CAAuByX,SAAvB;AACA,WAAKX,KAAL,CAAW9W,WAAX,CAAuBmX,OAAvB;AACA,WAAKL,KAAL,CAAW9W,WAAX,CAAuBsX,OAAvB;AACA,WAAKR,KAAL,CAAW9W,WAAX,CAAuBuU,IAAvB;AACA,WAAKrE,OAAL,CAAalQ,WAAb,CAAyB,KAAK8W,KAA9B;AACH;AAEJ;;AAEDa,mBAAiB,GAAG;AAChB,UAAM1d,MAAM,GAAG,EAAf;AACA,SAAKoR,KAAL,CAAWjR,GAAX,CAAekU,IAAI,IAAI;AACnB,UAAI,CAACrU,MAAM,CAACqU,IAAI,CAAChU,KAAN,CAAX,EAAyB;AACrB,cAAMA,KAAK,GAAGV,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAd;AACAzF,aAAK,CAAC2a,SAAN,GAAkB,OAAlB;AACA3a,aAAK,CAACma,WAAN,GAAoBnG,IAAI,CAAChU,KAAzB;AACA,aAAK4c,OAAL,CAAalX,WAAb,CAAyB1F,KAAzB;AACAL,cAAM,CAACqU,IAAI,CAAChU,KAAN,CAAN,GAAqBA,KAArB;AACH;;AACD,YAAMsX,WAAW,GAAGhY,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAApB;AACA6R,iBAAW,CAACqD,SAAZ,GAAyB,cAAa3G,IAAI,CAAChU,KAAM,EAAjD;AACAsX,iBAAW,CAAC6C,WAAZ,GAA0BnG,IAAI,CAACxT,IAA/B;AACAb,YAAM,CAACqU,IAAI,CAAChU,KAAN,CAAN,CAAmB0F,WAAnB,CAA+B4R,WAA/B;AAEAF,SAAG,CAACC,gBAAJ,CAAqBC,WAArB,EAAkC;AAAE9W,YAAI,EAAEwT,IAAI,CAACxT;AAAb,OAAlC;AACH,KAdD;AAeH;;AAED5C,QAAM,GAAG;AACL,SAAK+e,gBAAL;AACA,QAAI,KAAK1D,OAAT,EAAkB,KAAKoE,iBAAL;AACrB;;AA9GmB,C;;;;;;;;;;;;ACnbxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMzd,OAAO,GAAG0d,MAAM,IAAI;AACtB,QAAMrd,IAAI,GAAG,EAAb;;AACA,OAAK,IAAIE,GAAT,IAAgBmd,MAAhB,EAAwB;AACpB,QAAIA,MAAM,CAACC,cAAP,CAAsBpd,GAAtB,CAAJ,EAAgC;AAC5BF,UAAI,CAACkR,IAAL,CAAUhR,GAAV;AACH;AACJ;;AACD,SAAOF,IAAP;AACH,CARD;;;;;;;;;;;;;;ACbA;AAAA;AAAA,MAAMud,MAAN,CAAa;AACTrgB,aAAW,GAAG;AACV,UAAMgB,MAAM,GAAGmB,QAAQ,CAACmG,aAAT,CAAuB,KAAvB,CAAf;AACAtH,UAAM,CAACwc,SAAP,GAAmB,QAAnB;AACAxc,UAAM,CAAC+b,SAAP,GAAmB,SAAnB;AACA5a,YAAQ,CAACC,IAAT,CAAcmG,WAAd,CAA0BvH,MAA1B;AACA,SAAKA,MAAL,GAAcA,MAAd;AACH;;AAEDwU,MAAI,GAAG;AACH,SAAKxU,MAAL,CAAYsf,SAAZ,CAAsBC,GAAtB,CAA0B,MAA1B;AACH;;AAEDtf,MAAI,GAAG;AACH,SAAKD,MAAL,CAAYsf,SAAZ,CAAsBC,GAAtB,CAA0B,MAA1B;AACAC,cAAU,CAAC,MAAM;AACb,WAAKxf,MAAL,CAAYsf,SAAZ,CAAsBrC,MAAtB,CAA6B,MAA7B;AACA,WAAKjd,MAAL,CAAYsf,SAAZ,CAAsBrC,MAAtB,CAA6B,MAA7B;AACH,KAHS,EAGP,IAHO,CAAV;AAIH;;AAnBQ;;AAsBN,MAAMjd,MAAM,GAAG,IAAIqf,MAAJ,EAAf,C;;;;;;;;;;;;ACtBP;AAAA;AAAA;AAAA;AAAA;AAoBA;;AAEA,MAAMI,KAAN,CAAY;AACRzgB,aAAW,GAAG;AACV,SAAKI,KAAL,GAAa,EAAb;AACA,SAAKuB,MAAL,GAAc,EAAd;;AAEA,SAAK+e,OAAL,GAAgBvgB,IAAD,IAAU;AACrB,WAAKC,KAAL,CAAW4T,IAAX,CAAgB7T,IAAhB;AACA,WAAKwgB,QAAL,CAAcxgB,IAAd;AACH,KAHD;;AAKA,SAAKwgB,QAAL,GAAiB/e,KAAD,IAAW;AACvB,WAAKD,MAAL,CAAYqS,IAAZ,CAAiBpS,KAAjB;;AACA,UAAIA,KAAK,CAAC+D,QAAV,EAAoB;AAChB/D,aAAK,CAAC+D,QAAN,CAAeib,OAAf,CAAuBhb,KAAK,IAAI,KAAKjE,MAAL,CAAYqS,IAAZ,CAAiBpO,KAAjB,CAAhC;AACH;AACJ,KALD;AAMH;;AAhBO;;AAoBZ,MAAMxF,KAAK,GAAG,CACV;AAAEsF,OAAK,EAAE,SAAT;AAAoB9F,MAAI,EAAE,SAA1B;AAAqCoG,WAAS,EAAE6a,kDAAhD;AAA6Dlb,UAAQ,EAAE;AAAvE,CADU,EAEV;AAAED,OAAK,EAAE,aAAT;AAAwB9F,MAAI,EAAE,aAA9B;AAA6CoG,WAAS,EAAE8a,sDAAxD;AAAyEnb,UAAQ,EAAE;AAAnF,CAFU,EAGV;AAAED,OAAK,EAAE,YAAT;AAAuB9F,MAAI,EAAE,OAA7B;AAAsCoG,WAAS,EAAE+a,sDAAjD;AAAkE7a,OAAK,EAAE,MAAzE;AAAiFP,UAAQ,EAAE;AAA3F,CAHU,EAIV;AAAED,OAAK,EAAE,QAAT;AAAmB9F,MAAI,EAAE,QAAzB;AAAmCoG,WAAS,EAAEgb,iDAA9C;AAA0Drb,UAAQ,EAAE,CAChE;AAAED,SAAK,EAAE,UAAT;AAAqB9F,QAAI,EAAE,iBAA3B;AAA8CoG,aAAS,EAAEib,yDAAkBA;AAA3E,GADgE,EAEhE;AAAEvb,SAAK,EAAE,UAAT;AAAqB9F,QAAI,EAAE,iBAA3B;AAA8CoG,aAAS,EAAEkb,yDAAkBA;AAA3E,GAFgE,EAGhE;AAAExb,SAAK,EAAE,OAAT;AAAkB9F,QAAI,EAAE,cAAxB;AAAwCoG,aAAS,EAAEmb,gDAASA;AAA5D,GAHgE,EAIhE;AAAEzb,SAAK,EAAE,MAAT;AAAiB9F,QAAI,EAAE,aAAvB;AAAsC6F,UAAM,EAAE0D,2DAAUA;AAAxD,GAJgE,EAKhE;AAAEzD,SAAK,EAAE,MAAT;AAAiB9F,QAAI,EAAE,aAAvB;AAAsCoG,aAAS,EAAEob,+CAAQA;AAAzD,GALgE,EAMhE;AAAE1b,SAAK,EAAE,QAAT;AAAmB9F,QAAI,EAAE,eAAzB;AAA0CoG,aAAS,EAAEqb,iDAAUA;AAA/D,GANgE,EAOhE;AAAE3b,SAAK,EAAE,eAAT;AAA0B9F,QAAI,EAAE,gBAAhC;AAAkDoG,aAAS,EAAEsb,uDAAgBA;AAA7E,GAPgE;AAApE,CAJU,EAaV;AAAE5b,OAAK,EAAE,OAAT;AAAkB9F,MAAI,EAAE,OAAxB;AAAiCoG,WAAS,EAAEub,gDAA5C;AAAuD5b,UAAQ,EAAE,CAC7D;AAAED,SAAK,EAAE,UAAT;AAAqB9F,QAAI,EAAE,gBAA3B;AAA6CoG,aAAS,EAAEwb,mDAAYA;AAApE,GAD6D,EAE7D;AAAE9b,SAAK,EAAE,QAAT;AAAmB9F,QAAI,EAAE,cAAzB;AAAyCoG,aAAS,EAAEyb,iDAAUA;AAA9D,GAF6D,EAG7D;AAAE/b,SAAK,EAAE,YAAT;AAAuB9F,QAAI,EAAE,UAA7B;AAAyCoG,aAAS,EAAE0b,6CAAMA;AAA1D,GAH6D;AAAjE,CAbU,CAAd;AAoBA,MAAM/f,MAAM,GAAG,CACX;AAAE+D,OAAK,EAAE,iBAAT;AAA4B9F,MAAI,EAAC,kBAAjC;AAAqDoG,WAAS,EAAE2b,yDAAkBA;AAAlF,CADW,EAEX;AAAEjc,OAAK,EAAE,aAAT;AAAwB9F,MAAI,EAAC,cAA7B;AAA6CoG,WAAS,EAAE4b,sDAAeA;AAAvE,CAFW,EAGX;AAAElc,OAAK,EAAE,eAAT;AAA0B9F,MAAI,EAAC,YAA/B;AAA6CoG,WAAS,EAAE6b,+CAAQA;AAAhE,CAHW,CAAf;AAMA,MAAM1hB,IAAI,GAAG,IAAIsgB,KAAJ,EAAb;AACA9e,MAAM,CAACif,OAAP,CAAezgB,IAAI,CAACwgB,QAApB;AACAvgB,KAAK,CAACwgB,OAAN,CAAczgB,IAAI,CAACugB,OAAnB;;;;;;;;;;;;;ACtEA;AAAA;AAAO,MAAM9M,KAAK,GAAG,CACjB;AACA;AACI/Q,OAAK,EAAE,UADX;AAEIQ,MAAI,EAAE,OAFV;AAGIiR,QAAM,EAAE,EAHZ;AAIIC,SAAO,EAAE,CAAC,CAAD,CAJb;AAKI7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,OADD;AAELlB,QAAI,EAAE,QAFD;AAGLd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB;AAHH,GAAD,CALZ;AAUIiS,QAAM,EAAE,IAVZ;AAWIlV,UAAQ,EAAE,YAAY;AAAE,WAAQ,SAAQ,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAArC;AAAyC,GAXrE;AAYIsR,OAAK,EAAE,YAAY;AAAE,WAAO,CAAE,kBAAiB,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,0BAAxC,CAAP;AAA4E;AAZrG,CAFiB,EAed;AACCP,OAAK,EAAE,UADR;AAECQ,MAAI,EAAE,OAFP;AAGCiR,QAAM,EAAE,EAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,MADD;AAELlB,QAAI,EAAE;AAFD,GAAD,CALT;AASCmR,QAAM,EAAE,IATT;AAUClV,UAAQ,EAAE,YAAY;AAAE,WAAQ,SAAQ,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAArC;AAAyC,GAVlE;AAWCsR,OAAK,EAAE,YAAY;AAAE,WAAO,CAAE,MAAK,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,0BAA5B,CAAP;AAAgE;AAXtF,CAfc,EA2Bd;AACCP,OAAK,EAAE,UADR;AAECQ,MAAI,EAAE,OAFP;AAGCiR,QAAM,EAAE,EAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,EALT;AAMC8R,QAAM,EAAE,IANT;AAOClV,UAAQ,EAAE,MAAM;AAAE,WAAO,OAAP;AAAiB,GAPpC;AAQCoV,OAAK,EAAE,MAAM;AAAE,WAAO,CAAC,uCAAD,CAAP;AAAmD;AARnE,CA3Bc,EAoCd;AACC7R,OAAK,EAAE,UADR;AAECQ,MAAI,EAAE,aAFP;AAGCiR,QAAM,EAAE,EAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,EALT;AAMC8R,QAAM,EAAE,IANT;AAOClV,UAAQ,EAAE,YAAW;AACjB,WAAQ,SAAR;AACH,GATF;AAUCoV,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,wCAAF,CAAP;AACH;AAZF,CApCc,EAiDd;AACC7R,OAAK,EAAE,UADR;AAECQ,MAAI,EAAE,QAFP;AAGCiR,QAAM,EAAE,EAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,EALT;AAMC8R,QAAM,EAAE,IANT;AAOClV,UAAQ,EAAE,YAAW;AACjB,WAAQ,SAAR;AACH,GATF;AAUCoV,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,yCAAF,CAAP;AACH;AAZF,CAjDc,EA+DjB;AACA;AACI7R,OAAK,EAAE,OADX;AAEIQ,MAAI,EAAE,SAFV;AAGIiR,QAAM,EAAE,CAAC,CAAD,CAHZ;AAIIC,SAAO,EAAE,CAAC,CAAD,EAAI,CAAJ,CAJb;AAKI7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,UADD;AAELlB,QAAI,EAAE,YAFD;AAGLd,UAAM,EAAE,CAAC,YAAD;AAHH,GAAD,EAIN;AACEgC,QAAI,EAAE,UADR;AAEElB,QAAI,EAAE,QAFR;AAGEd,UAAM,EAAE,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,IAAhB,EAAsB,IAAtB,EAA4B,IAA5B;AAHV,GAJM,EAQN;AACEgC,QAAI,EAAE,OADR;AAEElB,QAAI,EAAE;AAFR,GARM,CALZ;AAiBImR,QAAM,EAAE,IAjBZ;AAkBIlV,UAAQ,EAAE,YAAW;AACjB,WAAQ,MAAK,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAhF;AACH,GApBL;AAqBIsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,OAAM,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,cAA5E,EAA4F,yBAA5F,CAAP;AACH;AAvBL,CAhEiB,EAwFd;AACCP,OAAK,EAAE,OADR;AAECQ,MAAI,EAAE,OAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,OADD;AAELlB,QAAI,EAAE;AAFD,GAAD,CALT;AASC/D,UAAQ,EAAE,YAAW;AACjB,WAAQ,UAAS,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAtC;AACH,GAXF;AAYCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,SAAQ,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAA/B,CAAP;AACH;AAdF,CAxFc,EAwGjB;AACA;AACIP,OAAK,EAAE,SADX;AAEIQ,MAAI,EAAE,MAFV;AAGIiR,QAAM,EAAE,CAAC,CAAD,CAHZ;AAIIC,SAAO,EAAE,CAAC,CAAD,CAJb;AAKI7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,MADD;AAELlB,QAAI,EAAE,QAFD;AAGLd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,EAA/C,EAAmD,EAAnD,EAAuD,EAAvD;AAHH,GAAD,EAIL;AACCgC,QAAI,EAAE,OADP;AAEClB,QAAI,EAAE,QAFP;AAGCd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ;AAHT,GAJK,CALZ;AAcIjD,UAAQ,EAAE,YAAW;AACjB,WAAQ,QAAO,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,KAAI,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA7D;AACH,GAhBL;AAiBIsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,QAAO,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAtD,CAAP;AACH;AAnBL,CAzGiB,EA6Hd;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,OAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,MADD;AAELlB,QAAI,EAAE,QAFD;AAGLd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,EAA/C,EAAmD,EAAnD,EAAuD,EAAvD,CAHH;AAILa,SAAK,EAAE;AAJF,GAAD,EAKL;AACCmB,QAAI,EAAE,OADP;AAEClB,QAAI,EAAE,QAFP;AAGCd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,CAHT;AAICa,SAAK,EAAE;AAJR,GALK,EAUL;AACCmB,QAAI,EAAE,MADP;AAEClB,QAAI,EAAE,QAFP;AAGCd,UAAM,EAAE,CAAC,GAAD,EAAM,IAAN,CAHT;AAICa,SAAK,EAAE;AAJR,GAVK,EAeL;AACCmB,QAAI,EAAE,UADP;AAEClB,QAAI,EAAE,QAFP;AAGCD,SAAK,EAAE;AAHR,GAfK,CALT;AAyBC9D,UAAQ,EAAE,YAAW;AACjB,WAAQ,SAAQ,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,QAAO,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,GAAE,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAhH;AACH,GA3BF;AA4BCsR,OAAK,EAAE,YAAW;AACd,UAAMvT,EAAE,GAAG,KAAKuB,MAAL,CAAY,CAAZ,EAAeU,KAAf,KAAyB,GAAzB,GAA+B,WAA/B,GAA6C,OAAxD;AACA,WAAO,CAAE,GAAEjC,EAAG,IAAG,KAAKuB,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAA/E,CAAP;AACH;AA/BF,CA7Hc,EA6Jd;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,KAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,MADD;AAELlB,QAAI,EAAE,QAFD;AAGLd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,EAA/C,EAAmD,EAAnD,CAHH;AAILa,SAAK,EAAE;AAJF,GAAD,EAKL;AACCmB,QAAI,EAAE,OADP;AAEClB,QAAI,EAAE,QAFP;AAGCD,SAAK,EAAE;AAHR,GALK,CALT;AAeC9D,UAAQ,EAAE,YAAW;AACjB,WAAQ,WAAU,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,MAAK,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAjE;AACH,GAjBF;AAkBCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,OAAM,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAArD,CAAP;AACH;AApBF,CA7Jc,EAkLd;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,OAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,MADD;AAELlB,QAAI,EAAE,QAFD;AAGLd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,EAA/B,EAAmC,EAAnC,EAAuC,EAAvC,EAA2C,EAA3C,EAA+C,EAA/C,EAAmD,EAAnD,CAHH;AAILa,SAAK,EAAE;AAJF,GAAD,EAKL;AACCmB,QAAI,EAAE,OADP;AAEClB,QAAI,EAAE,QAFP;AAGCd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,CAHT;AAICa,SAAK,EAAE;AAJR,GALK,EAUL;AACCmB,QAAI,EAAE,UADP;AAEClB,QAAI,EAAE,QAFP;AAGCD,SAAK,EAAE;AAHR,GAVK,CALT;AAoBC9D,UAAQ,EAAE,YAAW;AACjB,WAAQ,aAAY,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,MAAK,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAnE;AACH,GAtBF;AAuBCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,SAAQ,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAA/E,CAAP;AACH;AAzBF,CAlLc,EA4Md;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,YAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,MADD;AAELlB,QAAI,EAAE;AAFD,GAAD,CALT;AASC/D,UAAQ,EAAE,YAAW;AACjB,WAAQ,SAAQ,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAArC;AACH,GAXF;AAYCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,SAAQ,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAA/B,CAAP;AACH;AAdF,CA5Mc,EA2Nd;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,UAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,OADD;AAELlB,QAAI,EAAE,QAFD;AAGLd,UAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB;AAHH,GAAD,EAIL;AACCgC,QAAI,EAAE,OADP;AAEClB,QAAI,EAAE;AAFP,GAJK,CALT;AAaC/D,UAAQ,EAAE,YAAW;AACjB,WAAQ,QAAO,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,MAAK,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAA9D;AACH,GAfF;AAgBCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,YAAW,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAA1D,CAAP;AACH;AAlBF,CA3Nc,EA8Od;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,MAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,OADD;AAELlB,QAAI,EAAE;AAFD,GAAD,EAGL;AACCkB,QAAI,EAAE,SADP;AAEClB,QAAI,EAAE;AAFP,GAHK,CALT;AAYC/D,UAAQ,EAAE,YAAW;AACjB,WAAQ,QAAO,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAApC;AACH,GAdF;AAeCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,WAAU,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAzD,CAAP;AACH;AAjBF,CA9Oc,EAgQd;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,KAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,IADD;AAELlB,QAAI,EAAE;AAFD,GAAD,EAGL;AACCkB,QAAI,EAAE,MADP;AAEClB,QAAI,EAAE;AAFP,GAHK,EAML;AACCkB,QAAI,EAAE,SADP;AAEClB,QAAI,EAAE;AAFP,GANK,CALT;AAeC/D,UAAQ,EAAE,YAAW;AACjB,WAAQ,OAAM,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAAnC;AACH,GAjBF;AAkBCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,aAAY,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAnF,CAAP;AACH;AApBF,CAhQc,EAqRd;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,MAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,MADD;AAELlB,QAAI,EAAE;AAFD,GAAD,EAGL;AACCkB,QAAI,EAAE,MADP;AAEClB,QAAI,EAAE,QAFP;AAGCD,SAAK,EAAE;AAHR,GAHK,EAOL;AACCmB,QAAI,EAAE,KADP;AAEClB,QAAI,EAAE;AAFP,GAPK,CALT;AAgBC/D,UAAQ,EAAE,YAAW;AACjB,WAAQ,QAAO,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAApC;AACH,GAlBF;AAmBCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,cAAa,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAApF,CAAP;AACH;AArBF,CArRc,EA2Sd;AACCP,OAAK,EAAE,SADR;AAECQ,MAAI,EAAE,SAFP;AAGCiR,QAAM,EAAE,CAAC,CAAD,CAHT;AAICC,SAAO,EAAE,CAAC,CAAD,CAJV;AAKC7R,QAAM,EAAE,CAAC;AACL6B,QAAI,EAAE,QADD;AAELlB,QAAI,EAAE;AAFD,GAAD,EAGL;AACCkB,QAAI,EAAE,SADP;AAEClB,QAAI,EAAE;AAFP,GAHK,CALT;AAYC/D,UAAQ,EAAE,YAAW;AACjB,WAAQ,QAAO,KAAKoD,MAAL,CAAY,CAAZ,EAAeU,KAAM,EAApC;AACH,GAdF;AAeCsR,OAAK,EAAE,YAAW;AACd,WAAO,CAAE,UAAS,KAAKhS,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAG,KAAKV,MAAL,CAAY,CAAZ,EAAeU,KAAM,IAAxD,CAAP;AACH;AAjBF,CA3Sc,CAAd,C;;;;;;;;;;;;ACAP;AAAA;AAAA;AAAA;AAAA;;AAEA,MAAM0e,UAAN,CAAiB;AACb9hB,aAAW,CAACyI,IAAD,EAAO;AACd,SAAKsZ,IAAL,GAAY,IAAIC,QAAJ,CAAavZ,IAAb,CAAZ;AACA,SAAKsH,MAAL,GAAc,CAAd;AACA,SAAKkS,OAAL,GAAe,CAAf;AACA,SAAKC,UAAL,GAAkB,CAAlB;AACH;;AAEDC,KAAG,CAACC,EAAD,EAAK;AACJ,WAAO,KAAKrS,MAAL,GAAcqS,EAArB,EAAyB;AACrB,WAAKrS,MAAL;AACH;AACJ;;AAEDsS,KAAG,CAACxb,MAAM,GAAG,KAAV,EAAiByb,KAAK,GAAG,KAAzB,EAAgCrf,GAAhC,EAAqC;AACpC,QAAI,KAAKif,UAAL,KAAoB,CAAxB,EAA2B;AACvB,UAAI,CAACI,KAAL,EAAY;AACR,aAAKL,OAAL,GAAe,KAAKM,IAAL,EAAf;AACA,aAAKL,UAAL,GAAkB,CAAlB;AACH,OAHD,MAGO;AACH,aAAKK,IAAL,CAAU1b,MAAV,EAAkByb,KAAlB,EAAyB,KAAKL,OAA9B;AACH;AACJ;;AACD,QAAI,CAACK,KAAL,EAAY;AACR,aAAQ,KAAKL,OAAL,IAAgB,KAAKC,UAAL,EAAjB,GAAsC,CAA7C;AACH,KAFD,MAEO;AACH,WAAKD,OAAL,GAAehf,GAAG,GAAI,KAAKgf,OAAL,GAAgB,KAAK,KAAKC,UAAL,EAAzB,GAAgD,KAAKD,OAAL,GAAe,EAAE,KAAK,KAAKC,UAAL,EAAP,CAAjF;AACH;AACJ;;AAEDK,MAAI,CAAC1b,MAAM,GAAG,KAAV,EAAiByb,KAAK,GAAG,KAAzB,EAAgCrf,GAAhC,EAAqC;AACrC,SAAKkf,GAAL,CAAS,CAAT;AACA,UAAMhhB,EAAE,GAAI,GAAEmhB,KAAK,GAAG,KAAH,GAAW,KAAM,GAAEzb,MAAM,GAAG,MAAH,GAAY,OAAQ,EAAhE;AACA,UAAM2b,GAAG,GAAG,KAAKT,IAAL,CAAU5gB,EAAV,EAAc,KAAK4O,MAAnB,EAA2B9M,GAA3B,CAAZ;AACA,SAAK8M,MAAL,IAAe,CAAf;AACA,WAAOyS,GAAP;AACH;;AAEDC,OAAK,CAAC5b,MAAM,GAAG,KAAV,EAAiByb,KAAK,GAAG,KAAzB,EAAgCrf,GAAhC,EAAqC;AACtC,SAAKkf,GAAL,CAAS,CAAT;AACA,QAAIhhB,EAAE,GAAG0F,MAAM,GAAG,OAAH,GAAa,QAA5B;AACA,UAAM2b,GAAG,GAAIF,KAAK,GAAG,KAAKP,IAAL,CAAW,MAAK5gB,EAAG,EAAnB,EAAsB,KAAK4O,MAA3B,EAAmC9M,GAAnC,EAAwC,IAAxC,CAAH,GAAmD,KAAK8e,IAAL,CAAW,MAAK5gB,EAAG,EAAnB,EAAsB,KAAK4O,MAA3B,EAAmC,IAAnC,CAArE;AACA,SAAKA,MAAL,IAAe,CAAf;AACA,WAAOyS,GAAP;AACH;;AAEDE,OAAK,CAAC7b,MAAM,GAAG,KAAV,EAAiByb,KAAK,GAAG,KAAzB,EAAgCrf,GAAhC,EAAqC;AACtC,SAAKkf,GAAL,CAAS,CAAT;AACA,QAAIhhB,EAAE,GAAG0F,MAAM,GAAG,OAAH,GAAa,QAA5B;AACA,UAAM2b,GAAG,GAAIF,KAAK,GAAG,KAAKP,IAAL,CAAW,MAAK5gB,EAAG,EAAnB,EAAsB,KAAK4O,MAA3B,EAAmC9M,GAAnC,EAAwC,IAAxC,CAAH,GAAmD,KAAK8e,IAAL,CAAW,MAAK5gB,EAAG,EAAnB,EAAsB,KAAK4O,MAA3B,EAAmC,IAAnC,CAArE;AACA,SAAKA,MAAL,IAAe,CAAf;AACA,WAAOyS,GAAP;AACH;;AACDG,OAAK,CAAC9b,MAAM,GAAG,KAAV,EAAiByb,KAAK,GAAG,KAAzB,EAAgCrf,GAAhC,EAAqC;AACtC,SAAKkf,GAAL,CAAS,CAAT;AACA,UAAMK,GAAG,GAAIF,KAAK,GAAG,KAAKP,IAAL,CAAUa,UAAV,CAAqB,KAAK7S,MAA1B,EAAkC9M,GAAlC,EAAuC,IAAvC,CAAH,GAAkD,KAAK8e,IAAL,CAAUc,UAAV,CAAqB,KAAK9S,MAA1B,EAAkC,IAAlC,CAApE;AACA,SAAKA,MAAL,IAAe,CAAf;AACA,WAAOyS,GAAP;AACH;;AACDM,OAAK,CAACV,EAAD,EAAKvb,MAAM,GAAG,KAAd,EAAqByb,KAAK,GAAG,KAA7B,EAAoCS,IAApC,EAA0C;AAC3C,UAAMP,GAAG,GAAG,EAAZ;;AACA,SAAK,IAAI1b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsb,EAApB,EAAwBtb,CAAC,EAAzB,EAA6B;AACzB0b,SAAG,CAACxO,IAAJ,CAAS,KAAKuO,IAAL,CAAU1b,MAAV,EAAkByb,KAAlB,EAAyBS,IAAI,GAAGA,IAAI,CAACjc,CAAD,CAAP,GAAa,IAA1C,CAAT;AACH;;AACD,WAAO0b,GAAP;AACH;;AACDQ,MAAI,CAACZ,EAAD,EAAKvb,MAAM,GAAG,KAAd,EAAqByb,KAAK,GAAG,KAA7B,EAAoCS,IAApC,EAA0C;AAC1C,UAAMP,GAAG,GAAG,EAAZ;;AACA,SAAK,IAAI1b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsb,EAApB,EAAwBtb,CAAC,EAAzB,EAA6B;AACzB0b,SAAG,CAACxO,IAAJ,CAAS,KAAKyO,KAAL,CAAW5b,MAAX,EAAmByb,KAAnB,EAA0BS,IAAI,GAAGA,IAAI,CAACjc,CAAD,CAAP,GAAa,IAA3C,CAAT;AACH;;AACD,WAAO0b,GAAP;AACH;;AACDS,OAAK,CAACb,EAAD,EAAKvb,MAAM,GAAG,KAAd,EAAqByb,KAAK,GAAG,KAA7B,EAAoCS,IAApC,EAA0C;AAC3C,UAAMP,GAAG,GAAG,EAAZ;;AACA,SAAK,IAAI1b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsb,EAApB,EAAwBtb,CAAC,EAAzB,EAA6B;AACzB0b,SAAG,CAACxO,IAAJ,CAAS,KAAK0O,KAAL,CAAW7b,MAAX,EAAmByb,KAAnB,EAA0BS,IAAI,GAAGA,IAAI,CAACjc,CAAD,CAAP,GAAa,IAA3C,CAAT;AACH;;AACD,WAAO0b,GAAP;AACH;;AACDU,QAAM,CAACd,EAAD,EAAKvb,MAAM,GAAG,KAAd,EAAqByb,KAAK,GAAG,KAA7B,EAAoCS,IAApC,EAA0C;AAC5C,UAAMP,GAAG,GAAG,EAAZ;;AACA,SAAK,IAAI1b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsb,EAApB,EAAwBtb,CAAC,EAAzB,EAA6B;AACzB0b,SAAG,CAACxO,IAAJ,CAAS,KAAK2O,KAAL,CAAWL,KAAX,EAAkBS,IAAI,GAAGA,IAAI,CAACjc,CAAD,CAAP,GAAa,IAAnC,CAAT;AACH;;AACD,WAAO0b,GAAP;AACH;;AACDW,QAAM,CAACf,EAAD,EAAKvb,MAAM,GAAG,KAAd,EAAqByb,KAAK,GAAG,KAA7B,EAAoCrf,GAApC,EAAyC;AAC3C,QAAIqf,KAAJ,EAAW;AACP,WAAK,IAAIrd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmd,EAApB,EAAwB,EAAEnd,CAA1B,EAA6B;AACzB,YAAIme,IAAI,GAAGngB,GAAG,CAACogB,UAAJ,CAAepe,CAAf,KAAqB,IAAhC;AACA,aAAKsd,IAAL,CAAU,KAAV,EAAiB,IAAjB,EAAuBa,IAAvB;AACH;AACJ,KALD,MAKO;AACH,YAAMZ,GAAG,GAAG,KAAKM,KAAL,CAAWV,EAAX,CAAZ;AACA,aAAOkB,MAAM,CAACC,YAAP,CAAoBC,KAApB,CAA0B,IAA1B,EAAgChB,GAAhC,EAAqCjjB,OAArC,CAA6C,OAA7C,EAAsD,EAAtD,CAAP;AACH;AACJ;;AAjGY;;AAoGV,MAAMiI,WAAW,GAAG,CAACiB,IAAD,EAAO/F,MAAP,EAAe0W,KAAf,KAAyB;AAChD,QAAMqK,CAAC,GAAG,IAAI3B,UAAJ,CAAerZ,IAAf,CAAV;AACA,MAAI2Q,KAAJ,EAAWqK,CAAC,CAAC1T,MAAF,GAAWqJ,KAAX;AACX,QAAMjF,MAAM,GAAG,EAAf;AACAzR,QAAM,CAACC,GAAP,CAAWS,KAAK,IAAI;AAChB,UAAMO,IAAI,GAAGP,KAAK,CAAC7B,MAAN,GAAe6B,KAAK,CAAC7B,MAArB,GAA8B6B,KAAK,CAACyD,MAAjD;AACA5C,wDAAG,CAACkQ,MAAD,EAAS/Q,KAAK,CAACO,IAAf,EAAqB8f,CAAC,CAACrgB,KAAK,CAACC,IAAP,CAAD,CAAcM,IAAd,EAAoBP,KAAK,CAACyD,MAA1B,CAArB,CAAH;AACH,GAHD;AAIA,SAAOsN,MAAP;AACH,CATM;AAWA,MAAM5K,WAAW,GAAG,CAACF,MAAD,EAASZ,IAAT,EAAe/F,MAAf,EAAuB0W,KAAvB,KAAiC;AACxD,QAAMqK,CAAC,GAAG,IAAI3B,UAAJ,CAAezY,MAAf,CAAV;AACA,MAAI+P,KAAJ,EAAWqK,CAAC,CAAC1T,MAAF,GAAWqJ,KAAX;AACX1W,QAAM,CAACC,GAAP,CAAWS,KAAK,IAAI;AAChB,UAAMH,GAAG,GAAGmC,oDAAG,CAACqD,IAAD,EAAOrF,KAAK,CAACO,IAAb,CAAf;;AACA,QAAIP,KAAK,CAAC7B,MAAV,EAAkB;AACdkiB,OAAC,CAACrgB,KAAK,CAACC,IAAP,CAAD,CAAcD,KAAK,CAAC7B,MAApB,EAA4B6B,KAAK,CAACyD,MAAlC,EAA0C,IAA1C,EAAgD5D,GAAhD;AACH,KAFD,MAEO;AACHwgB,OAAC,CAACrgB,KAAK,CAACC,IAAP,CAAD,CAAcD,KAAK,CAACyD,MAApB,EAA4B,IAA5B,EAAkC5D,GAAlC;AACH;AACJ,GAPD;AAQH,CAXM,C;;;;;;;;;;;;ACjHP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA,MAAMygB,OAAO,GAAG,CACZ,SADY,EACD,SADC,CAAhB;;AAIA,MAAMC,qBAAqB,GAAI9a,GAAD,IAAS;AACnC,SAAO,IAAImM,OAAJ,CAAY4O,OAAO,IAAI;AAC1B,QAAIC,MAAM,GAAG1hB,QAAQ,CAACmG,aAAT,CAAuB,QAAvB,CAAb,CAD0B,CACsB;;AAChDub,UAAM,CAACC,GAAP,GAAajb,GAAb,CAF0B,CAEP;;AACnBgb,UAAM,CAACE,kBAAP,GAA4BH,OAA5B;AACAC,UAAM,CAACG,MAAP,GAAgBJ,OAAhB;AACAC,UAAM,CAACI,OAAP,GAAiBL,OAAjB;AACAzhB,YAAQ,CAAC+hB,IAAT,CAAc3b,WAAd,CAA0Bsb,MAA1B,EAN0B,CAMU;AACvC,GAPM,CAAP;AAQH,CATD;;AAWA,MAAMM,YAAY,GAAG,MAAM;AACvB,SAAO;AACH7iB,gEADG;AAEHN,0DAFG;AAGHb,oDAHG;AAIHikB,6DAAOA;AAJJ,GAAP;AAMH,CAPD;;AASA1kB,MAAM,CAACykB,YAAP,GAAsBA,YAAtB;AAEO,MAAMjiB,WAAW,GAAG,YAAY;AACnC,SAAO8S,OAAO,CAACC,GAAR,CAAYyO,OAAO,CAAC/gB,GAAR,CAAY,MAAM0hB,MAAN,IAAgB;AAC3C,WAAOV,qBAAqB,CAACU,MAAD,CAA5B;AACH,GAFkB,CAAZ,CAAP;AAGH,CAJM,C;;;;;;;;;;;;AC/BP;AAAA;AAAA;AAAA;;AAEA,MAAMhjB,IAAI,GAAG,CAACijB,IAAD,EAAOC,IAAP,EAAallB,IAAI,GAAG,EAApB,KAA2B;AACpC,SAAOoD,wDAAO,CAAC6hB,IAAD,CAAP,CAAc3hB,GAAd,CAAkBK,GAAG,IAAI;AAC5B,UAAMwhB,IAAI,GAAGF,IAAI,CAACthB,GAAD,CAAjB;AACA,UAAMyhB,IAAI,GAAGF,IAAI,CAACvhB,GAAD,CAAjB;AACA,QAAIwhB,IAAI,YAAYhgB,MAApB,EAA4B,OAAOnD,IAAI,CAACmjB,IAAD,EAAOC,IAAP,EAAaplB,IAAI,GAAI,GAAEA,IAAK,IAAG2D,GAAI,EAAlB,GAAsBA,GAAvC,CAAX,CAA5B,KACK,IAAIwhB,IAAI,KAAKC,IAAb,EAAmB;AACpB,aAAO,CAAC;AAAEplB,YAAI,EAAG,GAAEA,IAAK,IAAG2D,GAAI,EAAvB;AAA0BwhB,YAA1B;AAAgCC;AAAhC,OAAD,CAAP;AACH,KAFI,MAEE,OAAO,EAAP;AACV,GAPM,EAOJ1d,IAPI,EAAP;AAQH,CATD;;AAWA,MAAM2d,QAAN,CAAe;AACXvlB,MAAI,CAACmC,QAAD,EAAW;AACX,SAAKA,QAAL,GAAgBA,QAAhB;AACA,SAAKkiB,KAAL;AACH;;AAEDpe,KAAG,CAACzB,IAAD,EAAO;AACN,WAAOyB,oDAAG,CAAC,KAAK9D,QAAN,EAAgBqC,IAAhB,CAAV;AACH;AAED;;;;;;;AAKAM,KAAG,CAACN,IAAD,EAAOP,KAAP,EAAc;AACb,UAAMuhB,GAAG,GAAGvf,oDAAG,CAAC,KAAK9D,QAAN,EAAgBqC,IAAhB,CAAf;;AACA,QAAI,OAAOghB,GAAP,KAAgB,QAApB,EAA8B;AAC1B3c,aAAO,CAAC4c,IAAR,CAAa,qBAAb;AACA3gB,0DAAG,CAAC,KAAK3C,QAAN,EAAgBqC,IAAhB,EAAsBP,KAAtB,CAAH;AACH,KAHD,MAGO;AACHa,0DAAG,CAAC,KAAK3C,QAAN,EAAgBqC,IAAhB,EAAsBP,KAAtB,CAAH;AACH;;AAED,QAAI,KAAK/B,IAAL,GAAYE,MAAhB,EAAwB,KAAKjB,OAAL,GAAe,IAAf;AAC3B;AAED;;;;;AAGAe,MAAI,GAAG;AACH,WAAOA,IAAI,CAAC,KAAKwjB,MAAN,EAAc,KAAKvjB,QAAnB,CAAX;AACH;AAED;;;;;AAGAkiB,OAAK,GAAG;AACJ,SAAKqB,MAAL,GAAclF,IAAI,CAACI,KAAL,CAAWJ,IAAI,CAACC,SAAL,CAAe,KAAKte,QAApB,CAAX,CAAd;AACA,SAAKhB,OAAL,GAAe,KAAf;AACH;;AAxCU;;AA2CR,MAAMgB,QAAQ,GAAG5B,MAAM,CAAColB,SAAP,GAAmB,IAAIJ,QAAJ,EAApC,C;;;;;;;;;;;;ACxDP;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA,MAAMK,eAAe,GAAG,CACpB;AAAExgB,MAAI,EAAE,MAAR;AAAgBnB,OAAK,EAAE;AAAvB,CADoB,EAEpB;AAAEmB,MAAI,EAAE,OAAR;AAAiBnB,OAAK,EAAE;AAAxB,CAFoB,EAGpB;AAAEmB,MAAI,EAAE,MAAR;AAAgBnB,OAAK,EAAE;AAAvB,CAHoB,EAIpB;AAAEmB,MAAI,EAAE,OAAR;AAAiBnB,OAAK,EAAE;AAAxB,CAJoB,EAKpB;AAAEmB,MAAI,EAAE,YAAR;AAAsBnB,OAAK,EAAE;AAA7B,CALoB,EAMpB;AAAEmB,MAAI,EAAE,WAAR;AAAqBnB,OAAK,EAAE;AAA5B,CANoB,CAAxB;AASA,MAAM4hB,UAAU,GAAG;AACf1hB,QAAM,EAAGyf,IAAD,IAAU;AAAE/a,WAAO,CAACC,GAAR,CAAY8a,IAAZ;AAAoB,GADzB;AAEfvgB,QAAM,EAAE;AACJiX,SAAK,EAAE;AACHlV,UAAI,EAAE,gBADH;AAEHxB,aAAO,EAAE;AACLqM,eAAO,EAAE;AAAE7K,cAAI,EAAE,SAAR;AAAmBlB,cAAI,EAAE;AAAzB,SADJ;AAEL4hB,iBAAS,EAAE;AAAE1gB,cAAI,EAAE,YAAR;AAAsBlB,cAAI,EAAE;AAA5B;AAFN;AAFN,KADH;AAQJ6hB,QAAI,EAAE;AACF3gB,UAAI,EAAE,qBADJ;AAEFxB,aAAO,EAAE;AACLoiB,mBAAW,EAAE;AAAE5gB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE;AAAjC,SADR;AAELxB,gBAAQ,EAAE;AAAE0C,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE;AAAlC,SAFL;AAGL+hB,mBAAW,EAAE;AAAE7gB,cAAI,EAAE,gCAAR;AAA0ClB,cAAI,EAAE;AAAhD,SAHR;AAILgiB,sBAAc,EAAE;AAAE9gB,cAAI,EAAE,mCAAR;AAA6ClB,cAAI,EAAE;AAAnD;AAJX;AAFP,KARF;AAiBJiiB,OAAG,EAAE;AACD/gB,UAAI,EAAE,cADL;AAEDxB,aAAO,EAAE;AACLqM,eAAO,EAAE;AAAE7K,cAAI,EAAE,SAAR;AAAmBlB,cAAI,EAAE;AAAzB,SADJ;AAELkiB,YAAI,EAAE;AAAEhhB,cAAI,EAAE,cAAR;AAAwBlB,cAAI,EAAE;AAA9B;AAFD;AAFR,KAjBD;AAwBJmiB,OAAG,EAAE;AACDjhB,UAAI,EAAE,cADL;AAEDxB,aAAO,EAAE;AACLqM,eAAO,EAAE;AAAE7K,cAAI,EAAE,SAAR;AAAmBlB,cAAI,EAAE;AAAzB;AADJ;AAFR,KAxBD;AA8BJ1D,YAAQ,EAAE;AACN4E,UAAI,EAAE,mBADA;AAENxB,aAAO,EAAE;AACL0iB,YAAI,EAAE;AAAElhB,cAAI,EAAE,WAAR;AAAqBlB,cAAI,EAAE;AAA3B,SADD;AAELqiB,WAAG,EAAE;AAAEnhB,cAAI,EAAE,UAAR;AAAoBlB,cAAI,EAAE;AAA1B;AAFA;AAFH,KA9BN;AAqCJ4E,OAAG,EAAE;AACD1D,UAAI,EAAE,cADL;AAEDxB,aAAO,EAAE;AACL4iB,iBAAS,EAAE;AAAEphB,cAAI,EAAE,WAAR;AAAqBlB,cAAI,EAAE;AAA3B,SADN;AAELuiB,oBAAY,EAAE;AAAErhB,cAAI,EAAE,cAAR;AAAwBlB,cAAI,EAAE,QAA9B;AAAwCgB,iBAAO,EAAE0gB;AAAjD,SAFT;AAGLc,uBAAe,EAAE;AAAEthB,cAAI,EAAE,cAAR;AAAwBlB,cAAI,EAAE,QAA9B;AAAwCgB,iBAAO,EAAE,CAC9D;AAAEE,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAD8D,EAE9D;AAAEmB,gBAAI,EAAE,MAAR;AAAgBnB,iBAAK,EAAE;AAAvB,WAF8D,EAG9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAH8D,EAI9D;AAAEmB,gBAAI,EAAE,SAAR;AAAmBnB,iBAAK,EAAE;AAA1B,WAJ8D,EAK9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAL8D,EAM9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAN8D,EAO9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAP8D,EAQ9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAR8D,EAS9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAT8D,EAU9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAV8D,EAW9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAX8D,EAY9D;AAAEmB,gBAAI,EAAE,QAAR;AAAkBnB,iBAAK,EAAE;AAAzB,WAZ8D;AAAjD,SAHZ;AAiBL0iB,oBAAY,EAAE;AAAEvhB,cAAI,EAAE,cAAR;AAAwBlB,cAAI,EAAE,QAA9B;AAAwCgB,iBAAO,EAAE0gB;AAAjD,SAjBT;AAkBLgB,iBAAS,EAAE;AAAExhB,cAAI,EAAE,WAAR;AAAqBlB,cAAI,EAAE,QAA3B;AAAqCgB,iBAAO,EAAE0gB;AAA9C;AAlBN;AAFR,KArCD;AA4DJiB,UAAM,EAAE;AACJzhB,UAAI,EAAE,iBADF;AAEJxB,aAAO,EAAE;AACLqM,eAAO,EAAE;AAAE7K,cAAI,EAAE,eAAR;AAAyBlB,cAAI,EAAE;AAA/B,SADJ;AAELiK,gBAAQ,EAAE;AAAE/I,cAAI,EAAE,WAAR;AAAqBlB,cAAI,EAAE;AAA3B;AAFL;AAFL,KA5DJ;AAmEJ4iB,cAAU,EAAE;AACR1hB,UAAI,EAAE,uBADE;AAERxB,aAAO,EAAE;AACLqM,eAAO,EAAE;AAAE7K,cAAI,EAAE,QAAR;AAAkBlB,cAAI,EAAE;AAAxB,SADJ;AAELkH,YAAI,EAAE;AAAEhG,cAAI,EAAE,MAAR;AAAgBlB,cAAI,EAAE;AAAtB;AAFD;AAFD,KAnER;AA0EJ6iB,gBAAY,EAAE;AACV3hB,UAAI,EAAE,uBADI;AAEVxB,aAAO,EAAE;AACLojB,gBAAQ,EAAE;AAAE5hB,cAAI,EAAE,gBAAR;AAA0BlB,cAAI,EAAE;AAAhC,SADL;AAEL+iB,oBAAY,EAAE;AAAE7hB,cAAI,EAAE,gBAAR;AAA0BlB,cAAI,EAAE;AAAhC,SAFT;AAGLgjB,YAAI,EAAE;AAAE9hB,cAAI,EAAE,UAAR;AAAoBlB,cAAI,EAAE,UAA1B;AAAsC8B,aAAG,EAAE;AAA3C,SAHD;AAILmhB,mCAA2B,EAAE;AAAE/hB,cAAI,EAAE,8BAAR;AAAwClB,cAAI,EAAE;AAA9C,SAJxB;AAKLkjB,6BAAqB,EAAE;AAAEhiB,cAAI,EAAE,uBAAR;AAAiClB,cAAI,EAAE;AAAvC;AALlB;AAFC;AA1EV;AAFO,CAAnB;AAyFO,MAAM6d,kBAAN,SAAiCnhB,gDAAjC,CAA2C;AAC9CU,QAAM,CAACC,KAAD,EAAQ;AACVskB,cAAU,CAAC1hB,MAAX,GAAqBf,MAAD,IAAY;AAC5BjB,4DAAQ,CAAC2C,GAAT,CAAa,QAAb,EAAuB1B,MAAvB;AACA7C,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,UAArB;AACH,KAHD;;AAIA,WACI,iDAAC,qDAAD;AAAM,YAAM,EAAEolB,UAAd;AAA0B,cAAQ,EAAE1jB,sDAAQ,CAAC8D,GAAT,CAAa,QAAb;AAApC,MADJ;AAGH;;AAT6C,C;;;;;;;;;;;;ACtGlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEO,MAAM6F,IAAI,GAAG,CAChB;AAAE1G,MAAI,EAAE,MAAR;AAAgBnB,OAAK,EAAE;AAAvB,CADgB,EAEhB;AAAEmB,MAAI,EAAE,QAAR;AAAkBnB,OAAK,EAAE;AAAzB,CAFgB,EAGhB;AAAEmB,MAAI,EAAE,QAAR;AAAkBnB,OAAK,EAAE;AAAzB,CAHgB,EAIhB;AAAEmB,MAAI,EAAE,QAAR;AAAkBnB,OAAK,EAAE;AAAzB,CAJgB,EAKhB;AAAEmB,MAAI,EAAE,QAAR;AAAkBnB,OAAK,EAAE;AAAzB,CALgB,EAMhB;AAAEmB,MAAI,EAAE,QAAR;AAAkBnB,OAAK,EAAE;AAAzB,CANgB,EAOhB;AAAEmB,MAAI,EAAE,QAAR;AAAkBnB,OAAK,EAAE;AAAzB,CAPgB,EAQhB;AAAEmB,MAAI,EAAE,QAAR;AAAkBnB,OAAK,EAAE;AAAzB,CARgB,EAShB;AAAEmB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CATgB,EAUhB;AAAEmB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CAVgB,EAWhB;AAAEmB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CAXgB,EAYhB;AAAEmB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CAZgB,EAahB;AAAEmB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CAbgB,EAchB;AAAEmB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CAdgB,CAAb;AAiBP,MAAMojB,QAAQ,GAAG,CACb;AAAEjiB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CADa,EAEb;AAAEmB,MAAI,EAAE,KAAR;AAAenB,OAAK,EAAE;AAAtB,CAFa,EAGb;AAAEmB,MAAI,EAAE,MAAR;AAAgBnB,OAAK,EAAE;AAAvB,CAHa,EAIb;AAAEmB,MAAI,EAAE,OAAR;AAAiBnB,OAAK,EAAE;AAAxB,CAJa,CAAjB;AAOA,MAAM4hB,UAAU,GAAG;AACfxiB,QAAM,EAAE;AACJikB,OAAG,EAAE;AACDliB,UAAI,EAAE,iBADL;AAEDxB,aAAO,EAAE;AACLiK,YAAI,EAAE;AAAEzI,cAAI,EAAE,cAAR;AAAwBlB,cAAI,EAAE,QAA9B;AAAwCgB,iBAAO,EAAE4G;AAAjD,SADD;AAELyb,eAAO,EAAE;AAAEniB,cAAI,EAAE,cAAR;AAAwBlB,cAAI,EAAE;AAA9B;AAFJ;AAFR,KADD;AAQJG,SAAK,EAAE;AACHe,UAAI,EAAE,WADH;AAEHxB,aAAO,EAAE;AACL4jB,WAAG,EAAE;AAAEpiB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAE4G;AAApD;AADA;AAFN,KARH;AAcJ2b,OAAG,EAAE;AACDriB,UAAI,EAAE,cADL;AAEDxB,aAAO,EAAE;AACL8jB,WAAG,EAAE;AAAEtiB,cAAI,EAAE,YAAR;AAAsBlB,cAAI,EAAE,QAA5B;AAAsCgB,iBAAO,EAAE4G;AAA/C,SADA;AAEL6b,WAAG,EAAE;AAAEviB,cAAI,EAAE,YAAR;AAAsBlB,cAAI,EAAE,QAA5B;AAAsCgB,iBAAO,EAAE4G;AAA/C;AAFA;AAFR,KAdD;AAqBJ8b,OAAG,EAAE;AACDxiB,UAAI,EAAE,cADL;AAEDxB,aAAO,EAAE;AACLqM,eAAO,EAAE;AAAE7K,cAAI,EAAE,UAAR;AAAoBlB,cAAI,EAAE;AAA1B;AADJ;AAFR,KArBD;AA2BJ2J,QAAI,EAAE;AACFzI,UAAI,EAAE,kBADJ;AAEFxB,aAAO,EAAE;AACL,WAAG;AAAEwB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAEmiB;AAApD,SADE;AAEL,WAAG;AAAEjiB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAEmiB;AAApD,SAFE;AAGL,WAAG;AAAEjiB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAEmiB;AAApD,SAHE;AAIL,WAAG;AAAEjiB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAEmiB;AAApD,SAJE;AAKL,WAAG;AAAEjiB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAEmiB;AAApD,SALE;AAML,WAAG;AAAEjiB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAEmiB;AAApD,SANE;AAOL,WAAG;AAAEjiB,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE,QAAjC;AAA2CgB,iBAAO,EAAEmiB;AAApD,SAPE;AAQL,YAAI;AAAEjiB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE,QAAlC;AAA4CgB,iBAAO,EAAEmiB;AAArD,SARC;AASL,YAAI;AAAEjiB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE,QAAlC;AAA4CgB,iBAAO,EAAEmiB;AAArD,SATC;AAUL,YAAI;AAAEjiB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE,QAAlC;AAA4CgB,iBAAO,EAAEmiB;AAArD,SAVC;AAWL,YAAI;AAAEjiB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE,QAAlC;AAA4CgB,iBAAO,EAAEmiB;AAArD,SAXC;AAYL,YAAI;AAAEjiB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE,QAAlC;AAA4CgB,iBAAO,EAAEmiB;AAArD;AAZC;AAFP;AA3BF;AADO,CAAnB;AAgDO,MAAMvF,kBAAN,SAAiClhB,gDAAjC,CAA2C;AAC9CU,QAAM,CAACC,KAAD,EAAQ;AACV,UAAMgC,MAAM,GAAGpB,sDAAQ,CAAC8D,GAAT,CAAa,UAAb,CAAf;;AACA4f,cAAU,CAAC1hB,MAAX,GAAqBf,MAAD,IAAY;AAC5BjB,4DAAQ,CAAC2C,GAAT,CAAa,UAAb,EAAyB1B,MAAzB;AACA7C,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,UAArB;AACH,KAHD;;AAKA,WACI,iDAAC,qDAAD;AAAM,YAAM,EAAEolB,UAAd;AAA0B,cAAQ,EAAEtiB;AAApC,MADJ;AAGH;;AAX6C,C;;;;;;;;;;;;AC5ElD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA,MAAMskB,YAAY,GAAG,CACjB;AAAEziB,MAAI,EAAE,WAAR;AAAqBnB,OAAK,EAAE;AAA5B,CADiB,EAEjB;AAAEmB,MAAI,EAAE,oBAAR;AAA8BnB,OAAK,EAAE;AAArC,CAFiB,EAGjB;AAAEmB,MAAI,EAAE,gBAAR;AAA0BnB,OAAK,EAAE;AAAjC,CAHiB,CAArB;AAMA,MAAM4hB,UAAU,GAAG;AACfxiB,QAAM,EAAE;AACJykB,WAAO,EAAE;AACL1iB,UAAI,EAAE,SADD;AAELxB,aAAO,EAAE;AACLmkB,gBAAQ,EAAE;AAAE3iB,cAAI,EAAE,WAAR;AAAqBlB,cAAI,EAAE;AAA3B,SADL;AAEL8jB,cAAM,EAAE;AAAE5iB,cAAI,EAAE,aAAR;AAAuBlB,cAAI,EAAE;AAA7B,SAFH;AAGL+jB,kBAAU,EAAE;AAAE7iB,cAAI,EAAE,8BAAR;AAAwClB,cAAI,EAAE;AAA9C,SAHP;AAILgkB,gBAAQ,EAAE;AAAE9iB,cAAI,EAAE,gBAAR;AAA0BlB,cAAI,EAAE,UAAhC;AAA4C8B,aAAG,EAAE;AAAjD;AAJL;AAFJ,KADL;AAUJmiB,QAAI,EAAE;AACF/iB,UAAI,EAAE,MADJ;AAEFxB,aAAO,EAAE;AACLwkB,YAAI,EAAE;AAAEhjB,cAAI,EAAE,MAAR;AAAgBlB,cAAI,EAAE,QAAtB;AAAgC8B,aAAG,EAAE;AAArC,SADD;AAELqiB,cAAM,EAAE;AAAEjjB,cAAI,EAAE,UAAR;AAAoBlB,cAAI,EAAE,UAA1B;AAAsC8B,aAAG,EAAE;AAA3C,SAFH;AAGLsiB,oBAAY,EAAE;AAAEljB,cAAI,EAAE,eAAR;AAAyBlB,cAAI,EAAE,QAA/B;AAAyC8B,aAAG,EAAE;AAA9C,SAHT;AAILuiB,sBAAc,EAAE;AAAEnjB,cAAI,EAAE,mBAAR;AAA6BlB,cAAI,EAAE,UAAnC;AAA+C8B,aAAG,EAAE;AAApD,SAJX;AAKLwiB,iBAAS,EAAE;AAAEpjB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE,QAAlC;AAA4C8B,aAAG,EAAE;AAAjD;AALN;AAFP,KAVF;AAoBJyiB,YAAQ,EAAE;AACNrjB,UAAI,EAAE,qBADA;AAENxB,aAAO,EAAE;AACL8kB,kBAAU,EAAE;AAAEtjB,cAAI,EAAE,gBAAR;AAA0BlB,cAAI,EAAE,QAAhC;AAA0CgB,iBAAO,EAAE2iB,YAAnD;AAAiE7hB,aAAG,EAAE;AAAtE,SADP;AAEL2iB,kBAAU,EAAE;AAAEvjB,cAAI,EAAE,uBAAR;AAAiClB,cAAI,EAAE,IAAvC;AAA6C8B,aAAG,EAAE;AAAlD,SAFP;AAGL4iB,kBAAU,EAAE;AAAExjB,cAAI,EAAE,uBAAR;AAAiClB,cAAI,EAAE,IAAvC;AAA6C8B,aAAG,EAAE;AAAlD;AAHP;AAFH,KApBN;AA4BJ6iB,MAAE,EAAE;AACAzjB,UAAI,EAAE,aADN;AAEAxB,aAAO,EAAE;AACLklB,UAAE,EAAE;AAAE1jB,cAAI,EAAE,IAAR;AAAclB,cAAI,EAAE;AAApB,SADC;AAEL6kB,UAAE,EAAE;AAAE3jB,cAAI,EAAE,SAAR;AAAmBlB,cAAI,EAAE;AAAzB,SAFC;AAGL8kB,cAAM,EAAE;AAAE5jB,cAAI,EAAE,QAAR;AAAkBlB,cAAI,EAAE;AAAxB,SAHH;AAIL+kB,WAAG,EAAE;AAAE7jB,cAAI,EAAE,KAAR;AAAelB,cAAI,EAAE;AAArB;AAJA;AAFT,KA5BA;AAqCJglB,SAAK,EAAE;AACH9jB,UAAI,EAAE,YADH;AAEHxB,aAAO,EAAE;AACLulB,iBAAS,EAAE;AAAE/jB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE;AAAlC,SADN;AAELklB,iBAAS,EAAE;AAAEhkB,cAAI,EAAE,YAAR;AAAsBlB,cAAI,EAAE;AAA5B,SAFN;AAGLmlB,uBAAe,EAAE;AAAEjkB,cAAI,EAAE,6BAAR;AAAuClB,cAAI,EAAE;AAA7C;AAHZ;AAFN;AArCH;AADO,CAAnB;AAiDO,MAAM2d,UAAN,SAAyBjhB,gDAAzB,CAAmC;AACtCU,QAAM,CAACC,KAAD,EAAQ;AACVskB,cAAU,CAAC1hB,MAAX,GAAqBf,MAAD,IAAY;AAC5BjB,4DAAQ,CAAC2C,GAAT,CAAc,QAAd,EAAuB1B,MAAvB;AACA7C,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,UAArB;AACH,KAHD;;AAIA,UAAM8C,MAAM,GAAGpB,sDAAQ,CAAC8D,GAAT,CAAa,QAAb,CAAf;AACA,WACI,iDAAC,qDAAD;AAAM,YAAM,EAAE4f,UAAd;AAA0B,cAAQ,EAAEtiB;AAApC,MADJ;AAGH;;AAVqC,C;;;;;;;;;;;;AC3D1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEO,MAAM+lB,SAAS,GAAG,CACrB;AAAElkB,MAAI,EAAE,gBAAR;AAA0BnB,OAAK,EAAE;AAAjC,CADqB,EAErB;AAAEmB,MAAI,EAAE,eAAR;AAAyBnB,OAAK,EAAE;AAAhC,CAFqB,EAGrB;AAAEmB,MAAI,EAAE,eAAR;AAAyBnB,OAAK,EAAE;AAAhC,CAHqB,EAIrB;AAAEmB,MAAI,EAAE,aAAR;AAAuBnB,OAAK,EAAE;AAA9B,CAJqB,EAKrB;AAAEmB,MAAI,EAAE,YAAR;AAAsBnB,OAAK,EAAE;AAA7B,CALqB,EAMrB;AAAEmB,MAAI,EAAE,cAAR;AAAwBnB,OAAK,EAAE;AAA/B,CANqB,EAOrB;AAAEmB,MAAI,EAAE,aAAR;AAAuBnB,OAAK,EAAE;AAA9B,CAPqB,EAQrB;AAAEmB,MAAI,EAAE,SAAR;AAAmBnB,OAAK,EAAE;AAA1B,CARqB,EASrB;AAAEmB,MAAI,EAAE,cAAR;AAAwBnB,OAAK,EAAE;AAA/B,CATqB,EAUrB;AAAEmB,MAAI,EAAE,WAAR;AAAqBnB,OAAK,EAAE;AAA5B,CAVqB,EAWrB;AAAEmB,MAAI,EAAE,aAAR;AAAuBnB,OAAK,EAAE;AAA9B,CAXqB,EAYrB;AAAEmB,MAAI,EAAE,wBAAR;AAAkCnB,OAAK,EAAE;AAAzC,CAZqB,EAarB;AAAEmB,MAAI,EAAE,OAAR;AAAiBnB,OAAK,EAAE;AAAxB,CAbqB,CAAlB;AAgBP,MAAMslB,UAAU,GAAG;AAEfN,KAAG,EAAE;AAAE7jB,QAAI,EAAE,mBAAR;AAA6BlB,QAAI,EAAE,QAAnC;AAA6CgB,WAAO,EAAE,CAAC;AAAEjB,WAAK,EAAE,CAAT;AAAYmB,UAAI,EAAE;AAAlB,KAAD,EAAsC;AAAEnB,WAAK,EAAE,CAAT;AAAYmB,UAAI,EAAE;AAAlB,KAAtC;AAAtD,GAFU;AAGfyjB,IAAE,EAAE;AAAEzjB,QAAI,EAAE,IAAR;AAAclB,QAAI,EAAE;AAApB,GAHW;AAIfslB,UAAQ,EAAE;AAAEpkB,QAAI,EAAE,UAAR;AAAoBlB,QAAI,EAAE;AAA1B,GAJK;AAKfkH,MAAI,EAAE;AAAEhG,QAAI,EAAE,MAAR;AAAgBlB,QAAI,EAAE;AAAtB,GALS;AAMfulB,sBAAoB,EAAE;AAAErkB,QAAI,EAAE,uBAAR;AAAiClB,QAAI,EAAE;AAAvC,GANP;AAOfwlB,iBAAe,EAAE;AAAEtkB,QAAI,EAAE,iBAAR;AAA2BlB,QAAI,EAAE;AAAjC,GAPF;AAQfylB,WAAS,EAAE;AAAEvkB,QAAI,EAAE,aAAR;AAAuBlB,QAAI,EAAE;AAA7B,GARI;AASf0lB,eAAa,EAAE;AAAExkB,QAAI,EAAE,mBAAR;AAA6BlB,QAAI,EAAE,QAAnC;AAA6CgB,WAAO,EAAE,CAAC;AAAEjB,WAAK,EAAE,CAAT;AAAYmB,UAAI,EAAE;AAAlB,KAAD,EAAkC;AAAEnB,WAAK,EAAE,CAAT;AAAYmB,UAAI,EAAE;AAAlB,KAAlC;AAAtD,GATA;AAUfykB,kBAAgB,EAAE;AAAEzkB,QAAI,EAAE,aAAR;AAAuBlB,QAAI,EAAE,QAA7B;AAAuCgB,WAAO,EAAE,CAAC;AAAEjB,WAAK,EAAE,CAAT;AAAYmB,UAAI,EAAE;AAAlB,KAAD,EAA8C;AAAEnB,WAAK,EAAE,CAAT;AAAYmB,UAAI,EAAE;AAAlB,KAA9C;AAAhD,GAVH;AAWf0kB,gBAAc,EAAE;AAAE1kB,QAAI,EAAE,gBAAR;AAA0BlB,QAAI,EAAE;AAAhC;AAXD,CAAnB;AAcA,MAAM6lB,IAAI,GAAG;AAAE3kB,MAAI,EAAE,iBAAR;AAA2BlB,MAAI,EAAE;AAAjC,CAAb;AACA,MAAMgkB,QAAQ,GAAG;AAAE9iB,MAAI,EAAE,qBAAR;AAA+BlB,MAAI,EAAE;AAArC,CAAjB;AACA,MAAM8lB,SAAS,GAAG;AAAE5kB,MAAI,EAAE,sBAAR;AAAgClB,MAAI,EAAE;AAAtC,CAAlB;AACA,MAAM+lB,OAAO,GAAG;AAAE7kB,MAAI,EAAE,oBAAR;AAA8BlB,MAAI,EAAE;AAApC,CAAhB;AACA,MAAMgmB,aAAa,GAAG;AAAEC,gBAAc,EAAE;AAAE/kB,QAAI,EAAE,uBAAR;AAAiClB,QAAI,EAAE;AAAvC,GAAlB;AAAqEkmB,qBAAmB,EAAE;AAAEhlB,QAAI,EAAE,qBAAR;AAA+BlB,QAAI,EAAE;AAArC,GAA1F;AAA2ImmB,wBAAsB,EAAE;AAAEjlB,QAAI,EAAE,wBAAR;AAAkClB,QAAI,EAAE;AAAxC;AAAnK,CAAtB;;AAEA,MAAMomB,aAAa,GAAIpmB,IAAD,IAAU;AAC5B,MAAIqmB,gBAAgB,GAAG,EAAvB;;AACA,UAAQC,MAAM,CAACtmB,IAAD,CAAd;AACI,SAAK,CAAL,CADJ,CACY;;AACR,SAAK,CAAL;AAAQ;AACJqmB,sBAAgB,GAAG,EAAE,GAAGhB,UAAL;AAAiBQ,YAAjB;AAAuB7B,gBAAvB;AAAiC8B,iBAAjC;AAA4CC,eAA5C;AAAqD,WAAGC;AAAxD,OAAnB;AACA;;AACJ,SAAK,CAAL;AAAQ;AACJK,sBAAgB,GAAG,EAAE,GAAGhB,UAAL;AAAiBS,iBAAjB;AAA4BC,eAA5B;AAAqC,WAAGC;AAAxC,OAAnB;AACA;;AACJ,SAAK,CAAL,CARJ,CAQY;;AACR,SAAK,CAAL;AAAQ;AACJK,sBAAgB,GAAG,EAAE,GAAGhB,UAAL;AAAiBrB;AAAjB,OAAnB;AACA;;AACJ,SAAK,CAAL;AAAQ;AACJqC,sBAAgB,GAAG,EAAE,GAAGhB,UAAL;AAAiBQ,YAAjB;AAAuB7B,gBAAvB;AAAiC8B,iBAAjC;AAA4CC;AAA5C,OAAnB;AACA;;AACJ,SAAK,CAAL,CAfJ,CAeY;;AACR,SAAK,CAAL;AAAQ;AACJM,sBAAgB,GAAG,EAAE,GAAGhB,UAAL;AAAiBQ,YAAjB;AAAuB7B;AAAvB,OAAnB;AACA;;AACJ,SAAK,EAAL;AAAS;AACLqC,sBAAgB,GAAG,EAAE,GAAGhB,UAAL;AAAiBS,iBAAjB;AAA4BC;AAA5B,OAAnB;AACA;;AACJ,SAAK,CAAL;AACA,SAAK,EAAL;AAAS;AACL;;AACJ;AACIM,sBAAgB,GAAG,EAAE,GAAGhB;AAAL,OAAnB;AA1BR;;AA6BA,SAAO;AACHlmB,UAAM,EAAE;AACJlB,cAAQ,EAAE;AACNiD,YAAI,EAAE,qBADA;AAENxB,eAAO,EAAE;AACL6mB,kBAAQ,EAAE;AAAErlB,gBAAI,EAAE,UAAR;AAAoBlB,gBAAI,EAAE,QAA1B;AAAoC8B,eAAG,EAAE,UAAzC;AAAqDd,mBAAO,EAAEokB;AAA9D,WADL;AAELrZ,iBAAO,EAAE;AAAE7K,gBAAI,EAAE,SAAR;AAAmBlB,gBAAI,EAAE,UAAzB;AAAqC8B,eAAG,EAAE;AAA1C,WAFJ;AAGL,aAAGukB;AAHE;AAFH;AADN;AADL,GAAP;AAYH,CA3CD,C,CA6CA;AACA;AACA;;;AACO,MAAM/H,kBAAN,SAAiC5hB,gDAAjC,CAA2C;AAC9CC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AAEA,SAAKgC,MAAL,GAAcpB,sDAAQ,CAAC8D,GAAT,CAAc,eAAc1E,KAAK,CAACC,MAAN,CAAa,CAAb,CAAgB,GAA5C,CAAd;AACA,SAAKV,KAAL,GAAa;AACT2pB,cAAQ,EAAE,KAAKlnB,MAAL,CAAYknB;AADb,KAAb;AAGH;;AAEDnpB,QAAM,CAACC,KAAD,EAAQ;AACV,UAAMskB,UAAU,GAAGyE,aAAa,CAAC,KAAKxpB,KAAL,CAAW2pB,QAAZ,CAAhC;;AACA5E,cAAU,CAACxiB,MAAX,CAAkBlB,QAAlB,CAA2ByB,OAA3B,CAAmC6mB,QAAnC,CAA4CnmB,QAA5C,GAAwDG,CAAD,IAAO;AAC1D,WAAKpD,QAAL,CAAc;AAAEopB,gBAAQ,EAAEhmB,CAAC,CAACimB,aAAF,CAAgBzmB;AAA5B,OAAd;AACH,KAFD;;AAGA4hB,cAAU,CAAC1hB,MAAX,GAAqBf,MAAD,IAAY;AAC5BjB,4DAAQ,CAAC2C,GAAT,CAAc,eAAcvD,KAAK,CAACC,MAAN,CAAa,CAAb,CAAgB,GAA5C,EAAgD4B,MAAhD;AACA7C,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,cAArB;AACH,KAHD;;AAKA,WACI,iDAAC,qDAAD;AAAM,YAAM,EAAEolB,UAAd;AAA0B,cAAQ,EAAE,KAAKtiB;AAAzC,MADJ;AAGH;;AAvB6C,C;;;;;;;;;;;;ACxFlD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEO,MAAMoe,eAAN,SAA8B/gB,gDAA9B,CAAwC;AAC3CU,QAAM,CAACC,KAAD,EAAQ;AACV,UAAMiH,WAAW,GAAGrG,sDAAQ,CAAC8D,GAAT,CAAa,aAAb,CAApB;AACA,UAAMyC,aAAa,GAAGvG,sDAAQ,CAAC8D,GAAT,CAAa,eAAb,CAAtB;AACA,WACI,mEAAM,2EAAN,EACA,8DAAMuC,WAAW,CAAChF,GAAZ,CAAgB,CAAC4U,CAAD,EAAItS,CAAJ,KAAU;AAC5B,YAAM6kB,OAAO,GAAI,qBAAoB7kB,CAAE,EAAvC;AACA,aACI;AAAK,aAAK,EAAC;AAAX,SACI;AAAM,aAAK,EAAC;AAAZ,SACKA,CAAC,GAAC,CADP,QACasS,CAAC,CAACnI,OAAH,GAAe,qEAAf,GAAmC,qEAD/C,eAEkBqZ,2DAAS,CAAC/mB,IAAV,CAAe+hB,CAAC,IAAIA,CAAC,CAACrgB,KAAF,KAAYmU,CAAC,CAACqS,QAAlC,EAA4CrlB,IAF9D,aAE2EgT,CAAC,CAACjW,QAAF,CAAWiJ,IAFtF,YAEkGgN,CAAC,CAACjW,QAAF,CAAWikB,IAF7G,EAGI;AAAG,YAAI,EAAEuE;AAAT,gBAHJ,CADJ,CADJ;AASH,KAXK,CAAN,CADA,EAaA,6EAbA,EAcA,8DAAMjiB,aAAa,CAAClF,GAAd,CAAkB,CAACkV,CAAD,EAAI5S,CAAJ,KAAU;AAC9B,YAAM6kB,OAAO,GAAI,uBAAsB7kB,CAAE,EAAzC;AACA,aACI;AAAK,aAAK,EAAC;AAAX,SACI;AAAM,aAAK,EAAC;AAAZ,SACKA,CAAC,GAAC,CADP,QACa4S,CAAC,CAACzI,OAAH,GAAe,qEAAf,GAAmC,qEAD/C,eAEkByI,CAAC,CAACxU,IAFpB,aAEiCwU,CAAC,CAACvW,QAAF,CAAWiJ,IAF5C,YAEwDsN,CAAC,CAACvW,QAAF,CAAWikB,IAFnE,EAGI;AAAG,YAAI,EAAEuE;AAAT,gBAHJ,CADJ,CADJ;AASH,KAXK,CAAN,CAdA,CADJ;AA6BH;;AAjC0C,C;;;;;;;;;;;;ACJ/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA,MAAMpB,UAAU,GAAG;AACftZ,SAAO,EAAE;AAAE7K,QAAI,EAAE,SAAR;AAAmBlB,QAAI,EAAE,UAAzB;AAAqC8B,OAAG,EAAE;AAA1C,GADM;AAEfZ,MAAI,EAAE;AAAEA,QAAI,EAAE,MAAR;AAAgBlB,QAAI,EAAE;AAAtB;AAFS,CAAnB;;AAKA,MAAMomB,aAAa,GAAIpmB,IAAD,IAAU;AAC5B,QAAMwQ,MAAM,GAAGT,gDAAO,CAAC1R,IAAR,CAAaqoB,CAAC,IAAIA,CAAC,CAAC3mB,KAAF,KAAYY,QAAQ,CAACX,IAAD,CAAtC,CAAf;AACA,MAAI,CAACwQ,MAAL,EAAa,OAAO,IAAP;AAEb,SAAO;AACHrR,UAAM,EAAE;AACJlB,cAAQ,EAAE;AACNiD,YAAI,EAAE,iBADA;AAENxB,eAAO,EAAE;AACL8Q,gBAAM,EAAE;AAAEtP,gBAAI,EAAE,QAAR;AAAkBlB,gBAAI,EAAE,QAAxB;AAAkC8B,eAAG,EAAE,QAAvC;AAAiDd,mBAAO,EAAE+O,gDAAOA;AAAjE,WADH;AAEL,aAAGsV;AAFE;AAFH,OADN;AASJ,SAAG7U,MAAM,CAACR,MATN;AAUJ9Q,YAAM,EAAE;AACJgC,YAAI,EAAE,QADF;AAEJxB,eAAO,EAAE,EACL,GAAG,CAAC,GAAG,IAAI+B,KAAJ,CAAU,CAAV,CAAJ,EAAkBklB,MAAlB,CAAyB,CAACC,GAAD,EAAMnjB,CAAN,EAAS7B,CAAT,KAAe;AACvCglB,eAAG,CAAE,QAAOhlB,CAAE,EAAX,CAAH,GAAmB,CAAC;AAAEV,kBAAI,EAAE,MAAR;AAAgBY,iBAAG,EAAG,mBAAkBF,CAAE,QAA1C;AAAmD5B,kBAAI,EAAE;AAAzD,aAAD,EAAsE;AAAEkB,kBAAI,EAAE,SAAR;AAAmBY,iBAAG,EAAG,mBAAkBF,CAAE,WAA7C;AAAyD5B,kBAAI,EAAE;AAA/D,aAAtE,CAAnB;AACA,mBAAO4mB,GAAP;AACH,WAHE,EAGA,EAHA;AADE;AAFL;AAVJ;AADL,GAAP;AAsBH,CA1BD,C,CA4BA;AACA;AACA;;;AACO,MAAMrI,eAAN,SAA8B7hB,gDAA9B,CAAwC;AAC3CC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AAEA,SAAKgC,MAAL,GAAcpB,sDAAQ,CAAC8D,GAAT,CAAc,SAAQ1E,KAAK,CAACC,MAAN,CAAa,CAAb,CAAgB,GAAtC,CAAd;AACA,SAAKV,KAAL,GAAa;AACT4T,YAAM,EAAE,KAAKnR,MAAL,CAAYmR;AADX,KAAb;AAGH;;AAEDpT,QAAM,CAACC,KAAD,EAAQ;AACV,UAAMskB,UAAU,GAAGyE,aAAa,CAAC,KAAKxpB,KAAL,CAAW4T,MAAZ,CAAhC;;AACA,QAAI,CAACmR,UAAL,EAAiB;AACbkF,WAAK,CAAC,wCAAD,CAAL;AACAxqB,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,UAArB;AACH;;AACDolB,cAAU,CAACxiB,MAAX,CAAkBlB,QAAlB,CAA2ByB,OAA3B,CAAmC8Q,MAAnC,CAA0CpQ,QAA1C,GAAsDG,CAAD,IAAO;AACxD,WAAKpD,QAAL,CAAc;AAAEqT,cAAM,EAAEjQ,CAAC,CAACimB,aAAF,CAAgBzmB;AAA1B,OAAd;AACH,KAFD;;AAGA4hB,cAAU,CAAC1hB,MAAX,GAAqBf,MAAD,IAAY;AAC5BjB,4DAAQ,CAAC2C,GAAT,CAAc,SAAQvD,KAAK,CAACC,MAAN,CAAa,CAAb,CAAgB,GAAtC,EAA0C4B,MAA1C;AACA7C,YAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,UAArB;AACH,KAHD;;AAIA,WACI,iDAAC,qDAAD;AAAM,YAAM,EAAEolB,UAAd;AAA0B,cAAQ,EAAE,KAAKtiB;AAAzC,MADJ;AAGH;;AA1B0C,C;;;;;;;;;;;;ACzC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEO,MAAMme,WAAN,SAA0B9gB,gDAA1B,CAAoC;AACvCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;;AAEA,SAAKypB,kBAAL,GAA2BvmB,CAAD,IAAO;AAC7BtC,4DAAQ,CAAC2C,GAAT,CAAaL,CAAC,CAACimB,aAAF,CAAgBO,OAAhB,CAAwBzmB,IAArC,EAA2CC,CAAC,CAACimB,aAAF,CAAgBhmB,OAAhB,GAA0B,CAA1B,GAA8B,CAAzE;AACH,KAFD;AAGH;;AACDpD,QAAM,CAACC,KAAD,EAAQ;AACV,UAAM+G,KAAK,GAAGnG,sDAAQ,CAAC8D,GAAT,CAAa,OAAb,CAAd;AACA,QAAI,CAACqC,KAAL,EAAY;AACZ,WACI,8DACCA,KAAK,CAAC9E,GAAN,CAAU,CAACuQ,IAAD,EAAOjO,CAAP,KAAa;AACpB,YAAM6kB,OAAO,GAAI,iBAAgB7kB,CAAE,EAAnC;AACA,YAAM4O,MAAM,GAAGT,gDAAO,CAAC1R,IAAR,CAAaqoB,CAAC,IAAIA,CAAC,CAAC3mB,KAAF,KAAY8P,IAAI,CAACW,MAAnC,CAAf;AACA,YAAMwW,UAAU,GAAGxW,MAAM,GAAGA,MAAM,CAACtP,IAAV,GAAiB,aAA1C;AACA,YAAM+lB,WAAW,GAAI,SAAQrlB,CAAE,WAA/B;AACA,aACI;AAAK,aAAK,EAAC;AAAX,SACI;AAAM,aAAK,EAAC;AAAZ,SACMA,CAAC,GAAC,CADR,QACY;AAAO,YAAI,EAAC,UAAZ;AAAuB,sBAAc,EAAEiO,IAAI,CAAC9D,OAA5C;AAAqD,qBAAWkb,WAAhE;AAA6E,gBAAQ,EAAE,KAAKH;AAA5F,QADZ,cAEkBjX,IAAI,CAAC5R,QAAL,CAAciD,IAFhC,QAEwC8lB,UAFxC,QAEsDnX,IAAI,CAAC5H,KAAL,KAAa,GAAb,GAAkB,QAAO4H,IAAI,CAAC5H,KAAM,EAApC,GAAsC,EAF5F,EAGI;AAAG,YAAI,EAAEwe;AAAT,gBAHJ,CADJ,EAMI;AAAM,aAAK,EAAC;AAAZ,QANJ,CADJ;AAcH,KAnBA,CADD,CADJ;AAwBH;;AAnCsC,C;;;;;;;;;;;;ACJ3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGO,MAAMjI,QAAN,SAAuB9hB,gDAAvB,CAAiC;AACpCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AAEA,SAAKW,IAAL,GAAYC,sDAAQ,CAACD,IAAT,EAAZ;AACA,SAAKkpB,KAAL,GAAa,CAAb;;AAEA,SAAKC,YAAL,GAAoB,MAAM;AACtB,UAAI,KAAKD,KAAL,KAAe,CAAnB,EAAsB;AAClB,aAAKlpB,IAAL,CAAUsB,GAAV,CAAconB,CAAC,IAAI;AACf,gBAAM1S,KAAK,GAAG,KAAKnU,IAAL,CAAUC,QAAV,CAAmB4mB,CAAC,CAAC1qB,IAArB,CAAd;;AACA,cAAI,CAACgY,KAAK,CAACxT,OAAX,EAAoB;AAChBvC,kEAAQ,CAAC2C,GAAT,CAAaoT,KAAK,CAAC9S,IAAnB,EAAyBwlB,CAAC,CAACvF,IAA3B;AACH;AACJ,SALD;AAMAljB,8DAAQ,CAACkiB,KAAT;AACA,aAAKniB,IAAL,GAAYC,sDAAQ,CAACD,IAAT,EAAZ;AACA,aAAKoH,IAAL,GAAYU,mEAAU,CAAC,KAAD,CAAtB;AAEA,aAAKshB,QAAL,GAAgB3lB,KAAK,CAAC8S,IAAN,CAAW,IAAIzP,UAAJ,CAAe,KAAKM,IAApB,CAAX,CAAhB;AACA,aAAKgiB,QAAL,GAAgB,KAAKA,QAAL,CAAc9nB,GAAd,CAAkB,CAAC4f,IAAD,EAAOtd,CAAP,KAAa;AAC3C,cAAIsd,IAAI,KAAKjhB,sDAAQ,CAAC4G,MAAT,CAAgBjD,CAAhB,CAAb,EAAiC;AAC7B,mBAAQ,wBAAuBsd,IAAI,CAACjjB,QAAL,CAAc,EAAd,CAAkB,MAAjD;AACH,WAFD,MAEO,OAAQ,GAAEijB,IAAI,CAACjjB,QAAL,CAAc,EAAd,CAAkB,EAA5B;AACV,SAJe,CAAhB;AAKA,aAAKmrB,QAAL,GAAgB,KAAKA,QAAL,CAAc1Q,IAAd,CAAmB,GAAnB,CAAhB;AACA,aAAKwQ,KAAL,GAAa,CAAb;AACA;AACH;;AAEDjV,oEAAS,CAAC,YAAD,EAAe,KAAK7M,IAApB,CAAT,CAAmCpB,IAAnC,CAAwC,MAAM;AAC1C,aAAKkjB,KAAL,GAAa,CAAb;AACA7qB,cAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,UAArB;AACH,OAHD;AAKH,KA5BD;AA6BH;;AAGDa,QAAM,CAACC,KAAD,EAAQ;AACV,QAAI,KAAK+pB,QAAT,EAAmB;AACf,aAAQ,8DAAK;AAAK,+BAAuB,EAAE;AAAEC,gBAAM,EAAE,KAAKD;AAAf;AAA9B,QAAL,EAAmE;AAAQ,YAAI,EAAC,QAAb;AAAsB,eAAO,EAAE,KAAKD;AAApC,iBAAnE,CAAR;AACH;;AACD,WACI;AAAM,SAAG,EAAEllB,GAAG,IAAI,KAAKpC,IAAL,GAAYoC;AAA9B,OACK,KAAKjE,IAAL,CAAUsB,GAAV,CAAcgoB,MAAM,IAAI;AACrB,aACI,8DACI,4DAAIA,MAAM,CAACtrB,IAAX,CADJ,gBACkC,4DAAIsgB,IAAI,CAACC,SAAL,CAAe+K,MAAM,CAACnG,IAAtB,CAAJ,CADlC,WAC2E,4DAAI7E,IAAI,CAACC,SAAL,CAAe+K,MAAM,CAAClG,IAAtB,CAAJ,CAD3E,OACgH;AAAO,YAAI,EAAEkG,MAAM,CAACtrB,IAApB;AAA0B,YAAI,EAAC,UAA/B;AAA0C,sBAAc,EAAE;AAA1D,QADhH,CADJ;AAKH,KANA,CADL,EAQI;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKmrB;AAApC,eARJ,CADJ;AAYH;;AAvDmC,C;;;;;;;;;;;;ACNxC;AAAA;AAAA;AAAA;AAEA,MAAMpX,OAAO,GAAG,CACZ;AAAEgP,IAAE,EAAE,CAAN;AAAS7d,MAAI,EAAE,QAAf;AAAyBlB,MAAI,EAAE,MAA/B;AAAuCsQ,MAAI,EAAE,CAAC;AAAEpP,QAAI,EAAE,aAAR;AAAuBqmB,WAAO,EAAE,EAAhC;AAAoCxnB,SAAK,EAAE;AAA3C,GAAD,EAAkD;AAAEmB,QAAI,EAAE,UAAR;AAAoBqmB,WAAO,EAAE,EAA7B;AAAiCxnB,SAAK,EAAE;AAAxC,GAAlD;AAA7C,CADY,EAEZ;AAAEgf,IAAE,EAAE,CAAN;AAAS7d,MAAI,EAAE,UAAf;AAA2BlB,MAAI,EAAE,kBAAjC;AAAqDsQ,MAAI,EAAE,CAAC;AAAEpP,QAAI,EAAE,QAAR;AAAkBqmB,WAAO,EAAE,EAA3B;AAA+BxnB,SAAK,EAAE;AAAtC,GAAD;AAA3D,CAFY,CAAhB;AAKO,MAAMoe,YAAN,SAA2BzhB,gDAA3B,CAAqC;AACxCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AACA,SAAKT,KAAL,GAAa;AACTmT,aAAO,EAAE;AADA,KAAb;;AAIA,SAAKyX,OAAL,GAAe,MAAM;AACjBzjB,WAAK,CAAC,aAAD,CAAL,CAAqBC,IAArB,CAA0BmS,CAAC,IAAIA,CAAC,CAACjG,IAAF,EAA/B,EAAyClM,IAAzC,CAA8CmS,CAAC,IAAI;AAC/C,aAAKhZ,QAAL,CAAc;AAAE4S,iBAAO,EAAEoG;AAAX,SAAd;AACH,OAFD;AAGH,KAJD;;AAMA,SAAKsR,QAAL,GAAgB,MAAM;AAClB1jB,WAAK,CAAC,cAAD,CAAL,CAAsBC,IAAtB,CAA2BmS,CAAC,IAAIA,CAAC,CAACjG,IAAF,EAAhC,EAA0ClM,IAA1C,CAA+CmS,CAAC,IAAI;AAChD,aAAKhZ,QAAL,CAAc;AAAE4S,iBAAO,EAAEoG;AAAX,SAAd;AACH,OAFD;AAGH,KAJD;AAKH;;AAED/Y,QAAM,CAACC,KAAD,EAAQ;AACV,WACI,8DACI,8DACI;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKmqB;AAApC,kBADJ,EAEI;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKC;AAApC,mBAFJ,CADJ,EAKI,gEAAQ,KAAK7qB,KAAL,CAAWmT,OAAX,CAAmBzQ,GAAnB,CAAuBkR,MAAM,IAAI;AACrC,aACI;AAAI,aAAK,EAAC;AAAV,SACI;AAAI,aAAK,EAAC;AAAV,SACK8L,IAAI,CAACC,SAAL,CAAe/L,MAAf,CADL,CADJ,CADJ;AAOH,KARO,CAAR,CALJ,CADJ;AAiBH;;AAtCuC,C;;;;;;;;;;;;ACP5C;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,MAAMmR,UAAU,GAAG;AACf1hB,QAAM,EAAGyf,IAAD,IAAU;AAAE/a,WAAO,CAACC,GAAR,CAAY8a,IAAZ;AAAoB,GADzB;AAEfvgB,QAAM,EAAE;AACJuoB,QAAI,EAAE;AACFxmB,UAAI,EAAE,kBADJ;AAEFxB,aAAO,EAAE;AACL2I,YAAI,EAAE;AAAEnH,cAAI,EAAE,gBAAR;AAA0BlB,cAAI,EAAE;AAAhC,SADD;AAELikB,YAAI,EAAE;AAAE/iB,cAAI,EAAE,kBAAR;AAA4BlB,cAAI,EAAE;AAAlC,SAFD;AAGL2nB,eAAO,EAAE;AAAEzmB,cAAI,EAAE,qBAAR;AAA+BlB,cAAI,EAAE;AAArC,SAHJ;AAILiiB,WAAG,EAAE;AAAE/gB,cAAI,EAAE,qBAAR;AAA+BlB,cAAI,EAAE;AAArC,SAJA;AAKL4E,WAAG,EAAE;AAAE1D,cAAI,EAAE,iBAAR;AAA2BlB,cAAI,EAAE;AAAjC;AALA;AAFP,KADF;AAWJrB,QAAI,EAAE;AACFuC,UAAI,EAAE,4BADJ;AAEFxB,aAAO,EAAE;AACLL,cAAM,EAAE;AAAE6B,cAAI,EAAE,oBAAR;AAA8BlB,cAAI,EAAE,QAApC;AAA8CgB,iBAAO,EAAE,CAC3D;AAAEE,gBAAI,EAAE,SAAR;AAAmBnB,iBAAK,EAAE;AAA1B,WAD2D,EAE3D;AAAEmB,gBAAI,EAAE,cAAR;AAAwBnB,iBAAK,EAAE;AAA/B,WAF2D,EAG3D;AAAEmB,gBAAI,EAAE,aAAR;AAAuBnB,iBAAK,EAAE;AAA9B,WAH2D,EAI3D;AAAEmB,gBAAI,EAAE,YAAR;AAAsBnB,iBAAK,EAAE;AAA7B,WAJ2D,EAK3D;AAAEmB,gBAAI,EAAE,gBAAR;AAA0BnB,iBAAK,EAAE;AAAjC,WAL2D,EAM3D;AAAEmB,gBAAI,EAAE,gBAAR;AAA0BnB,iBAAK,EAAE;AAAjC,WAN2D,EAO3D;AAAEmB,gBAAI,EAAE,gBAAR;AAA0BnB,iBAAK,EAAE;AAAjC,WAP2D,EAQ3D;AAAEmB,gBAAI,EAAE,YAAR;AAAsBnB,iBAAK,EAAE;AAA7B,WAR2D,EAS3D;AAAEmB,gBAAI,EAAE,YAAR;AAAsBnB,iBAAK,EAAE;AAA7B,WAT2D,EAU3D;AAAEmB,gBAAI,EAAE,eAAR;AAAyBnB,iBAAK,EAAE;AAAhC,WAV2D,EAW3D;AAAEmB,gBAAI,EAAE,SAAR;AAAmBnB,iBAAK,EAAE;AAA1B,WAX2D;AAAvD;AADH;AAFP;AAXF;AAFO,CAAnB;AAkCA,MAAMV,MAAM,GAAG,EAAf;AAEO,MAAM4e,gBAAN,SAA+BvhB,gDAA/B,CAAyC;AAC5CU,QAAM,CAACC,KAAD,EAAQ;AACVskB,cAAU,CAAC1hB,MAAX,GAAqBZ,MAAD,IAAY;AAC5B,YAAM+F,IAAI,GAAG,IAAImN,QAAJ,EAAb;AACA,UAAIlT,MAAM,CAACqoB,IAAP,CAAYrf,IAAhB,EAAsBjD,IAAI,CAACoN,MAAL,CAAY,KAAZ,EAAmB,IAAnB;AACtB,UAAInT,MAAM,CAACqoB,IAAP,CAAYzD,IAAhB,EAAsB7e,IAAI,CAACoN,MAAL,CAAY,IAAZ,EAAkB,IAAlB;AACtB,UAAInT,MAAM,CAACqoB,IAAP,CAAYC,OAAhB,EAAyBviB,IAAI,CAACoN,MAAL,CAAY,MAAZ,EAAoB,IAApB;AACzB,UAAInT,MAAM,CAACqoB,IAAP,CAAYzF,GAAhB,EAAqB7c,IAAI,CAACoN,MAAL,CAAY,MAAZ,EAAoB,IAApB;AACrB,UAAInT,MAAM,CAACqoB,IAAP,CAAY9iB,GAAhB,EAAqBQ,IAAI,CAACoN,MAAL,CAAY,MAAZ,EAAoB,IAApB;AACrBpN,UAAI,CAACoN,MAAL,CAAY,KAAZ,EAAmBnT,MAAM,CAACV,IAAP,CAAYU,MAA/B;AACA+F,UAAI,CAACoN,MAAL,CAAY,UAAZ,EAAwB,kBAAxB;AACAzO,WAAK,CAAC,eAAD,EAAkB;AACnB0O,cAAM,EAAE,MADW;AAEnB1T,YAAI,EAAEqG;AAFa,OAAlB,CAAL,CAGGpB,IAHH,CAGQ,MAAM;AACVoB,YAAI,CAACwiB,MAAL,CAAY,UAAZ;AACAxiB,YAAI,CAACoN,MAAL,CAAY,qBAAZ,EAAmC,eAAnC;AACAzO,aAAK,CAAC,eAAD,EAAkB;AACnB0O,gBAAM,EAAE,MADW;AAEnB1T,cAAI,EAAEqG;AAFa,SAAlB,CAAL,CAGGpB,IAHH,CAGQ,MAAM;AACVmZ,oBAAU,CAAC,MAAM;AACb9gB,kBAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAqB,UAArB;AACH,WAFS,EAEP,IAFO,CAAV;AAGH,SAPD,EAOGgE,CAAC,IAAI,CAEP,CATD;AAUH,OAhBD,EAgBGA,CAAC,IAAI,CAEP,CAlBD;AAmBH,KA5BD;;AA6BA,WACI,iDAAC,qDAAD;AAAM,YAAM,EAAEohB,UAAd;AAA0B,cAAQ,EAAEtiB;AAApC,MADJ;AAGH;;AAlC2C,C;;;;;;;;;;;;ACvChD;AAAA;AAAA;AAAA;AAAA;AACA;AAEO,MAAMgf,MAAN,SAAqB3hB,gDAArB,CAA+B;AAClCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AACA,SAAKT,KAAL,GAAa;AAAEirB,WAAK,EAAE;AAAT,KAAb;;AAEA,SAAK5oB,QAAL,GAAgB,MAAM;AAClBgT,oEAAS,CAAC,KAAKG,IAAL,CAAUyV,KAAV,CAAgB,CAAhB,CAAD,CAAT;AACH,KAFD;;AAIA,SAAKhV,UAAL,GAAkBtS,CAAC,IAAI;AACnB,YAAM8E,QAAQ,GAAG9E,CAAC,CAACimB,aAAF,CAAgBphB,IAAhB,CAAqBlE,IAAtC;AACA2R,qEAAU,CAACxN,QAAD,CAAV,CAAqBrB,IAArB,CAA0B,MAAO,KAAKD,KAAL,EAAjC;AACH,KAHD;AAIH;;AAEDA,OAAK,GAAG;AACJA,SAAK,CAAC,WAAD,CAAL,CAAmBC,IAAnB,CAAwBC,QAAQ,IAAIA,QAAQ,CAACiM,IAAT,EAApC,EAAqDlM,IAArD,CAA0D8jB,QAAQ,IAAI;AAClE,WAAK3qB,QAAL,CAAc;AAAE0qB,aAAK,EAAEC;AAAT,OAAd;AACH,KAFD;AAGH;;AAED1qB,QAAM,CAACC,KAAD,EAAQ;AACV,WACI,8DACI;AAAM,WAAK,EAAC;AAAZ,OACI;AAAK,WAAK,EAAC;AAAX,OACI;AAAO,SAAG,EAAC,MAAX;AAAkB,WAAK,EAAC;AAAxB,eADJ,EAII;AAAO,QAAE,EAAC,MAAV;AAAiB,UAAI,EAAC,MAAtB;AAA6B,SAAG,EAAE4E,GAAG,IAAI,KAAKmQ,IAAL,GAAYnQ;AAArD,MAJJ,EAMI;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKhD;AAApC,gBANJ,CADJ,CADJ,EAWI;AAAO,WAAK,EAAC;AAAb,OACI,gEACI,6DACI,oEADJ,EAEI,oEAFJ,EAGI,4DAHJ,CADJ,CADJ,EAQI,gEACK,KAAKrC,KAAL,CAAWirB,KAAX,CAAiBvoB,GAAjB,CAAqB8S,IAAI,IAAI;AAC1B,YAAM5M,GAAG,GAAI,IAAG4M,IAAI,CAAC/M,QAAS,EAA9B;AACA,aACJ,6DACI,6DAAI;AAAG,YAAI,EAAEG;AAAT,SAAe4M,IAAI,CAAC/M,QAApB,CAAJ,CADJ,EAEI,6DAAK+M,IAAI,CAAC9K,IAAV,CAFJ,EAGI,6DACI;AAAQ,YAAI,EAAC,QAAb;AAAsB,eAAO,EAAE,KAAKuL,UAApC;AAAgD,qBAAWT,IAAI,CAAC/M;AAAhE,aADJ,CAHJ,CADI;AAQI,KAVP,CADL,CARJ,CAXJ,CADJ;AAqCH;;AAED3H,mBAAiB,GAAG;AAChB,SAAKqG,KAAL;AACH;;AA/DiC,C;;;;;;;;;;;;ACHtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AAAA;AACA;AAEO,MAAMga,QAAN,SAAuBrhB,gDAAvB,CAAiC;AACpCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;;AAEA,SAAK4B,QAAL,GAAgB,MAAM;AAClBgT,oEAAS,CAAC,KAAKG,IAAL,CAAUyV,KAAV,CAAgB,CAAhB,CAAD,CAAT;AACH,KAFD;AAGH;;AAEDzqB,QAAM,CAACC,KAAD,EAAQ;AACV,WAAQ;AAAM,WAAK,EAAC;AAAZ,OACA;AAAK,WAAK,EAAC;AAAX,OACI;AAAO,SAAG,EAAC,MAAX;AAAkB,WAAK,EAAC;AAAxB,eADJ,EAII;AAAO,QAAE,EAAC,MAAV;AAAiB,UAAI,EAAC,MAAtB;AAA6B,SAAG,EAAE4E,GAAG,IAAI,KAAKmQ,IAAL,GAAYnQ;AAArD,MAJJ,EAKI;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKhD;AAApC,gBALJ,CADA,CAAR;AASH;;AAnBmC,C;;;;;;;;;;;;ACHxC;AAAA;AAAA;AAAA;AAGO,MAAM+e,UAAN,SAAyBthB,gDAAzB,CAAmC;AACtCU,QAAM,CAACC,KAAD,EAAQ;AACV,WACI,2IADJ;AAGH;;AAEDK,mBAAiB,GAAG;AAChBqG,SAAK,CAAC,SAAD,CAAL,CAAiBC,IAAjB,CAAsB,MAAM;AACxBmZ,gBAAU,CAAC,MAAM;AACb9gB,cAAM,CAACC,QAAP,CAAgByrB,IAAhB,GAAuB,UAAvB;AACH,OAFS,EAEP,IAFO,CAAV;AAGH,KAJD;AAKH;;AAbqC,C;;;;;;;;;;;;ACH1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEO,MAAMrK,eAAN,SAA8BhhB,gDAA9B,CAAwC;AAC3CC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AACA,SAAKkT,KAAL,GAAaA,2DAAb;AACH;;AAEDnT,QAAM,CAACC,KAAD,EAAQ;AACV,WACI;AAAK,WAAK,EAAC,QAAX;AAAoB,SAAG,EAAE4E,GAAG,IAAG,KAAKmT,OAAL,GAAenT;AAA9C,MADJ;AAIH;;AAEDvE,mBAAiB,GAAG;AAChB2S,uEAAc,GAAGrM,IAAjB,CAAuB6P,GAAD,IAAS;AAC3BA,SAAG,CAACtD,KAAJ,CAAUgN,OAAV,CAAkB/M,MAAM,IAAID,2DAAK,CAACyX,OAAN,CAAcxX,MAAd,CAA5B;AACA,YAAMyX,UAAU,GAAG1X,2DAAK,CAAClS,IAAN,CAAWmV,IAAI,IAAIA,IAAI,CAACxT,IAAL,KAAc,SAAjC,CAAnB;;AACA,UAAI,CAACioB,UAAU,CAAC5oB,MAAX,CAAkB,CAAlB,EAAqB6oB,MAA1B,EAAkC;AAC9BrU,WAAG,CAACvD,IAAJ,CAASiN,OAAT,CAAiBxS,CAAC,IAAIkd,UAAU,CAAC5oB,MAAX,CAAkB,CAAlB,EAAqBH,MAArB,CAA4ByR,IAA5B,CAAiC5F,CAAjC,CAAtB;AACAkd,kBAAU,CAAC5oB,MAAX,CAAkB,CAAlB,EAAqB6oB,MAArB,GAA8B,IAA9B;AACH;;AAED,WAAK5T,KAAL,GAAa,IAAIwH,0DAAJ,CAAe,KAAK1G,OAApB,EAA6B7E,2DAA7B,EAAoC;AAC7CtQ,cAAM,EAAE,CAACZ,MAAD,EAAS+W,KAAT,KAAmB;AACvBrD,8EAAe,CAAC1T,MAAD,CAAf;AACA6T,wEAAS,CAACkD,KAAD,CAAT;AACH;AAJ4C,OAApC,CAAb;AAOApD,yEAAc,GAAGhP,IAAjB,CAAsB3E,MAAM,IAAI;AAC5B,aAAKiV,KAAL,CAAW1V,UAAX,CAAsBS,MAAtB;AACH,OAFD;AAGH,KAlBD;AAmBH;;AAjC0C,C;;;;;;;;;;;;ACL/C;AAAA;AAAA;AAAA;AAGA,MAAM+W,KAAK,GAAG,CACV;AAAElV,MAAI,EAAE,QAAR;AAAkBkR,MAAI,EAAE,YAAxB;AAAsCtC,OAAK,EAAE;AAA7C,CADU,EAEV;AAAE5O,MAAI,EAAE,QAAR;AAAkBkR,MAAI,EAAE,YAAxB;AAAsCtC,OAAK,EAAE;AAA7C,CAFU,EAGV;AAAE5O,MAAI,EAAE,QAAR;AAAkBkR,MAAI,EAAE,YAAxB;AAAsCtC,OAAK,EAAE;AAA7C,CAHU,EAIV;AAAE5O,MAAI,EAAE,QAAR;AAAkBkR,MAAI,EAAE,YAAxB;AAAsCtC,OAAK,EAAE;AAA7C,CAJU,CAAd;AAOO,MAAMgO,SAAN,SAAwBphB,gDAAxB,CAAkC;AAErCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AACA,SAAKT,KAAL,GAAa;AACTiE,cAAQ,EAAEuV,KAAK,CAAC,CAAD;AADN,KAAb;;AAIA,SAAK+R,gBAAL,GAAyB5nB,CAAD,IAAO;AAC3B,WAAKpD,QAAL,CAAc;AAAE0D,gBAAQ,EAAEuV,KAAK,CAAC7V,CAAC,CAACimB,aAAF,CAAgBzmB,KAAjB;AAAjB,OAAd;AACH,KAFD;;AAIA,SAAKqoB,QAAL,GAAgB,MAAM;AAClB,YAAMhjB,IAAI,GAAG,IAAImN,QAAJ,EAAb;AACAnN,UAAI,CAACoN,MAAL,CAAY,KAAZ,EAAmB,KAAK5V,KAAL,CAAWiE,QAAX,CAAoBiP,KAAvC;AACA1K,UAAI,CAACoN,MAAL,CAAY,OAAZ,EAAqB,KAAKiH,IAAL,CAAU1Z,KAA/B;AACAgE,WAAK,CAAC,QAAD,EAAW;AACZ0O,cAAM,EAAE,MADI;AAEZ1T,YAAI,EAAEqG;AAFM,OAAX,CAAL,CAGGpB,IAHH,CAGQmb,GAAG,IAAI;AACXxa,eAAO,CAACC,GAAR,CAAY,mBAAZ;AACAD,eAAO,CAACC,GAAR,CAAYua,GAAG,CAAC1F,IAAJ,EAAZ;AACH,OAND;AAOH,KAXD;;AAaA,SAAK1V,KAAL;AACH;;AAED3G,QAAM,CAACC,KAAD,EAAQ;AACV,WACI,8DACI,8DAAK;AAAQ,cAAQ,EAAE,KAAK8qB;AAAvB,OACD;AAAQ,WAAK,EAAC;AAAd,gBADC,EAED;AAAQ,WAAK,EAAC;AAAd,gBAFC,EAGD;AAAQ,WAAK,EAAC;AAAd,gBAHC,EAID;AAAQ,WAAK,EAAC;AAAd,gBAJC,CAAL,CADJ,EAOI,+DACI;AAAU,WAAK,EAAC,4BAAhB;AAA6C,SAAG,EAAElmB,GAAG,IAAI,KAAKwX,IAAL,GAAYxX;AAArE,MADJ,EAGI,8DACI;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKmmB;AAApC,cADJ,CAHJ,CAPJ,CADJ;AAiBH;;AAED,QAAMrkB,KAAN,GAAc;AACV,UAAM0V,IAAI,GAAG,MAAM1V,KAAK,CAAC,KAAKnH,KAAL,CAAWiE,QAAX,CAAoBuR,IAArB,CAAL,CAAgCpO,IAAhC,CAAqCC,QAAQ,IAAIA,QAAQ,CAACwV,IAAT,EAAjD,CAAnB;AACA,SAAKA,IAAL,CAAU1Z,KAAV,GAAkB0Z,IAAlB;AACH;;AAED,QAAM4O,kBAAN,GAA2B;AACvB,SAAKtkB,KAAL;AACH;;AAvDoC,C;;;;;;;;;;;;ACVzC;AAAA;AAAA;AAAA;AAEO,MAAMma,SAAN,SAAwBxhB,gDAAxB,CAAkC;AACrCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;AAEA,SAAKirB,OAAL,GAAe,EAAf;;AAEA,SAAKC,WAAL,GAAoBhoB,CAAD,IAAO;AACtBwD,WAAK,CAAE,gBAAe,KAAKykB,GAAL,CAASzoB,KAAM,EAAhC,CAAL,CAAwCiE,IAAxC,CAA6CC,QAAQ,IAAIA,QAAQ,CAACwV,IAAT,EAAzD,EAA0EzV,IAA1E,CAA+EC,QAAQ,IAAI;AACvF,aAAKwkB,SAAL,CAAe1oB,KAAf,GAAuBkE,QAAvB;AACH,OAFD;AAGH,KAJD;AAKH;;AAEDF,OAAK,GAAG;AACJA,SAAK,CAAC,UAAD,CAAL,CAAkBC,IAAlB,CAAuBC,QAAQ,IAAIA,QAAQ,CAACiM,IAAT,EAAnC,EAAoDlM,IAApD,CAAyDC,QAAQ,IAAI;AACjEA,cAAQ,CAACykB,GAAT,CAAaC,OAAb,CAAqBrpB,GAArB,CAAyBsF,GAAG,IAAI;AAC5B,aAAK0jB,OAAL,IAAiB,wBAAuB1jB,GAAG,CAACiG,KAAM,wBAAwB,IAAI+d,IAAJ,CAAShkB,GAAG,CAACikB,SAAb,EAAwBC,kBAAxB,EAA8C,8BAA6BlkB,GAAG,CAAC6U,IAAK,eAA9J;AACA,aAAK7U,GAAL,CAAS8U,SAAT,GAAqB,KAAK4O,OAA1B;;AACA,YAAI,IAAJ,EAAU;AACN,eAAK1jB,GAAL,CAASmkB,SAAT,GAAqB,KAAKnkB,GAAL,CAASokB,YAA9B;AACH;AACJ,OAND;AAOH,KARD;AASH;;AAED5rB,QAAM,CAACC,KAAD,EAAQ;AACV,WACI,8DACI;AAAK,WAAK,EAAC,iDAAX;AAA6D,SAAG,EAAE4E,GAAG,IAAI,KAAK2C,GAAL,GAAW3C;AAApF,0BADJ,EAEI,2EAAc;AAAO,UAAI,EAAC,MAAZ;AAAmB,SAAG,EAAEA,GAAG,IAAI,KAAKumB,GAAL,GAAWvmB;AAA1C,MAAd,EAA8D;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKsmB;AAApC,cAA9D,CAFJ,EAGI;AAAU,WAAK,EAAC,4BAAhB;AAA6C,SAAG,EAAEtmB,GAAG,IAAI,KAAKwmB,SAAL,GAAiBxmB;AAA1E,MAHJ,CADJ;AAOH;;AAEDvE,mBAAiB,GAAG;AAChB,SAAKc,QAAL,GAAgBC,WAAW,CAAC,MAAM;AAC9B,WAAKsF,KAAL;AACH,KAF0B,EAExB,IAFwB,CAA3B;AAGH;;AAEDrF,sBAAoB,GAAG;AACnB,QAAI,KAAKF,QAAT,EAAmByqB,aAAa,CAAC,KAAKzqB,QAAN,CAAb;AACtB;;AA3CoC,C;;;;;;;;;;;;ACFzC;AAAA;AAAA;AAAA;AAEO,MAAM4f,UAAN,SAAyB1hB,gDAAzB,CAAmC;AACtCC,aAAW,CAACU,KAAD,EAAQ;AACf,UAAMA,KAAN;;AAEA,SAAK4B,QAAL,GAAgB,MAAM;AAClB,YAAMmG,IAAI,GAAG,IAAImN,QAAJ,EAAb;AACAnN,UAAI,CAACoN,MAAL,CAAY,MAAZ,EAAoB,KAAKJ,IAAL,CAAUyV,KAAV,CAAgB,CAAhB,CAApB;AACAziB,UAAI,CAACoN,MAAL,CAAY,MAAZ,EAAoB,OAApB;AAEAzO,WAAK,CAAC,SAAD,EAAY;AACb0O,cAAM,EAAE,MADK;AAEb1T,YAAI,EAAEqG;AAFO,OAAZ,CAAL,CAGGpB,IAHH,CAGQ,MAAM,CAEb,CALD;AAMH,KAXD;AAYH;;AAED5G,QAAM,CAACC,KAAD,EAAQ;AACV,WACA;AAAM,WAAK,EAAC;AAAZ,OACI;AAAK,WAAK,EAAC;AAAX,OACI;AAAO,SAAG,EAAC,MAAX;AAAkB,WAAK,EAAC;AAAxB,mBADJ,EAII;AAAO,QAAE,EAAC,MAAV;AAAiB,UAAI,EAAC,MAAtB;AAA6B,SAAG,EAAE4E,GAAG,IAAI,KAAKmQ,IAAL,GAAYnQ;AAArD,MAJJ,EAKI;AAAQ,UAAI,EAAC,QAAb;AAAsB,aAAO,EAAE,KAAKhD;AAApC,gBALJ,CADJ,CADA;AAWH;;AA9BqC,C","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/app.js\");\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","export function fadeOut (element, cb) {\n if (element.style.opacity && element.style.opacity > 0.05) {\n element.style.opacity = element.style.opacity - 0.05\n } else if (element.style.opacity && element.style.opacity <= 0.1) {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n if (cb) cb()\n }\n } else {\n element.style.opacity = 0.9\n }\n setTimeout(() => fadeOut.apply(this, [element, cb]), 1000 / 30\n )\n}\n\nexport const LIB_NAME = 'mini-toastr'\n\nexport const ERROR = 'error'\nexport const WARN = 'warn'\nexport const SUCCESS = 'success'\nexport const INFO = 'info'\nexport const CONTAINER_CLASS = LIB_NAME\nexport const NOTIFICATION_CLASS = `${LIB_NAME}__notification`\nexport const TITLE_CLASS = `${LIB_NAME}-notification__title`\nexport const ICON_CLASS = `${LIB_NAME}-notification__icon`\nexport const MESSAGE_CLASS = `${LIB_NAME}-notification__message`\nexport const ERROR_CLASS = `-${ERROR}`\nexport const WARN_CLASS = `-${WARN}`\nexport const SUCCESS_CLASS = `-${SUCCESS}`\nexport const INFO_CLASS = `-${INFO}`\nexport const DEFAULT_TIMEOUT = 3000\n\nconst EMPTY_STRING = ''\n\nexport function flatten (obj, into, prefix) {\n into = into || {}\n prefix = prefix || EMPTY_STRING\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n const prop = obj[k]\n if (prop && typeof prop === 'object' && !(prop instanceof Date || prop instanceof RegExp)) {\n flatten(prop, into, prefix + k + ' ')\n } else {\n if (into[prefix] && typeof into[prefix] === 'object') {\n into[prefix][k] = prop\n } else {\n into[prefix] = {}\n into[prefix][k] = prop\n }\n }\n }\n }\n\n return into\n}\n\nexport function makeCss (obj) {\n const flat = flatten(obj)\n let str = JSON.stringify(flat, null, 2)\n str = str.replace(/\"([^\"]*)\": {/g, '$1 {')\n .replace(/\"([^\"]*)\"/g, '$1')\n .replace(/(\\w*-?\\w*): ([\\w\\d .#]*),?/g, '$1: $2;')\n .replace(/},/g, '}\\n')\n .replace(/ &([.:])/g, '$1')\n\n str = str.substr(1, str.lastIndexOf('}') - 1)\n\n return str\n}\n\nexport function appendStyles (css) {\n let head = document.head || document.getElementsByTagName('head')[0]\n let styleElem = makeNode('style')\n styleElem.id = `${LIB_NAME}-styles`\n styleElem.type = 'text/css'\n\n if (styleElem.styleSheet) {\n styleElem.styleSheet.cssText = css\n } else {\n styleElem.appendChild(document.createTextNode(css))\n }\n\n head.appendChild(styleElem)\n}\n\nexport const config = {\n types: {ERROR, WARN, SUCCESS, INFO},\n animation: fadeOut,\n timeout: DEFAULT_TIMEOUT,\n icons: {},\n appendTarget: document.body,\n node: makeNode(),\n allowHtml: false,\n style: {\n [`.${CONTAINER_CLASS}`]: {\n position: 'fixed',\n 'z-index': 99999,\n right: '12px',\n top: '12px'\n },\n [`.${NOTIFICATION_CLASS}`]: {\n cursor: 'pointer',\n padding: '12px 18px',\n margin: '0 0 6px 0',\n 'background-color': '#000',\n opacity: 0.8,\n color: '#fff',\n 'border-radius': '3px',\n 'box-shadow': '#3c3b3b 0 0 12px',\n width: '300px',\n [`&.${ERROR_CLASS}`]: {\n 'background-color': '#D5122B'\n },\n [`&.${WARN_CLASS}`]: {\n 'background-color': '#F5AA1E'\n },\n [`&.${SUCCESS_CLASS}`]: {\n 'background-color': '#7AC13E'\n },\n [`&.${INFO_CLASS}`]: {\n 'background-color': '#4196E1'\n },\n '&:hover': {\n opacity: 1,\n 'box-shadow': '#000 0 0 12px'\n }\n },\n [`.${TITLE_CLASS}`]: {\n 'font-weight': '500'\n },\n [`.${MESSAGE_CLASS}`]: {\n display: 'inline-block',\n 'vertical-align': 'middle',\n width: '240px',\n padding: '0 12px'\n }\n }\n}\n\nexport function makeNode (type = 'div') {\n return document.createElement(type)\n}\n\nexport function createIcon (node, type, config) {\n const iconNode = makeNode(config.icons[type].nodeType)\n const attrs = config.icons[type].attrs\n\n for (const k in attrs) {\n if (attrs.hasOwnProperty(k)) {\n iconNode.setAttribute(k, attrs[k])\n }\n }\n\n node.appendChild(iconNode)\n}\n\nexport function addElem (node, text, className, config) {\n const elem = makeNode()\n elem.className = className\n if (config.allowHtml) {\n elem.innerHTML = text\n } else {\n elem.appendChild(document.createTextNode(text))\n }\n node.appendChild(elem)\n}\n\nexport function getTypeClass (type) {\n if (type === SUCCESS) return SUCCESS_CLASS\n if (type === WARN) return WARN_CLASS\n if (type === ERROR) return ERROR_CLASS\n if (type === INFO) return INFO_CLASS\n\n return EMPTY_STRING\n}\n\nconst miniToastr = {\n config,\n isInitialised: false,\n showMessage (message, title, type, timeout, cb, overrideConf) {\n const config = {}\n Object.assign(config, this.config)\n Object.assign(config, overrideConf)\n\n const notificationElem = makeNode()\n notificationElem.className = `${NOTIFICATION_CLASS} ${getTypeClass(type)}`\n\n notificationElem.onclick = function () {\n config.animation(notificationElem, null)\n }\n\n if (title) addElem(notificationElem, title, TITLE_CLASS, config)\n if (config.icons[type]) createIcon(notificationElem, type, config)\n if (message) addElem(notificationElem, message, MESSAGE_CLASS, config)\n\n config.node.insertBefore(notificationElem, config.node.firstChild)\n setTimeout(() => config.animation(notificationElem, cb), timeout || config.timeout\n )\n\n if (cb) cb()\n return this\n },\n init (aConfig) {\n const newConfig = {}\n Object.assign(newConfig, config)\n Object.assign(newConfig, aConfig)\n this.config = newConfig\n\n const cssStr = makeCss(newConfig.style)\n appendStyles(cssStr)\n\n newConfig.node.id = CONTAINER_CLASS\n newConfig.node.className = CONTAINER_CLASS\n newConfig.appendTarget.appendChild(newConfig.node)\n\n Object.keys(newConfig.types).forEach(v => {\n this[newConfig.types[v]] = function (message, title, timeout, cb, config) {\n this.showMessage(message, title, newConfig.types[v], timeout, cb, config)\n return this\n }.bind(this)\n }\n )\n\n this.isInitialised = true\n\n return this\n },\n setIcon (type, nodeType = 'i', attrs = []) {\n attrs.class = attrs.class ? attrs.class + ' ' + ICON_CLASS : ICON_CLASS\n\n this.config.icons[type] = {nodeType, attrs}\n }\n}\n\nexport default miniToastr","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { h, render, Component } from 'preact';\nimport miniToastr from 'mini-toastr';\nimport { Menu } from './components/menu';\nimport { Page } from './components/page';\nimport { loadConfig } from './conf/config.dat';\nimport { settings } from './lib/settings';\nimport { loader } from './lib/loader';\nimport { loadPlugins } from './lib/plugins';\nimport { menu } from './lib/menu';\n\nminiToastr.init({})\n\nconst clearSlashes = path => {\n return path.toString().replace(/\\/$/, '').replace(/^\\//, '');\n};\n\nconst getFragment = () => {\n const match = window.location.href.match(/#(.*)$/);\n const fragment = match ? match[1] : '';\n return clearSlashes(fragment);\n};\n\nclass App extends Component {\n constructor() {\n super();\n this.state = {\n menuActive: false,\n menu: menu.menus[0],\n page: menu.menus[0],\n changed: false,\n }\n\n this.menuToggle = () => {\n this.setState({ menuActive: !this.state.menuActive });\n }\n }\n\n render(props, state) {\n \n const params = getFragment().split('/').slice(2);\n const active = this.state.menuActive ? 'active' : '';\n return (\n
    \n \n \n \n \n \n
    \n );\n }\n\n componentDidMount() {\n loader.hide();\n\n let current = '';\n const fn = () => {\n const newFragment = getFragment();\n const diff = settings.diff();\n if(this.state.changed !== !!diff.length) {\n this.setState({changed: !this.state.changed})\n }\n if(current !== newFragment) {\n current = newFragment;\n const parts = current.split('/');\n const m = menu.menus.find(menu => menu.href === parts[0]);\n const page = parts.length > 1 ? menu.routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m;\n if (page) {\n this.setState({ page, m, menuActive: false });\n }\n }\n }\n this.interval = setInterval(fn, 100);\n }\n\n componentWillUnmount() {}\n}\n\nconst load = async () => {\n await loadConfig();\n await loadPlugins();\n render(, document.body);\n}\n\nload();","import { h, Component } from 'preact';\nimport { get, set, getKeys } from '../../lib/helpers';\nimport { settings } from '../../lib/settings';\n\nexport class Form extends Component {\n constructor(props) {\n super(props);\n\n this.saveForm = () => {\n const values = {};\n const groups = getKeys(this.props.config.groups);\n groups.map(groupKey => {\n const group = this.props.config.groups[groupKey];\n const keys = getKeys(group.configs);\n if (!values[groupKey]) values[groupKey] = {};\n keys.map(key => {\n let val = this.form.elements[`${groupKey}.${key}`].value;\n if (group.configs[key].type === 'checkbox') {\n val = val === 'on' ? 1 : 0;\n }\n values[groupKey][key] = val;\n });\n })\n this.props.config.onSave(values);\n };\n\n this.resetForm = () => {\n this.form.reset();\n }\n\n this.onChange = (id, prop, config = {}) => {\n return (e) => {\n let val = this.form.elements[id].value;\n if (config.type === 'checkbox') {\n val = this.form.elements[id].checked ? 1 : 0;\n } else if (config.type === 'number' || config.type === 'ip') {\n val = parseFloat(val);\n } else if (config.type === 'select') {\n val = isNaN(val) ? val : parseInt(val);\n }\n set(this.props.selected, prop, val);\n if (config.onChange) {\n config.onChange(e);\n }\n }\n }\n }\n\n renderConfig(id, config, value, varName) {\n switch (config.type) {\n case 'string':\n return (\n \n );\n case 'number':\n return (\n \n ) ;\n case 'ip':\n return [\n (),\n (),\n (),\n ()\n ]\n case 'password':\n return (\n \n ) ;\n case 'checkbox':\n return (\n \n ) ;\n case 'select':\n const options = (typeof config.options === 'function') ? config.options() : config.options;\n return (\n \n ) ;\n case 'file':\n return (\n \n )\n case 'button':\n if (config.if != null && !config.if) return (null);\n const clickEvent = () => {\n if (!config.click) return;\n config.click(this.props.selected);\n }\n return (\n \n );\n }\n }\n\n renderConfigGroup(id, configs, values) {\n const configArray = Array.isArray(configs) ? configs : [configs];\n\n return (\n
    \n {configArray.map((conf, i) => {\n const varId = configArray.length > 1 ? `${id}.${i}` : id;\n const varName = conf.var ? conf.var : varId;\n const val = get(values, varName, null);\n\n return [\n (),\n this.renderConfig(varId, conf, val, varName)\n ];\n })}\n
    \n )\n }\n\n renderGroup(id, group, values) {\n const keys = getKeys(group.configs);\n return (\n
    \n \n {keys.map(key => {\n const conf = group.configs[key];\n return this.renderConfigGroup(`${id}.${key}`, conf, values);\n })}\n
    \n )\n }\n\n render(props) {\n const keys = getKeys(props.config.groups);\n return (
    this.form = ref}>\n {keys.map(key => this.renderGroup(key, props.config.groups[key], props.selected))}\n {/*
    \n \n \n
    */}\n
    )\n }\n}","import { h, Component } from 'preact';\n\nexport class Menu extends Component {\n renderMenuItem(menu) {\n if (menu.action) {\n return (\n
  • \n {menu.title}\n
  • \n )\n }\n if (menu.href === this.props.selected.href) {\n return [\n (
  • \n {menu.title}\n
  • ),\n ...menu.children.map(child => {\n if (child.action) {\n return (\n
  • \n {child.title}\n
  • \n )\n }\n return (
  • \n {child.title}\n
  • );\n })\n ]\n }\n return (
  • \n {menu.title}\n
  • );\n }\n\n render(props) {\n if (props.open === false) return;\n \n return (\n
    \n
    \n ESPEasy\n
      \n {props.menus.map(menu => (this.renderMenuItem(menu)))}\n
    \n
    \n
    \n );\n }\n}","import { h, Component } from 'preact';\n\nexport class Page extends Component {\n\n render(props) {\n const PageComponent = props.page.component;\n return (\n
    \n
    \n > {props.page.pagetitle == null ? props.page.title : props.page.pagetitle}\n { props.changed ? (\n CHANGED! Click here to SAVE\n ) : (null) }\n
    \n\n
    \n \n
    \n
    \n );\n }\n}","import { parseConfig, writeConfig } from '../lib/parser';\nimport { settings } from '../lib/settings';\n\nconst TASKS_MAX = 12;\nconst NOTIFICATION_MAX = 3;\nconst CONTROLLER_MAX = 3;\nconst PLUGIN_CONFIGVAR_MAX = 8;\nconst PLUGIN_CONFIGFLOATVAR_MAX = 4;\nconst PLUGIN_CONFIGLONGVAR_MAX = 4;\nconst PLUGIN_EXTRACONFIGVAR_MAX = 16;\nconst NAME_FORMULA_LENGTH_MAX = 40;\nconst VARS_PER_TASK = 4;\n\nexport const configDatParseConfig = [\n { prop: 'status.PID', type: 'int32' },\n { prop: 'status.version', type: 'int32' },\n { prop: 'status.build', type: 'int16' },\n { prop: 'config.IP.ip', type: 'bytes', length: 4 },\n { prop: 'config.IP.gw', type: 'bytes', length: 4 }, \n { prop: 'config.IP.subnet', type: 'bytes', length: 4 },\n { prop: 'config.IP.dns', type: 'bytes', length: 4 },\n { prop: 'config.experimental.ip_octet', type: 'byte' },\n { prop: 'config.general.unitnr', type: 'byte' },\n { prop: 'config.general.unitname', type: 'string', length: 26 },\n { prop: 'config.ntp.host', type: 'string', length: 64 },\n { prop: 'config.sleep.sleeptime', type: 'int32' },\n { prop: 'hardware.i2c.sda', type: 'byte' },\n { prop: 'hardware.i2c.scl', type: 'byte' },\n { prop: 'hardware.led.gpio', type: 'byte' },\n { prop: 'Pin_sd_cs', type: 'byte' }, // TODO\n { prop: 'hardware.gpio', type: 'bytes', length: 17 },\n { prop: 'config.log.syslog_ip', type: 'bytes', length: 4 },\n { prop: 'config.espnetwork.port', type: 'int32' },\n { prop: 'config.log.syslog_level', type: 'byte' },\n { prop: 'config.log.serial_level', type: 'byte' },\n { prop: 'config.log.web_level', type: 'byte' },\n { prop: 'config.log.sd_level', type: 'byte' },\n { prop: 'config.serial.baudrate', type: 'int32' },\n { prop: 'config.mqtt.interval', type: 'int32' },\n { prop: 'config.sleep.awaketime', type: 'byte' },\n { prop: 'CustomCSS', type: 'byte' }, // TODO\n { prop: 'config.dst.enabled', type: 'byte' },\n { prop: 'config.experimental.WDI2CAddress', type: 'byte' },\n { prop: 'config.rules.enabled', type: 'byte' },\n { prop: 'config.serial.enabled', type: 'byte' },\n { prop: 'config.ssdp.enabled', type: 'byte' },\n { prop: 'config.ntp.enabled', type: 'byte' },\n { prop: 'config.experimental.WireClockStretchLimit', type: 'int32' },\n { prop: 'GlobalSync', type: 'byte' }, // TODO\n { prop: 'config.experimental.ConnectionFailuresThreshold', type: 'int32' },\n { prop: 'TimeZone', type: 'int16', signed: true},// TODO\n { prop: 'config.mqtt.retain_flag', type: 'byte' },\n { prop: 'hardware.spi.enabled', type: 'byte' },\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].protocol`, type:'byte' })),\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].type`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].device`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_TaskDeviceID`, type:'int32' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio1`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio2`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio3`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio4`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1pullup`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs`, type:'ints', length: PLUGIN_CONFIGVAR_MAX })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1inversed`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_float`, type:'floats', length: PLUGIN_CONFIGFLOATVAR_MAX })), \n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_long`, type:'longs', length: PLUGIN_CONFIGFLOATVAR_MAX })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_senddata`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].global_sync`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].data_feed`, type:'byte' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].interval`, type:'int32' })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].enabled`, type:'byte' })),\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].enabled`, type:'byte' })),\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].enabled`, type:'byte' })), \n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceID`, type:'longs', length: CONTROLLER_MAX })),\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceSendData`, type:'bytes', length: CONTROLLER_MAX })),\n { prop: 'hardware.led.inverse', type: 'byte' }, \n { prop: 'config.sleep.sleeponfailiure', type: 'byte' },\n { prop: 'UseValueLogger', type: 'byte' },// TODO\n { prop: 'ArduinoOTAEnable', type: 'byte' },// TODO\n { prop: 'config.dst.DST_Start', type: 'int16' },\n { prop: 'config.dst.DST_End', type: 'int16' },\n { prop: 'UseRTOSMultitasking', type: 'byte' },// TODO\n { prop: 'hardware.reset.pin', type: 'byte' }, \n { prop: 'config.log.syslog_facility', type: 'byte' }, \n { prop: 'StructSize', type: 'int32' },// TODO\n { prop: 'config.mqtt.useunitname', type: 'byte' },\n { prop: 'config.location.lat', type: 'float' },\n { prop: 'config.location.long', type: 'float' },\n { prop: 'config._emptyBit', type: 'bit' },\n { prop: 'config.general.appendunit', type: 'bit' },\n { prop: 'config.mqtt.changeclientid', type: 'bit' },\n { prop: 'config.rules.oldengine', type: 'bit' },\n { prop: 'config._bit4', type: 'bit' },\n { prop: 'config._bit5', type: 'bit' },\n { prop: 'config._bit6', type: 'bit' },\n { prop: 'config._bit7', type: 'bit' },\n { prop: 'config._bits1', type: 'byte' },\n { prop: 'config._bits2', type: 'byte' },\n { prop: 'config._bits3', type: 'byte' },\n { prop: 'ResetFactoryDefaultPreference', type: 'int32' },// TODO\n].flat();\n\nexport const TaskSettings = [\n { prop: 'index', type:'byte' },\n { prop: 'name', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].formula`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].name`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\n { prop: 'value_names', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\n { prop: 'plugin_config_long', type:'longs', length: PLUGIN_EXTRACONFIGVAR_MAX },\n { prop: 'decimals', type:'bytes', length: VARS_PER_TASK },\n { prop: 'plugin_config', type:'ints', length: PLUGIN_EXTRACONFIGVAR_MAX },\n].flat();\n\nexport const ControllerSettings = [\n { prop: 'dns', type:'byte' },\n { prop: 'IP', type:'bytes', length: 4 },\n { prop: 'port', type:'int32' },\n { prop: 'hostname', type:'string', length: 65 },\n { prop: 'publish', type:'string', length: 129 },\n { prop: 'subscribe', type:'string', length: 129 },\n { prop: 'MQTT_lwt_topic', type:'string', length: 129 },\n { prop: 'lwt_message_connect', type:'string', length: 129 },\n { prop: 'lwt_message_disconnect', type:'string', length: 129 },\n { prop: 'minimal_time_between', type:'int32' },\n { prop: 'max_queue_depth', type:'int32' },\n { prop: 'max_retry', type:'int32' },\n { prop: 'delete_oldest', type:'byte' },\n { prop: 'client_timeout', type:'int32' },\n { prop: 'must_check_reply', type:'byte' },\n];\n\nexport const NotificationSettings = [\n { prop: 'server', type:'string', length: 65 },\n { prop: 'port', type:'int16' },\n { prop: 'domain', type:'string', length: 65 },\n { prop: 'sender', type:'string', length: 65 },\n { prop: 'receiver', type:'string', length: 65 },\n { prop: 'subject', type:'string', length: 129 },\n { prop: 'body', type:'string', length: 513 },\n { prop: 'pin1', type:'byte' },\n { prop: 'pin2', type:'byte' },\n { prop: 'user', type:'string', length: 49 },\n { prop: 'pass', type:'string', length: 33 },\n];\n\nexport const SecuritySettings = [\n { prop: 'WifiSSID', type:'string', length: 32 },\n { prop: 'WifiKey', type:'string', length: 64 },\n { prop: 'WifiSSID2', type:'string', length: 32 },\n { prop: 'WifiKey2', type:'string', length: 64 },\n { prop: 'WifiAPKey', type:'string', length: 64 },\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].user`, type:'string', length: 26 })),\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].password`, type:'string', length: 64 })),\n { prop: 'password', type:'string', length: 26 },\n { prop: 'AllowedIPrangeLow', type:'bytes', length: 4 },\n { prop: 'AllowedIPrangeHigh', type:'bytes', length: 4 },\n { prop: 'IPblockLevel', type:'byte' },\n { prop: 'ProgmemMd5', type:'bytes', length: 16 },\n { prop: 'md5', type:'bytes', length: 16 },\n].flat();\n\nexport const loadConfig = () => {\n return fetch('config.dat').then(response => response.arrayBuffer()).then(async response => { \n const settings = parseConfig(response, configDatParseConfig);\n\n [...Array(12)].map((x, i) => {\n settings.tasks[i].settings = parseConfig(response, TaskSettings, 1024*4 + 1024 * 2 * i);\n settings.tasks[i].extra = parseConfig(response, TaskSettings, 1024*5 + 1024 * 2 * i);\n });\n \n [...Array(3)].map((x, i) => {\n settings.controllers[i].settings = parseConfig(response, ControllerSettings, 1024*27 + 1024 * 2 * i);\n settings.controllers[i].extra = parseConfig(response, ControllerSettings, 1024*28 + 1024 * 2 * i);\n });\n \n const notificationResponse = await fetch('notification.dat').then(response => response.arrayBuffer());\n [...Array(3)].map((x, i) => {\n settings.notifications[i].settings = parseConfig(notificationResponse, NotificationSettings, 1024 * i);\n });\n \n const securityResponse = await fetch('security.dat').then(response => response.arrayBuffer());\n settings.config.security = [...Array(3)].map((x, i) => {\n console.log(i);\n return parseConfig(securityResponse, SecuritySettings, 1024 * i);\n });\n \n return { response, settings };\n }).then(conf => {\n settings.init(conf.settings);\n settings.binary = new Uint8Array(conf.response);\n console.log(conf.settings);\n });\n}\n\nconst saveData = (function () {\n const a = document.createElement(\"a\");\n document.body.appendChild(a);\n a.style = \"display: none\";\n return function (data, fileName) {\n const blob = new Blob([new Uint8Array(data)]);\n const url = window.URL.createObjectURL(blob);\n a.href = url;\n a.download = fileName;\n a.click();\n window.URL.revokeObjectURL(url);\n };\n}());\n\nlet ii = 0;\nexport const saveConfig = (save = true) => {\n if (ii === 0) {\n const buffer = new ArrayBuffer(65536);\n writeConfig(buffer, settings.settings, configDatParseConfig);\n [...Array(12)].map((x, i) => {\n return {\n settings: writeConfig(buffer, settings.settings.tasks[i].settings, TaskSettings, 1024*4 + 1024 * 2 * i),\n extra: writeConfig(buffer, settings.settings.tasks[i].extra, TaskSettings, 1024*5 + 1024 * 2 * i),\n };\n });\n\n [...Array(3)].map((x, i) => {\n return {\n settings: writeConfig(buffer, settings.settings.controllers[i].settings, ControllerSettings, 1024*28 + 1024 * 2 * i),\n extra: writeConfig(buffer, settings.settings.controllers[i].extra, ControllerSettings, 1024*29 + 1024 * 2 * i),\n };\n });\n if (save) saveData(buffer, 'config.dat');\n else return buffer;\n } else if (ii === 1) {\n const bufferNotifications = new ArrayBuffer(4096);\n [...Array(3)].map((x, i) => {\n return writeConfig(bufferNotifications, settings.settings.notifications[i], NotificationSettings, 1024 * i);\n });\n saveData(bufferNotifications, 'notification.dat');\n } else if (ii === 2) {\n const bufferSecurity = new ArrayBuffer(4096);\n [...Array(3)].map((x, i) => {\n return writeConfig(bufferSecurity, settings.settings.security[i], SecuritySettings, 1024 * i);\n });\n saveData(bufferSecurity, 'security.dat');\n }\n ii = (ii + 1) % 3;\n}\n\n","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst measurmentMode = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const bh1750 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n mode: { name: 'Measurement mode', type: 'select', options: measurmentMode, var: 'configs[1]' },\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst mode = [\n { value: 0, name: 'Digital' }, \n { value: 1, name: 'Analog' }, \n]\n\nexport const pme = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'Port', type: 'number', var: 'gpio4' },\n mode: { name: 'Port Type', type: 'select', options: mode, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst displaySize = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nconst lcdCommand = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const lcd2004 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\n line1: { name: 'Line 1', type: 'string', var: 'configs[2]' },\n line2: { name: 'Line 2', type: 'string', var: 'configs[2]' },\n line3: { name: 'Line 3', type: 'string', var: 'configs[2]' },\n line4: { name: 'Line 4', type: 'string', var: 'configs[2]' },\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\n command: { name: 'LCD Command Mode', type: 'select', options: lcdCommand, var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst mode = [\n { value: 0, name: 'Value' }, \n { value: 1, name: 'State' }, \n]\n\nconst units = [\n { value: 0, name: 'Metric' }, \n { value: 1, name: 'Imperial' }, \n]\n\nconst filters = [\n { value: 0, name: 'None' }, \n { value: 1, name: 'Median' }, \n]\n\nexport const hcsr04 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO Trigger', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO Echo, 5V', type: 'select', options: pins, var: 'gpio2' },\n mode: { name: 'Mode', type: 'select', options: mode, var: 'configs[0]' },\n treshold: { name: 'Treshold', type: 'number', var: 'configs[1]' },\n max_distance: { name: 'Max Distance', type: 'number', var: 'configs[2]' },\n unit: { name: 'Unit', type: 'select', options: units, var: 'configs[3]' },\n filter: { name: 'Filter', type: 'select', options: filters, var: 'configs[4]' },\n filter_size: { name: 'Filter Size', type: 'number', var: 'configs[5]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\n\nconst resolution = [\n { value: 0, name: 'Temp 14 bits, RH 12 bits' }, \n { value: 128, name: 'Temp 13 bits, RH 10 bits' }, \n { value: 1, name: 'Temp 12 bits, RH 8 bits' }, \n { value: 129, name: 'Temp 11 bits, RH 11 bits' }, \n]\n\nexport const si7021 = {\n sensor: {\n name: 'Sensor',\n configs: {\n resolution: { name: 'Resolution', type: 'select', options: resolution, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 57, name: '0x39 (57) - default' }, \n { value: 73, name: '0x49 (73)' }, \n { value: 41, name: '0x29 (41)' }, \n]\n\nconst measurmentMode = [\n { value: 0, name: '13 ms' }, \n { value: 1, name: '101 ms' }, \n { value: 2, name: '402 ms' }, \n]\n\nexport const tls2561 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n mode: { name: 'Integration time', type: 'select', options: measurmentMode, var: 'configs[1]' },\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\n gain: { name: 'Enable 16x gain', type: 'checkbox', var: 'configs[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}\n","import { pins } from './_defs';\n\nexport const pn532 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'Reset Pin', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst measurmentMode = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const dust = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO - LED', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const pcf8574 = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\n }\n },\n advanced: {\n name: 'Advanced event management',\n configs: {\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const inputSwitch = {\n sensor: {\n name: 'Sensor',\n configs: {\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n switch_type: { name: 'Switch Type', type: 'select', options: [{ name: 'switch', value: 0}, { name: 'dimmer', value: 3 }], var: 'configs[0]' },\n switch_button_type: { name: 'Switch Button Type', type: 'select', options: [\n { name: 'normal', value: 0}, { name: 'active low', value: 1 }, { name: 'active high', value: 2 }\n ], var: 'configs[2]' },\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\n }\n },\n advanced: {\n name: 'Advanced event management',\n configs: {\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst parity = [\n { value: 0, name: 'No Parity' }, \n { value: 1, name: 'Even' }, \n { value: 2, name: 'Odd' }, \n]\n\nconst eventProcessing = [\n { value: 0, name: 'None' }, \n { value: 1, name: 'Generic' }, \n { value: 2, name: 'RFLink' }, \n]\n\nexport const ser2net = {\n sensor: {\n name: 'Settings',\n configs: {\n port: { name: 'TCP Port', type: 'number', var: 'configs_float[0]' },\n baudrate: { name: 'Baudrate', type: 'number', var: 'configs_float[0]' },\n data_bits: { name: 'Data Bits', type: 'number', var: 'configs_float[0]' },\n parity: { name: 'Parity', type: 'select', options: parity, var: 'configs[0]' },\n stop_bits: { name: 'Stop Bits', type: 'number', var: 'configs_float[0]' },\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'configs[1]' },\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs_float[0]' },\n event_processing: { name: 'Event Processing', type: 'select', options: eventProcessing, var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst sensorModel = [\n { value: 11, name: 'DHT11' }, \n { value: 22, name: 'DHT22' }, \n { value: 12, name: 'DHT12' }, \n { value: 23, name: 'Sonoff am2301' }, \n { value: 70, name: 'Sonoff si7021' },\n]\n\nexport const levelControl = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO Level Low', type: 'select', options: pins, var: 'gpio1' },\n check_task: { name: 'Check Task', type: 'select', options: getTasks, var: 'configs[0]' },\n check_value: { name: 'Check Value', type: 'select', options: getTaskValues, var: 'configs[1]' },\n level: { name: 'Set Level', type: 'number', var: 'configs_float[0]' },\n hysteresis: { name: 'Hysteresis', type: 'number', var: 'configs_float[1]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst mode = [...Array(32)].map((v, i) => ({ value: i, name: `0x${i.toString(16)} (${i})` }));\nconst i2c_address = [...Array(32)].map((v, i) => ({ value: i+64, name: `0x${(i+64).toString(16)} (${i+64})` }));\n\nexport const pca9685 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n mode: { name: 'Mode 2', type: 'select', options: mode, var: 'configs[1]' },\n frequency: { name: 'Frequency (23 - 1500)', type: 'number', var: 'configs_float[0]' },\n range: { name: 'Range (1-10000)', type: 'number', var: 'configs_float[1]' },\n }\n },\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst displaySize = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const oled1306 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","const options = [\n { value: 0, name: 'IR Object Temperature' }, \n { value: 1, name: 'Ambient Temperature' }, \n]\n\nexport const mlx90614 = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'Port', type: 'number', var: 'gpio4' },\n option: { name: 'Option', type: 'select', options: options, var: 'configs[0]' },\n }\n },\n}","\nconst i2c_address = [\n { value: 72, name: '0x48 (72)' }, \n { value: 73, name: '0x49 (73)' }, \n { value: 74, name: '0x4A (74)' }, \n { value: 75, name: '0x4B (75)' }, \n];\n\nconst gainOptions = [\n { value: 0, name: '2/3x gain (FS=6.144V)' }, \n { value: 1, name: '1x gain (FS=4.096V)' }, \n { value: 2, name: '2x gain (FS=2.048V)' }, \n { value: 3, name: '4x gain (FS=1.024V)' }, \n { value: 4, name: '8x gain (FS=0.512V)' },\n { value: 5, name: '16x gain (FS=0.256V)' },\n];\n\nconst multiplexerOptions = [\n { value: 0, name: 'AIN0 - AIN1 (Differential)' }, \n { value: 1, name: 'AIN0 - AIN3 (Differential)' }, \n { value: 2, name: 'AIN1 - AIN3 (Differential)' }, \n { value: 3, name: 'AIN2 - AIN3 (Differential)' }, \n { value: 4, name: 'AIN0 - GND (Single-Ended)' }, \n { value: 5, name: 'AIN1 - GND (Single-Ended)' }, \n { value: 6, name: 'AIN2 - GND (Single-Ended)' }, \n { value: 7, name: 'AIN3 - GND (Single-Ended)' }, \n];\n\n\nexport const ads1115 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n gain: { name: 'Gain', type: 'select', options: gainOptions, var: 'configs[1]' },\n multiplexer: { name: 'Input Multiplexer', type: 'select', options: multiplexerOptions, var: 'configs[2]' },\n }\n },\n advanced: {\n name: 'Two point calibration',\n configs: {\n enabled: { name: 'Calibration Enabled', type: 'number', var: 'configs[3]' },\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","const indicator = [\n { value: 0, name: 'Uptime' }, \n { value: 1, name: 'Free Ram' }, \n { value: 2, name: 'WiFi RSSI' }, \n { value: 3, name: 'Input VCC' }, \n { value: 4, name: 'System load' }, \n { value: 5, name: 'IP 1.Octet' }, \n { value: 6, name: 'IP 2.Octet' }, \n { value: 7, name: 'IP 3.Octet' }, \n { value: 8, name: 'IP 4.Octet' }, \n { value: 9, name: 'Web activity' }, \n { value: 10, name: 'Free Stack' }, \n { value: 11, name: 'None' }, \n]\n\nexport const systemInfo = {\n sensor: {\n name: 'Settings',\n configs: {\n indicator1: { name: 'Indicator 1', type: 'select', options: indicator, var: 'configs_long[0]' },\n indicator1: { name: 'Indicator 2', type: 'select', options: indicator, var: 'configs_long[1]' },\n indicator1: { name: 'Indicator 3', type: 'select', options: indicator, var: 'configs_long[2]' },\n indicator1: { name: 'Indicator 4', type: 'select', options: indicator, var: 'configs_long[3]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst measurmentRange = [\n { value: 0, name: '32V, 2A' }, \n { value: 1, name: '32V, 1A' }, \n { value: 2, name: '16V, 0.4A' }, \n]\n\nconst measurmentType = [\n { value: 0, name: 'Voltage' }, \n { value: 1, name: 'Current' }, \n { value: 2, name: 'Power' }, \n { value: 3, name: 'Voltage/Current/Power' }, \n]\n\nconst i2c_address = [\n { value: 64, name: '0x40 (64) - (default)' }, \n { value: 65, name: '0x41 (65)' }, \n { value: 68, name: '0x44 (68)' }, \n { value: 69, name: '0x45 (69)' }, \n]\n\nexport const ina219 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n check_task: { name: 'Measurment Range', type: 'select', options: measurmentRange, var: 'configs[1]' },\n check_value: { name: 'Measurment Type', type: 'select', options: measurmentType, var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst i2c_address = [\n { value: 118, name: '0x76 (118) - (default)' }, \n { value: 119, name: '0x77 (119) - (default)' }, \n]\n\nexport const bmx280 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n offset: { name: 'Temperature Offset', type: 'number', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const mqttDomoticz = {\n sensor: {\n name: 'Actuator',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n idx: { name: 'IDX', type: 'number', var: 'configs[0]' },\n }\n },\n}","import { pins } from './_defs';\n\nexport const analogInput = {\n sensor: {\n name: 'Sensor',\n configs: {\n oversampling: { name: 'Oversampling', type: 'checkbox', var: 'configs[0]' },\n }\n },\n advanced: {\n name: 'Two point calibration',\n configs: {\n enabled: { name: 'Calibration Enabled', type: 'number', var: 'configs[3]' },\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst i2c_address = [\n { value: 118, name: '0x76 (118) - (default)' }, \n { value: 119, name: '0x77 (119) - (default)' }, \n]\n\nexport const bmp280 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const sht1x = {\n sensor: {\n name: 'Sensor',\n configs: {\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\n gpio1: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO SCK', type: 'select', options: pins, var: 'gpio2' },\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst i2c_address = [\n { value: 118, name: '0x76 (118)' }, \n { value: 119, name: '0x77 (119) - (default)' }, \n]\n\n\nexport const ms5611 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nconst sensorModel = [\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \n { value: 5, name: 'SENSOR_TYPE_DUAL' },\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\n { value: 20, name: 'SENSOR_TYPE_LONG' },\n { value: 21, name: 'SENSOR_TYPE_WIND' },\n]\n\nexport const dummyDevice = {\n data: {\n name: 'Data Acquisition',\n configs: {\n switch_type: { name: 'Simulate Sensor Type', type: 'select', options: sensorModel, var: 'configs[0]' },\n interval: { name: 'Interval', type: 'number' },\n }\n }\n}","\nconst sensorModel = [\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \n { value: 5, name: 'SENSOR_TYPE_DUAL' },\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\n { value: 20, name: 'SENSOR_TYPE_LONG' },\n { value: 21, name: 'SENSOR_TYPE_WIND' },\n]\n\nexport const dht12 = {\n data: {\n name: 'Data Acquisition',\n configs: {\n interval: { name: 'Interval', type: 'number' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst i2c_address = [\n { value: 35, name: '0x23 (35) - default' }, \n { value: 92, name: '0x5c (92)' }, \n]\n\nconst displaySize = [\n { value: 1, name: 'RESOLUTION_LOW' }, \n { value: 2, name: 'RESOLUTION_NORMAL' }, \n { value: 3, name: 'RESOLUTION_HIGH' }, \n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \n]\n\nexport const sh1106 = {\n sensor: {\n name: 'Sensor',\n configs: {\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\n\nexport const mqttImport = {\n data: {\n name: 'Data Acquisition',\n configs: {\n switch_type: { name: 'MQTT Topic 1', type: 'text', var: 'configs[0]' },\n switch_type: { name: 'MQTT Topic 2', type: 'text', var: 'configs[0]' },\n switch_type: { name: 'MQTT Topic 3', type: 'text', var: 'configs[0]' },\n switch_type: { name: 'MQTT Topic 4', type: 'text', var: 'configs[0]' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst type = [\n { value: 1, name: 'GRB' }, \n { value: 2, name: 'GRBW' }, \n]\n\nexport const neopixelBasic = {\n sensor: {\n name: 'Sensor',\n configs: {\n leds: { name: 'LEd Count', type: 'number', var: 'configs[0]' },\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n type: { name: 'Strip Type', type: 'select', options: type, var: 'configs[1]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst type = [\n { value: 1, name: 'MAX 6675' }, \n { value: 2, name: 'MAX 31855' }, \n]\n\nexport const thermocouple = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n type: { name: 'Adapter IC', type: 'select', options: type, var: 'configs[0]' },\n }\n },\n}","import { pins } from './_defs';\n\nconst modeTypes = [\n { value: 0, name: 'LOW' }, \n { value: 1, name: 'CHANGE' }, \n { value: 2, name: 'RISING' }, \n { value: 3, name: 'FALLING' }, \n]\n\nconst counterTypes = [\n { value: 0, name: 'Delta' }, \n { value: 1, name: 'Delta/Total/Time' }, \n { value: 2, name: 'Total' }, \n { value: 3, name: 'Delta/Total' }, \n]\n\nexport const genericPulse = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs[0]' },\n counter_type: { name: 'Counter Type', type: 'select', options: counterTypes, var: 'configs[1]' },\n mode_type: { name: 'Switch Button Type', type: 'select', options: modeTypes, var: 'configs[2]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const neopixelClock = {\n sensor: {\n name: 'Actuator',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n R: { name: 'Red', type: 'number', min: 0, max: 255, var: 'configs[0]' },\n G: { name: 'Green', type: 'number', min: 0, max: 255, var: 'configs[1]' },\n B: { name: 'Blue', type: 'number', min: 0, max: 255, var: 'configs[2]' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nexport const neopixelCandle = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n}","import { pins, getTasks, getTaskValues } from './_defs';\n\nconst type = [\n { value: 0, name: '' },\n { value: 1, name: 'Off' }, \n { value: 2, name: 'On' }, \n]\n\nexport const clock = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO - Clock Event', type: 'select', options: pins, var: 'gpio1' },\n event1: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event2: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event3: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event4: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event5: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event6: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event7: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n event8: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\n }\n },\n}","import { pins } from './_defs';\n\nconst parity = [\n { value: 0, name: 'No Parity' }, \n { value: 1, name: 'Even' }, \n { value: 2, name: 'Odd' }, \n]\n\nexport const wifiGateway = {\n sensor: {\n name: 'Settings',\n configs: {\n port: { name: 'TCP Port', type: 'number', var: 'configs_float[0]' },\n baudrate: { name: 'Baudrate', type: 'number', var: 'configs_float[0]' },\n data_bits: { name: 'Data Bits', type: 'number', var: 'configs_float[0]' },\n parity: { name: 'Parity', type: 'select', options: parity, var: 'configs[0]' },\n stop_bits: { name: 'Stop Bits', type: 'number', var: 'configs_float[0]' },\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'configs[1]' },\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs_float[0]' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const mhz19 = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nexport const ds18b20 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const senseAir = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const sds011 = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const rotaryEncoder = {\n sensor: {\n name: 'Data Acquisition',\n configs: {\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\n gpio3: { name: 'GPIO I - Z', type: 'select', options: pins, var: 'gpio3' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst sensorModel = [\n { value: 11, name: 'DHT11' }, \n { value: 22, name: 'DHT22' }, \n { value: 12, name: 'DHT12' }, \n { value: 23, name: 'Sonoff am2301' }, \n { value: 70, name: 'Sonoff si7021' },\n]\n\nexport const dht = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\n switch_type: { name: 'Sensor model', type: 'select', options: sensorModel, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n interval: { name: 'Interval', type: 'number' },\n }\n }\n}","\nimport { pins } from './_defs';\n\nexport const ttp229 = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\n scancode: { name: 'ScanCode', type: 'checkbox', options: pins, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const bmp085 = {\n sensor: {\n name: 'Sensor',\n configs: {\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const pcf8591 = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst weigandType = [\n { value: 26, name: '26 Bits' }, \n { value: 34, name: '34 Bits' }, \n]\n\nexport const rfidWeigand = {\n sensor: {\n name: 'Sensor',\n configs: {\n gpio1: { name: 'GPIO D0 (green, 5V)', type: 'select', options: pins, var: 'gpio1' },\n gpio2: { name: 'GPIO D1 (white, 5V)', type: 'select', options: pins, var: 'gpio2' },\n type: { name: 'Weigand Type', type: 'select', options: weigandType, var: 'configs[0]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { pins } from './_defs';\n\nconst eventTypes = [\n { value: 0, name: 'Disabled' }, \n { value: 1, name: 'Active on LOW' }, \n { value: 2, name: 'Active on HIGH' }, \n { value: 3, name: 'Active on LOW and HIGH' }, \n]\n\nexport const inputMcp = {\n sensor: {\n name: 'Sensor',\n configs: {\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\n }\n },\n advanced: {\n name: 'Advanced event management',\n configs: {\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\n }\n },\n data: {\n name: 'Data Acquisition',\n configs: {\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]' },\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]' },\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]' },\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]' },\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]' },\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]' },\n interval: { name: 'Interval', type: 'number', var: 'interval' },\n }\n }\n}","import { settings } from '../lib/settings';\n\nexport { pins } from '../pages/config.hardware';\n\n\nexport const getTasks = () => {\n return settings.get('tasks').filter(task => task.enabled).map(task => ({ value: task.settings.index, name: task.settings.name }));\n}\n\nexport const getTaskValues = () => {\n return [ 1, 2, 3, 4 ];\n}","import { inputSwitch } from './1_input_switch';\nimport { analogInput } from './2_analog_input';\nimport { genericPulse } from './3_generic_pulse';\nimport { ds18b20 } from './4_ds18b20';\nimport { dht } from './5_dht';\nimport { bmp085 } from './6_bmp085';\nimport { pcf8591 } from './7_pcf8591';\nimport { rfidWeigand } from './8_rfid';\nimport { inputMcp } from './9_io_mcp';\nimport { bh1750 } from './10_light_lux';\nimport { pme } from './11_pme';\nimport { lcd2004 } from './12_lcd';\nimport { hcsr04 } from './13_hcsr04';\nimport { si7021 } from './14_si7021';\nimport { tls2561 } from './15_tls2561';\nimport { pn532 } from './17_pn532';\nimport { dust } from './18_dust';\nimport { pcf8574 } from './19_pcf8574';\nimport { ser2net } from './20_ser2net';\nimport { levelControl } from './21_level_control';\nimport { pca9685 } from './22_pca9685';\nimport { oled1306 } from './23_oled1306';\nimport { mlx90614 } from './24_mlx90614';\nimport { ads1115 } from './25_ads1115';\nimport { systemInfo } from './26_system_info';\nimport { ina219 } from './27_ina219';\nimport { bmx280 } from './28_bmx280';\nimport { mqttDomoticz } from './29_mqtt_domoticz';\nimport { bmp280 } from './30_bmp280';\nimport { sht1x } from './31_sht1x';\nimport { ms5611 } from './32_ms5611';\nimport { dummyDevice } from './33_dummy_device';\nimport { dht12 } from './34_dht12';\nimport { sh1106 } from './36_sh1106';\nimport { mqttImport } from './37_mqtt_import';\nimport { neopixelBasic } from './38_neopixel_basic';\nimport { thermocouple } from './39_thermocouple';\nimport { neopixelClock } from './41_neopixel_clock';\nimport { neopixelCandle } from './42_neopixel_candle';\nimport { clock } from './43_output_clock';\nimport { wifiGateway } from './44_wifi_gateway';\nimport { mhz19 } from './49_mhz19';\nimport { senseAir } from './52_senseair';\nimport { sds011 } from './56_sds011';\nimport { rotaryEncoder } from './59_rotary_encoder';\nimport { ttp229 } from './63_ttp229';\n\nexport const devices = [\n { name: '- None -', value: 0, fields: [] },\n { name: 'Switch input - Switch', value: 1, fields: inputSwitch },\n { name: 'Analog input - internal', value: 2, fields: analogInput },\n { name: 'Generic - Pulse counter', value: 3, fields: genericPulse },\n { name: 'Environment - DS18b20', value: 4, fields: ds18b20 },\n { name: 'Environment - DHT11/12/22 SONOFF2301/7021', value: 5, fields: dht },\n { name: 'Environment - BMP085/180', value: 6, fields: bmp085 },\n { name: 'Analog input - PCF8591', value: 7, fields: pcf8591 },\n { name: 'RFID - Wiegand', value: 8, fields: rfidWeigand },\n { name: 'Switch input - MCP23017', value: 9, fields: inputMcp },\n { name: 'Light/Lux - BH1750', value: 10, fields: bh1750 },\n { name: 'Extra IO - ProMini Extender', value: 11, fields: pme },\n { name: 'Display - LCD2004', value: 12, fields: lcd2004 },\n { name: 'Position - HC-SR04, RCW-0001, etc.', value: 13, fields: hcsr04 },\n { name: 'Environment - SI7021/HTU21D', value: 14, fields: si7021 },\n { name: 'Light/Lux - TSL2561', value: 15, fields: tls2561 },\n //{ name: 'Communication - IR', value: 16, fields: bh1750 },\n { name: 'RFID - PN532', value: 17, fields: pn532 },\n { name: 'Dust - Sharp GP2Y10', value: 18, fields: dust },\n { name: 'Switch input - PCF8574', value: 19, fields: pcf8574 },\n { name: 'Communication - Serial Server', value: 20, fields: ser2net },\n { name: 'Regulator - Level Control', value: 21, fields: levelControl },\n { name: 'Extra IO - PCA9685', value: 22, fields: pca9685 },\n { name: 'Display - OLED SSD1306', value: 23, fields: oled1306 },\n { name: 'Environment - MLX90614', value: 24, fields: mlx90614 },\n { name: 'Analog input - ADS1115', value: 25, fields: ads1115 },\n { name: 'Generic - System Info', value: 26, fields: systemInfo },\n { name: 'Energy (DC) - INA219', value: 27, fields: ina219 },\n { name: 'Environment - BMx280', value: 28, fields: bmx280 },\n { name: 'Output - Domoticz MQTT Helper', value: 29, fields: mqttDomoticz },\n { name: 'Environment - BMP280', value: 30, fields: bmp280 },\n { name: 'Environment - SHT1X', value: 31, fields: sht1x },\n { name: 'Environment - MS5611 (GY-63)', value: 32, fields: ms5611 },\n { name: 'Generic - Dummy Device', value: 33, fields: dummyDevice },\n { name: 'Environment - DHT12 (I2C)', value: 34, fields: dht12 },\n { name: 'Display - OLED SSD1306/SH1106 Framed', value: 36, fields: sh1106 },\n { name: 'Generic - MQTT Import', value: 37, fields: mqttImport },\n { name: 'Output - NeoPixel (Basic)', value: 38, fields: neopixelBasic },\n { name: 'Environment - Thermocouple', value: 39, fields: thermocouple },\n { name: 'Output - NeoPixel (Word Clock)', value: 41, fields: neopixelClock },\n { name: 'Output - NeoPixel (Candle)', value: 42, fields: neopixelCandle },\n { name: 'Output - Clock', value: 43, fields: clock },\n { name: 'Communication - P1 Wifi Gateway', value: 44, fields: wifiGateway },\n { name: 'Gases - CO2 MH-Z19', value: 49, fields: mhz19 },\n { name: 'Gases - CO2 Senseair', value: 52, fields: senseAir },\n { name: 'Dust - SDS011/018/198', value: 56, fields: sds011 },\n { name: 'Switch Input - Rotary Encoder', value: 59, fields: rotaryEncoder },\n { name: 'Keypad - TTP229 Touc', value: 63, fields: ttp229 },\n];","import miniToastr from 'mini-toastr';\nimport { loader } from './loader';\n\nexport const getJsonStat = async (url = '') => {\n return await fetch(`${url}/json`).then(response => response.json())\n}\n\nexport const loadDevices = async (url) => {\n return getJsonStat(url).then(response => response.Sensors);\n}\n\nexport const getConfigNodes = async () => {\n const devices = await loadDevices();\n const vars = [];\n const nodes = devices.map(device => {\n const taskValues = device.TaskValues || [];\n taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n const result = [{\n group: 'TRIGGERS',\n type: device.TaskName || `${device.TaskNumber}-${device.Type}`,\n inputs: [],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n value: taskValues.length ? taskValues[0].Name : '',\n }, {\n name: 'euqality',\n type: 'select',\n values: ['', '=', '<', '>', '<=', '>=', '!='],\n value: '',\n }, {\n name: 'value',\n type: 'number',\n }],\n indent: true,\n toString: function () { \n const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`;\n return `when ${this.type}.${this.config[0].value} ${comparison}`; \n },\n toDsl: function () { \n const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`;\n return [`on ${this.type}#${this.config[0].value}${comparison} do\\n%%output%%\\nEndon\\n`]; \n }\n }];\n\n let fnNames, fnName, name;\n switch (device.Type) {\n // todo: need access to GPIO number\n // case 'Switch input - Switch':\n // result.push({\n // group: 'ACTIONS',\n // type: `${device.TaskName} - switch`,\n // inputs: [1],\n // outputs: [1],\n // config: [{\n // name: 'value',\n // type: 'number',\n // }],\n // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n // });\n // break;\n case 'Regulator - Level Control':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - setlevel`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'value',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n });\n break;\n case 'Extra IO - PCA9685':\n case 'Switch input - PCF8574':\n case 'Switch input - MCP23017':\n fnNames = {\n 'Extra IO - PCA9685': 'PCF',\n 'Switch input - PCF8574': 'PCF',\n 'Switch input - MCP23017': 'MCP',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Pulse`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n },{\n name: 'unit',\n type: 'select',\n values: ['ms', 's'],\n },{\n name: 'duration',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; },\n toDsl: function () { \n if (this.config[2].value === 's') {\n return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n } else {\n return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n }\n }\n });\n break;\n case 'Extra IO - ProMini Extender':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n break;\n case 'Display - OLED SSD1306':\n case 'Display - LCD2004':\n fnNames = {\n 'Display - OLED SSD1306': 'OLED',\n 'Display - LCD2004': 'LCD',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'row',\n type: 'select',\n values: [1, 2, 3, 4],\n }, {\n name: 'column',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],\n }, {\n name: 'text',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.text = ${this.config[2].value}`; },\n toDsl: function () { return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; }\n });\n break;\n case 'Generic - Dummy Device':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n }, {\n name: 'value',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; }\n });\n break;\n }\n\n return result;\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const getVariables = async () => {\n const urls = ['']; //, 'http://192.168.1.130'\n const vars = {};\n await Promise.all(urls.map(async url => {\n const stat = await getJsonStat(url);\n stat.Sensors.map(device => {\n device.TaskValues.map(value => {\n vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value;\n });\n });\n }));\n return vars;\n}\n\nexport const getDashboardConfigNodes = async (url) => {\n const devices = await loadDevices(url);\n const vars = [];\n const nodes = devices.map(device => {\n device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n return [];\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const storeFile = async (filename, data) => {\n loader.show();\n const file = data ? new File([new Blob([data])], filename) : filename;\n const formData = new FormData();\n formData.append('edit', 1);\n formData.append('file', file);\n \n return await fetch('/upload', {\n method: 'post',\n body: formData,\n }).then(() => {\n loader.hide();\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n loader.hide();\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const deleteFile = async (filename,) => { \n return await fetch('/filelist?delete='+filename).then(() => {\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const storeDashboardConfig = async (config) => {\n storeFile('d1.txt', config);\n}\n\nexport const storeRuleConfig = async (config) => {\n storeFile('r1.txt', config);\n}\n\nexport const loadRuleConfig = async () => {\n return await fetch('/r1.txt').then(response => response.json());\n}\n\nexport const loadDashboardConfig = async (nodes) => {\n return await fetch('/d1.txt').then(response => response.json());\n}\n\nexport const storeRule = async (rule) => {\n const formData = new FormData();\n formData.append('set', 1);\n formData.append('rules', rule);\n \n return await fetch('/rules', {\n method: 'post',\n body: formData,\n });\n}","import { getKeys } from \"./helpers\";\n\n// todo:\n// improve relability of moving elements around\n\n// global config\nconst color = '#000000';\n\nconst saveChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.inputs.length === 0);\n\n // for each initial node walk the tree and produce one 'rule'\n const result = triggers.map(trigger => {\n const walkRule = rule => {\n return {\n t: rule.type,\n v: rule.config.map(config => config.value),\n o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),\n c: [rule.position.x, rule.position.y]\n }\n }\n\n return walkRule(trigger);\n });\n\n return result;\n}\n\nconst loadChart = (config, chart, from) => {\n config.map(config => {\n let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);\n if (!node) {\n const configNode = chart.nodes.find(n => config.t == n.type);\n node = new NodeUI(chart.canvas, configNode, { x: config.c[0], y: config.c[1] });\n node.config.map((cfg, i) => {\n cfg.value = config.v[i];\n });\n node.render();\n chart.renderedNodes.push(node);\n }\n \n\n if (from) {\n const fromDimension = from.getBoundingClientRect();\n const toDimension = node.inputs[0].getBoundingClientRect();\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n chart.canvas.appendChild(lineSvg.element);\n const x1 = fromDimension.x + fromDimension.width;\n const y1 = fromDimension.y + fromDimension.height/2;\n const x2 = toDimension.x;\n const y2 = toDimension.y + toDimension.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n\n const connection = {\n output: from,\n input: node.inputs[0],\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n node.inputs[0].lines.push(connection);\n from.lines.push(connection);\n }\n\n config.o.map((output, outputI) => {\n loadChart(output, chart, node.outputs[outputI]);\n });\n })\n}\n\nconst exportChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');\n\n let result = '';\n // for each initial node walk the tree and produce one 'rule'\n triggers.map(trigger => {\n \n const walkRule = (r, i) => {\n const rules = r.toDsl ? r.toDsl() : [];\n let ruleset = '';\n let padding = r.indent ? ' ' : '';\n \n r.outputs.map((out, outI) => {\n let rule = rules[outI] || r.type;\n let subrule = '';\n if (out.lines) {\n out.lines.map(line => {\n subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);\n });\n subrule = subrule.split('\\n').map(line => (padding + line)).filter(line => line.trim() !== '').join('\\n') + '\\n';\n } \n if (rule.includes('%%output%%')) {\n rule = rule.replace('%%output%%', subrule);\n } else {\n rule += subrule;\n }\n ruleset += rule;\n });\n \n return ruleset;\n }\n\n const rule = walkRule(trigger, 0);\n result += rule + \"\\n\\n\";\n });\n\n return result;\n}\n\n// drag and drop helpers\nconst dNd = {\n enableNativeDrag: (nodeElement, data) => {\n nodeElement.draggable = true;\n nodeElement.ondragstart = ev => {\n getKeys(data).map(key => {\n ev.dataTransfer.setData(key, data[key]);\n }); \n }\n }, enableNativeDrop: (nodeElement, fn) => {\n nodeElement.ondragover = ev => {\n ev.preventDefault();\n }\n nodeElement.ondrop = fn;\n }\n}\n\n// svg helpers\nclass svgArrow {\n constructor(width, height, fill, color) {\n this.element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');\n this.element.setAttribute('width', width);\n this.element.setAttribute('height', height);\n this.element.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\n this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this.line.setAttributeNS(null, \"fill\", fill);\n this.line.setAttributeNS(null, \"stroke\", color);\n this.element.appendChild(this.line);\n }\n\n setPath(x1, y1, x2, y2, tension = 0.5) {\n const delta = (x2-x1)*tension;\n const hx1=x1+delta;\n const hy1=y1;\n const hx2=x2-delta;\n const hy2=y2;\n \n const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;\n this.line.setAttributeNS(null, \"d\", path);\n }\n}\n\n// node configuration (each node in the left menu is represented by an instance of this object)\nclass Node {\n constructor(conf) {\n this.type = conf.type;\n this.group = conf.group;\n this.config = conf.config.map(config => (Object.assign({}, config)));\n this.inputs = conf.inputs.map(input => {});\n this.outputs = conf.outputs.map(output => {});\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n}\n\n// node UI (each node in your flow diagram is represented by an instance of this object)\nclass NodeUI extends Node {\n constructor(canvas, conf, position) {\n super(conf);\n this.canvas = canvas;\n this.position = position;\n this.lines = [];\n this.linesEnd = [];\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n\n updateInputsOutputs(inputs, outputs) {\n inputs.map(input => {\n const rect = input.getBoundingClientRect();\n input.lines.map(line => {\n line.end.x = rect.x;\n line.end.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n outputs.map(output => {\n const rect = output.getBoundingClientRect();\n output.lines.map(line => {\n line.start.x = rect.x + rect.width;\n line.start.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n }\n\n handleMoveEvent(ev) {\n if (!this.canvas.canEdit) return;\n const shiftX = ev.clientX - this.element.getBoundingClientRect().left;\n const shiftY = ev.clientY - this.element.getBoundingClientRect().top;\n const onMouseMove = ev => {\n const newy = ev.y - shiftY;\n const newx = ev.x - shiftX\n this.position.y = newy - newy % this.canvas.gridSize;\n this.position.x = newx - newx % this.canvas.gridSize;\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`; \n this.updateInputsOutputs(this.inputs, this.outputs);\n }\n const onMouseUp = ev => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp); \n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n handleDblClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n if (this.config.length)\n showConfigBox(this.type, this.config, () => {\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n });\n }\n\n handleRightClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n this.inputs.map(input => {\n input.lines.map(line => {\n line.output.lines = [];\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n input.lines = [];\n });\n this.outputs.map(output => {\n output.lines.map(line => {\n const index = line.input.lines.indexOf(line);\n line.input.lines.splice(index, 1);\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n });\n this.element.parentNode.removeChild(this.element);\n if (this.destroy) this.destroy();\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n render() {\n this.element = document.createElement('div');\n this.element.nodeObject = this;\n this.element.className = `node node-chart group-${this.group}`;\n\n this.text = document.createElement('span');\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n \n this.element.appendChild(this.text);\n\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`;\n\n const inputs = document.createElement('div');\n inputs.className = 'node-inputs';\n this.element.appendChild(inputs);\n \n this.inputs.map((val, index) => {\n const input = this.inputs[index] = document.createElement('div');\n input.className = 'node-input';\n input.nodeObject = this;\n input.lines = []\n input.onmousedown = ev => {\n ev.preventDefault();\n ev.stopPropagation();\n }\n inputs.appendChild(input);\n })\n\n const outputs = document.createElement('div');\n outputs.className = 'node-outputs';\n this.element.appendChild(outputs);\n\n this.outputs.map((val, index) => {\n const output = this.outputs[index] = document.createElement('div');\n output.className = 'node-output';\n output.nodeObject = this;\n output.lines = [];\n output.oncontextmenu = ev => {\n output.lines.map(line => {\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n ev.stopPropagation();\n ev.preventDefault();\n return false;\n }\n output.onmousedown = ev => {\n ev.stopPropagation();\n if (output.lines.length) return;\n const rects = output.getBoundingClientRect();\n const x1 = rects.x + rects.width;\n const y1 = rects.y + rects.height/2;\n\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n this.canvas.appendChild(lineSvg.element);\n\n const onMouseMove = ev => {\n lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);\n }\n\n const onMouseUp = ev => {\n const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);\n const input = elemBelow ? elemBelow.closest('.node-input') : null;\n if (!input) {\n lineSvg.element.remove();\n } else {\n const inputRect = input.getBoundingClientRect();\n const x2 = inputRect.x;\n const y2 = inputRect.y + inputRect.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n const connection = {\n output,\n input,\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n output.lines.push(connection);\n input.lines.push(connection);\n }\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n outputs.appendChild(output);\n });\n\n this.element.ondblclick = this.handleDblClickEvent.bind(this);\n this.element.onmousedown = this.handleMoveEvent.bind(this);\n this.element.oncontextmenu = this.handleRightClickEvent.bind(this);\n this.canvas.appendChild(this.element);\n }\n}\n\nconst getCfgUI = cfg => {\n const template = document.createElement('template');\n\n const getSelectOptions = val => {\n const selected = val == cfg.value ? 'selected' : '';\n return ``;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `
    `;\n break;\n case 'number':\n template.innerHTML = `
    `;\n break;\n case 'select':\n template.innerHTML = `
    `;\n break;\n case 'textselect':\n template.innerHTML = `
    \n \n \n \n
    `\n }\n return template.content.cloneNode(true);\n}\n\nconst showConfigBox = (type, config, onclose) => {\n const template = document.createElement('template');\n template.innerHTML = `\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n `;\n\n document.body.appendChild(template.content.cloneNode(true));\n const configBox = document.body.querySelectorAll('.configbox')[0];\n const body = document.body.querySelectorAll('.configbox-body')[0];\n const okButton = document.getElementById('ob');\n const cancelButton = document.getElementById('cb');\n cancelButton.onclick = () => {\n configBox.remove();\n }\n okButton.onclick = () => {\n // set configuration to node\n config.map(cfg => {\n cfg.value = document.forms['configform'].elements[cfg.name].value;\n });\n configBox.remove();\n onclose();\n }\n config.map(cfg => {\n const cfgUI = getCfgUI(cfg);\n body.appendChild(cfgUI);\n })\n}\n\nexport class FlowEditor {\n constructor(element, nodes, config) {\n this.nodes = [];\n this.renderedNodes = [];\n this.onSave = config.onSave;\n this.canEdit = !config.readOnly;\n this.debug = config.debug!= null ? config.debug : true;\n this.gridSize = config.gridSize || 1;\n\n this.element = element;\n\n nodes.map(nodeConfig => {\n const node = new Node(nodeConfig);\n this.nodes.push(node);\n });\n this.render();\n\n if (this.canEdit)\n dNd.enableNativeDrop(this.canvas, ev => {\n const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));\n let node = new NodeUI(this.canvas, configNode, { x: ev.x, y: ev.y });\n node.render();\n node.destroy = () => {\n this.renderedNodes.splice( this.renderedNodes.indexOf(node), 1 );\n node = null;\n }\n this.renderedNodes.push(node); \n });\n }\n\n loadConfig(config) {\n loadChart(config, this);\n }\n\n saveConfig() {\n return saveChart(this.renderedNodes);\n }\n\n renderContainers() {\n if (this.canEdit) {\n this.sidebar = document.createElement('div');\n this.sidebar.className = 'sidebar';\n this.element.appendChild(this.sidebar);\n }\n\n this.canvas = document.createElement('div');\n this.canvas.className = 'canvas';\n this.canvas.canEdit = this.canEdit;\n this.canvas.gridSize = this.gridSize;\n this.element.appendChild(this.canvas);\n\n if (this.canEdit && this.debug) {\n this.debug = document.createElement('div');\n this.debug.className = 'debug';\n\n const text = document.createElement('div');\n this.debug.appendChild(text);\n\n const saveBtn = document.createElement('button');\n saveBtn.textContent = 'SAVE';\n saveBtn.onclick = () => {\n const config = JSON.stringify(saveChart(this.renderedNodes));\n const rules = exportChart(this.renderedNodes);\n this.onSave(config, rules);\n }\n\n const loadBtn = document.createElement('button');\n loadBtn.textContent = 'LOAD';\n loadBtn.onclick = () => {\n const input = prompt('enter config');\n loadChart(JSON.parse(input), this);\n }\n\n const exportBtn = document.createElement('button');\n exportBtn.textContent = 'EXPORT';\n exportBtn.onclick = () => {\n const exported = exportChart(this.renderedNodes);\n text.textContent = exported;\n }\n this.debug.appendChild(exportBtn);\n this.debug.appendChild(saveBtn);\n this.debug.appendChild(loadBtn);\n this.debug.appendChild(text);\n this.element.appendChild(this.debug);\n }\n \n }\n\n renderConfigNodes() {\n const groups = {};\n this.nodes.map(node => {\n if (!groups[node.group]) {\n const group = document.createElement('div');\n group.className = 'group';\n group.textContent = node.group;\n this.sidebar.appendChild(group);\n groups[node.group] = group;\n }\n const nodeElement = document.createElement('div');\n nodeElement.className = `node group-${node.group}`;\n nodeElement.textContent = node.type;\n groups[node.group].appendChild(nodeElement);\n\n dNd.enableNativeDrag(nodeElement, { type: node.type });\n })\n }\n\n render() {\n this.renderContainers();\n if (this.canEdit) this.renderConfigNodes();\n }\n}","import get from 'lodash/get';\nimport set from 'lodash/set';\n\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\n\n// const set = (obj, path, value) => {\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\n// if (!a[c]) a[c] = {};\n// if (i === src.length - 1) a[c] = value;\n// }, obj)\n// }\n\nconst getKeys = object => {\n const keys = [];\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\nexport { get, set, getKeys }","class Loader {\n constructor() {\n const loader = document.createElement('div');\n loader.className = 'loader';\n loader.innerHTML = 'loading';\n document.body.appendChild(loader);\n this.loader = loader;\n }\n\n show() {\n this.loader.classList.add('show');\n }\n\n hide() {\n this.loader.classList.add('hide');\n setTimeout(() => {\n this.loader.classList.remove('hide');\n this.loader.classList.remove('show');\n }, 1000);\n }\n}\n\nexport const loader = new Loader();","import { \n ConfigPage, \n DevicesPage, \n DevicesEditPage, \n ControllersPage, \n ControllerEditPage, \n ConfigAdvancedPage, \n ConfigHardwarePage, \n RebootPage, \n LoadPage, \n RulesPage, \n UpdatePage, \n ToolsPage, \n FSPage, \n FactoryResetPage, \n DiscoverPage, \n DiffPage, \n RulesEditorPage \n} from '../pages';\n\nimport { saveConfig } from '../conf/config.dat';\n\nclass Menus {\n constructor() {\n this.menus = [];\n this.routes = [];\n\n this.addMenu = (menu) => {\n this.menus.push(menu);\n this.addRoute(menu);\n }\n\n this.addRoute = (route) => {\n this.routes.push(route);\n if (route.children) {\n route.children.forEach(child => this.routes.push(child));\n }\n }\n }\n \n}\n\nconst menus = [\n { title: 'Devices', href: 'devices', component: DevicesPage, children: [] },\n { title: 'Controllers', href: 'controllers', component: ControllersPage, children: [] },\n { title: 'Automation', href: 'rules', component: RulesEditorPage, class: 'full', children: [] },\n { title: 'Config', href: 'config', component: ConfigPage, children: [\n { title: 'Hardware', href: 'config/hardware', component: ConfigHardwarePage },\n { title: 'Advanced', href: 'config/advanced', component: ConfigAdvancedPage },\n { title: 'Rules', href: 'config/rules', component: RulesPage },\n { title: 'Save', href: 'config/save', action: saveConfig },\n { title: 'Load', href: 'config/load', component: LoadPage },\n { title: 'Reboot', href: 'config/reboot', component: RebootPage },\n { title: 'Factory Reset', href: 'config/factory', component: FactoryResetPage },\n ] },\n { title: 'Tools', href: 'tools', component: ToolsPage, children: [\n { title: 'Discover', href: 'tools/discover', component: DiscoverPage },\n { title: 'Update', href: 'tools/update', component: UpdatePage },\n { title: 'Filesystem', href: 'tools/fs', component: FSPage },\n ] },\n];\n\nconst routes = [\n { title: 'Edit Controller', href:'controllers/edit', component: ControllerEditPage },\n { title: 'Edit Device', href:'devices/edit', component: DevicesEditPage },\n { title: 'Save to Flash', href:'tools/diff', component: DiffPage }\n];\n\nconst menu = new Menus();\nroutes.forEach(menu.addRoute);\nmenus.forEach(menu.addMenu)\n\nexport { menu };","export const nodes = [\n // TRIGGERS\n {\n group: 'TRIGGERS',\n type: 'timer',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }],\n indent: true,\n toString: function () { return `timer ${this.config[0].value}`; },\n toDsl: function () { return [`on Rules#Timer=${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'event',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text',\n }],\n indent: true,\n toString: function () { return `event ${this.config[0].value}`; },\n toDsl: function () { return [`on ${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'clock',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: () => { return 'clock'; },\n toDsl: () => { return ['on Clock#Time do\\n%%output%%\\nEndon\\n']; }\n }, {\n group: 'TRIGGERS',\n type: 'system boot',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On System#Boot do\\n%%output%%\\nEndon\\n`];\n }\n }, {\n group: 'TRIGGERS',\n type: 'Device',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On Device#Value do\\n%%output%%\\nEndon\\n`];\n }\n }, \n // LOGIC\n {\n group: 'LOGIC',\n type: 'if/else',\n inputs: [1],\n outputs: [1, 2],\n config: [{\n name: 'variable',\n type: 'textselect',\n values: ['Clock#Time'],\n },{\n name: 'equality',\n type: 'select',\n values: ['=', '<', '>', '<=', '>=', '!=']\n },{\n name: 'value',\n type: 'text',\n }],\n indent: true,\n toString: function() {\n return `IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`;\n },\n toDsl: function() {\n return [`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\\n%%output%%`, `Else\\n%%output%%\\nEndif`];\n }\n }, {\n group: 'LOGIC',\n type: 'delay',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'delay',\n type: 'number',\n }],\n toString: function() {\n return `delay: ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`Delay ${this.config[0].value}\\n`];\n }\n },\n // ACTIONS\n {\n group: 'ACTIONS',\n type: 'GPIO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function() {\n return `GPIO ${this.config[0].value}, ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`GPIO,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'Pulse',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n value: 0\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n value: 1\n }, {\n name: 'unit',\n type: 'select',\n values: ['s', 'ms'],\n value: 'ms',\n }, {\n name: 'duration',\n type: 'number',\n value: 1000\n }],\n toString: function() {\n return `Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`;\n },\n toDsl: function() {\n const fn = this.config[2].value === 's' ? 'LongPulse' : 'Pulse';\n return [`${fn},${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'PWM',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'value',\n type: 'number',\n value: 1023,\n }],\n toString: function() {\n return `PWM.GPIO${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`PWM,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'SERVO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'servo',\n type: 'select',\n values: [1, 2],\n value: 0\n }, {\n name: 'position',\n type: 'number',\n value: 90,\n }],\n toString: function() {\n return `SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'fire event',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text'\n }],\n toString: function() {\n return `event ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`event,${this.config[0].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'settimer',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }, {\n name: 'value',\n type: 'number'\n }],\n toString: function() {\n return `timer${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`timerSet,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'MQTT',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'topic',\n type: 'text',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`Publish ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'UDP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'ip',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `UDP ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'HTTP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'host',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n value: 80\n }, {\n name: 'url',\n type: 'text',\n }],\n toString: function() {\n return `HTTP ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'ESPEASY',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'device',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendTo ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }\n]","import { get, set } from './helpers';\n\nclass DataParser {\n constructor(data) {\n this.view = new DataView(data);\n this.offset = 0;\n this.bitbyte = 0;\n this.bitbytepos = 7;\n }\n\n pad(nr) {\n while (this.offset % nr) {\n this.offset++;\n }\n }\n\n bit(signed = false, write = false, val) {\n if (this.bitbytepos === 7) {\n if (!write) {\n this.bitbyte = this.byte();\n this.bitbytepos = 0;\n } else {\n this.byte(signed, write, this.bitbyte);\n }\n }\n if (!write) {\n return (this.bitbyte >> this.bitbytepos++) & 1;\n } else {\n this.bitbyte = val ? (this.bitbyte | (1 << this.bitbytepos++)) : (this.bitbyte & ~(1 << this.bitbytepos++));\n }\n }\n\n byte(signed = false, write = false, val) {\n this.pad(1);\n const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`;\n const res = this.view[fn](this.offset, val);\n this.offset += 1;\n return res;\n }\n\n int16(signed = false, write = false, val) {\n this.pad(2);\n let fn = signed ? 'Int16' : 'Uint16';\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\n this.offset += 2;\n return res;\n }\n\n int32(signed = false, write = false, val) {\n this.pad(4);\n let fn = signed ? 'Int32' : 'Uint32';\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\n this.offset += 4;\n return res;\n }\n float(signed = false, write = false, val) {\n this.pad(4);\n const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true);\n this.offset += 4;\n return res;\n }\n bytes(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.byte(signed, write, vals ? vals[x] : null));\n }\n return res;\n }\n ints(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.int16(signed, write, vals ? vals[x] : null));\n }\n return res;\n }\n longs(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.int32(signed, write, vals ? vals[x] : null));\n }\n return res;\n }\n floats(nr, signed = false, write = false, vals) {\n const res = [];\n for (var x = 0; x < nr; x++) {\n res.push(this.float(write, vals ? vals[x] : null));\n }\n return res;\n }\n string(nr, signed = false, write = false, val) {\n if (write) {\n for (var i = 0; i < nr; ++i) {\n var code = val.charCodeAt(i) || '\\0';\n this.byte(false, true, code);\n }\n } else {\n const res = this.bytes(nr);\n return String.fromCharCode.apply(null, res).replace(/\\x00/g, '');\n }\n }\n}\n\nexport const parseConfig = (data, config, start) => {\n const p = new DataParser(data);\n if (start) p.offset = start;\n const result = {};\n config.map(value => {\n const prop = value.length ? value.length : value.signed;\n set(result, value.prop, p[value.type](prop, value.signed));\n });\n return result;\n}\n\nexport const writeConfig = (buffer, data, config, start) => {\n const p = new DataParser(buffer);\n if (start) p.offset = start;\n config.map(value => {\n const val = get(data, value.prop);\n if (value.length) {\n p[value.type](value.length, value.signed, true, val);\n } else {\n p[value.type](value.signed, true, val);\n }\n });\n}","import { settings } from './settings';\nimport espeasy from './espeasy';\nimport { loader } from './loader';\nimport { menu } from './menu';\n\nconst PLUGINS = [\n 'dash.js', 'flow.js',\n];\n\nconst dynamicallyLoadScript = (url) => {\n return new Promise(resolve => {\n var script = document.createElement(\"script\"); // create a script DOM node\n script.src = url; // set its src to the provided URL\n script.onreadystatechange = resolve;\n script.onload = resolve;\n script.onerror = resolve;\n document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)\n });\n}\n\nconst getPluginAPI = () => {\n return {\n settings,\n loader,\n menu,\n espeasy,\n }\n}\n\nwindow.getPluginAPI = getPluginAPI;\n\nexport const loadPlugins = async () => {\n return Promise.all(PLUGINS.map(async plugin => {\n return dynamicallyLoadScript(plugin);\n }));\n}","import { get, set, getKeys } from './helpers';\n\nconst diff = (obj1, obj2, path = '') => {\n return getKeys(obj1).map(key => {\n const val1 = obj1[key];\n const val2 = obj2[key];\n if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);\n else if (val1 !== val2) {\n return [{ path: `${path}.${key}`, val1, val2 }];\n } else return [];\n }).flat();\n}\n\nclass Settings {\n init(settings) {\n this.settings = settings;\n this.apply();\n }\n\n get(prop) {\n return get(this.settings, prop);\n }\n\n /**\n * sets changes to the current version and sets changed flag\n * @param {*} prop \n * @param {*} value \n */\n set(prop, value) {\n const obj = get(this.settings, prop);\n if (typeof obj === 'object') {\n console.warn('settings an object!');\n set(this.settings, prop, value);\n } else {\n set(this.settings, prop, value);\n }\n \n if (this.diff().length) this.changed = true;\n }\n\n /**\n * returns diff between applied and current version\n */\n diff() {\n return diff(this.stored, this.settings);\n }\n\n /***\n * applys changes and creates new version in localStorage\n */\n apply() {\n this.stored = JSON.parse(JSON.stringify(this.settings));\n this.changed = false;\n }\n}\n\nexport const settings = window.settings1 = new Settings();","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nconst logLevelOptions = [\n { name: 'None', value: 0 },\n { name: 'Error', value: 1 },\n { name: 'Info', value: 2 },\n { name: 'Debug', value: 3 },\n { name: 'Debug More', value: 4 },\n { name: 'Debug Dev', value: 9 },\n];\n\nconst formConfig = {\n onSave: (vals) => { console.log(vals); },\n groups: {\n rules: {\n name: 'Rules Settings',\n configs: {\n enabled: { name: 'Enabled', type: 'checkbox' },\n oldengine: { name: 'Old Engine', type: 'checkbox' },\n }\n },\n mqtt: {\n name: 'Controller Settings',\n configs: {\n retain_flag: { name: 'MQTT Retain Msg', type: 'checkbox' },\n interval: { name: 'Message Interval', type: 'number' },\n useunitname: { name: 'MQTT use unit name as ClientId', type: 'checkbox' },\n changeclientid: { name: 'MQTT change ClientId at reconnect', type: 'checkbox' },\n }\n },\n ntp: {\n name: 'NTP Settings',\n configs: {\n enabled: { name: 'Use NTP', type: 'checkbox' },\n host: { name: 'NTP Hostname', type: 'string' },\n }\n },\n dst: {\n name: 'DST Settings',\n configs: {\n enabled: { name: 'Use DST', type: 'checkbox' },\n }\n },\n location: {\n name: 'Location Settings',\n configs: {\n long: { name: 'Longitude', type: 'number' },\n lat: { name: 'Latitude', type: 'number' },\n }\n },\n log: {\n name: 'Log Settings',\n configs: {\n syslog_ip: { name: 'Syslog IP', type: 'ip' },\n syslog_level: { name: 'Syslog Level', type: 'select', options: logLevelOptions },\n syslog_facility: { name: 'Syslog Level', type: 'select', options: [\n { name: 'Kernel', value: 0 },\n { name: 'User', value: 1 },\n { name: 'Daemon', value: 3 },\n { name: 'Message', value: 5 },\n { name: 'Local0', value: 16 },\n { name: 'Local1', value: 17 },\n { name: 'Local2', value: 18 },\n { name: 'Local3', value: 19 },\n { name: 'Local4', value: 20 },\n { name: 'Local5', value: 21 },\n { name: 'Local6', value: 22 },\n { name: 'Local7', value: 23 },\n ] },\n serial_level: { name: 'Serial Level', type: 'select', options: logLevelOptions },\n web_level: { name: 'Web Level', type: 'select', options: logLevelOptions },\n }\n },\n serial: {\n name: 'Serial Settings',\n configs: {\n enabled: { name: 'Enable Serial', type: 'checkbox' },\n baudrate: { name: 'Baud Rate', type: 'number' },\n }\n },\n espnetwork: {\n name: 'Inter-ESPEasy Network',\n configs: {\n enabled: { name: 'Enable', type: 'checkbox' },\n port: { name: 'Port', type: 'number' },\n }\n },\n experimental: {\n name: 'Experimental Settings',\n configs: {\n ip_octet: { name: 'Fixed IP Octet', type: 'number' },\n WDI2CAddress: { name: 'WD I2C Address', type: 'number' },\n ssdp: { name: 'Use SSDP', type: 'checkbox', var: 'ssdp.enabled' },\n ConnectionFailuresThreshold: { name: 'Connection Failiure Treshold', type: 'number' },\n WireClockStretchLimit: { name: 'I2C ClockStretchLimit', type: 'number' },\n }\n }\n },\n}\n\nexport class ConfigAdvancedPage extends Component {\n render(props) {\n formConfig.onSave = (values) => {\n settings.set('config', values);\n window.location.href='#devices';\n }\n return (\n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nexport const pins = [\n { name: 'None', value: 255 },\n { name: 'GPIO-0', value: 0 },\n { name: 'GPIO-1', value: 1 },\n { name: 'GPIO-2', value: 2 },\n { name: 'GPIO-3', value: 3 },\n { name: 'GPIO-4', value: 4 },\n { name: 'GPIO-5', value: 5 },\n { name: 'GPIO-9', value: 9 },\n { name: 'GPIO-10', value: 10 },\n { name: 'GPIO-12', value: 12 },\n { name: 'GPIO-13', value: 13 },\n { name: 'GPIO-14', value: 14 },\n { name: 'GPIO-15', value: 15 },\n { name: 'GPIO-16', value: 16 }\n];\n\nconst pinState = [\n { name: 'Default', value: 0 },\n { name: 'Low', value: 1 },\n { name: 'High', value: 2 },\n { name: 'Input', value: 3 },\n];\n\nconst formConfig = {\n groups: {\n led: {\n name: 'WiFi Status LED',\n configs: {\n gpio: { name: 'GPIO --> LED', type: 'select', options: pins },\n inverse: { name: 'Inversed LED', type: 'checkbox' },\n }\n },\n reset: {\n name: 'Reset Pin',\n configs: {\n pin: { name: 'GPIO <-- Switch', type: 'select', options: pins },\n }\n },\n i2c: {\n name: 'I2C Settings',\n configs: {\n sda: { name: 'GPIO - SDA', type: 'select', options: pins },\n scl: { name: 'GPIO - SCL', type: 'select', options: pins },\n }\n },\n spi: {\n name: 'SPI Settings',\n configs: {\n enabled: { name: 'Init SPI', type: 'checkbox' },\n }\n },\n gpio: {\n name: 'GPIO boot states',\n configs: {\n 0: { name: 'Pin Mode GPIO-0', type: 'select', options: pinState },\n 1: { name: 'Pin Mode GPIO-1', type: 'select', options: pinState },\n 2: { name: 'Pin Mode GPIO-2', type: 'select', options: pinState },\n 3: { name: 'Pin Mode GPIO-3', type: 'select', options: pinState },\n 4: { name: 'Pin Mode GPIO-4', type: 'select', options: pinState },\n 5: { name: 'Pin Mode GPIO-5', type: 'select', options: pinState },\n 9: { name: 'Pin Mode GPIO-9', type: 'select', options: pinState },\n 10: { name: 'Pin Mode GPIO-10', type: 'select', options: pinState },\n 12: { name: 'Pin Mode GPIO-12', type: 'select', options: pinState },\n 13: { name: 'Pin Mode GPIO-13', type: 'select', options: pinState },\n 14: { name: 'Pin Mode GPIO-14', type: 'select', options: pinState },\n 15: { name: 'Pin Mode GPIO-15', type: 'select', options: pinState },\n }\n }\n },\n}\n\nexport class ConfigHardwarePage extends Component {\n render(props) {\n const config = settings.get('hardware');\n formConfig.onSave = (values) => {\n settings.set('hardware', values);\n window.location.href='#devices';\n }\n\n return (\n \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nconst ipBlockLevel = [\n { name: 'Allow All', value: 0 },\n { name: 'Allow Local Subnet', value: 1 },\n { name: 'Allow IP Range', value: 2 },\n]\n\nconst formConfig = {\n groups: {\n general: {\n name: 'General',\n configs: {\n unitname: { name: 'Unit Name', type: 'string' },\n unitnr: { name: 'Unit Number', type: 'number' },\n appendunit: { name: 'Append Unit Name to Hostname', type: 'checkbox' },\n password: { name: 'Admin Password', type: 'password', var: 'security[0].password' },\n }\n },\n wifi: {\n name: 'WiFi',\n configs: {\n ssid: { name: 'SSID', type: 'string', var: 'security[0].WifiSSID' },\n passwd: { name: 'Password', type: 'password', var: 'security[0].WifiKey' },\n fallbackssid: { name: 'Fallback SSID', type: 'string', var: 'security[0].WifiSSID2' },\n fallbackpasswd: { name: 'Fallback Password', type: 'password', var: 'security[0].WifiKey2' },\n wpaapmode: { name: 'WPA AP Mode Key:', type: 'string', var: 'security[0].WifiAPKey' },\n }\n },\n clientIP: {\n name: 'Client IP Filtering',\n configs: {\n blocklevel: { name: 'IP Block Level', type: 'select', options: ipBlockLevel, var: 'security[0].IPblockLevel' },\n lowerrange: { name: 'Access IP lower range', type: 'ip', var: 'security[0].AllowedIPrangeLow' },\n upperrange: { name: 'Access IP upper range', type: 'ip', var: 'security[0].AllowedIPrangeHigh' },\n }\n },\n IP: {\n name: 'IP Settings',\n configs: {\n ip: { name: 'IP', type: 'ip' },\n gw: { name: 'Gateway', type: 'ip' },\n subnet: { name: 'Subnet', type: 'ip' },\n dns: { name: 'DNS', type: 'ip' },\n }\n },\n sleep: {\n name: 'Sleep Mode',\n configs: {\n awaketime: { name: 'Sleep awake time', type: 'number' },\n sleeptime: { name: 'Sleep time', type: 'number' },\n sleeponfailiure: { name: 'Sleep on connection failure', type: 'checkbox' },\n }\n }\n },\n}\n\nexport class ConfigPage extends Component {\n render(props) {\n formConfig.onSave = (values) => {\n settings.set(`config`, values);\n window.location.href='#devices';\n }\n const config = settings.get('config');\n return (\n \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\n\nexport const protocols = [\n { name: '- Standalone -', value: 0 },\n { name: 'Domoticz HTTP', value: 1 },\n { name: 'Domoticz MQTT', value: 2 },\n { name: 'Nodo Telnet', value: 3 },\n { name: 'ThingSpeak', value: 4 },\n { name: 'OpenHAB MQTT', value: 5 },\n { name: 'PiDome MQTT', value: 6 },\n { name: 'Emoncms', value: 7 },\n { name: 'Generic HTTP', value: 8 },\n { name: 'FHEM HTTP', value: 9 },\n { name: 'Generic UDP', value: 10 },\n { name: 'ESPEasy P2P Networking', value: 13 },\n { name: 'Email', value: 25 },\n];\n\nconst baseFields = { \n \n dns: { name: 'Locate Controller', type: 'select', options: [{ value: 0, name: 'Use IP Address'}, { value: 1, name: 'Use Hostname' }] },\n IP: { name: 'IP', type: 'ip' },\n hostname: { name: 'Hostname', type: 'string' },\n port: { name: 'Port', type: 'number' },\n minimal_time_between: { name: 'Minimum Send Interval', type: 'number' },\n max_queue_depth: { name: 'Max Queue Depth', type: 'number' },\n max_retry: { name: 'Max Retries', type: 'number' },\n delete_oldest: { name: 'Full Queue Action', type: 'select', options: [{ value: 0, name: 'Ignore New'}, { value: 1, name: 'Delete Oldest' }] },\n must_check_reply: { name: 'Check Reply', type: 'select', options: [{ value: 0, name: 'Ignore Acknowledgement'}, { value: 1, name: 'Check Acknowledgement' }] },\n client_timeout: { name: 'Client Timeout', type: 'number' },\n};\n\nconst user = { name: 'Controller User', type: 'string' };\nconst password = { name: 'Controller Password', type: 'password' };\nconst subscribe = { name: 'Controller Subscribe', type: 'string' };\nconst publish = { name: 'Controller Publish', type: 'string' };\nconst lwtTopicField = { MQTT_lwt_topic: { name: 'Controller LWT topic:', type: 'string' }, lwt_message_connect: { name: 'LWT Connect Message', type: 'string' }, lwt_message_disconnect: { name: 'LWT Disconnect Message', type: 'string' }, };\n\nconst getFormConfig = (type) => {\n let additionalFields = {};\n switch (Number(type)) {\n case 2: // Domoticz MQTT\n case 5: // OpenHAB MQTT\n additionalFields = { ...baseFields, user, password, subscribe, publish, ...lwtTopicField };\n break;\n case 6: // 'PiDome MQTT'\n additionalFields = { ...baseFields, subscribe, publish, ...lwtTopicField };\n break;\n case 3: //'Nodo Telnet'\n case 7: //'Emoncms':\n additionalFields = { ...baseFields, password };\n break;\n case 8: // 'Generic HTTP'\n additionalFields = { ...baseFields, user, password, subscribe, publish };\n break;\n case 1: // Domoticz HTTP\n case 9: // 'FHEM HTTP'\n additionalFields = { ...baseFields, user, password };\n break;\n case 10: //'Generic UDP': \n additionalFields = { ...baseFields, subscribe, publish };\n break;\n case 0:\n case 13: //'ESPEasy P2P Networking':\n break;\n default:\n additionalFields = { ...baseFields };\n }\n \n return {\n groups: {\n settings: {\n name: 'Controller Settings',\n configs: {\n protocol: { name: 'Protocol', type: 'select', var: 'protocol', options: protocols },\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\n ...additionalFields\n }\n },\n },\n }\n}\n\n// todo: changing protocol needs to update:\n// -- back to default (correct default)\n// -- field list \nexport class ControllerEditPage extends Component {\n constructor(props) {\n super(props);\n\n this.config = settings.get(`controllers[${props.params[0]}]`);\n this.state = {\n protocol: this.config.protocol,\n }\n }\n\n render(props) {\n const formConfig = getFormConfig(this.state.protocol);\n formConfig.groups.settings.configs.protocol.onChange = (e) => {\n this.setState({ protocol: e.currentTarget.value });\n };\n formConfig.onSave = (values) => {\n settings.set(`controllers[${props.params[0]}]`, values);\n window.location.href='#controllers';\n }\n \n return (\n \n );\n }\n}\n","import { h, Component } from 'preact';\nimport { settings } from '../lib/settings';\nimport { protocols } from './controllers.edit';\n\nexport class ControllersPage extends Component {\n render(props) {\n const controllers = settings.get('controllers');\n const notifications = settings.get('notifications');\n return (\n

    Controllers

    \n
    {controllers.map((c, i) => {\n const editUrl = `#controllers/edit/${i}`;\n return (\n
    \n \n {i+1}: {(c.enabled) ? () : ()}\n   [{protocols.find(p => p.value === c.protocol).name}] PORT:{c.settings.port} HOST:{c.settings.host}\n edit\n \n
    \n )\n })}
    \n

    Notifications

    \n
    {notifications.map((n, i) => {\n const editUrl = `#notifications/edit/${i}`;\n return (\n
    \n \n {i+1}: {(n.enabled) ? () : ()}\n   [{n.type}] PORT:{n.settings.port} HOST:{n.settings.host}\n edit\n \n
    \n )\n })}
    \n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\nimport { settings } from '../lib/settings';\nimport { devices } from '../devices';\n\nconst baseFields = { \n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\n name: { name: 'Name', type: 'string' },\n};\n\nconst getFormConfig = (type) => {\n const device = devices.find(d => d.value === parseInt(type));\n if (!device) return null;\n \n return {\n groups: {\n settings: {\n name: 'Device Settings',\n configs: {\n device: { name: 'Device', type: 'select', var: 'device', options: devices },\n ...baseFields,\n \n }\n },\n ...device.fields,\n values: {\n name: 'Values',\n configs: {\n ...[...new Array(4)].reduce((acc, x, i) => {\n acc[`value${i}`] = [{ name: 'Name', var: `settings.values[${i}].name`, type: 'string' }, { name: 'Formula', var: `settings.values[${i}].formula`, type: 'string' }];\n return acc;\n }, {})\n }\n }\n },\n }\n}\n\n// todo: changing protocol needs to update:\n// -- back to default (correct default)\n// -- field list \nexport class DevicesEditPage extends Component {\n constructor(props) {\n super(props);\n\n this.config = settings.get(`tasks[${props.params[0]}]`);\n this.state = {\n device: this.config.device,\n }\n }\n\n render(props) {\n const formConfig = getFormConfig(this.state.device);\n if (!formConfig) {\n alert('something went wrong, cant edit device');\n window.location.href='#devices';\n }\n formConfig.groups.settings.configs.device.onChange = (e) => {\n this.setState({ device: e.currentTarget.value });\n };\n formConfig.onSave = (values) => {\n settings.set(`tasks[${props.params[0]}]`, values);\n window.location.href='#devices';\n }\n return (\n \n );\n }\n}\n","import { h, Component } from 'preact';\nimport { settings } from '../lib/settings';\nimport { devices } from '../devices';\n\nexport class DevicesPage extends Component {\n constructor(props) {\n super(props);\n\n this.handleEnableToggle = (e) => {\n settings.set(e.currentTarget.dataset.prop, e.currentTarget.checked ? 1 : 0);\n }\n }\n render(props) {\n const tasks = settings.get('tasks');\n if (!tasks) return;\n return (\n
    \n {tasks.map((task, i) => {\n const editUrl = `#devices/edit/${i}`;\n const device = devices.find(d => d.value === task.device);\n const deviceType = device ? device.name : '--unknown--';\n const enabledProp = `tasks[${i}].enabled`;\n return (\n
    \n \n {i+1}: \n   {task.settings.name} [{deviceType}] {task.gpio1!==255?`GPIO:${task.gpio1}`:''}\n edit\n \n \n {/* {device.settings.values.map(v => {\n return ({v.name}: {v.value});\n })} */}\n \n
    \n )\n })}\n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { settings } from '../lib/settings';\nimport { saveConfig } from '../conf/config.dat';\nimport { storeFile } from '../lib/espeasy';\n\n\nexport class DiffPage extends Component {\n constructor(props) {\n super(props);\n\n this.diff = settings.diff();\n this.stage = 0;\n\n this.applyChanges = () => {\n if (this.stage === 0) {\n this.diff.map(d => {\n const input = this.form.elements[d.path];\n if (!input.checked) {\n settings.set(input.name, d.val1);\n }\n });\n settings.apply();\n this.diff = settings.diff();\n this.data = saveConfig(false);\n \n this.bytediff = Array.from(new Uint8Array(this.data));\n this.bytediff = this.bytediff.map((byte, i) => {\n if (byte !== settings.binary[i]) {\n return `${byte.toString(16)}`;\n } else return `${byte.toString(16)}`;\n });\n this.bytediff = this.bytediff.join(' ');\n this.stage = 1;\n return;\n }\n \n storeFile('config.dat', this.data).then(() => {\n this.stage = 0;\n window.location.href='#devices';\n });\n \n };\n }\n \n\n render(props) {\n if (this.bytediff) {\n return (
    )\n }\n return (\n this.form = ref}>\n {this.diff.map(change => {\n return (\n
    \n {change.path}: before: {JSON.stringify(change.val1)} now:{JSON.stringify(change.val2)} \n
    \n )\n })}\n \n
    \n );\n }\n}","import { h, Component } from 'preact';\n\nconst devices = [\n { nr: 1, name: 'Senzor', type: 'DH11', vars: [{ name: 'Temperature', formula: '', value: 21 }, { name: 'Humidity', formula: '', value: 65 }] },\n { nr: 1, name: 'Humidity', type: 'Linear Regulator', vars: [{ name: 'Output', formula: '', value: 1 }] }\n]\n\nexport class DiscoverPage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n devices: []\n }\n\n this.scani2c = () => {\n fetch('/i2cscanner').then(r => r.json()).then(r => {\n this.setState({ devices: r });\n });\n }\n\n this.scanwifi = () => {\n fetch('/wifiscanner').then(r => r.json()).then(r => {\n this.setState({ devices: r });\n });\n }\n }\n\n render(props) {\n return (\n
    \n
    \n \n \n
    \n {this.state.devices.map(device => {\n return (\n \n \n \n )\n })}
    \n {JSON.stringify(device)}\n
    \n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { Form } from '../components/form';\n\nconst formConfig = {\n onSave: (vals) => { console.log(vals); },\n groups: {\n keep: {\n name: 'Settings to keep',\n configs: {\n unit: { name: 'Keep Unit/Name', type: 'checkbox' },\n wifi: { name: 'Keep WiFi config', type: 'checkbox' },\n network: { name: 'Keep network config', type: 'checkbox' },\n ntp: { name: 'Keep NTP/DST config', type: 'checkbox' },\n log: { name: 'Keep log config', type: 'checkbox' },\n }\n },\n load: {\n name: 'Pre-defined configurations',\n configs: {\n config: { name: 'Pre-Defined config', type: 'select', options: [\n { name: 'default', value: 0 },\n { name: 'Sonoff Basic', value: 1 },\n { name: 'Sonoff TH1x', value: 2 },\n { name: 'Sonoff S2x', value: 3 },\n { name: 'Sonoff TouchT1', value: 4 },\n { name: 'Sonoff TouchT2', value: 5 },\n { name: 'Sonoff TouchT3', value: 6 },\n { name: 'Sonoff 4ch', value: 7 },\n { name: 'Sonoff POW', value: 8 },\n { name: 'Sonoff POW-r2', value: 9 },\n { name: 'Shelly1', value: 10 },\n ] },\n }\n },\n },\n}\n\nconst config = {}\n\nexport class FactoryResetPage extends Component {\n render(props) {\n formConfig.onSave = (config) => {\n const data = new FormData();\n if (config.keep.unit) data.append('kun', 'on');\n if (config.keep.wifi) data.append('kw', 'on');\n if (config.keep.network) data.append('knet', 'on');\n if (config.keep.ntp) data.append('kntp', 'on');\n if (config.keep.log) data.append('klog', 'on');\n data.append('fdm', config.load.config);\n data.append('savepref', 'Save Preferences');\n fetch('/factoryreset', {\n method: 'POST',\n body: data \n }).then(() => {\n data.delete('savepref');\n data.append('performfactoryreset', 'Factory Reset');\n fetch('/factoryreset', {\n method: 'POST',\n body: data\n }).then(() => {\n setTimeout(() => {\n window.location.href=\"#devices\";\n }, 5000);\n }, e => {\n\n })\n }, e => {\n\n });\n };\n return (\n
    \n );\n }\n}","import { h, Component } from 'preact';\nimport { deleteFile, storeFile } from '../lib/espeasy';\n\nexport class FSPage extends Component {\n constructor(props) {\n super(props);\n this.state = { files: [] }\n\n this.saveForm = () => {\n storeFile(this.file.files[0]);\n }\n\n this.deleteFile = e => {\n const fileName = e.currentTarget.data.name;\n deleteFile(fileName).then(() => (this.fetch()));\n }\n }\n\n fetch() {\n fetch('/filelist').then(response => response.json()).then(fileList => {\n this.setState({ files: fileList });\n });\n }\n\n render(props) {\n return (\n
    \n \n
    \n \n this.file = ref} />\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n {this.state.files.map(file => {\n const url = `/${file.fileName}`;\n return (\n \n \n \n \n \n ); })}\n\n \n
    FileSize
    {file.fileName}{file.size}\n \n
    \n
    \n );\n }\n\n componentDidMount() {\n this.fetch();\n }\n}","export * from './controllers';\nexport * from './devices';\nexport * from './config';\nexport * from './config.advanced';\nexport * from './config.hardware';\nexport * from './reboot';\nexport * from './load';\nexport * from './update';\nexport * from './rules';\nexport * from './tools';\nexport * from './fs';\nexport * from './factory_reset';\nexport * from './discover';\nexport * from './controllers.edit';\nexport * from './devices.edit';\nexport * from './diff';\nexport * from './rules.editor';","import { h, Component } from 'preact';\nimport { storeFile } from '../lib/espeasy';\n\nexport class LoadPage extends Component {\n constructor(props) {\n super(props);\n\n this.saveForm = () => {\n storeFile(this.file.files[0]);\n }\n }\n\n render(props) {\n return (
    \n
    \n \n this.file = ref} />\n \n
    \n
    )\n }\n}","import { h, Component } from 'preact';\n\n\nexport class RebootPage extends Component {\n render(props) {\n return (\n
    ESPEasy is rebooting ... please wait a while, this page will auto refresh.
    \n );\n }\n\n componentDidMount() {\n fetch('/reboot').then(() => {\n setTimeout(() => {\n window.location.hash = '#devices';\n }, 5000)\n })\n }\n}","import { h, Component } from 'preact';\nimport { FlowEditor } from '../lib/floweditor';\nimport { nodes } from '../lib/node_definitions';\nimport { getConfigNodes, loadRuleConfig, storeRuleConfig, storeRule } from '../lib/espeasy';\n\nexport class RulesEditorPage extends Component {\n constructor(props) {\n super(props);\n this.nodes = nodes;\n }\n\n render(props) {\n return (\n
    this.element = ref}>\n
    \n );\n }\n\n componentDidMount() {\n getConfigNodes().then((out) => {\n out.nodes.forEach(device => nodes.unshift(device));\n const ifElseNode = nodes.find(node => node.type === 'if/else');\n if (!ifElseNode.config[0].loaded) {\n out.vars.forEach(v => ifElseNode.config[0].values.push(v)); \n ifElseNode.config[0].loaded = true;\n }\n\n this.chart = new FlowEditor(this.element, nodes, { \n onSave: (config, rules) => {\n storeRuleConfig(config);\n storeRule(rules);\n }\n });\n \n loadRuleConfig().then(config => {\n this.chart.loadConfig(config);\n });\n });\n }\n}","import { h, Component } from 'preact';\n\n\nconst rules = [\n { name: 'Rule 1', file: 'rules1.txt', index: 1 },\n { name: 'Rule 2', file: 'rules2.txt', index: 2 },\n { name: 'Rule 3', file: 'rules3.txt', index: 3 },\n { name: 'Rule 4', file: 'rules4.txt', index: 4 },\n];\n\nexport class RulesPage extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selected: rules[0]\n }\n\n this.selectionChanged = (e) => {\n this.setState({ selected: rules[e.currentTarget.value] });\n }\n\n this.saveRule = () => {\n const data = new FormData();\n data.append('set', this.state.selected.index);\n data.append('rules', this.text.value);\n fetch('/rules', {\n method: 'POST',\n body: data \n }).then(res => {\n console.log('succesfully saved');\n console.log(res.text());\n });\n }\n\n this.fetch();\n }\n\n render(props) {\n return (\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n );\n }\n\n async fetch() {\n const text = await fetch(this.state.selected.file).then(response => response.text());\n this.text.value = text;\n }\n\n async componentDidUpdate() {\n this.fetch();\n }\n}","import { h, Component } from 'preact';\n\nexport class ToolsPage extends Component {\n constructor(props) {\n super(props);\n\n this.history = '';\n\n this.sendCommand = (e) => {\n fetch(`/control?cmd=${this.cmd.value}`).then(response => response.text()).then(response => {\n this.cmdOutput.value = response;\n });\n }\n }\n\n fetch() {\n fetch('/logjson').then(response => response.json()).then(response => {\n response.Log.Entries.map(log => {\n this.history += `
    ${(new Date(log.timestamp).toLocaleTimeString())}${log.text}
    `;\n this.log.innerHTML = this.history;\n if (true) {\n this.log.scrollTop = this.log.scrollHeight;\n }\n })\n });\n }\n\n render(props) {\n return (\n
    \n
    this.log = ref}>loading logs ...
    \n
    Command: this.cmd = ref}/>
    \n \n
    \n );\n }\n\n componentDidMount() {\n this.interval = setInterval(() => {\n this.fetch();\n }, 1000);\n }\n\n componentWillUnmount() {\n if (this.interval) clearInterval(this.interval);\n }\n}","import { h, Component } from 'preact';\n\nexport class UpdatePage extends Component {\n constructor(props) {\n super(props);\n\n this.saveForm = () => {\n const data = new FormData()\n data.append('file', this.file.files[0])\n data.append('user', 'hubot')\n \n fetch('/update', {\n method: 'POST',\n body: data\n }).then(() => {\n \n });\n }\n }\n\n render(props) {\n return (\n
    \n
    \n \n this.file = ref} />\n \n
    \n
    \n )\n }\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e35f00b..1665877 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3300,12 +3300,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3320,17 +3322,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -3447,7 +3452,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3459,6 +3465,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3473,6 +3480,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3480,12 +3488,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -3504,6 +3514,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -3584,7 +3595,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3596,6 +3608,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -3717,6 +3730,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/src/app.js b/src/app.js index a9150c1..9f4cc6b 100644 --- a/src/app.js +++ b/src/app.js @@ -6,6 +6,7 @@ import { loadConfig } from './conf/config.dat'; import { settings } from './lib/settings'; import { loader } from './lib/loader'; import { loadPlugins } from './lib/plugins'; +import { menu } from './lib/menu'; miniToastr.init({}) @@ -24,8 +25,8 @@ class App extends Component { super(); this.state = { menuActive: false, - menu: menus[0], - page: menus[0], + menu: menu.menus[0], + page: menu.menus[0], changed: false, } @@ -43,7 +44,7 @@ class App extends Component { - + ); @@ -62,10 +63,10 @@ class App extends Component { if(current !== newFragment) { current = newFragment; const parts = current.split('/'); - const menu = menus.find(menu => menu.href === parts[0]); - const page = parts.length > 1 ? routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : menu; + const m = menu.menus.find(menu => menu.href === parts[0]); + const page = parts.length > 1 ? menu.routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m; if (page) { - this.setState({ page, menu, menuActive: false }); + this.setState({ page, menu: m, menuActive: false }); } } } diff --git a/src/lib/espeasy.js b/src/lib/espeasy.js index c7c1d2b..cebeba3 100644 --- a/src/lib/espeasy.js +++ b/src/lib/espeasy.js @@ -262,6 +262,10 @@ export const storeDashboardConfig = async (config) => { storeFile('d1.txt', config); } +export const loadDashboardConfig = async (nodes) => { + return await fetch('/d1.txt').then(response => response.json()); +} + export const storeRuleConfig = async (config) => { storeFile('r1.txt', config); } @@ -270,10 +274,6 @@ export const loadRuleConfig = async () => { return await fetch('/r1.txt').then(response => response.json()); } -export const loadDashboardConfig = async (nodes) => { - return await fetch('/d1.txt').then(response => response.json()); -} - export const storeRule = async (rule) => { const formData = new FormData(); formData.append('set', 1); @@ -283,4 +283,9 @@ export const storeRule = async (rule) => { method: 'post', body: formData, }); +} + + +export default { + getJsonStat, loadDevices, getConfigNodes, getDashboardConfigNodes, getVariables, storeFile, deleteFile, storeDashboardConfig, loadDashboardConfig, storeRuleConfig, loadRuleConfig, storeRule } \ No newline at end of file diff --git a/src/lib/menu.js b/src/lib/menu.js index 21a3707..bb0f786 100644 --- a/src/lib/menu.js +++ b/src/lib/menu.js @@ -1,8 +1,6 @@ import { ConfigPage, DevicesPage, - DashboardPage, - DashboardEditorPage, DevicesEditPage, ControllersPage, ControllerEditPage, @@ -20,10 +18,29 @@ import { RulesEditorPage } from '../pages'; +import { saveConfig } from '../conf/config.dat'; + +class Menus { + constructor() { + this.menus = []; + this.routes = []; + + this.addMenu = (menu) => { + this.menus.push(menu); + this.addRoute(menu); + } + + this.addRoute = (route) => { + this.routes.push(route); + if (route.children) { + route.children.forEach(child => this.routes.push(child)); + } + } + } + +} + const menus = [ - { title: 'Dashboard', pagetitle: '', href: 'dashboard', class: 'full', component: DashboardPage, children: [ - { title: 'Editor', pagetitle: '', href: 'dashboard/editor', class: 'full', component: DashboardEditorPage }, - ] }, { title: 'Devices', href: 'devices', component: DevicesPage, children: [] }, { title: 'Controllers', href: 'controllers', component: ControllersPage, children: [] }, { title: 'Automation', href: 'rules', component: RulesEditorPage, class: 'full', children: [] }, @@ -43,13 +60,14 @@ const menus = [ ] }, ]; -let routes = [ +const routes = [ { title: 'Edit Controller', href:'controllers/edit', component: ControllerEditPage }, { title: 'Edit Device', href:'devices/edit', component: DevicesEditPage }, { title: 'Save to Flash', href:'tools/diff', component: DiffPage } ]; -menus.map(menu => { - routes = [...routes, menu, ...menu.children]; -}); + +const menu = new Menus(); +routes.forEach(menu.addRoute); +menus.forEach(menu.addMenu) export { menu }; \ No newline at end of file diff --git a/src/lib/plugins.js b/src/lib/plugins.js index 937dc21..4dfd858 100644 --- a/src/lib/plugins.js +++ b/src/lib/plugins.js @@ -1,9 +1,10 @@ import { settings } from './settings'; import espeasy from './espeasy'; import { loader } from './loader'; +import { menu } from './menu'; const PLUGINS = [ - 'dash.js', 'flow.js', + 'http://localhost:8080/build/dash.js', 'flow.js', ]; const dynamicallyLoadScript = (url) => { @@ -21,6 +22,7 @@ const getPluginAPI = () => { return { settings, loader, + menu, espeasy, } } diff --git a/src/plugins/dashboard/api.js b/src/plugins/dashboard/api.js new file mode 100644 index 0000000..6aad144 --- /dev/null +++ b/src/plugins/dashboard/api.js @@ -0,0 +1,5 @@ +const api = window.getPluginAPI(); + +export const getVariables = api.espeasy.getVariables; +export const loadDashboardConfig = api.espeasy.loadDashboardConfig; +export const storeDashboardConfig = api.espeasy.storeDashboardConfig; diff --git a/src/pages/dashboard.editor.js b/src/plugins/dashboard/dashboard.editor.js similarity index 92% rename from src/pages/dashboard.editor.js rename to src/plugins/dashboard/dashboard.editor.js index 0f8aa9e..8302b63 100644 --- a/src/pages/dashboard.editor.js +++ b/src/plugins/dashboard/dashboard.editor.js @@ -1,8 +1,7 @@ import { h, Component } from 'preact'; -import { FlowEditor } from '../lib/floweditor'; -import { nodes } from '../lib/dashboard_node_definitions'; -import { getDashboardConfigNodes, loadDashboardConfig, storeDashboardConfig, storeRule, getVariables } from '../lib/espeasy'; -import { timingSafeEqual } from 'crypto'; +import { FlowEditor } from '../../lib/floweditor'; +import { nodes } from './dashboard_node_definitions'; +import { loadDashboardConfig, storeDashboardConfig, getVariables } from './api'; export class DashboardEditorPage extends Component { constructor(props) { diff --git a/src/pages/dashboard.js b/src/plugins/dashboard/dashboard.js similarity index 95% rename from src/pages/dashboard.js rename to src/plugins/dashboard/dashboard.js index 52fe4cb..cd11b7a 100644 --- a/src/pages/dashboard.js +++ b/src/plugins/dashboard/dashboard.js @@ -1,6 +1,6 @@ import { h, Component } from 'preact'; -import { nodes } from '../lib/dashboard_node_definitions'; -import { getVariables, loadDashboardConfig } from '../lib/espeasy'; +import { nodes } from './dashboard_node_definitions'; +import { getVariables, loadDashboardConfig } from './api'; export class DashboardPage extends Component { constructor(props) { diff --git a/src/lib/dashboard_node_definitions.js b/src/plugins/dashboard/dashboard_node_definitions.js similarity index 100% rename from src/lib/dashboard_node_definitions.js rename to src/plugins/dashboard/dashboard_node_definitions.js diff --git a/src/plugins/dashboard/index.js b/src/plugins/dashboard/index.js new file mode 100644 index 0000000..68a4f11 --- /dev/null +++ b/src/plugins/dashboard/index.js @@ -0,0 +1,10 @@ +import { DashboardPage } from './dashboard'; +import { DashboardEditorPage } from './dashboard.editor'; + +const pluginAPI = window.getPluginAPI(); + +const menu = { title: 'Dashboard', pagetitle: '', href: 'dashboard', class: 'full', component: DashboardPage, children: [ + { title: 'Editor', pagetitle: '', href: 'dashboard/editor', class: 'full', component: DashboardEditorPage }, + ] }; + +pluginAPI.menu.addMenu(menu); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 225ffeb..fb950b1 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,10 +5,12 @@ var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlug module.exports = env => ({ mode: env && env.production ? 'production' : 'development', - entry: './src/app.js', + entry: { + app: './src/app.js', + dash: './src/plugins/dashboard/index.js', + }, output: { path: path.resolve(__dirname, 'build'), - filename: 'app.js' }, plugins: [ new LiveReloadPlugin(),