sdc_client 0.57.12 → 0.57.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +11 -20
- package/dist/index.js +7 -7
- package/dist/ugly.index.js +1 -1
- package/package.json +2 -2
- package/src/simpleDomControl/AbstractSDC.js +4 -4
- package/src/simpleDomControl/sdc_controller.js +69 -17
- package/src/simpleDomControl/sdc_dom_events.js +1 -1
- package/src/simpleDomControl/sdc_main.js +361 -367
- package/src/simpleDomControl/sdc_socket.js +7 -4
- package/src/simpleDomControl/sdc_utils.js +1 -1
- package/src/simpleDomControl/sdc_view.js +364 -311
- package/test/dist.test.js +1 -1
- package/test/view.test.js +18 -1
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
24
24
|
\*********************************************/
|
|
25
25
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
26
26
|
|
|
27
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\n this.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn('afterShow is deprecated!!');\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = '';\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === 'function') {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG) {\n console.DEBUG(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle('onLoad', arguments);\n }\n willShow() {\n return this._runLifecycle('willShow', arguments);\n }\n onRefresh() {\n return this._runLifecycle('onRefresh', arguments);\n }\n onRemove() {\n this._runLifecycle('onRemove', arguments);\n return true;\n }\n noOpenModelRequests() {\n return Promise.all(this._models.map(x => x.noOpenRequests()));\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error('To use the serverCall function the contentUrl must be set: ' + this.name);\n return;\n }\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(app[1], this._tagName, this.parsedContentUrl, methode, args);\n }\n\n /**\n *\n * @param model_name {string | Number}\n * @param model_query {Object}\n * @constructor\n */\n newModel(model_name, model_query = {}) {\n if (model_name instanceof Number && model_name.hasOwnProperty('load')) {\n return model_name.load(this);\n }\n const model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n this._models.push(model);\n return model;\n }\n\n /**\n *\n * @param model_name {string}\n * @param model_query {Object}\n * @param values {Object}\n * @constructor\n */\n updateModel(model_name, model_query = {}, values) {\n let model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n return model.load().then(() => {\n model.values |= values;\n model.save().then(() => {\n model.close();\n return model.values;\n });\n });\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === 'function') {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === 'function') {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n let p_list = [];\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let model = $form.data('model');\n const values = model.syncForm($form);\n for (let instance_value of values) {\n p_list.push(new Promise((resolve, reject) => {\n let prom;\n if (instance_value.pk !== null && instance_value.pk >= 0) {\n prom = model.save(instance_value.pk);\n } else {\n prom = model.create(instance_value);\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.setErrorsInForm)($form, $(data.html));\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n }));\n }\n }\n return Promise.all(p_list).then(res => {\n return Object.assign({}, ...res.flat());\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUksTUFBTSxDQUFDSixJQUFJLENBQUM7VUFDaEIsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7TUFDUDtJQUNKO0lBRUEsT0FBTzVFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDd0UsTUFBTSxDQUFDLENBQUN2RSxJQUFJLENBQUVzRSxHQUFHLElBQUs7TUFDckMsT0FBT2tCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUduQixHQUFHLENBQUNvQixJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztFQUNOO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvQWJzdHJhY3RTREMuanM/ZDdmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FsbE9mZn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge01vZGVsfSBmcm9tIFwiLi9zZGNfc29ja2V0LmpzXCI7XG5pbXBvcnQge2NhbGxTZXJ2ZXJ9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuaW1wb3J0IHt1dWlkdjQsIHNldEVycm9yc0luRm9ybSwgY2xlYXJFcnJvcnNJbkZvcm0sIHRhZ05hbWVUb0NhbWVsQ2FzZSwgdGFnTmFtZVRvUmVhZGFibGVOYW1lfSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0U0RDIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fdXVpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRVcmwgPSAnJztcbiAgICAgICAgdGhpcy5jb250ZW50UmVsb2FkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFyc2VkQ29udGVudFVybCA9IG51bGw7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMubG9hZF9hc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3VybFBhcmFtcyA9IFtdO1xuICAgICAgICB0aGlzLl9tb2RlbHMgPSBbXTtcblxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gT2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHRoaXMuX2Nzc1VybHMgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlclNob3cgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2FmdGVyU2hvdyBpcyBkZXByZWNhdGVkISEnKVxuICAgICAgICB9O1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLSBFbmQgb2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge3tzdHJpbmc6IEFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX21peGlucyA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fdGFnTmFtZSA9ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9PcGVuTW9kZWxSZXF1ZXN0cyggKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9tb2RlbHMubWFwKHggPT4geC5ub09wZW5SZXF1ZXN0cygpKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gICAgfVxuXG4gICAgcG9zdCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgZ2V0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLmdldCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2VydmVyQ2FsbChtZXRob2RlLCBhcmdzKSB7XG4gICAgICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICAgICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgICAgIGlmICghYXBwIHx8IGFwcC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6ICcgKyB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoYXBwWzFdLCB0aGlzLl90YWdOYW1lLCB0aGlzLnBhcnNlZENvbnRlbnRVcmwsIG1ldGhvZGUsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZyB8IE51bWJlcn1cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBuZXdNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9KSB7XG4gICAgICAgIGlmKG1vZGVsX25hbWUgaW5zdGFuY2VvZiBOdW1iZXIgJiYgbW9kZWxfbmFtZS5oYXNPd25Qcm9wZXJ0eSgnbG9hZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kZWxfbmFtZS5sb2FkKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgTW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkpO1xuICAgICAgICB0aGlzLl9tb2RlbHMucHVzaChtb2RlbCk7XG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmd9XG4gICAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtPYmplY3R9XG4gICAgICogQHBhcmFtIHZhbHVlcyB7T2JqZWN0fVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHVwZGF0ZU1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5ID0ge30sIHZhbHVlcykge1xuICAgICAgICBsZXQgbW9kZWwgPSBuZXcgTW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkpO1xuICAgICAgICByZXR1cm4gbW9kZWwubG9hZCgpLnRoZW4oKCk9PntcbiAgICAgICAgICAgIG1vZGVsLnZhbHVlcyB8PSB2YWx1ZXM7XG4gICAgICAgICAgICBtb2RlbC5zYXZlKCkudGhlbigoKT0+IHtcbiAgICAgICAgICAgICAgICBtb2RlbC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbC52YWx1ZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGFwdGVyIHRvIHRoaXMuJGNvbnRhaW5lci5maW5kXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRvbVNlbGVjdG9yXG4gICAgICovXG4gICAgZmluZChkb21TZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy4kY29udGFpbmVyLmZpbmQoZG9tU2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVmcmVzaCh0aGlzLiRjb250YWluZXIsIHRoaXMpO1xuICAgIH1cblxuICAgIHJlbG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5yZWxvYWRDb250cm9sbGVyKHRoaXMpO1xuICAgIH1cblxuICAgIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5yZWNvbmNpbGUodGhpcywgJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUpO1xuICAgIH1cblxuICAgIHN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yKCRmb3JtLCBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3VibWl0TW9kZWxGb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VibWl0TW9kZWxGb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgIH1cblxuICAgIGl0ZXJhdGVBbGxDaGlsZHJlbigpIHtcbiAgICAgICAgbGV0IF9jaGlsZENvbnRyb2xsZXIgPSB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goY2MpO1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCguLi5jYy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW9kZWwgRm9ybSBFdmVudHNcbiAgICAgKi9cbiAgICBkZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKSB7XG4gICAgICAgIGxldCBwX2xpc3QgPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLl9pc01peGluKSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbGV0IG1vZGVsID0gJGZvcm0uZGF0YSgnbW9kZWwnKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG1vZGVsLnN5bmNGb3JtKCRmb3JtKTtcbiAgICAgICAgICAgIGZvciAobGV0IGluc3RhbmNlX3ZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb207XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZV92YWx1ZS5wayAhPT0gbnVsbCAmJiBpbnN0YW5jZV92YWx1ZS5wayA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tID0gbW9kZWwuc2F2ZShpbnN0YW5jZV92YWx1ZS5wayk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tID0gbW9kZWwuY3JlYXRlKGluc3RhbmNlX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByb20udGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yc0luRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JzSW5Gb3JtKCRmb3JtLCAkKGRhdGEuaHRtbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJiB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiYgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgLi4ucmVzLmZsYXQoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0iXSwibmFtZXMiOlsiYWxsT2ZmIiwiYXBwIiwiTW9kZWwiLCJjYWxsU2VydmVyIiwidXVpZHY0Iiwic2V0RXJyb3JzSW5Gb3JtIiwiY2xlYXJFcnJvcnNJbkZvcm0iLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJBYnN0cmFjdFNEQyIsImNvbnN0cnVjdG9yIiwiX3V1aWQiLCJjb250ZW50VXJsIiwiY29udGVudFJlbG9hZCIsInBhcnNlZENvbnRlbnRVcmwiLCJldmVudHMiLCJsb2FkX2FzeW5jIiwiX2lzRXZlbnRzU2V0IiwiX2FsbEV2ZW50cyIsIl91cmxQYXJhbXMiLCJfbW9kZWxzIiwiX2Nzc1VybHMiLCJhZnRlclNob3ciLCJjb25zb2xlIiwid2FybiIsIl9taXhpbnMiLCJfdGFnTmFtZSIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsIl9vbkxvYWREb25lIiwiJGNvbnRhaW5lciIsIl9pc01peGluIiwiX3J1bkxpZmVjeWNsZSIsIm1ldGhvZCIsImFyZ3MiLCJERUJVRyIsImRlYnVnIiwicmV0dXJuUHJvbWlzc2VzIiwibWl4aW5LZXkiLCJtaXhpbiIsInB1c2giLCJhcHBseSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwib25Jbml0IiwiQXJyYXkiLCJhcmd1bWVudHMiLCJwYXJlbnRDb250cm9sbGVyIiwiY2hpbGRDb250cm9sbGVyIiwib25Mb2FkIiwid2lsbFNob3ciLCJvblJlZnJlc2giLCJvblJlbW92ZSIsIm5vT3Blbk1vZGVsUmVxdWVzdHMiLCJtYXAiLCJ4Iiwibm9PcGVuUmVxdWVzdHMiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIl8iLCJtZXJnZSIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwibmV3TW9kZWwiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJOdW1iZXIiLCJsb2FkIiwidXBkYXRlTW9kZWwiLCJ2YWx1ZXMiLCJzYXZlIiwiZmluZCIsImRvbVNlbGVjdG9yIiwicmVmcmVzaCIsInJlbG9hZCIsInJlbG9hZENvbnRyb2xsZXIiLCJyZWNvbmNpbGUiLCIkdmlydHVhbE5vZGUiLCIkcmVhbE5vZGUiLCJzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvciIsIiRmb3JtIiwiZSIsIl9zdWJtaXRNb2RlbEZvcm0iLCJzdWJtaXRNb2RlbEZvcm0iLCJkZWZhdWx0U3VibWl0TW9kZWxGb3JtIiwiaXRlcmF0ZUFsbENoaWxkcmVuIiwicmVzIiwicF9saXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJkYXRhIiwic3luY0Zvcm0iLCJpbnN0YW5jZV92YWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9tIiwicGsiLCJjcmVhdGUiLCJzdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzIiwiY29udHJvbGxlciIsImNhdGNoIiwiJCIsImh0bWwiLCJzdWJtaXRfbW9kZWxfZm9ybV9lcnJvciIsIk9iamVjdCIsImFzc2lnbiIsImZsYXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n");
|
|
27
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\n this.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn('afterShow is deprecated!!');\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = Object.getPrototypeOf(this)._tagName ?? '';\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === 'function') {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.DEBUG(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle('onLoad', arguments);\n }\n willShow() {\n return this._runLifecycle('willShow', arguments);\n }\n onRefresh() {\n return this._runLifecycle('onRefresh', arguments);\n }\n onRemove() {\n this._runLifecycle('onRemove', arguments);\n return true;\n }\n noOpenModelRequests() {\n return Promise.all(this._models.map(x => x.noOpenRequests()));\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error('To use the serverCall function the contentUrl must be set: ' + this.name);\n return;\n }\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(app[1], this._tagName, this.parsedContentUrl ?? this.contentUrl, methode, args);\n }\n\n /**\n *\n * @param model_name {string | Number}\n * @param model_query {Object}\n * @constructor\n */\n newModel(model_name, model_query = {}) {\n if (model_name instanceof Number && model_name.hasOwnProperty('load')) {\n return model_name.load(this);\n }\n const model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n this._models.push(model);\n return model;\n }\n\n /**\n *\n * @param model_name {string}\n * @param model_query {Object}\n * @param values {Object}\n * @constructor\n */\n updateModel(model_name, model_query = {}, values) {\n let model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n return model.load().then(() => {\n model.values |= values;\n model.save().then(() => {\n model.close();\n return model.values;\n });\n });\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === 'function') {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === 'function') {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n let p_list = [];\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let model = $form.data('model');\n const values = model.syncForm($form);\n for (let instance_value of values) {\n p_list.push(new Promise((resolve, reject) => {\n let prom;\n if (instance_value.pk !== null && instance_value.pk >= 0) {\n prom = model.save(instance_value.pk);\n } else {\n prom = model.create(instance_value);\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.setErrorsInForm)($form, $(data.html));\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n }));\n }\n }\n return Promise.all(p_list).then(res => {\n return Object.assign({}, ...res.flat());\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLE1BQU1TLFVBQVUsSUFBSSxJQUFJLENBQUNkLGtCQUFrQixDQUFDLENBQUMsRUFBRTtjQUMvQ2MsVUFBVSxDQUFDSSx1QkFBdUIsSUFBSUosVUFBVSxDQUFDSSx1QkFBdUIsQ0FBQ2IsSUFBSSxDQUFDO1lBQ2xGO1lBQ0FJLE1BQU0sQ0FBQ0osSUFBSSxDQUFDO1VBQ2hCLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1A7SUFDSjtJQUVBLE9BQU81RSxPQUFPLENBQUNDLEdBQUcsQ0FBQ3dFLE1BQU0sQ0FBQyxDQUFDdkUsSUFBSSxDQUFFc0UsR0FBRyxJQUFLO01BQ3JDLE9BQU96RixNQUFNLENBQUMyRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBR2xCLEdBQUcsQ0FBQ21CLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0VBQ047QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcz9kN2Y3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWxsT2ZmfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7TW9kZWx9IGZyb20gXCIuL3NkY19zb2NrZXQuanNcIjtcbmltcG9ydCB7Y2FsbFNlcnZlcn0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5pbXBvcnQge3V1aWR2NCwgc2V0RXJyb3JzSW5Gb3JtLCBjbGVhckVycm9yc0luRm9ybSwgdGFnTmFtZVRvQ2FtZWxDYXNlLCB0YWdOYW1lVG9SZWFkYWJsZU5hbWV9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTREMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl91dWlkID0gdXVpZHY0KCk7XG4gICAgICAgIHRoaXMuY29udGVudFVybCA9ICcnO1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJzZWRDb250ZW50VXJsID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkX2FzeW5jID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRXZlbnRzU2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50cyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHRoaXMuX21vZGVscyA9IFtdO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBPbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdGhpcy5fY3NzVXJscyA9IFtdO1xuICAgICAgICB0aGlzLmFmdGVyU2hvdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignYWZ0ZXJTaG93IGlzIGRlcHJlY2F0ZWQhIScpXG4gICAgICAgIH07XG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tIEVuZCBvbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzogQWJzdHJhY3RTREN9fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fbWl4aW5zID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl90YWdOYW1lID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl90YWdOYW1lID8/ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9PcGVuTW9kZWxSZXF1ZXN0cyggKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9tb2RlbHMubWFwKHggPT4geC5ub09wZW5SZXF1ZXN0cygpKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gICAgfVxuXG4gICAgcG9zdCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgZ2V0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLmdldCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2VydmVyQ2FsbChtZXRob2RlLCBhcmdzKSB7XG4gICAgICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICAgICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgICAgIGlmICghYXBwIHx8IGFwcC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6ICcgKyB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoYXBwWzFdLCB0aGlzLl90YWdOYW1lLCB0aGlzLnBhcnNlZENvbnRlbnRVcmwgPz8gdGhpcy5jb250ZW50VXJsLCBtZXRob2RlLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmcgfCBOdW1iZXJ9XG4gICAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgbmV3TW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICBpZihtb2RlbF9uYW1lIGluc3RhbmNlb2YgTnVtYmVyICYmIG1vZGVsX25hbWUuaGFzT3duUHJvcGVydHkoJ2xvYWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsX25hbWUubG9hZCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBwYXJhbSB2YWx1ZXMge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB1cGRhdGVNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9LCB2YWx1ZXMpIHtcbiAgICAgICAgbGV0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIG1vZGVsLmxvYWQoKS50aGVuKCgpPT57XG4gICAgICAgICAgICBtb2RlbC52YWx1ZXMgfD0gdmFsdWVzO1xuICAgICAgICAgICAgbW9kZWwuc2F2ZSgpLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWwudmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRhcHRlciB0byB0aGlzLiRjb250YWluZXIuZmluZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb21TZWxlY3RvclxuICAgICAqL1xuICAgIGZpbmQoZG9tU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlZnJlc2godGhpcy4kY29udGFpbmVyLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVsb2FkQ29udHJvbGxlcih0aGlzKTtcbiAgICB9XG5cbiAgICByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVjb25jaWxlKHRoaXMsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgICB9XG5cbiAgICBzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcigkZm9ybSwgZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG5cbiAgICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYyBvZiBfY2hpbGRDb250cm9sbGVyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goLi4uY2MuaXRlcmF0ZUFsbENoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIEZvcm0gRXZlbnRzXG4gICAgICovXG4gICAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgICAgICBsZXQgcF9saXN0ID0gW107XG4gICAgICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCBtb2RlbCA9ICRmb3JtLmRhdGEoJ21vZGVsJyk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtb2RlbC5zeW5jRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbnN0YW5jZV92YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VfdmFsdWUucGsgIT09IG51bGwgJiYgaW5zdGFuY2VfdmFsdWUucGsgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLnNhdmUoaW5zdGFuY2VfdmFsdWUucGspO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLmNyZWF0ZShpbnN0YW5jZV92YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9tLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJFcnJvcnNJbkZvcm0oJGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MocmVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yc0luRm9ybSgkZm9ybSwgJChkYXRhLmh0bWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnJlcy5mbGF0KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59Il0sIm5hbWVzIjpbImFsbE9mZiIsImFwcCIsIk1vZGVsIiwiY2FsbFNlcnZlciIsInV1aWR2NCIsInNldEVycm9yc0luRm9ybSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidGFnTmFtZVRvUmVhZGFibGVOYW1lIiwiQWJzdHJhY3RTREMiLCJjb25zdHJ1Y3RvciIsIl91dWlkIiwiY29udGVudFVybCIsImNvbnRlbnRSZWxvYWQiLCJwYXJzZWRDb250ZW50VXJsIiwiZXZlbnRzIiwibG9hZF9hc3luYyIsIl9pc0V2ZW50c1NldCIsIl9hbGxFdmVudHMiLCJfdXJsUGFyYW1zIiwiX21vZGVscyIsIl9jc3NVcmxzIiwiYWZ0ZXJTaG93IiwiY29uc29sZSIsIndhcm4iLCJfbWl4aW5zIiwiX3RhZ05hbWUiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsIl9vbkxvYWREb25lIiwiJGNvbnRhaW5lciIsIl9pc01peGluIiwiX3J1bkxpZmVjeWNsZSIsIm1ldGhvZCIsImFyZ3MiLCJERUJVRyIsImRlYnVnIiwicmV0dXJuUHJvbWlzc2VzIiwibWl4aW5LZXkiLCJtaXhpbiIsInB1c2giLCJhcHBseSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwib25Jbml0IiwiQXJyYXkiLCJhcmd1bWVudHMiLCJwYXJlbnRDb250cm9sbGVyIiwiY2hpbGRDb250cm9sbGVyIiwib25Mb2FkIiwid2lsbFNob3ciLCJvblJlZnJlc2giLCJvblJlbW92ZSIsIm5vT3Blbk1vZGVsUmVxdWVzdHMiLCJtYXAiLCJ4Iiwibm9PcGVuUmVxdWVzdHMiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIl8iLCJtZXJnZSIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwibmV3TW9kZWwiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJOdW1iZXIiLCJsb2FkIiwidXBkYXRlTW9kZWwiLCJ2YWx1ZXMiLCJzYXZlIiwiZmluZCIsImRvbVNlbGVjdG9yIiwicmVmcmVzaCIsInJlbG9hZCIsInJlbG9hZENvbnRyb2xsZXIiLCJyZWNvbmNpbGUiLCIkdmlydHVhbE5vZGUiLCIkcmVhbE5vZGUiLCJzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvciIsIiRmb3JtIiwiZSIsIl9zdWJtaXRNb2RlbEZvcm0iLCJzdWJtaXRNb2RlbEZvcm0iLCJkZWZhdWx0U3VibWl0TW9kZWxGb3JtIiwiaXRlcmF0ZUFsbENoaWxkcmVuIiwicmVzIiwicF9saXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJkYXRhIiwic3luY0Zvcm0iLCJpbnN0YW5jZV92YWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9tIiwicGsiLCJjcmVhdGUiLCJzdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzIiwiY29udHJvbGxlciIsImNhdGNoIiwiJCIsImh0bWwiLCJzdWJtaXRfbW9kZWxfZm9ybV9lcnJvciIsImFzc2lnbiIsImZsYXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n");
|
|
28
28
|
|
|
29
29
|
/***/ }),
|
|
30
30
|
|
|
@@ -34,7 +34,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
34
34
|
\************************************************/
|
|
35
35
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
36
36
|
|
|
37
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n\n\n\nlet Global = {};\nlet controllerList = {};\nfunction tagList() {\n return Object.keys(controllerList);\n}\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n parentController._childController[controllerName].push(controller);\n }\n return controller._parentController = parentController;\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {string} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(parentController, $element, tagName, superTagNameList) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(controllerClass, ...mixinControllerClass))();\n controller._tagName = tagName;\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {string} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (Global[gTagName]) {\n let controller = Global[gTagName];\n setParentController(parentController, controller);\n controller.$container = $element;\n return controller;\n }\n return controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then(html => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n */\nfunction runControlFlowFunctions(controller) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller);\n }).catch(function ($html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n });\n if (controller.load_async) {\n return Promise.resolve();\n }\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction runRefresh(controller) {\n return controller.refresh && controller.refresh();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQXlGO0FBQ3dCO0FBRTFEO0FBRWhELElBQUlRLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFNBQVNDLE9BQU9BLENBQUEsRUFBRztFQUN0QixPQUFPQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsY0FBYyxDQUFDO0FBQ3RDO0FBR0EsU0FBU0ksYUFBYUEsQ0FBQ0MsZ0JBQWdCLEVBQUVDLE9BQU8sRUFBRTtFQUM5Q0QsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDRSxNQUFNLENBQUNQLGNBQWMsQ0FBQ00sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEVELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0csTUFBTSxDQUFDLENBQUNDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEtBQUs7SUFDL0QsT0FBT0EsSUFBSSxDQUFDQyxPQUFPLENBQUNILEtBQUssQ0FBQyxLQUFLQyxLQUFLO0VBQ3hDLENBQUMsQ0FBQztFQUNGLElBQUlHLFFBQVEsR0FBRyxJQUFJO0VBQ25CLE9BQU9BLFFBQVEsRUFBRTtJQUNiQSxRQUFRLEdBQUcsS0FBSztJQUNoQixLQUFLLElBQUlDLEdBQUcsSUFBSVQsZ0JBQWdCLEVBQUU7TUFDOUIsS0FBSyxJQUFJVSxNQUFNLElBQUlmLGNBQWMsQ0FBQ2MsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdkMsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQ1csUUFBUSxDQUFDRCxNQUFNLENBQUMsRUFBRTtVQUNwQ1YsZ0JBQWdCLENBQUNZLElBQUksQ0FBQ0YsTUFBTSxDQUFDO1VBQzdCRixRQUFRLEdBQUcsSUFBSTtRQUNuQjtNQUNKO0lBQ0o7RUFDSjtFQUNBLE9BQU9SLGdCQUFnQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDLENBQUMsRUFBRWtELElBQUksQ0FBQyxNQUFNO01BQ3JELE9BQU9NLElBQUk7SUFDZixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSx1QkFBdUJBLENBQUMvQixVQUFVLEVBQUU7RUFDaEQsTUFBTWdDLGVBQWUsR0FBR04saUJBQWlCLENBQUMxQixVQUFVLENBQUMsQ0FDaERxQixJQUFJLENBQUMsVUFBVUQsS0FBSyxFQUFFO0lBQ25CLE9BQU9ELGlCQUFpQixDQUFDbkIsVUFBVSxFQUFFb0IsS0FBSyxDQUFDO0VBQy9DLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtJQUNWLE9BQU9ZLFVBQVUsQ0FBQ2pDLFVBQVUsQ0FBQztFQUNqQyxDQUFDLENBQUMsQ0FBQ2tDLEtBQUssQ0FBQyxVQUFVZCxLQUFLLEVBQUU7SUFDdEIsT0FBTzNDLHNFQUF3QixDQUFDdUIsVUFBVSxFQUFFb0IsS0FBSyxDQUFDO0VBQ3RELENBQUMsQ0FBQztFQUVOLElBQUlwQixVQUFVLENBQUNtQyxVQUFVLEVBQUU7SUFDdkIsT0FBT1YsT0FBTyxDQUFDVyxPQUFPLENBQUMsQ0FBQztFQUM1QjtFQUVBLE9BQU9KLGVBQWU7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFVQSxDQUFDakMsVUFBVSxFQUFFO0VBQ25DLE9BQU9BLFVBQVUsQ0FBQ3FDLE9BQU8sSUFBSXJDLFVBQVUsQ0FBQ3FDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19jb250cm9sbGVyLmpzPzhhMzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwcm9taXNlRHVtbXlGYWN0b3J5LCB0YWdOYW1lVG9DYW1lbENhc2UsIGFnaWxlQWdncmVnYXRpb259IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtDT05UUk9MTEVSX0NMQVNTLCBnZXRDb250cm9sbGVyLCBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciwgcnVuQ29udHJvbGxlckZpbGxDb250ZW50fSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5pbXBvcnQge3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXJ9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcblxuZXhwb3J0IGxldCBHbG9iYWwgPSB7fTtcbmV4cG9ydCBsZXQgY29udHJvbGxlckxpc3QgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiB0YWdMaXN0KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9sbGVyTGlzdCk7XG59XG5cblxuZnVuY3Rpb24gcHJlcGFyZU1peGlucyhzdXBlclRhZ05hbWVMaXN0LCB0YWdOYW1lKSB7XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuY29uY2F0KGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdKTtcbiAgICBzdXBlclRhZ05hbWVMaXN0ID0gc3VwZXJUYWdOYW1lTGlzdC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4ge1xuICAgICAgICByZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gICAgfSk7XG4gICAgbGV0IGhhc0FkZGVkID0gdHJ1ZTtcbiAgICB3aGlsZSAoaGFzQWRkZWQpIHtcbiAgICAgICAgaGFzQWRkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgdGFnIG9mIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG5ld1RhZyBvZiBjb250cm9sbGVyTGlzdFt0YWddWzFdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdXBlclRhZ05hbWVMaXN0LmluY2x1ZGVzKG5ld1RhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXJUYWdOYW1lTGlzdC5wdXNoKG5ld1RhZyk7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyVGFnTmFtZUxpc3Q7XG59XG5cbi8qKlxuICogc2V0UGFyZW50Q29udHJvbGxlciBzZXRzIHRoZSBwYXJlbnQgY29udHJvbGxlciBhcyBwcm9wZXJ0eTogJ3BhcmVudENvbnRyb2xsZXInXG4gKiB0byB0aGUgY2hpbGQgY29udHJvbGxlci4gQWxzbywgaXQgYWRkcyB0aGUgY2hpbGQgY29udHJvbGxlciB0byB0aGUgcHJvcGVydHkgbGlzdDpcbiAqICdwYXJlbnRDb250cm9sbGVyJyB0byB0aGUgcGFyZW50IGNvbnRyb2xsZXJcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZSwgY29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTSBvZiB0aGUgY29udHJvbGxlcnMgRE9NXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gcGFyZW50Q29udHJvbGxlclxuICovXG5mdW5jdGlvbiBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpIHtcbiAgICBpZiAocGFyZW50Q29udHJvbGxlcikge1xuICAgICAgICBsZXQgY29udHJvbGxlck5hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UoY29udHJvbGxlci5fdGFnTmFtZSk7XG4gICAgICAgIGlmICghcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXSkge1xuICAgICAgICAgICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXS5wdXNoKGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIHJldHVybiAoY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlciA9IHBhcmVudENvbnRyb2xsZXIpXG59XG5cbi8qKlxuICogcmVzZXRDaGlsZHJlbiByZXNldHMgYWxsIGNoaWxkcmVuIG9mIGEgY29udHJvbGxlci5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldENoaWxkcmVuKHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgICBwYXJlbnRDb250cm9sbGVyLmZpbmQoYC4ke0NPTlRST0xMRVJfQ0xBU1N9YCkuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkdGhpcyk7XG4gICAgICAgIGlmKGNDb250cm9sbGVyID09PSBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNDb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UgaXQgZ2VuZXJhdGVzIGEgY29udHJvbGxlciBpbnN0YW5jZVxuICogZGVwZW5kaW5nIGlmIHRoZSBjb250cm9sbGVyIGlzIHJlZ2lzdGVyZWQgYXMgYSBnbG9iYWwgY29udHJvbGxlci4gSXQgc2V0cyB0aGVcbiAqICRjb250YWluZXIgb2JqZWN0IHRvIHRoZSBqUXVlcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhZy5cbiAqXG4gKiBJdCBoYW5kbGVzIHRoZSBpbml0IHBhcmFtZXRlciBieSB0aGUgZGF0YSB2YWx1ZXMgb2YgdGhlIERPTS5cbiAqXG4gKiBJdCBoYW5kbGVzIHRoZSBzdXBlciBleHRlbnNpb25zLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBDb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnQgLSBUaGUgY3VycmVudCBET00galF1ZXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIHRoZSByZWdpc3RlcmVkIHRhZyBuYW1lIG9mIHRoZSBjdXJyZW50IERPTVxuICogQHBhcmFtIHtzdHJpbmd9IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpIHtcblxuICAgIGxldCBtaXhpbkNvbnRyb2xsZXJDbGFzcyA9IFtdO1xuICAgIHN1cGVyVGFnTmFtZUxpc3QgPSBwcmVwYXJlTWl4aW5zKHN1cGVyVGFnTmFtZUxpc3QsIHRhZ05hbWUpO1xuICAgIGZvciAobGV0IHN1cGVyVGFnTmFtZSBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICAgIG1peGluQ29udHJvbGxlckNsYXNzLnB1c2goY29udHJvbGxlckxpc3Rbc3VwZXJUYWdOYW1lXVswXSk7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRyb2xsZXJDbGFzcyA9IGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzBdO1xuICAgIGxldCBjb250cm9sbGVyID0gbmV3IChhZ2lsZUFnZ3JlZ2F0aW9uKGNvbnRyb2xsZXJDbGFzcywgLi4ubWl4aW5Db250cm9sbGVyQ2xhc3MpKSgpO1xuICAgIGNvbnRyb2xsZXIuX3RhZ05hbWUgPSB0YWdOYW1lO1xuXG4gICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIgPSAkZWxlbWVudDtcbiAgICBydW5PbkluaXRXaXRoUGFyYW1ldGVyKCRlbGVtZW50LCBjb250cm9sbGVyKTtcblxuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogY29udHJvbGxlckZhY3RvcnkgaXQgZWl0aGVyIGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgb3IgdGFrZXMgYSBnbG9iZSBpbnN0YW5jZVxuICogZGVwZW5kaW5nIGlmIHRoZSBjb250cm9sbGVyIGlzIHJlZ2lzdGVyZWQgYXMgYSBnbG9iYWwgY29udHJvbGxlci4gSXQgc2V0cyB0aGVcbiAqICRjb250YWluZXIgb2JqZWN0IHRvIHRoZSBqUXVlcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhZy5cbiAqXG4gKiBSZW1lbWJlciBHbG9iYWwgY29udHJvbGxlciBjYW4gbm90IGhhdmUgYSBzdXBlciBjb250cm9sbGVyIVxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBDb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnQgLSBUaGUgY3VycmVudCBET00galF1ZXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIHRoZSByZWdpc3RlcmVkIHRhZyBuYW1lIG9mIHRoZSBjdXJyZW50IERPTVxuICogQHBhcmFtIHtzdHJpbmd9IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuICAgIGxldCBnVGFnTmFtZSA9IHRhZ05hbWVUb0NhbWVsQ2FzZSh0YWdOYW1lKTtcbiAgICBpZiAoR2xvYmFsW2dUYWdOYW1lXSkge1xuICAgICAgICBsZXQgY29udHJvbGxlciA9IEdsb2JhbFtnVGFnTmFtZV07XG4gICAgICAgIHNldFBhcmVudENvbnRyb2xsZXIocGFyZW50Q29udHJvbGxlciwgY29udHJvbGxlcik7XG4gICAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lciA9ICRlbGVtZW50O1xuXG4gICAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyU2hvdyBmaXJzdCBydW5zIG9uTG9hZCBhbmQgZmlsbCBjb250ZW50IGZvciBhbGwgc3ViXG4gKiBjb250cm9sbGVyLiBPbmx5IGlmIGFsbCB0aGUgc3ViIGNvbnRyb2xsZXIgYXJlIGxvYWRlZCB0aGUgd2lsbFNob3dcbiAqIGNvbnRyb2wgZmxvdyBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBhcmdzID0gYXJncyB8fCB0cnVlO1xuICAgICAgICBpZiAoY29udHJvbGxlci53aWxsU2hvdykge1xuICAgICAgICAgICAgbGV0IGxvYWRQcm9taXNlT3JDb250ZW50ID0gY29udHJvbGxlci53aWxsU2hvdygpO1xuICAgICAgICAgICAgaWYgKGxvYWRQcm9taXNlT3JDb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkUHJvbWlzZU9yQ29udGVudC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJMb2FkIENhbGxzIHRoZSBvbkxvYWQgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2xsZXIuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgdGhlIEhUTUwgaXMgc2V0IHRvIHRoZSBwYWdlLlxuICogVGhlIHBhcmFtZXRlciBpcyBhIGxpc3Qgb2YgY2hpbGRyZW4gb2YgdGhlIHRhZyBhbmQgdGhlIHJlZ2lzdGVyZWQgdGFnLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2xsZXIub25Mb2FkIHx8IGNvbnRyb2xsZXIuX29uTG9hZERvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgICAgIGxldCBsb2FkUHJvbWlzZSA9IGNvbnRyb2xsZXIub25Mb2FkKGh0bWwpO1xuICAgICAgICByZXR1cm4gKGxvYWRQcm9taXNlIHx8IHByb21pc2VEdW1teUZhY3RvcnkoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMgcnVucyB0aGUgY29udHJvbCBmbG93IGZ1bmN0aW9uczpcbiAqIDEuIG9uTG9hZCgpXG4gKiAyLiBmaWxsIGNvbnRlbnRcbiAqIDMuIHdpbGxTaG93KGRvbSBwYXJhbWV0ZXIpXG4gKiA0LiByZWZyZXNoKClcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHByb21fY29udHJvbGxlciA9IHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICgkaHRtbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcnVuUmVmcmVzaChjb250cm9sbGVyKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICAgICAgfSk7XG5cbiAgICBpZiAoY29udHJvbGxlci5sb2FkX2FzeW5jKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbV9jb250cm9sbGVyO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SZWZyZXNoKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gY29udHJvbGxlci5yZWZyZXNoICYmIGNvbnRyb2xsZXIucmVmcmVzaCgpO1xufSJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiYWdpbGVBZ2dyZWdhdGlvbiIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJydW5Db250cm9sbGVyRmlsbENvbnRlbnQiLCJydW5PbkluaXRXaXRoUGFyYW1ldGVyIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwiT2JqZWN0Iiwia2V5cyIsInByZXBhcmVNaXhpbnMiLCJzdXBlclRhZ05hbWVMaXN0IiwidGFnTmFtZSIsImNvbmNhdCIsImZpbHRlciIsInZhbHVlIiwiaW5kZXgiLCJzZWxmIiwiaW5kZXhPZiIsImhhc0FkZGVkIiwidGFnIiwibmV3VGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwic2V0UGFyZW50Q29udHJvbGxlciIsInBhcmVudENvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwiY29udHJvbGxlck5hbWUiLCJfdGFnTmFtZSIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsInJlc2V0Q2hpbGRyZW4iLCJmaW5kIiwiZWFjaCIsIiR0aGlzIiwiJCIsImNDb250cm9sbGVyIiwiY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZSIsIiRlbGVtZW50IiwibWl4aW5Db250cm9sbGVyQ2xhc3MiLCJzdXBlclRhZ05hbWUiLCJjb250cm9sbGVyQ2xhc3MiLCIkY29udGFpbmVyIiwiY29udHJvbGxlckZhY3RvcnkiLCJnVGFnTmFtZSIsInJ1bkNvbnRyb2xsZXJTaG93IiwiJGh0bWwiLCJ0aGVuIiwiYXJncyIsIndpbGxTaG93IiwibG9hZFByb21pc2VPckNvbnRlbnQiLCJQcm9taXNlIiwicnVuQ29udHJvbGxlckxvYWQiLCJodG1sIiwib25Mb2FkIiwiX29uTG9hZERvbmUiLCJsb2FkUHJvbWlzZSIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwicHJvbV9jb250cm9sbGVyIiwicnVuUmVmcmVzaCIsImNhdGNoIiwibG9hZF9hc3luYyIsInJlc29sdmUiLCJyZWZyZXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n");
|
|
37
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ prepareRefreshProcess: () => (/* binding */ prepareRefreshProcess),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList),\n/* harmony export */ updateEventAndTriggerOnRefresh: () => (/* binding */ updateEventAndTriggerOnRefresh)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n\n\n\n\n\nlet Global = [];\nlet controllerList = {};\nfunction tagList() {\n return Object.keys(controllerList);\n}\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n parentController._childController[controllerName].push(controller);\n }\n return controller._parentController = parentController;\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(parentController, $element, tagName, superTagNameList) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(controllerClass, ...mixinControllerClass))();\n controller._tagName = tagName;\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n if (Global.includes(tagName)) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (!window[gTagName]) {\n window[gTagName] = controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n }\n window[gTagName].$container = $element;\n return window[gTagName];\n }\n return controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then(html => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runControlFlowFunctions(controller, process) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller, process);\n }).catch(function ($html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n });\n if (controller.load_async) {\n return Promise.resolve();\n }\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runRefresh(controller, process) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)(null, controller, process);\n}\nfunction getParentList(controller) {\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return controllerList;\n}\n\n/**\n *\n * @param {Object} process - Process object containing the refresh process\n */\nfunction updateEventAndTriggerOnRefresh(process) {\n const parentList = getParentList(process.controller[0]);\n const controllerList = parentList.concat(process.controller.slice(1));\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__.setControllerEvents)(con);\n con.onRefresh(process.controller[0]);\n }\n}\nfunction prepareRefreshProcess(refreshProcess, controller) {\n let isRunningProcess = Boolean(refreshProcess);\n if (!isRunningProcess) {\n refreshProcess = {\n uuids: new Set([controller._uuid]),\n controller: [controller]\n };\n } else if (!refreshProcess.uuids.has(controller._uuid)) {\n refreshProcess.uuids.add(controller._uuid);\n refreshProcess.controller.push(controller);\n }\n return {\n isRunningProcess,\n refreshProcess\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RjtBQU9sRTtBQUVnQztBQUNDO0FBQ3RCO0FBRTNCLElBQUlXLE1BQU0sR0FBRyxFQUFFO0FBQ2YsSUFBSUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2QixTQUFTQyxPQUFPQSxDQUFBLEVBQUc7RUFDdEIsT0FBT0MsTUFBTSxDQUFDQyxJQUFJLENBQUNILGNBQWMsQ0FBQztBQUN0QztBQUdBLFNBQVNJLGFBQWFBLENBQUNDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUU7RUFDOUNELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0UsTUFBTSxDQUFDUCxjQUFjLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RFRCxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUNHLE1BQU0sQ0FBQyxDQUFDQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxLQUFLO0lBQy9ELE9BQU9BLElBQUksQ0FBQ0MsT0FBTyxDQUFDSCxLQUFLLENBQUMsS0FBS0MsS0FBSztFQUN4QyxDQUFDLENBQUM7RUFDRixJQUFJRyxRQUFRLEdBQUcsSUFBSTtFQUNuQixPQUFPQSxRQUFRLEVBQUU7SUFDYkEsUUFBUSxHQUFHLEtBQUs7SUFDaEIsS0FBSyxJQUFJQyxHQUFHLElBQUlULGdCQUFnQixFQUFFO01BQzlCLEtBQUssSUFBSVUsTUFBTSxJQUFJZixjQUFjLENBQUNjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLElBQUksQ0FBQ1QsZ0JBQWdCLENBQUNXLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDLEVBQUU7VUFDcENWLGdCQUFnQixDQUFDWSxJQUFJLENBQUNGLE1BQU0sQ0FBQztVQUM3QkYsUUFBUSxHQUFHLElBQUk7UUFDbkI7TUFDSjtJQUNKO0VBQ0o7RUFDQSxPQUFPUixnQkFBZ0I7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FB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QUFLLENBQUNJLEdBQUcsQ0FBQ3ZELFVBQVUsQ0FBQ3FELEtBQUssQ0FBQztJQUMxQ0wsY0FBYyxDQUFDaEQsVUFBVSxDQUFDSCxJQUFJLENBQUNHLFVBQVUsQ0FBQztFQUM1QztFQUVBLE9BQU87SUFBQ2lELGdCQUFnQjtJQUFFRDtFQUFjLENBQUM7QUFDN0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanM/OGEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3Byb21pc2VEdW1teUZhY3RvcnksIHRhZ05hbWVUb0NhbWVsQ2FzZSwgYWdpbGVBZ2dyZWdhdGlvbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIENPTlRST0xMRVJfQ0xBU1MsXG4gICAgZ2V0Q29udHJvbGxlcixcbiAgICBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcixcbiAgICByZWZyZXNoLFxuICAgIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5pbXBvcnQge3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXJ9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7c2V0Q29udHJvbGxlckV2ZW50c30gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuXG5leHBvcnQgbGV0IEdsb2JhbCA9IFtdO1xuZXhwb3J0IGxldCBjb250cm9sbGVyTGlzdCA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFnTGlzdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJvbGxlckxpc3QpO1xufVxuXG5cbmZ1bmN0aW9uIHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSkge1xuICAgIHN1cGVyVGFnTmFtZUxpc3QgPSBzdXBlclRhZ05hbWVMaXN0LmNvbmNhdChjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXSk7XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuICAgIH0pO1xuICAgIGxldCBoYXNBZGRlZCA9IHRydWU7XG4gICAgd2hpbGUgKGhhc0FkZGVkKSB7XG4gICAgICAgIGhhc0FkZGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IHRhZyBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuZXdUYWcgb2YgY29udHJvbGxlckxpc3RbdGFnXVsxXSkge1xuICAgICAgICAgICAgICAgIGlmICghc3VwZXJUYWdOYW1lTGlzdC5pbmNsdWRlcyhuZXdUYWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyVGFnTmFtZUxpc3QucHVzaChuZXdUYWcpO1xuICAgICAgICAgICAgICAgICAgICBoYXNBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdXBlclRhZ05hbWVMaXN0O1xufVxuXG4vKipcbiAqIHNldFBhcmVudENvbnRyb2xsZXIgc2V0cyB0aGUgcGFyZW50IGNvbnRyb2xsZXIgYXMgcHJvcGVydHk6ICdwYXJlbnRDb250cm9sbGVyJ1xuICogdG8gdGhlIGNoaWxkIGNvbnRyb2xsZXIuIEFsc28sIGl0IGFkZHMgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gdGhlIHByb3BlcnR5IGxpc3Q6XG4gKiAncGFyZW50Q29udHJvbGxlcicgdG8gdGhlIHBhcmVudCBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2UsIGNvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET00gb2YgdGhlIGNvbnRyb2xsZXJzIERPTVxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtIHBhcmVudENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKSB7XG4gICAgaWYgKHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJOYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKGNvbnRyb2xsZXIuX3RhZ05hbWUpO1xuICAgICAgICBpZiAoIXBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0pIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0ucHVzaChjb250cm9sbGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyKVxufVxuXG4vKipcbiAqIHJlc2V0Q2hpbGRyZW4gcmVzZXRzIGFsbCBjaGlsZHJlbiBvZiBhIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDaGlsZHJlbihwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyID0ge307XG4gICAgcGFyZW50Q29udHJvbGxlci5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkdGhpcyk7XG4gICAgICAgIGlmIChjQ29udHJvbGxlciA9PT0gcGFyZW50Q29udHJvbGxlcikge1xuICAgICAgICAgICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIGl0IGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgaW5pdCBwYXJhbWV0ZXIgYnkgdGhlIGRhdGEgdmFsdWVzIG9mIHRoZSBET00uXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgc3VwZXIgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgbGV0IG1peGluQ29udHJvbGxlckNsYXNzID0gW107XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSk7XG4gICAgZm9yIChsZXQgc3VwZXJUYWdOYW1lIG9mIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICAgICAgbWl4aW5Db250cm9sbGVyQ2xhc3MucHVzaChjb250cm9sbGVyTGlzdFtzdXBlclRhZ05hbWVdWzBdKTtcbiAgICB9XG5cbiAgICBsZXQgY29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgKGFnaWxlQWdncmVnYXRpb24oY29udHJvbGxlckNsYXNzLCAuLi5taXhpbkNvbnRyb2xsZXJDbGFzcykpKCk7XG4gICAgY29udHJvbGxlci5fdGFnTmFtZSA9IHRhZ05hbWU7XG5cbiAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lciA9ICRlbGVtZW50O1xuICAgIHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoJGVsZW1lbnQsIGNvbnRyb2xsZXIpO1xuXG5cbiAgICByZXR1cm4gY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeSBpdCBlaXRoZXIgZ2VuZXJhdGVzIGEgY29udHJvbGxlciBvciB0YWtlcyBhIGdsb2JlIGluc3RhbmNlXG4gKiBkZXBlbmRpbmcgaWYgdGhlIGNvbnRyb2xsZXIgaXMgcmVnaXN0ZXJlZCBhcyBhIGdsb2JhbCBjb250cm9sbGVyLiBJdCBzZXRzIHRoZVxuICogJGNvbnRhaW5lciBvYmplY3QgdG8gdGhlIGpRdWVyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFnLlxuICpcbiAqIFJlbWVtYmVyIEdsb2JhbCBjb250cm9sbGVyIGNhbiBub3QgaGF2ZSBhIHN1cGVyIGNvbnRyb2xsZXIhXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIENvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET01cbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudCAtIFRoZSBjdXJyZW50IERPTSBqUXVlcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIC0gdGhlIHJlZ2lzdGVyZWQgdGFnIG5hbWUgb2YgdGhlIGN1cnJlbnQgRE9NXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgaWYgKEdsb2JhbC5pbmNsdWRlcyh0YWdOYW1lKSkge1xuICAgICAgICBsZXQgZ1RhZ05hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSk7XG4gICAgICAgIGlmICghd2luZG93W2dUYWdOYW1lXSkge1xuICAgICAgICAgICAgd2luZG93W2dUYWdOYW1lXSA9IGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93W2dUYWdOYW1lXS4kY29udGFpbmVyID0gJGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB3aW5kb3dbZ1RhZ05hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyU2hvdyBmaXJzdCBydW5zIG9uTG9hZCBhbmQgZmlsbCBjb250ZW50IGZvciBhbGwgc3ViXG4gKiBjb250cm9sbGVyLiBPbmx5IGlmIGFsbCB0aGUgc3ViIGNvbnRyb2xsZXIgYXJlIGxvYWRlZCB0aGUgd2lsbFNob3dcbiAqIGNvbnRyb2wgZmxvdyBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBhcmdzID0gYXJncyB8fCB0cnVlO1xuICAgICAgICBpZiAoY29udHJvbGxlci53aWxsU2hvdykge1xuICAgICAgICAgICAgbGV0IGxvYWRQcm9taXNlT3JDb250ZW50ID0gY29udHJvbGxlci53aWxsU2hvdygpO1xuICAgICAgICAgICAgaWYgKGxvYWRQcm9taXNlT3JDb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkUHJvbWlzZU9yQ29udGVudC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJMb2FkIENhbGxzIHRoZSBvbkxvYWQgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2xsZXIuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgdGhlIEhUTUwgaXMgc2V0IHRvIHRoZSBwYWdlLlxuICogVGhlIHBhcmFtZXRlciBpcyBhIGxpc3Qgb2YgY2hpbGRyZW4gb2YgdGhlIHRhZyBhbmQgdGhlIHJlZ2lzdGVyZWQgdGFnLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2xsZXIub25Mb2FkIHx8IGNvbnRyb2xsZXIuX29uTG9hZERvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgICAgIGxldCBsb2FkUHJvbWlzZSA9IGNvbnRyb2xsZXIub25Mb2FkKGh0bWwpO1xuICAgICAgICByZXR1cm4gKGxvYWRQcm9taXNlIHx8IHByb21pc2VEdW1teUZhY3RvcnkoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMgcnVucyB0aGUgY29udHJvbCBmbG93IGZ1bmN0aW9uczpcbiAqIDEuIG9uTG9hZCgpXG4gKiAyLiBmaWxsIGNvbnRlbnRcbiAqIDMuIHdpbGxTaG93KGRvbSBwYXJhbWV0ZXIpXG4gKiA0LiByZWZyZXNoKClcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MgKSB7XG4gICAgY29uc3QgcHJvbV9jb250cm9sbGVyID0gcnVuQ29udHJvbGxlckxvYWQoY29udHJvbGxlcilcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoJGh0bWwpIHtcbiAgICAgICAgICAgIHJldHVybiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KTtcblxuICAgIGlmIChjb250cm9sbGVyLmxvYWRfYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9tX2NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgICByZXR1cm4gcmVmcmVzaChudWxsLCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50TGlzdChjb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgd2hpbGUgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5faXNFdmVudHNTZXQgPSBmYWxzZTtcbiAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXI7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyTGlzdFxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHByb2Nlc3MpIHtcbiAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChwcm9jZXNzLmNvbnRyb2xsZXJbMF0pO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJMaXN0ID0gcGFyZW50TGlzdC5jb25jYXQocHJvY2Vzcy5jb250cm9sbGVyLnNsaWNlKDEpKTtcblxuICAgIGZvciAobGV0IGNvbiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICBzZXRDb250cm9sbGVyRXZlbnRzKGNvbik7XG4gICAgICAgIGNvbi5vblJlZnJlc2gocHJvY2Vzcy5jb250cm9sbGVyWzBdKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSZWZyZXNoUHJvY2VzcyhyZWZyZXNoUHJvY2VzcywgY29udHJvbGxlcikge1xuICAgIGxldCBpc1J1bm5pbmdQcm9jZXNzID0gQm9vbGVhbihyZWZyZXNoUHJvY2Vzcyk7XG5cbiAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgIHJlZnJlc2hQcm9jZXNzID0ge3V1aWRzOiBuZXcgU2V0KFtjb250cm9sbGVyLl91dWlkXSksIGNvbnRyb2xsZXI6IFtjb250cm9sbGVyXX07XG4gICAgfSBlbHNlIGlmICghcmVmcmVzaFByb2Nlc3MudXVpZHMuaGFzKGNvbnRyb2xsZXIuX3V1aWQpKSB7XG4gICAgICByZWZyZXNoUHJvY2Vzcy51dWlkcy5hZGQoY29udHJvbGxlci5fdXVpZCk7XG4gICAgICByZWZyZXNoUHJvY2Vzcy5jb250cm9sbGVyLnB1c2goY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtpc1J1bm5pbmdQcm9jZXNzLCByZWZyZXNoUHJvY2Vzc307XG59XG5cbiJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiYWdpbGVBZ2dyZWdhdGlvbiIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJyZWZyZXNoIiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwicnVuT25Jbml0V2l0aFBhcmFtZXRlciIsInNldENvbnRyb2xsZXJFdmVudHMiLCJhcHAiLCJHbG9iYWwiLCJjb250cm9sbGVyTGlzdCIsInRhZ0xpc3QiLCJPYmplY3QiLCJrZXlzIiwicHJlcGFyZU1peGlucyIsInN1cGVyVGFnTmFtZUxpc3QiLCJ0YWdOYW1lIiwiY29uY2F0IiwiZmlsdGVyIiwidmFsdWUiLCJpbmRleCIsInNlbGYiLCJpbmRleE9mIiwiaGFzQWRkZWQiLCJ0YWciLCJuZXdUYWciLCJpbmNsdWRlcyIsInB1c2giLCJzZXRQYXJlbnRDb250cm9sbGVyIiwicGFyZW50Q29udHJvbGxlciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyTmFtZSIsIl90YWdOYW1lIiwiX2NoaWxkQ29udHJvbGxlciIsIl9wYXJlbnRDb250cm9sbGVyIiwicmVzZXRDaGlsZHJlbiIsImZpbmQiLCJlYWNoIiwiJHRoaXMiLCIkIiwiY0NvbnRyb2xsZXIiLCJjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIiwiJGVsZW1lbnQiLCJtaXhpbkNvbnRyb2xsZXJDbGFzcyIsInN1cGVyVGFnTmFtZSIsImNvbnRyb2xsZXJDbGFzcyIsIiRjb250YWluZXIiLCJjb250cm9sbGVyRmFjdG9yeSIsImdUYWdOYW1lIiwid2luZG93IiwicnVuQ29udHJvbGxlclNob3ciLCIkaHRtbCIsInRoZW4iLCJhcmdzIiwid2lsbFNob3ciLCJsb2FkUHJvbWlzZU9yQ29udGVudCIsIlByb21pc2UiLCJydW5Db250cm9sbGVyTG9hZCIsImh0bWwiLCJvbkxvYWQiLCJfb25Mb2FkRG9uZSIsImxvYWRQcm9taXNlIiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJwcm9jZXNzIiwicHJvbV9jb250cm9sbGVyIiwicnVuUmVmcmVzaCIsImNhdGNoIiwibG9hZF9hc3luYyIsInJlc29sdmUiLCJnZXRQYXJlbnRMaXN0IiwiX2lzRXZlbnRzU2V0IiwidW5zaGlmdCIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInBhcmVudExpc3QiLCJzbGljZSIsImNvbiIsIm9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsInJlZnJlc2hQcm9jZXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIkJvb2xlYW4iLCJ1dWlkcyIsIlNldCIsIl91dWlkIiwiaGFzIiwiYWRkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n");
|
|
38
38
|
|
|
39
39
|
/***/ }),
|
|
40
40
|
|
|
@@ -44,7 +44,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
44
44
|
\************************************************/
|
|
45
45
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
46
46
|
|
|
47
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\nconst STD_EVENT_BLACK_LIST = ['onbeforeunload'];\nconst STD_EVENT_LIST = Object.keys(window).filter(key => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key)).map(x => x.slice(2));\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (event.hasOwnProperty('namespace') && event.namespace && event.namespace.length) ev_type += `.${event.namespace}`;\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => is_last_elem = true;\n event.stopPropagation = () => is_last_elem = is_done = true;\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(' ').forEach(attr => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === 'function') {\n handler = attr;\n } else if (typeof controller[attr] === 'function') {\n handler = controller[attr];\n } else if (typeof attr === 'string' && attr.startsWith('this.event_')) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice('this.event_'.length)];\n if (!handler) {\n return;\n }\n }\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n return {\n res: true\n };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach(ev_type => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];else event_list = event_list.split(' ');\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(' '));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O1lBQ3pELElBQUksQ0FBQ29DLFVBQVUsRUFBRUEsVUFBVSxHQUFHLEVBQUUsQ0FBQyxLQUM1QkEsVUFBVSxHQUFHQSxVQUFVLENBQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLE1BQU1zQixPQUFPLEdBQUcsY0FBY0wsV0FBVyxFQUFFO1lBQzNDLElBQUlJLFVBQVUsQ0FBQ0UsT0FBTyxDQUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtjQUNwQ0QsVUFBVSxDQUFDRyxJQUFJLENBQUNGLE9BQU8sQ0FBQztjQUN4QkYsU0FBUyxDQUFDckIsSUFBSSxDQUFDLE9BQU9kLE9BQU8sRUFBRSxFQUFFb0MsVUFBVSxDQUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUQ7VUFFSixDQUFDLENBQUM7UUFDTjtNQUNKO0lBQ0o7RUFDSjtFQUNBO0VBQ0E7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZG9tX2V2ZW50cy5qcz80MzM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Z2V0Q29udHJvbGxlcn0gZnJvbSAnLi9zZGNfdmlldy5qcyc7XG5cbmV4cG9ydCBjb25zdCBTVERfRVZFTlRfQkxBQ0tfTElTVCA9IFsnb25iZWZvcmV1bmxvYWQnXTtcbmV4cG9ydCBjb25zdCBTVERfRVZFTlRfTElTVCA9IE9iamVjdC5rZXlzKHdpbmRvdykuZmlsdGVyKGtleSA9PiAvXm9uLy50ZXN0KGtleSkgJiYgIVNURF9FVkVOVF9CTEFDS19MSVNULmluY2x1ZGVzKGtleSkpLm1hcCh4ID0+IHguc2xpY2UoMikpO1xuXG5leHBvcnQgZnVuY3Rpb24gd2luZG93RXZlbnRIYW5kbGVyKGV2ZW50KSB7XG4gICAgbGV0IGV2X3R5cGUgPSBldmVudC50eXBlO1xuICAgIGlmIChldmVudC5oYXNPd25Qcm9wZXJ0eSgnbmFtZXNwYWNlJykgJiYgZXZlbnQubmFtZXNwYWNlICYmIGV2ZW50Lm5hbWVzcGFjZS5sZW5ndGgpIGV2X3R5cGUgKz0gYC4ke2V2ZW50Lm5hbWVzcGFjZX1gO1xuXG4gICAgbGV0ICRlbG0gPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBudWxsO1xuICAgIGxldCBpc19kb25lID0gZmFsc2U7XG4gICAgbGV0IGlzX2xhc3RfZWxlbSA9IGZhbHNlO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9ICgpID0+IGlzX2xhc3RfZWxlbSA9IHRydWU7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gKCkgPT4gaXNfbGFzdF9lbGVtID0gaXNfZG9uZSA9IHRydWU7XG4gICAgd2hpbGUgKCRlbG0ubGVuZ3RoKSB7XG4gICAgICAgIGxldCBhdHRycyA9ICRlbG0uYXR0cihgc2RjXyR7ZXZfdHlwZX1gKTtcbiAgICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgICAgICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkZWxtKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xsZXIpIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYXR0cnMuc3BsaXQoJyAnKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kb25lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gYXR0cjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udHJvbGxlclthdHRyXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGNvbnRyb2xsZXJbYXR0cl07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF0dHIgPT09ICdzdHJpbmcnICYmIGF0dHIuc3RhcnRzV2l0aCgndGhpcy5ldmVudF8nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGNvbnRyb2xsZXIuZ2V0RXZlbnRzKClbZXZfdHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlclthdHRyLnNsaWNlKCd0aGlzLmV2ZW50XycubGVuZ3RoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyICYmIGhhbmRsZXIuY2FsbChjb250cm9sbGVyLCAkZWxtLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzX2xhc3RfZWxlbSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2RvbmUpIHJldHVybjtcbiAgICAgICAgJGVsbSA9ICRlbG0ucGFyZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtyZXM6IHRydWV9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0RXZlbnRzKCkge1xuICAgIGNvbnN0ICR3aW5kb3cgPSAkKHdpbmRvdyk7XG4gICAgU1REX0VWRU5UX0xJU1QuZm9yRWFjaChldl90eXBlID0+IHtcbiAgICAgICAgJHdpbmRvdy5vZmYoZXZfdHlwZSkub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb250cm9sbGVyRXZlbnRzKGNvbnRyb2xsZXIpIHtcblxuICAgIGlmIChjb250cm9sbGVyLl9pc0V2ZW50c1NldCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRzID0gY29udHJvbGxlci5nZXRFdmVudHMoKTtcbiAgICBmb3IgKGxldCBldl90eXBlIGluIGV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnRzLmhhc093blByb3BlcnR5KGV2X3R5cGUpKSB7XG4gICAgICAgICAgICBsZXQgZXZlbnRMaXN0ID0gZXZlbnRzW2V2X3R5cGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgZG9tU2VsZWN0b3IgaW4gZXZlbnRMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50TGlzdC5oYXNPd25Qcm9wZXJ0eShkb21TZWxlY3RvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5maW5kKGRvbVNlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCAkZWxlbWVudHMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50X2xpc3QgPSAkZWxlbWVudHMuYXR0cihgc2RjXyR7ZXZfdHlwZX1gKSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudF9saXN0KSBldmVudF9saXN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGV2ZW50X2xpc3QgPSBldmVudF9saXN0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdfa2V5ID0gYHRoaXMuZXZlbnRfJHtkb21TZWxlY3Rvcn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50X2xpc3QuaW5kZXhPZihuZXdfa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0LnB1c2gobmV3X2tleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCwgZXZlbnRfbGlzdC5qb2luKCcgJykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRPRE86IElzIGl0IG5lZWRlZFxuICAgIC8vY29udHJvbGxlci5faXNFdmVudHNTZXQgPSB0cnVlO1xufSJdLCJuYW1lcyI6WyJnZXRDb250cm9sbGVyIiwiU1REX0VWRU5UX0JMQUNLX0xJU1QiLCJTVERfRVZFTlRfTElTVCIsIk9iamVjdCIsImtleXMiLCJ3aW5kb3ciLCJmaWx0ZXIiLCJrZXkiLCJ0ZXN0IiwiaW5jbHVkZXMiLCJtYXAiLCJ4Iiwic2xpY2UiLCJ3aW5kb3dFdmVudEhhbmRsZXIiLCJldmVudCIsImV2X3R5cGUiLCJ0eXBlIiwiaGFzT3duUHJvcGVydHkiLCJuYW1lc3BhY2UiLCJsZW5ndGgiLCIkZWxtIiwiJCIsInRhcmdldCIsImNvbnRyb2xsZXIiLCJpc19kb25lIiwiaXNfbGFzdF9lbGVtIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwiYXR0cnMiLCJhdHRyIiwic3BsaXQiLCJmb3JFYWNoIiwiaGFuZGxlciIsInN0YXJ0c1dpdGgiLCJnZXRFdmVudHMiLCJjYWxsIiwiX3BhcmVudENvbnRyb2xsZXIiLCJwYXJlbnQiLCJyZXMiLCJpbml0RXZlbnRzIiwiJHdpbmRvdyIsIm9mZiIsIm9uIiwic2V0Q29udHJvbGxlckV2ZW50cyIsIl9pc0V2ZW50c1NldCIsImV2ZW50cyIsImV2ZW50TGlzdCIsImRvbVNlbGVjdG9yIiwiZmluZCIsImVhY2giLCIkZWxlbWVudHMiLCJldmVudF9saXN0IiwibmV3X2tleSIsImluZGV4T2YiLCJwdXNoIiwiam9pbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n");
|
|
47
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\nconst STD_EVENT_BLACK_LIST = ['onbeforeunload', 'onunload'];\nconst STD_EVENT_LIST = Object.keys(window).filter(key => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key)).map(x => x.slice(2));\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (event.hasOwnProperty('namespace') && event.namespace && event.namespace.length) ev_type += `.${event.namespace}`;\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => is_last_elem = true;\n event.stopPropagation = () => is_last_elem = is_done = true;\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(' ').forEach(attr => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === 'function') {\n handler = attr;\n } else if (typeof controller[attr] === 'function') {\n handler = controller[attr];\n } else if (typeof attr === 'string' && attr.startsWith('this.event_')) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice('this.event_'.length)];\n if (!handler) {\n return;\n }\n }\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n return {\n res: true\n };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach(ev_type => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];else event_list = event_list.split(' ');\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(' '));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZG9tX2V2ZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBNEM7QUFFckMsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUM7QUFDM0QsTUFBTUMsY0FBYyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsR0FBRyxJQUFJLEtBQUssQ0FBQ0MsSUFBSSxDQUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDTixvQkFBb0IsQ0FBQ1EsUUFBUSxDQUFDRixHQUFHLENBQUMsQ0FBQyxDQUFDRyxHQUFHLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFckksU0FBU0Msa0JBQWtCQSxDQUFDQyxLQUFLLEVBQUU7RUFDdEMsSUFBSUMsT0FBTyxHQUFHRCxLQUFLLENBQUNFLElBQUk7RUFDeEIsSUFBSUYsS0FBSyxDQUFDRyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUlILEtBQUssQ0FBQ0ksU0FBUyxJQUFJSixLQUFLLENBQUNJLFNBQVMsQ0FBQ0MsTUFBTSxFQUFFSixPQUFPLElBQUksSUFBSUQsS0FBSyxDQUFDSSxTQUFTLEVBQUU7RUFFcEgsSUFBSUUsSUFBSSxHQUFHQyxDQUFDLENBQUNQLEtBQUssQ0FBQ1EsTUFBTSxDQUFDO0VBQzFCLElBQUlDLFVBQVUsR0FBRyxJQUFJO0VBQ3JCLElBQUlDLE9BQU8sR0FBRyxLQUFLO0VBQ25CLElBQUlDLFlBQVksR0FBRyxLQUFLO0VBQ3hCWCxLQUFLLENBQUNZLHdCQUF3QixHQUFHLE1BQU1ELFlBQVksR0FBRyxJQUFJO0VBQzFEWCxLQUFLLENBQUNhLGVBQWUsR0FBRyxNQUFNRixZQUFZLEdBQUdELE9BQU8sR0FBRyxJQUFJO0VBQzNELE9BQU9KLElBQUksQ0FBQ0QsTUFBTSxFQUFFO0lBQ2hCLElBQUlTLEtBQUssR0FBR1IsSUFBSSxDQUFDUyxJQUFJLENBQUMsT0FBT2QsT0FBTyxFQUFFLENBQUM7SUFDdkMsSUFBSWEsS0FBSyxFQUFFO01BQ1AsSUFBSSxDQUFDTCxVQUFVLEVBQUU7UUFDYkEsVUFBVSxHQUFHdkIsMkRBQWEsQ0FBQ29CLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUNHLFVBQVUsRUFBRTtNQUNyQjtNQUNBLE9BQU9BLFVBQVUsRUFBRTtRQUNmSyxLQUFLLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsT0FBTyxDQUFFRixJQUFJLElBQUs7VUFDL0IsSUFBSUwsT0FBTyxFQUFFO1VBQ2IsSUFBSVEsT0FBTyxHQUFHLElBQUk7VUFDbEIsSUFBSSxPQUFPSCxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQzVCRyxPQUFPLEdBQUdILElBQUk7VUFDbEIsQ0FBQyxNQUFNLElBQUksT0FBT04sVUFBVSxDQUFDTSxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7WUFDL0NHLE9BQU8sR0FBR1QsVUFBVSxDQUFDTSxJQUFJLENBQUM7VUFDOUIsQ0FBQyxNQUFNLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsSUFBSUEsSUFBSSxDQUFDSSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDbkVELE9BQU8sR0FBR1QsVUFBVSxDQUFDVyxTQUFTLENBQUMsQ0FBQyxDQUFDbkIsT0FBTyxDQUFDO1lBQ3pDLElBQUksQ0FBQ2lCLE9BQU8sRUFBRTtjQUNWO1lBQ0o7WUFDQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNILElBQUksQ0FBQ2pCLEtBQUssQ0FBQyxhQUFhLENBQUNPLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQ2EsT0FBTyxFQUFFO2NBQ1Y7WUFDSjtVQUNKO1VBRUFBLE9BQU8sSUFBSUEsT0FBTyxDQUFDRyxJQUFJLENBQUNaLFVBQVUsRUFBRUgsSUFBSSxFQUFFTixLQUFLLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBQ0YsSUFBSVcsWUFBWSxFQUFFO1FBQ2xCRixVQUFVLEdBQUdBLFVBQVUsQ0FBQ2EsaUJBQWlCO01BQzdDO0lBQ0o7SUFDQSxJQUFJWixPQUFPLEVBQUU7SUFDYkosSUFBSSxHQUFHQSxJQUFJLENBQUNpQixNQUFNLENBQUMsQ0FBQztFQUN4QjtFQUVBLE9BQU87SUFBQ0MsR0FBRyxFQUFFO0VBQUksQ0FBQztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFVQSxDQUFBLEVBQUc7RUFDekIsTUFBTUMsT0FBTyxHQUFHbkIsQ0FBQyxDQUFDaEIsTUFBTSxDQUFDO0VBQ3pCSCxjQUFjLENBQUM2QixPQUFPLENBQUNoQixPQUFPLElBQUk7SUFDOUJ5QixPQUFPLENBQUNDLEdBQUcsQ0FBQzFCLE9BQU8sQ0FBQyxDQUFDMkIsRUFBRSxDQUFDM0IsT0FBTyxFQUFFRixrQkFBa0IsQ0FBQztFQUN4RCxDQUFDLENBQUM7QUFDTjs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM4QixtQkFBbUJBLENBQUNwQixVQUFVLEVBQUU7RUFFNUMsSUFBSUEsVUFBVSxDQUFDcUIsWUFBWSxFQUFFO0lBQ3pCO0VBQ0o7RUFFQSxNQUFNQyxNQUFNLEdBQUd0QixVQUFVLENBQUNXLFNBQVMsQ0FBQyxDQUFDO0VBQ3JDLEtBQUssSUFBSW5CLE9BQU8sSUFBSThCLE1BQU0sRUFBRTtJQUN4QixJQUFJQSxNQUFNLENBQUM1QixjQUFjLENBQUNGLE9BQU8sQ0FBQyxFQUFFO01BQ2hDLElBQUkrQixTQUFTLEdBQUdELE1BQU0sQ0FBQzlCLE9BQU8sQ0FBQztNQUMvQixLQUFLLElBQUlnQyxXQUFXLElBQUlELFNBQVMsRUFBRTtRQUMvQixJQUFJQSxTQUFTLENBQUM3QixjQUFjLENBQUM4QixXQUFXLENBQUMsRUFBRTtVQUN2Q3hCLFVBQVUsQ0FBQ3lCLElBQUksQ0FBQ0QsV0FBVyxDQUFDLENBQUNFLElBQUksQ0FBQyxZQUFZO1lBQzFDLElBQUlDLFNBQVMsR0FBRzdCLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSThCLFVBQVUsR0FBR0QsU0FBUyxDQUFDckIsSUFBSSxDQUFDLE9BQU9kLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSTtZQUN6RCxJQUFJLENBQUNvQyxVQUFVLEVBQUVBLFVBQVUsR0FBRyxFQUFFLENBQUMsS0FDNUJBLFVBQVUsR0FBR0EsVUFBVSxDQUFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN2QyxNQUFNc0IsT0FBTyxHQUFHLGNBQWNMLFdBQVcsRUFBRTtZQUMzQyxJQUFJSSxVQUFVLENBQUNFLE9BQU8sQ0FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Y0FDcENELFVBQVUsQ0FBQ0csSUFBSSxDQUFDRixPQUFPLENBQUM7Y0FDeEJGLFNBQVMsQ0FBQ3JCLElBQUksQ0FBQyxPQUFPZCxPQUFPLEVBQUUsRUFBRW9DLFVBQVUsQ0FBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFEO1VBRUosQ0FBQyxDQUFDO1FBQ047TUFDSjtJQUNKO0VBQ0o7RUFDQTtFQUNBO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2RvbV9ldmVudHMuanM/NDMzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldENvbnRyb2xsZXJ9IGZyb20gJy4vc2RjX3ZpZXcuanMnO1xuXG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0JMQUNLX0xJU1QgPSBbJ29uYmVmb3JldW5sb2FkJywgJ29udW5sb2FkJ107XG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0xJU1QgPSBPYmplY3Qua2V5cyh3aW5kb3cpLmZpbHRlcihrZXkgPT4gL15vbi8udGVzdChrZXkpICYmICFTVERfRVZFTlRfQkxBQ0tfTElTVC5pbmNsdWRlcyhrZXkpKS5tYXAoeCA9PiB4LnNsaWNlKDIpKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50SGFuZGxlcihldmVudCkge1xuICAgIGxldCBldl90eXBlID0gZXZlbnQudHlwZTtcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ25hbWVzcGFjZScpICYmIGV2ZW50Lm5hbWVzcGFjZSAmJiBldmVudC5uYW1lc3BhY2UubGVuZ3RoKSBldl90eXBlICs9IGAuJHtldmVudC5uYW1lc3BhY2V9YDtcblxuICAgIGxldCAkZWxtID0gJChldmVudC50YXJnZXQpO1xuICAgIGxldCBjb250cm9sbGVyID0gbnVsbDtcbiAgICBsZXQgaXNfZG9uZSA9IGZhbHNlO1xuICAgIGxldCBpc19sYXN0X2VsZW0gPSBmYWxzZTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiBpc19sYXN0X2VsZW0gPSB0cnVlO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9ICgpID0+IGlzX2xhc3RfZWxlbSA9IGlzX2RvbmUgPSB0cnVlO1xuICAgIHdoaWxlICgkZWxtLmxlbmd0aCkge1xuICAgICAgICBsZXQgYXR0cnMgPSAkZWxtLmF0dHIoYHNkY18ke2V2X3R5cGV9YCk7XG4gICAgICAgIGlmIChhdHRycykge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGVsbSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGF0dHJzLnNwbGl0KCcgJykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGF0dHI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRyb2xsZXJbYXR0cl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdHRyID09PSAnc3RyaW5nJyAmJiBhdHRyLnN0YXJ0c1dpdGgoJ3RoaXMuZXZlbnRfJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyLmdldEV2ZW50cygpW2V2X3R5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJbYXR0ci5zbGljZSgndGhpcy5ldmVudF8nLmxlbmd0aCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyLmNhbGwoY29udHJvbGxlciwgJGVsbSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc19sYXN0X2VsZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlclxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc19kb25lKSByZXR1cm47XG4gICAgICAgICRlbG0gPSAkZWxtLnBhcmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiB7cmVzOiB0cnVlfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdEV2ZW50cygpIHtcbiAgICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICAgIFNURF9FVkVOVF9MSVNULmZvckVhY2goZXZfdHlwZSA9PiB7XG4gICAgICAgICR3aW5kb3cub2ZmKGV2X3R5cGUpLm9uKGV2X3R5cGUsIHdpbmRvd0V2ZW50SGFuZGxlcik7XG4gICAgfSk7XG59XG5cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udHJvbGxlckV2ZW50cyhjb250cm9sbGVyKSB7XG5cbiAgICBpZiAoY29udHJvbGxlci5faXNFdmVudHNTZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IGNvbnRyb2xsZXIuZ2V0RXZlbnRzKCk7XG4gICAgZm9yIChsZXQgZXZfdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldl90eXBlKSkge1xuICAgICAgICAgICAgbGV0IGV2ZW50TGlzdCA9IGV2ZW50c1tldl90eXBlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGRvbVNlbGVjdG9yIGluIGV2ZW50TGlzdCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudExpc3QuaGFzT3duUHJvcGVydHkoZG9tU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZmluZChkb21TZWxlY3RvcikuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgJGVsZW1lbnRzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVudF9saXN0ID0gJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnRfbGlzdCkgZXZlbnRfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBldmVudF9saXN0ID0gZXZlbnRfbGlzdC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3X2tleSA9IGB0aGlzLmV2ZW50XyR7ZG9tU2VsZWN0b3J9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudF9saXN0LmluZGV4T2YobmV3X2tleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdC5wdXNoKG5ld19rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50cy5hdHRyKGBzZGNfJHtldl90eXBlfWAsIGV2ZW50X2xpc3Quam9pbignICcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUT0RPOiBJcyBpdCBuZWVkZWRcbiAgICAvL2NvbnRyb2xsZXIuX2lzRXZlbnRzU2V0ID0gdHJ1ZTtcbn0iXSwibmFtZXMiOlsiZ2V0Q29udHJvbGxlciIsIlNURF9FVkVOVF9CTEFDS19MSVNUIiwiU1REX0VWRU5UX0xJU1QiLCJPYmplY3QiLCJrZXlzIiwid2luZG93IiwiZmlsdGVyIiwia2V5IiwidGVzdCIsImluY2x1ZGVzIiwibWFwIiwieCIsInNsaWNlIiwid2luZG93RXZlbnRIYW5kbGVyIiwiZXZlbnQiLCJldl90eXBlIiwidHlwZSIsImhhc093blByb3BlcnR5IiwibmFtZXNwYWNlIiwibGVuZ3RoIiwiJGVsbSIsIiQiLCJ0YXJnZXQiLCJjb250cm9sbGVyIiwiaXNfZG9uZSIsImlzX2xhc3RfZWxlbSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImF0dHJzIiwiYXR0ciIsInNwbGl0IiwiZm9yRWFjaCIsImhhbmRsZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXZlbnRzIiwiY2FsbCIsIl9wYXJlbnRDb250cm9sbGVyIiwicGFyZW50IiwicmVzIiwiaW5pdEV2ZW50cyIsIiR3aW5kb3ciLCJvZmYiLCJvbiIsInNldENvbnRyb2xsZXJFdmVudHMiLCJfaXNFdmVudHNTZXQiLCJldmVudHMiLCJldmVudExpc3QiLCJkb21TZWxlY3RvciIsImZpbmQiLCJlYWNoIiwiJGVsZW1lbnRzIiwiZXZlbnRfbGlzdCIsIm5ld19rZXkiLCJpbmRleE9mIiwicHVzaCIsImpvaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n");
|
|
48
48
|
|
|
49
49
|
/***/ }),
|
|
50
50
|
|
|
@@ -64,7 +64,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
64
64
|
\******************************************/
|
|
65
65
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
66
66
|
|
|
67
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n 'classname': 'class'\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === 'string') {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data('handler', element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith('on')) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass('_bind_to_update_handler _with_handler');\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return '';\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || '',\n LANGUAGE_CODE: window.LANGUAGE_CODE || 'en',\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || '0.0',\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n _isInit: false,\n _origin_trigger: null,\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n for (let [tag, controller] of Object.entries(app.Global)) {\n if (!controller.$container) _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[tag].$container = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)();\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController);\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, '');\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n let tagName = app.controllerToTag(Controller);\n let globalController = new Controller();\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [globalController, []];\n globalController._tagName = tagName;\n window[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = globalController;\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, params, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || 'api';\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a['url-link']) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n window.location.href = a['url'];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n return app.reconcile(controller, $html);\n });\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n */\n reconcile: (controller, $virtualNode, $realNode = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n $realNode = $realNode ?? controller.$container;\n return app.refresh($virtualNode, controller, true).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {bool} silent\n * @return {Promise<jQuery>}\n */\n refresh: ($dom, leafController, silent = false) => {\n if (!leafController) {\n leafController = app.getController($dom);\n }\n if (!leafController) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let controller = leafController;\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n $dom ??= leafController.$container;\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $dom, leafController).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadMethodHTML)(leafController, $dom).then(() => {\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.setControllerEvents)(con);\n }\n !silent && leafController.onRefresh($dom);\n });\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLENBQUNuQyxJQUFJLENBQUMsTUFBTTtNQUNoRjdGLDhEQUFnQixDQUFDZ0ksY0FBYyxFQUFFRCxJQUFJLENBQUMsQ0FBQ2xDLElBQUksQ0FBQyxNQUFNO1FBQzlDLEtBQUssSUFBSXdDLEdBQUcsSUFBSWxJLGNBQWMsRUFBRTtVQUM1QkksdUVBQW1CLENBQUM4SCxHQUFHLENBQUM7UUFDNUI7UUFFQSxDQUFDSixNQUFNLElBQUlELGNBQWMsQ0FBQ00sU0FBUyxDQUFDUCxJQUFJLENBQUM7TUFDN0MsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzPzA4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjYW1lbENhc2VUb1RhZ05hbWUsXG4gICAgdGFnTmFtZVRvQ2FtZWxDYXNlLFxuICAgIGdldEJvZHksXG4gICAgdXBsb2FkRmlsZUZvcm1EYXRhLFxuICAgIHByb21pc2VEdW1teUZhY3Rvcnlcbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICAgIHJlbG9hZEhUTUxDb250cm9sbGVyLFxuICAgIERBVEFfQ09OVFJPTExFUl9LRVksXG4gICAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVsb2FkTWV0aG9kSFRNTFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7R2xvYmFsLCBjb250cm9sbGVyTGlzdCwgdGFnTGlzdCwgcmVzZXRDaGlsZHJlbn0gZnJvbSBcIi4vc2RjX2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCB7aW5pdEV2ZW50cywgc2V0Q29udHJvbGxlckV2ZW50cywgU1REX0VWRU5UX0xJU1QsIHdpbmRvd0V2ZW50SGFuZGxlcn0gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7cmVjb25jaWxlfSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2lzQ29ubmVjdGVkLCBjbG9zZX0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5cbmNvbnN0IFBST1BFUlRJRVNfVVBEQVRFID0geydjbGFzc25hbWUnOiAnY2xhc3MnfVxuXG5sZXQgc2RjRG9tRnJhZ21lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcHJvcHMpIHtcbiAgICBsZXQgJG5ld19lbGVtLCBpc19zZWxmID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAkbmV3X2VsZW0gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBgdGhpcy4ke2VsZW1lbnQubmFtZX1gO1xuICAgICAgICAkbmV3X2VsZW0gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSkpO1xuICAgICAgICAkbmV3X2VsZW0uZGF0YSgnaGFuZGxlcicsIGVsZW1lbnQpO1xuICAgICAgICBpc19zZWxmID0gdHJ1ZVxuICAgIH1cblxuXG4gICAgaWYgKHByb3BzKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ29uJykpIHtcbiAgICAgICAgICAgICAgICAkbmV3X2VsZW1bMF0uYWRkRXZlbnRMaXN0ZW5lcihrLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpLCB2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc19zZWxmKSB7XG4gICAgICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiAkbmV3X2VsZW07XG59XG5cbndpbmRvdy5zZGNEb20gPSBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICAgIH1cbiAgICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICAgIENTUkZfVE9LRU46IHdpbmRvdy5DU1JGX1RPS0VOIHx8ICcnLFxuICAgIExBTkdVQUdFX0NPREU6IHdpbmRvdy5MQU5HVUFHRV9DT0RFIHx8ICdlbicsXG4gICAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCAnMC4wJyxcbiAgICB0YWdOYW1lczogW10sXG4gICAgR2xvYmFsOiBHbG9iYWwsXG4gICAgcm9vdENvbnRyb2xsZXI6IG51bGwsXG4gICAgX2lzSW5pdDogZmFsc2UsXG4gICAgX29yaWdpbl90cmlnZ2VyOiBudWxsLFxuXG4gICAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICAgICAgaWYgKCFhcHAuX2lzSW5pdCkge1xuICAgICAgICAgICAgYXBwLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhcHAuX29yaWdpbl90cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHAuX29yaWdpbl90cmlnZ2VyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXNDb25uZWN0ZWQoKTtcblxuICAgICAgICAgICAgaW5pdEV2ZW50cygpO1xuXG4gICAgICAgICAgICBhcHAucm9vdENvbnRyb2xsZXIgPSBhcHAucm9vdENvbnRyb2xsZXIgfHwgbmV3IEFic3RyYWN0U0RDKCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICAgICAgZm9yIChsZXQgW3RhZywgY29udHJvbGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoYXBwLkdsb2JhbCkpIHtcbiAgICAgICAgICAgIGlmICghY29udHJvbGxlci4kY29udGFpbmVyKSBHbG9iYWxbdGFnXS4kY29udGFpbmVyID0gZ2V0Qm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgZ2V0Qm9keSgpLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVKcXVlcnk6ICgpID0+IHtcbiAgICAgICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgJC5mbi5zYWZlRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVFbXB0eSgkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICAkLmZuLnNhZmVSZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVSZW1vdmUoJCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGNhbWVsQ2FzZVRvVGFnTmFtZShDb250cm9sbGVyLm5hbWUpO1xuICAgICAgICByZXR1cm4gdGFnTmFtZS5yZXBsYWNlKC8tY29udHJvbGxlciQvLCAnJyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gQ29udHJvbGxlclxuICAgICAqL1xuICAgIHJlZ2lzdGVyR2xvYmFsOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgICAgIGxldCBnbG9iYWxDb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV0gPSBbZ2xvYmFsQ29udHJvbGxlciwgW11dO1xuICAgICAgICBnbG9iYWxDb250cm9sbGVyLl90YWdOYW1lID0gdGFnTmFtZTtcbiAgICAgICAgd2luZG93W3RhZ05hbWVUb0NhbWVsQ2FzZSh0YWdOYW1lKV0gPSBHbG9iYWxbdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpXSA9IGdsb2JhbENvbnRyb2xsZXI7XG4gICAgfSxcblxuICAgIGNsZWFuQ2FjaGU6ICgpID0+IHtcbiAgICAgICAgY2xlYW5DYWNoZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICByZWdpc3RlcjogKENvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgbGV0IHRhZ05hbWUgPSBhcHAuY29udHJvbGxlclRvVGFnKENvbnRyb2xsZXIpO1xuICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXSA9IFtDb250cm9sbGVyLCBbXV07XG4gICAgICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lID0gdGFnTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gbWl4aW5zIENvbnRyb2xsZXIgdGFnIG5hbWVzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFkZE1peGluOiAoLi4ubWl4aW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtaXhpbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4aW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluTmFtZSA9IGNhbWVsQ2FzZVRvVGFnTmFtZShtaXhpbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcobWl4aW4pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMV0ucHVzaChtaXhpbk5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqL1xuICAgIHBvc3Q6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzLkNTUkZfVE9LRU4gPSBhcHAuQ1NSRl9UT0tFTjtcbiAgICAgICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zLCAkLnBvc3QpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqL1xuICAgIGdldDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBhcmdzLCAkLmdldCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCAkLmdldCBvciAkLnBvc3RcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqL1xuICAgIGFqYXg6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MsIG1ldGhvZCkgPT4ge1xuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgICAgICBhcmdzLl9tZXRob2QgPSBhcmdzLl9tZXRob2QgfHwgJ2FwaSc7XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QodXJsLCBhcmdzKS50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgYVsndXJsLWxpbmsnXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKGNvbnRyb2xsZXIuJGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwO1xuICAgIH0sXG5cbiAgICBzdWJtaXRGb3JtQW5kVXBkYXRlVmlldzogKGNvbnRyb2xsZXIsIGZvcm0sIHVybCwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICAgICAgICBpZiAoYVsndXJsLWxpbmsnXSkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ29uTmF2TGluaycsIGFbJ3VybC1saW5rJ10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGFbJ3VybCddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuc3RhdHVzID09PSAncmVkaXJlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdG9yKGEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09IDMwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGEucmVzcG9uc2VKU09OO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG5cbiAgICB9LFxuICAgIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsICh1cmwgfHwgZm9ybS5hY3Rpb24pLCAobWV0aG9kIHx8IGZvcm0ubWV0aG9kKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gICAgLyoqXG4gICAgICogc2FmZUVtcHR5IHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIGNvbnRhaW5lciB0byBiZSBlbXB0eWVkXG4gICAgICovXG4gICAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwLnNhZmVSZW1vdmUoJGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGVsZW07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAgICovXG4gICAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICAgICAkbmV3Lmluc2VydEJlZm9yZSgkZWxlbSk7XG4gICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICAgKi9cbiAgICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkdmlydHVhbE5vZGVcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJHJlYWxOb2RlXG4gICAgICovXG4gICAgcmVjb25jaWxlOiAoY29udHJvbGxlciwgJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsKSA9PiB7XG4gICAgICAgIGlmICghJHJlYWxOb2RlKSB7XG4gICAgICAgICAgICBsZXQgJHRlbXAgPSBjb250cm9sbGVyLiRjb250YWluZXIuY2xvbmUoKS5lbXB0eSgpO1xuICAgICAgICAgICAgJHRlbXAuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBudWxsKTtcbiAgICAgICAgICAgICR0ZW1wLnJlbW92ZUNsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgICAgICAgICAgJHRlbXAuYXBwZW5kKCR2aXJ0dWFsTm9kZSk7XG4gICAgICAgICAgICAkdmlydHVhbE5vZGUgPSAkdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgICRyZWFsTm9kZSA9ICRyZWFsTm9kZSA/PyBjb250cm9sbGVyLiRjb250YWluZXI7XG5cbiAgICAgICAgcmV0dXJuIGFwcC5yZWZyZXNoKCR2aXJ0dWFsTm9kZSwgY29udHJvbGxlciwgdHJ1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUpO1xuICAgICAgICAgICAgcmVzZXRDaGlsZHJlbihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgICAgICB9KTtcblxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkZG9tXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICAgKiBAcGFyYW0ge2Jvb2x9IHNpbGVudFxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8alF1ZXJ5Pn1cbiAgICAgKi9cbiAgICByZWZyZXNoOiAoJGRvbSwgbGVhZkNvbnRyb2xsZXIsIHNpbGVudCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGxlYWZDb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZUR1bW15RmFjdG9yeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBsZWFmQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJGRvbSA/Pz0gbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICAgICAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkZG9tLCBsZWFmQ29udHJvbGxlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZWxvYWRNZXRob2RIVE1MKGxlYWZDb250cm9sbGVyLCAkZG9tKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjb24gb2YgY29udHJvbGxlckxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29udHJvbGxlckV2ZW50cyhjb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICFzaWxlbnQgJiYgbGVhZkNvbnRyb2xsZXIub25SZWZyZXNoKCRkb20pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSxcbn07Il0sIm5hbWVzIjpbImNhbWVsQ2FzZVRvVGFnTmFtZSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsImdldEJvZHkiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJwcm9taXNlRHVtbXlGYWN0b3J5IiwicmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJyZWxvYWRIVE1MQ29udHJvbGxlciIsIkRBVEFfQ09OVFJPTExFUl9LRVkiLCJDT05UUk9MTEVSX0NMQVNTIiwiZ2V0Q29udHJvbGxlciIsImNsZWFuQ2FjaGUiLCJyZWxvYWRNZXRob2RIVE1MIiwiQWJzdHJhY3RTREMiLCJHbG9iYWwiLCJjb250cm9sbGVyTGlzdCIsInRhZ0xpc3QiLCJyZXNldENoaWxkcmVuIiwiaW5pdEV2ZW50cyIsInNldENvbnRyb2xsZXJFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsIl9pc0luaXQiLCJfb3JpZ2luX3RyaWdnZXIiLCJpbml0X3NkYyIsImZuIiwiZXZlbnQiLCJldl90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidHlwZSIsImluY2x1ZGVzIiwicHVzaCIsIm9uIiwidXBkYXRlSnF1ZXJ5IiwidGFnIiwiY29udHJvbGxlciIsIiRjb250YWluZXIiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJnbG9iYWxDb250cm9sbGVyIiwiX3RhZ05hbWUiLCJyZWdpc3RlciIsInByb3RvdHlwZSIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwidXJsIiwiYXJncyIsImFqYXgiLCJwYXJhbXMiLCJnZXQiLCJtZXRob2QiLCJfbWV0aG9kIiwicCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidGhlbiIsImEiLCJiIiwic3RhdHVzIiwicmVmcmVzaCIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwiJHRlbXAiLCJjbG9uZSIsImVtcHR5IiwicmVtb3ZlQ2xhc3MiLCIkZG9tIiwibGVhZkNvbnRyb2xsZXIiLCJzaWxlbnQiLCJfaXNFdmVudHNTZXQiLCJ1bnNoaWZ0IiwiX3BhcmVudENvbnRyb2xsZXIiLCJjb24iLCJvblJlZnJlc2giXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n");
|
|
67
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n 'classname': 'class'\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === 'string') {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data('handler', element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith('on')) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass('_bind_to_update_handler _with_handler');\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return '';\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || '',\n LANGUAGE_CODE: window.LANGUAGE_CODE || 'en',\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || '0.0',\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n globalRootController: null,\n _isInit: false,\n _origin_trigger: null,\n _globalControllerClasses: [],\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n app.globalRootController = app.globalRootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n const $globalDiv = $('<div></div>');\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.forEach(tagName => {\n const ControllerClass = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][0];\n $globalDiv.append(`<${ControllerClass.prototype._tagName}></${ControllerClass.prototype._tagName}>`);\n });\n const {\n refreshProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(null, app.rootController);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $globalDiv, app.globalRootController, refreshProcess).then(() => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController, refreshProcess).then(res => {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n return res;\n });\n });\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, '');\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n app.register(Controller);\n let tagName = Controller.prototype._tagName;\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.push(tagName);\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, params, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || 'api';\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a['url-link']) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n window.location.href = a['url'];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container, controller);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n return app.reconcile(controller, $html);\n });\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n * @param {Object} process - Process object containing the refresh process\n */\n reconcile: (controller, $virtualNode, $realNode = null, process = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n $realNode = $realNode ?? controller.$container;\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(process, controller);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($virtualNode, controller, refreshProcess).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @return {Promise<void>}\n */\n refresh: ($dom, leafController) => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($dom, leafController);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPLEVBQUVBLENBQUNxSSxJQUFJLEVBQUVDLGNBQWMsS0FBSztJQUNqQyxPQUFPdEkscURBQU8sQ0FBQ3FJLElBQUksRUFBRUMsY0FBYyxDQUFDO0VBQ3RDO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcz8wOGZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgZ2V0Qm9keSxcbiAgdXBsb2FkRmlsZUZvcm1EYXRhLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICByZWxvYWRIVE1MQ29udHJvbGxlcixcbiAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVmcmVzaFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7XG4gIEdsb2JhbCxcbiAgY29udHJvbGxlckxpc3QsXG4gIHRhZ0xpc3QsXG4gIHJlc2V0Q2hpbGRyZW4sXG4gIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge2luaXRFdmVudHMsIFNURF9FVkVOVF9MSVNULCB3aW5kb3dFdmVudEhhbmRsZXJ9IGZyb20gXCIuL3NkY19kb21fZXZlbnRzLmpzXCI7XG5pbXBvcnQge3JlY29uY2lsZX0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHtpc0Nvbm5lY3RlZCwgY2xvc2V9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gIGxldCAkbmV3X2VsZW0sIGlzX3NlbGYgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICRuZXdfZWxlbSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGB0aGlzLiR7ZWxlbWVudC5uYW1lfWA7XG4gICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAkbmV3X2VsZW0uZGF0YSgnaGFuZGxlcicsIGVsZW1lbnQpO1xuICAgIGlzX3NlbGYgPSB0cnVlXG4gIH1cblxuXG4gIGlmIChwcm9wcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ29uJykpIHtcbiAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoUFJPUEVSVElFU19VUERBVEVbay50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIGsgPSBQUk9QRVJUSUVTX1VQREFURVtrLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNfc2VsZikge1xuICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICB9XG5cbiAgcmV0dXJuICRuZXdfZWxlbTtcbn1cblxud2luZG93LnNkY0RvbSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBwcm9wcywgLi4uY2hpbGRyZW4pIHtcbiAgaWYgKCF0YWdOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0ICRuZXdfZWxlbSA9IHNkY0RvbUZyYWdtZW50KHRhZ05hbWUsIHByb3BzKTtcbiAgZm9yIChjb25zdCBjIG9mIGNoaWxkcmVuKSB7XG4gICAgJG5ld19lbGVtLmFwcGVuZChjKTtcbiAgfVxuICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICBDU1JGX1RPS0VOOiB3aW5kb3cuQ1NSRl9UT0tFTiB8fCAnJyxcbiAgTEFOR1VBR0VfQ09ERTogd2luZG93LkxBTkdVQUdFX0NPREUgfHwgJ2VuJyxcbiAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgVkVSU0lPTjogd2luZG93LlZFUlNJT04gfHwgJzAuMCcsXG4gIHRhZ05hbWVzOiBbXSxcbiAgR2xvYmFsOiBHbG9iYWwsXG4gIHJvb3RDb250cm9sbGVyOiBudWxsLFxuICBnbG9iYWxSb290Q29udHJvbGxlcjogbnVsbCxcbiAgX2lzSW5pdDogZmFsc2UsXG4gIF9vcmlnaW5fdHJpZ2dlcjogbnVsbCxcbiAgX2dsb2JhbENvbnRyb2xsZXJDbGFzc2VzOiBbXSxcblxuICBpbml0X3NkYzogKCkgPT4ge1xuICAgIGlmICghYXBwLl9pc0luaXQpIHtcbiAgICAgIGFwcC5faXNJbml0ID0gdHJ1ZTtcbiAgICAgIGlmICghYXBwLl9vcmlnaW5fdHJpZ2dlcikge1xuICAgICAgICBhcHAuX29yaWdpbl90cmlnZ2VyID0gJC5mbi50cmlnZ2VyO1xuICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBldl90eXBlID0ge30uaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgXCJ0eXBlXCIpID8gZXZlbnQudHlwZSA6IGV2ZW50O1xuICAgICAgICAgIGlmICghU1REX0VWRU5UX0xJU1QuaW5jbHVkZXMoZXZfdHlwZSkpIHtcbiAgICAgICAgICAgIFNURF9FVkVOVF9MSVNULnB1c2goZXZfdHlwZSk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFwcC5fb3JpZ2luX3RyaWdnZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgIGFwcC5nbG9iYWxSb290Q29udHJvbGxlciA9IGFwcC5nbG9iYWxSb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICB9XG5cbiAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICBjb25zdCAkZ2xvYmFsRGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcbiAgICBHbG9iYWwuZm9yRWFjaCgodGFnTmFtZSkgPT4ge1xuICAgICAgY29uc3QgQ29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgICAkZ2xvYmFsRGl2LmFwcGVuZChgPCR7Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZS5fdGFnTmFtZX0+PC8ke0NvbnRyb2xsZXJDbGFzcy5wcm90b3R5cGUuX3RhZ05hbWV9PmApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qge3JlZnJlc2hQcm9jZXNzfSA9IHByZXBhcmVSZWZyZXNoUHJvY2VzcyhudWxsLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGdsb2JhbERpdiwgYXBwLmdsb2JhbFJvb3RDb250cm9sbGVyLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCBnZXRCb2R5KCksIGFwcC5yb290Q29udHJvbGxlciwgcmVmcmVzaFByb2Nlc3MpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocmVmcmVzaFByb2Nlc3MpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlSnF1ZXJ5OiAoKSA9PiB7XG4gICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgfVxuICAgICQuZm4uc2FmZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlRW1wdHkoJCh0aGlzKSk7XG4gICAgfVxuICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgcmV0dXJuIHRhZ05hbWUucmVwbGFjZSgvLWNvbnRyb2xsZXIkLywgJycpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3Rlckdsb2JhbDogKENvbnRyb2xsZXIpID0+IHtcbiAgICBhcHAucmVnaXN0ZXIoQ29udHJvbGxlcik7XG4gICAgbGV0IHRhZ05hbWUgPSBDb250cm9sbGVyLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICBHbG9iYWwucHVzaCh0YWdOYW1lKTtcbiAgfSxcblxuICBjbGVhbkNhY2hlOiAoKSA9PiB7XG4gICAgY2xlYW5DYWNoZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3RlcjogKENvbnRyb2xsZXIpID0+IHtcbiAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV0gPSBbQ29udHJvbGxlciwgW11dO1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lID0gdGFnTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAqL1xuICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XG4gICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1peGluID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBtaXhpbk5hbWUgPSBjYW1lbENhc2VUb1RhZ05hbWUobWl4aW4pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4pIHtcbiAgICAgICAgICAgIG1peGluTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcobWl4aW4pXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdLnB1c2gobWl4aW5OYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBwb3N0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICBhcmdzID0ge307XG4gICAgfVxuXG4gICAgYXJncy5DU1JGX1RPS0VOID0gYXBwLkNTUkZfVE9LRU47XG4gICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zLCAkLnBvc3QpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCAkLmdldCBvciAkLnBvc3RcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGFqYXg6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MsIG1ldGhvZCkgPT4ge1xuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gbWV0aG9kKHVybCwgYXJncykudGhlbigoYSwgYiwgYykgPT4ge1xuICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICBpZiAoYVsndXJsLWxpbmsnXSkge1xuICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYVsndXJsJ107XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGFwcC5yZWZyZXNoKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoYSwgYiwgYykgPT4ge1xuICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBhID0gYS5yZXNwb25zZUpTT047XG4gICAgICAgICAgICByZWRpcmVjdG9yKGEpO1xuICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGEsIGIsIGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcDtcblxuICB9LFxuXG4gIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICovXG4gIGdldENvbnRyb2xsZXI6ICgkZWxlbSkgPT4gZ2V0Q29udHJvbGxlcigkZWxlbSksXG5cbiAgLyoqXG4gICAqIHNhZmVFbXB0eSByZW1vdmVzIGFsbCBjb250ZW50IG9mIGEgZG9tXG4gICAqIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERPTSBjb250YWluZXIgdG8gYmUgZW1wdHllZFxuICAgKi9cbiAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICBsZXQgJGNoaWxkcmVuID0gJGVsZW0uY2hpbGRyZW4oKTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGFwcC5zYWZlUmVtb3ZlKCRlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogc2FmZVJlcGxhY2UgcmVtb3ZlcyBhbGwgY29udGVudCBvZiBhIGRvbVxuICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBET00gdG8gYmUgcmVwbGVhY2VkXG4gICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAqL1xuICBzYWZlUmVwbGFjZTogKCRlbGVtLCAkbmV3KSA9PiB7XG4gICAgJG5ldy5pbnNlcnRCZWZvcmUoJGVsZW0pO1xuICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gIH0sXG5cblxuICAvKipcbiAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERvbVxuICAgKi9cbiAgc2FmZVJlbW92ZTogKCRlbGVtKSA9PiB7XG4gICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAkdGhpcy5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCkucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkZWxlbS5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9ICQodGhpcykuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xuICAgICAgY29udHJvbGxlciAmJiBjb250cm9sbGVyLnJlbW92ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8alF1ZXJ5Pn1cbiAgICovXG4gIHJlbG9hZENvbnRyb2xsZXI6IChjb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgfSk7XG4gIH0sXG5cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJHZpcnR1YWxOb2RlXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkcmVhbE5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAgICovXG4gIHJlY29uY2lsZTogKGNvbnRyb2xsZXIsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlID0gbnVsbCwgcHJvY2VzcyA9IG51bGwpID0+IHtcbiAgICBpZiAoISRyZWFsTm9kZSkge1xuICAgICAgbGV0ICR0ZW1wID0gY29udHJvbGxlci4kY29udGFpbmVyLmNsb25lKCkuZW1wdHkoKTtcbiAgICAgICR0ZW1wLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICAkdGVtcC5yZW1vdmVDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgICAgICR0ZW1wLmFwcGVuZCgkdmlydHVhbE5vZGUpO1xuICAgICAgJHZpcnR1YWxOb2RlID0gJHRlbXA7XG4gICAgfVxuXG4gICAgJHJlYWxOb2RlID0gJHJlYWxOb2RlID8/IGNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHtyZWZyZXNoUHJvY2VzcywgaXNSdW5uaW5nUHJvY2Vzc30gPSBwcmVwYXJlUmVmcmVzaFByb2Nlc3MocHJvY2VzcywgY29udHJvbGxlcik7XG5cbiAgICByZXR1cm4gcmVmcmVzaCgkdmlydHVhbE5vZGUsIGNvbnRyb2xsZXIsIHJlZnJlc2hQcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSk7XG4gICAgICByZXNldENoaWxkcmVuKGNvbnRyb2xsZXIpO1xuICAgICAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgICAgIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaChyZWZyZXNoUHJvY2Vzcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgICB9KTtcblxuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJGRvbVxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBsZWFmQ29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcmVmcmVzaDogKCRkb20sIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlZnJlc2goJGRvbSwgbGVhZkNvbnRyb2xsZXIpO1xuICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJEQVRBX0NPTlRST0xMRVJfS0VZIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJjbGVhbkNhY2hlIiwicmVmcmVzaCIsIkFic3RyYWN0U0RDIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwicmVzZXRDaGlsZHJlbiIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsImluaXRFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsImdsb2JhbFJvb3RDb250cm9sbGVyIiwiX2lzSW5pdCIsIl9vcmlnaW5fdHJpZ2dlciIsIl9nbG9iYWxDb250cm9sbGVyQ2xhc3NlcyIsImluaXRfc2RjIiwiZm4iLCJldmVudCIsImV2X3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlIiwiaW5jbHVkZXMiLCJwdXNoIiwib24iLCJ1cGRhdGVKcXVlcnkiLCIkZ2xvYmFsRGl2IiwiQ29udHJvbGxlckNsYXNzIiwicHJvdG90eXBlIiwiX3RhZ05hbWUiLCJyZWZyZXNoUHJvY2VzcyIsInRoZW4iLCJyZXMiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJyZWdpc3RlciIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwiY29udHJvbGxlciIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImEiLCJiIiwic3RhdHVzIiwiJGNvbnRhaW5lciIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwicHJvY2VzcyIsIiR0ZW1wIiwiY2xvbmUiLCJlbXB0eSIsInJlbW92ZUNsYXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIiRkb20iLCJsZWFmQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n");
|
|
68
68
|
|
|
69
69
|
/***/ }),
|
|
70
70
|
|
|
@@ -94,7 +94,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
94
94
|
\********************************************/
|
|
95
95
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
96
96
|
|
|
97
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nclass SubModel {\n constructor(pk, model) {\n this.pk = pk;\n this._model = model;\n }\n\n /**\n * SDC Model Name\n * @param {string} model\n */\n set model(model) {\n this._model = model;\n }\n get model() {\n return this._model;\n }\n\n /**\n * Load the sub model.\n *\n * @param {AbstractSDC} controller\n * @returns {Model}\n */\n load(controller) {\n if (!this._model) {\n throw new TypeError(\"Model is not set!!\");\n }\n return controller.newModel(this._model, {\n pk: this.pk\n });\n }\n}\nconst ModelProxyHandler = {\n get(target, key) {\n const value = target[key] ?? undefined;\n if (value instanceof SubModel) {\n if (!value.pk && value.pk !== 0) {\n return null;\n }\n const newVal = new Number(value.pk);\n newVal.load = value.load.bind(value);\n return newVal;\n }\n return value;\n },\n set(target, key, value) {\n if (key in target) {\n const oldVal = target[key];\n if (oldVal instanceof SubModel) {\n if (value.hasOwnProperty('pk')) {\n oldVal.pk = value.pk;\n } else {\n oldVal.pk = value;\n }\n } else {\n target[key] = value;\n }\n } else {\n target[key] = value;\n }\n return true;\n }\n};\nfunction parse_hidden_inputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === 'true';\n } else if (value === 'undefined') {\n return undefined;\n } else if (value.toLowerCase() === 'none') {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\n this._onNoOpenRequests = [];\n this.values_list = [];\n this.values = {};\n this.model_name = model_name;\n this.model_query = model_query;\n this._is_connected = false;\n this._is_conneting_process = false;\n this._auto_reconnect = true;\n this.socket = null;\n this.open_request = {};\n this.on_update = () => {};\n this.on_create = () => {};\n this.form_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.values_list.length) {\n return {\n value: this.values_list[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n length() {\n return this.values_list.length;\n }\n byPk(pk) {\n if (pk !== null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let elem = this.values_list.find(elm => elm.pk === pk);\n if (!elem) {\n elem = new Proxy({\n pk: pk\n }, ModelProxyHandler);\n this.values_list.push(elem);\n }\n return elem;\n }\n return {\n pk: pk\n };\n }\n filter(model_query) {\n this.model_query = Object.assign({}, this.model_query, model_query);\n return this;\n }\n load() {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'load',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n listView(filter = {}, cb_resolve = null, cb_reject = null) {\n let $div_list = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'list_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n filter: filter\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n detailView(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let $div_list = $('<div class=\"container-fluid\">');\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n load_promise.then(() => {\n if (pk === -1) {\n pk = this.values_list[0].pk;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'detail_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n syncModelToForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n let self = this;\n $forms.each(function () {\n if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\n } else {\n $(form_item).val(instance[name]);\n }\n }\n }\n });\n }\n syncForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n const self = this;\n let instances = [];\n $forms.each(function () {\n let $form = $(this);\n let pk = $form.data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'hidden') {\n instance[name] = parse_hidden_inputs($(form_item).val());\n } else if (form_item.type === 'checkbox') {\n instance[name] = form_item.checked;\n } else if (form_item.type === 'file') {\n instance[name] = form_item.files[0];\n } else {\n instance[name] = $(form_item).val();\n }\n }\n }\n instances.push(instance);\n return instance;\n });\n if (this.values_list.length <= 1 && instances.length > 0) {\n this.values = instances.at(-1);\n }\n return instances;\n }\n createForm(cb_resolve = null, cb_reject = null) {\n let $div_form = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n this._getForm(null, 'create_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n editForm(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'edit_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n namedForm(pk = -1, formName, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'named_form', formName, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n _getForm(pk, event_type, formName, $div_form, cb_resolve, cb_reject) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: event_type,\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk,\n form_name: formName\n }\n }));\n const className = pk === null || pk === -1 ? 'create' : 'edit';\n this.open_request[id] = [data => {\n $div_form.append(data.html);\n let $form = $div_form.closest('form').addClass(`sdc-model-${className}-form sdc-model-form ${this.form_id}`).data('model', this).data('model_pk', pk);\n if ($form.length > 0 && !$form[0].hasAttribute('sdc_submit')) {\n $form.attr('sdc_submit', 'submitModelFormDistributor');\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_form);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n }\n new() {\n return new Promise((resolve, reject) => {\n const $form = $('<form>').append(this.createForm(() => {\n this.syncFormToModel($form);\n resolve();\n }, reject));\n });\n }\n save(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n return this.isConnected().then(() => {\n let elem_list;\n if (pk > -1) {\n elem_list = [this.byPk(pk)];\n } else {\n elem_list = this.values_list;\n }\n let p_list = [];\n elem_list.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n p_list.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'save',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: elem,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(p_list);\n });\n }\n create(values = this.values) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(values).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'create',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: values,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n delete(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n if (pk === -1) pk = this.values?.pk;\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'delete',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._is_connected) {\n resolve();\n } else if (!this._is_conneting_process) {\n this._is_conneting_process = true;\n this.open_request['_connecting_process'] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolve_origin, reject_origin] = this.open_request['_connecting_process'];\n this.open_request['_connecting_process'] = [() => {\n resolve_origin();\n resolve();\n }, () => {\n reject_origin();\n reject();\n }];\n }\n });\n }\n close() {\n if (this.socket) {\n this._auto_reconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this['socket'];\n }\n }\n clean() {\n this.values_list = [];\n this.values = {};\n return this;\n }\n _readFiles(elem) {\n let to_solve = [];\n let files = {};\n for (const [key, value] of Object.entries(elem)) {\n if (value instanceof File) {\n to_solve.push(new Promise((resolve, reject) => {\n ((key, value) => {\n let reader = new FileReader();\n reader.onload = e => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.open_request[id] = [resolve, reject];\n let result = e.target.result;\n let number_of_chunks = parseInt(Math.ceil(result.length / MAX_FILE_UPLOAD));\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < number_of_chunks; ++i) {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'upload',\n event_id: id,\n args: {\n chunk: result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)),\n idx: i,\n number_of_chunks: number_of_chunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n }\n };\n reader.onerror = () => {\n reject();\n };\n reader.readAsBinaryString(value);\n })(key, value);\n }));\n }\n }\n return Promise.all(to_solve).then(() => {\n return files;\n });\n }\n _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][1](data);\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this.open_request['_connecting_process'][1](data);\n this._closeOpenRequest('_connecting_process');\n this._auto_reconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this._is_connected = true;\n this._is_conneting_process = false;\n this.open_request['_connecting_process'][0](data);\n this._closeOpenRequest('_connecting_process');\n } else if (data.type === 'load') {\n const json_res = JSON.parse(data.args.data);\n this.values_list = [];\n data.args.data = this._parseServerRes(json_res);\n } else if (data.type === 'on_update' || data.type === 'on_create') {\n const json_res = JSON.parse(data.args.data);\n let obj = this._parseServerRes(json_res);\n let cb;\n if (data.type === 'on_create') {\n cb = this.on_create;\n } else {\n cb = this.on_update;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n noOpenRequests() {\n return new Promise(resolve => {\n if (Object.keys(this.open_request).length === 0) {\n return resolve();\n }\n this._onNoOpenRequests.push(resolve);\n });\n }\n _closeOpenRequest(event_id) {\n delete this.open_request[event_id];\n if (Object.keys(this.open_request).length === 0) {\n this._onNoOpenRequests.forEach(x => x());\n this._onNoOpenRequests = [];\n }\n }\n _connectToServer() {\n return new Promise(resolve => {\n const model_identifier = `${this.model_name}` + (this.model_id > 0 ? `/${this.model_id}` : '');\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${model_identifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${model_identifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.model_name}, ${this.model_id}) Socket closed unexpectedly`);\n this._is_connected = false;\n for (const [_key, value] of Object.entries(this.open_request)) {\n value[1](e);\n }\n this.open_request = {};\n setTimeout(() => {\n if (this._auto_reconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._is_connected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'connect',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n }\n _parseServerRes(res) {\n let updated = [];\n for (let json_data of res) {\n const pk = json_data.pk;\n const obj = this.byPk(pk);\n for (const [k, v] of Object.entries(json_data.fields)) {\n if (v && typeof v === 'object' && v['__is_sdc_model__']) {\n obj[k] = new SubModel(v['pk'], v['model']);\n } else {\n obj[k] = v;\n }\n }\n updated.push(obj);\n }\n if (this.values_list.length === 1) {\n this.values = this.values_list.at(-1);\n } else {\n this.values = {};\n }\n return updated;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y19zb2NrZXQuanM/YWRiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcyc7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuY29uc3QgTUFYX0ZJTEVfVVBMT0FEID0gMjUwMDA7XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gICAgY29uc3RydWN0b3IocGssIG1vZGVsKSB7XG4gICAgICAgIHRoaXMucGsgPSBwaztcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTREMgTW9kZWwgTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgICAqL1xuICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAgICovXG4gICAgbG9hZChjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIubmV3TW9kZWwodGhpcy5fbW9kZWwsIHtwazogdGhpcy5wa30pO1xuICAgIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5wayAmJiB2YWx1ZS5wayAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBuZXcgTnVtYmVyKHZhbHVlLnBrKTtcbiAgICAgICAgICAgIG5ld1ZhbC5sb2FkID0gdmFsdWUubG9hZC5iaW5kKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3BrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG5cbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge2pzb259XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICAgICAgdGhpcy5tb2RlbF9xdWVyeSA9IG1vZGVsX3F1ZXJ5O1xuICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgICAgIHRoaXMub25fdXBkYXRlID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICsraWR4O1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLnZhbHVlc19saXN0W2lkeF0sIGRvbmU6IGZhbHNlfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYnlQayhwaykge1xuICAgICAgICBpZiAocGsgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdC5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwazogcGt9O1xuXG4gICAgfVxuXG4gICAgZmlsdGVyKG1vZGVsX3F1ZXJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnbGlzdF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgICAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1dO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2xpc3Q7XG4gICAgfVxuXG4gICAgZGV0YWlsVmlldyhwayA9IC0xLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocGsgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0WzBdLnBrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2RldGFpbF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBwazogcGtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgICB9XG5cbiAgICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW1vZGVsX3BrJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JtX2l0ZW0pLnZhbChpbnN0YW5jZVtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBpbnN0YW5jZXMgPSBbXTtcblxuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHBrID0gJGZvcm0uZGF0YSgnbW9kZWxfcGsnKTtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHNlbGYuYnlQayhwayk7XG4gICAgICAgICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZm9ybV9pdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1faXRlbS50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBwYXJzZV9oaWRkZW5faW5wdXRzKCQoZm9ybV9pdGVtKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9ICQoZm9ybV9pdGVtKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcblxuICAgIH1cblxuICAgIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShudWxsLCAnY3JlYXRlX2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgZWRpdEZvcm0ocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0LmF0KHBrKS5waztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShwaywgJ25hbWVkX2Zvcm0nLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuXG4gICAgX2dldEZvcm0ocGssIGV2ZW50X3R5cGUsIGZvcm1OYW1lLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRfdHlwZSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgcGs6IHBrLFxuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/ICdjcmVhdGUnIDogJ2VkaXQnO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKS5hZGRDbGFzcyhgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7dGhpcy5mb3JtX2lkfWApLmRhdGEoJ21vZGVsJywgdGhpcykuZGF0YSgnbW9kZWxfcGsnLCBwayk7XG4gICAgICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKCdzZGNfc3VibWl0JykpIHtcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicpLmFwcGVuZCh0aGlzLmNyZWF0ZUZvcm0oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlKHBrID0gLTEpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtX2xpc3Q7XG4gICAgICAgICAgICBpZiAocGsgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IFt0aGlzLmJ5UGsocGspXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZSh2YWx1ZXMgPSB0aGlzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRmlsZXModmFsdWVzKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwayA9PT0gLTEpIHBrID0gdGhpcy52YWx1ZXM/LnBrO1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc19jb25uZXRpbmdfcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvbHZlX29yaWdpbiwgcmVqZWN0X29yaWdpbl0gPSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF9vcmlnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbJ3NvY2tldCddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW4oKSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgICAgIGxldCB0b19zb2x2ZSA9IFtdO1xuICAgICAgICBsZXQgZmlsZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyX29mX2NodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogcmVzdWx0LnNsaWNlKE1BWF9GSUxFX1VQTE9BRCAqIGksIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfY2h1bmtzOiBudW1iZXJfb2ZfY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9vbk1lc3NhZ2UoZSkge1xuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5fcmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoJ19jb25uZWN0aW5nX3Byb2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KCdfY29ubmVjdGluZ19wcm9jZXNzJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnb25fdXBkYXRlJyB8fCBkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX2NyZWF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYiA9IHRoaXMub25fdXBkYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNiKG9iaik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZVxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbm9PcGVuUmVxdWVzdHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5fcmVxdWVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5wdXNoKHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfY2xvc2VPcGVuUmVxdWVzdChldmVudF9pZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZXZlbnRfaWRdO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5vcGVuX3JlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5mb3JFYWNoKHggPT4geCgpKTtcbiAgICAgICAgICAgIHRoaXMuX29uTm9PcGVuUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsX2lkZW50aWZpZXIgPSBgJHt0aGlzLm1vZGVsX25hbWV9YCArICh0aGlzLm1vZGVsX2lkID4gMCA/IGAvJHt0aGlzLm1vZGVsX2lkfWAgOiAnJyk7XG4gICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxfaWRlbnRpZmllcn1gKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU0RDIE1vZGVsICgke3RoaXMubW9kZWxfbmFtZX0sICR7dGhpcy5tb2RlbF9pZH0pIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbX2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3Blbl9yZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3QgPSB7fTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXV0b19yZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgICAgIGxldCB1cGRhdGVkID0gW107XG4gICAgICAgIGZvciAobGV0IGpzb25fZGF0YSBvZiByZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBrID0ganNvbl9kYXRhLnBrO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25fZGF0YS5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHZbJ19faXNfc2RjX21vZGVsX18nXSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBuZXcgU3ViTW9kZWwodlsncGsnXSwgdlsnbW9kZWwnXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZC5wdXNoKG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgICB9XG59Il0sIm5hbWVzIjpbImFwcCIsInRyaWdnZXIiLCJ1dWlkdjQiLCJNQVhfRklMRV9VUExPQUQiLCJTdWJNb2RlbCIsImNvbnN0cnVjdG9yIiwicGsiLCJtb2RlbCIsIl9tb2RlbCIsImxvYWQiLCJjb250cm9sbGVyIiwiVHlwZUVycm9yIiwibmV3TW9kZWwiLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwiTnVtYmVyIiwiYmluZCIsInNldCIsIm9sZFZhbCIsImhhc093blByb3BlcnR5IiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwiX29uTm9PcGVuUmVxdWVzdHMiLCJ2YWx1ZXNfbGlzdCIsInZhbHVlcyIsIl9pc19jb25uZWN0ZWQiLCJfaXNfY29ubmV0aW5nX3Byb2Nlc3MiLCJfYXV0b19yZWNvbm5lY3QiLCJzb2NrZXQiLCJvcGVuX3JlcXVlc3QiLCJvbl91cGRhdGUiLCJvbl9jcmVhdGUiLCJmb3JtX2lkIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpZHgiLCJuZXh0IiwiZG9uZSIsImJ5UGsiLCJpc05hTiIsImVsZW0iLCJmaW5kIiwiZWxtIiwiUHJveHkiLCJwdXNoIiwiZmlsdGVyIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNDb25uZWN0ZWQiLCJ0aGVuIiwiaWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJldmVudF90eXBlIiwiZXZlbnRfaWQiLCJhcmdzIiwibGlzdFZpZXciLCJjYl9yZXNvbHZlIiwiY2JfcmVqZWN0IiwiJGRpdl9saXN0IiwiJCIsImRhdGEiLCJhcHBlbmQiLCJodG1sIiwicmVmcmVzaCIsInJlcyIsImRldGFpbFZpZXciLCJsb2FkX3Byb21pc2UiLCJzeW5jRm9ybVRvTW9kZWwiLCIkZm9ybXMiLCJzeW5jRm9ybSIsInN5bmNNb2RlbFRvRm9ybSIsImhhc0NsYXNzIiwic2VsZiIsImVhY2giLCJoYXNBdHRyaWJ1dGUiLCJpbnN0YW5jZSIsImZvcm1faXRlbSIsImVsZW1lbnRzIiwibmFtZSIsInR5cGUiLCJjaGVja2VkIiwiRmlsZSIsImNvbnRhaW5lciIsIkRhdGFUcmFuc2ZlciIsIml0ZW1zIiwiYWRkIiwiZmlsZXMiLCJ2YWwiLCJpbnN0YW5jZXMiLCIkZm9ybSIsImF0IiwiY3JlYXRlRm9ybSIsIiRkaXZfZm9ybSIsIl9nZXRGb3JtIiwiZWRpdEZvcm0iLCJuYW1lZEZvcm0iLCJmb3JtTmFtZSIsImZvcm1fbmFtZSIsImNsYXNzTmFtZSIsImNsb3Nlc3QiLCJhZGRDbGFzcyIsImF0dHIiLCJuZXciLCJzYXZlIiwiZWxlbV9saXN0IiwicF9saXN0IiwiZm9yRWFjaCIsIl9yZWFkRmlsZXMiLCJwYXJzZSIsIl9wYXJzZVNlcnZlclJlcyIsImFsbCIsImNyZWF0ZSIsImRlbGV0ZSIsIl9jb25uZWN0VG9TZXJ2ZXIiLCJfY2hlY2tDb25uZWN0aW9uIiwicmVzb2x2ZV9vcmlnaW4iLCJyZWplY3Rfb3JpZ2luIiwiY2xvc2UiLCJvbmNsb3NlIiwiY2xlYW4iLCJ0b19zb2x2ZSIsImVudHJpZXMiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiZSIsInJlc3VsdCIsIm51bWJlcl9vZl9jaHVua3MiLCJNYXRoIiwiY2VpbCIsImZpbGVfbmFtZSIsImZpZWxkX25hbWUiLCJjb250ZW50X2xlbmd0aCIsInNpemUiLCJpIiwiY2h1bmsiLCJzbGljZSIsImNvbnRlbnRfdHlwZSIsIm9uZXJyb3IiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJfb25NZXNzYWdlIiwiaXNfZXJyb3IiLCJfY2xvc2VPcGVuUmVxdWVzdCIsIm1zZyIsImhlYWRlciIsImpzb25fcmVzIiwib2JqIiwiY2IiLCJub09wZW5SZXF1ZXN0cyIsImtleXMiLCJ4IiwibW9kZWxfaWRlbnRpZmllciIsIm1vZGVsX2lkIiwid2luZG93IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJjb25zb2xlIiwiZXJyb3IiLCJfa2V5Iiwic2V0VGltZW91dCIsImVyciIsIm9ub3BlbiIsInVwZGF0ZWQiLCJqc29uX2RhdGEiLCJrIiwidiIsImZpZWxkcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
|
|
97
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nclass SubModel {\n constructor(pk, model) {\n this.pk = pk;\n this._model = model;\n }\n\n /**\n * SDC Model Name\n * @param {string} model\n */\n set model(model) {\n this._model = model;\n }\n get model() {\n return this._model;\n }\n\n /**\n * Load the sub model.\n *\n * @param {AbstractSDC} controller\n * @returns {Model}\n */\n load(controller) {\n if (!this._model) {\n throw new TypeError(\"Model is not set!!\");\n }\n return controller.newModel(this._model, {\n pk: this.pk\n });\n }\n}\nconst ModelProxyHandler = {\n get(target, key) {\n const value = target[key] ?? undefined;\n if (value instanceof SubModel) {\n if (!value.pk && value.pk !== 0) {\n return null;\n }\n const newVal = new Number(value.pk);\n newVal.load = value.load.bind(value);\n return newVal;\n }\n return value;\n },\n set(target, key, value) {\n if (key in target) {\n const oldVal = target[key];\n if (oldVal instanceof SubModel) {\n if (value.hasOwnProperty('pk')) {\n oldVal.pk = value.pk;\n } else {\n oldVal.pk = value;\n }\n } else {\n target[key] = value;\n }\n } else {\n target[key] = value;\n }\n return true;\n }\n};\nfunction parse_hidden_inputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === 'true';\n } else if (value === 'undefined') {\n return undefined;\n } else if (value.toLowerCase() === 'none') {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\n this._onNoOpenRequests = [];\n this.values_list = [];\n this.values = {};\n this.model_name = model_name;\n this.model_query = model_query;\n this._is_connected = false;\n this._is_conneting_process = false;\n this._auto_reconnect = true;\n this.socket = null;\n this.open_request = {};\n this.on_update = () => {};\n this.on_create = () => {};\n this.form_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.values_list.length) {\n return {\n value: this.values_list[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n length() {\n return this.values_list.length;\n }\n byPk(pk) {\n if (pk !== null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let elem = this.values_list.find(elm => elm.pk === pk);\n if (!elem) {\n elem = new Proxy({\n pk: pk\n }, ModelProxyHandler);\n this.values_list.push(elem);\n }\n return elem;\n }\n return {\n pk: pk\n };\n }\n filter(model_query) {\n this.model_query = Object.assign({}, this.model_query, model_query);\n return this;\n }\n load() {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'load',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n listView(filter = {}, cb_resolve = null, cb_reject = null, template_context = {}) {\n let $div_list = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'list_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n filter,\n template_context\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n detailView(pk = null, cb_resolve = null, cb_reject = null, template_context = {}) {\n pk = pk ?? -1;\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let $div_list = $('<div class=\"container-fluid\">');\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n load_promise.then(() => {\n if (pk === -1) {\n pk = this.values_list[0].pk;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'detail_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk,\n template_context\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n syncModelToForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n let self = this;\n $forms.each(function () {\n if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\n } else {\n $(form_item).val(instance[name]);\n }\n }\n }\n });\n }\n syncForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n const self = this;\n let instances = [];\n $forms.each(function () {\n let $form = $(this);\n let pk = $form.data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'hidden') {\n instance[name] = parse_hidden_inputs($(form_item).val());\n } else if (form_item.type === 'checkbox') {\n instance[name] = form_item.checked;\n } else if (form_item.type === 'file') {\n instance[name] = form_item.files[0];\n } else {\n instance[name] = $(form_item).val();\n }\n }\n }\n instances.push(instance);\n return instance;\n });\n if (this.values_list.length <= 1 && instances.length > 0) {\n this.values = instances.at(-1);\n }\n return instances;\n }\n createForm(cb_resolve = null, cb_reject = null) {\n let $div_form = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n this._getForm(null, 'create_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n editForm(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'edit_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n namedForm(pk = -1, formName, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'named_form', formName, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n _getForm(pk, event_type, formName, $div_form, cb_resolve, cb_reject) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: event_type,\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk,\n form_name: formName\n }\n }));\n const className = pk === null || pk === -1 ? 'create' : 'edit';\n this.open_request[id] = [data => {\n $div_form.append(data.html);\n let $form = $div_form.closest('form').addClass(`sdc-model-${className}-form sdc-model-form ${this.form_id}`).data('model', this).data('model_pk', pk);\n if ($form.length > 0 && !$form[0].hasAttribute('sdc_submit')) {\n $form.attr('sdc_submit', 'submitModelFormDistributor');\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_form);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n }\n new() {\n return new Promise((resolve, reject) => {\n const $form = $('<form>').append(this.createForm(() => {\n this.syncFormToModel($form);\n resolve();\n }, reject));\n });\n }\n save(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n return this.isConnected().then(() => {\n let elem_list;\n if (pk > -1) {\n elem_list = [this.byPk(pk)];\n } else {\n elem_list = this.values_list;\n }\n let p_list = [];\n elem_list.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n p_list.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'save',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: elem,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(p_list);\n });\n }\n create(values = this.values) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(values).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'create',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: values,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n delete(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n if (pk === -1) pk = this.values?.pk;\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'delete',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._is_connected) {\n resolve();\n } else if (!this._is_conneting_process) {\n this._is_conneting_process = true;\n this.open_request['_connecting_process'] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolve_origin, reject_origin] = this.open_request['_connecting_process'];\n this.open_request['_connecting_process'] = [() => {\n resolve_origin();\n resolve();\n }, () => {\n reject_origin();\n reject();\n }];\n }\n });\n }\n close() {\n if (this.socket) {\n this._auto_reconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this['socket'];\n }\n }\n clean() {\n this.values_list = [];\n this.values = {};\n return this;\n }\n _readFiles(elem) {\n let to_solve = [];\n let files = {};\n for (const [key, value] of Object.entries(elem)) {\n if (value instanceof File) {\n to_solve.push(new Promise((resolve, reject) => {\n ((key, value) => {\n let reader = new FileReader();\n reader.onload = e => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.open_request[id] = [resolve, reject];\n let result = e.target.result;\n let number_of_chunks = parseInt(Math.ceil(result.length / MAX_FILE_UPLOAD));\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < number_of_chunks; ++i) {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'upload',\n event_id: id,\n args: {\n chunk: result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)),\n idx: i,\n number_of_chunks: number_of_chunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n }\n };\n reader.onerror = () => {\n reject();\n };\n reader.readAsBinaryString(value);\n })(key, value);\n }));\n }\n }\n return Promise.all(to_solve).then(() => {\n return files;\n });\n }\n _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][1](data);\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this.open_request['_connecting_process'][1](data);\n this._closeOpenRequest('_connecting_process');\n this._auto_reconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this._is_connected = true;\n this._is_conneting_process = false;\n this.open_request['_connecting_process'][0](data);\n this._closeOpenRequest('_connecting_process');\n } else if (data.type === 'load') {\n const json_res = JSON.parse(data.args.data);\n this.values_list = [];\n data.args.data = this._parseServerRes(json_res);\n } else if (data.type === 'on_update' || data.type === 'on_create') {\n const json_res = JSON.parse(data.args.data);\n let obj = this._parseServerRes(json_res);\n let cb;\n if (data.type === 'on_create') {\n cb = this.on_create;\n } else {\n cb = this.on_update;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n noOpenRequests() {\n return new Promise(resolve => {\n if (Object.keys(this.open_request).length === 0) {\n return resolve();\n }\n this._onNoOpenRequests.push(resolve);\n });\n }\n _closeOpenRequest(event_id) {\n delete this.open_request[event_id];\n if (Object.keys(this.open_request).length === 0) {\n this._onNoOpenRequests.forEach(x => x());\n this._onNoOpenRequests = [];\n }\n }\n _connectToServer() {\n return new Promise(resolve => {\n const model_identifier = `${this.model_name}` + (this.model_id > 0 ? `/${this.model_id}` : '');\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${model_identifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${model_identifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.model_name}, ${this.model_id}) Socket closed unexpectedly`);\n this._is_connected = false;\n for (const [_key, value] of Object.entries(this.open_request)) {\n value[1](e);\n }\n this.open_request = {};\n setTimeout(() => {\n if (this._auto_reconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._is_connected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'connect',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n }\n _parseServerRes(res) {\n let updated = [];\n for (let json_data of res) {\n const pk = json_data.pk;\n const obj = this.byPk(pk);\n for (const [k, v] of Object.entries(json_data.fields)) {\n if (v && typeof v === 'object' && v['__is_sdc_model__']) {\n obj[k] = new SubModel(v['pk'], v['model']);\n } else {\n obj[k] = v;\n }\n }\n updated.push(obj);\n }\n if (this.values_list.length === 1) {\n this.values = this.values_list.at(-1);\n } else {\n this.values = {};\n }\n return updated;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDTTtBQUNGO0FBRXRDLE1BQU1HLGVBQWUsR0FBRyxLQUFLO0FBRzdCLE1BQU1DLFFBQVEsQ0FBQztFQUVYQyxXQUFXQSxDQUFDQyxFQUFFLEVBQUVDLEtBQUssRUFBRTtJQUNuQixJQUFJLENBQUNELEVBQUUsR0FBR0EsRUFBRTtJQUNaLElBQUksQ0FBQ0UsTUFBTSxHQUFHRCxLQUFLO0VBQ3ZCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUEsS0FBS0EsQ0FBQ0EsS0FBSyxFQUFFO0lBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdELEtBQUs7RUFDdkI7RUFFQSxJQUFJQSxLQUFLQSxDQUFBLEVBQUc7SUFDUixPQUFPLElBQUksQ0FBQ0MsTUFBTTtFQUN0Qjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsSUFBSUEsQ0FBQ0MsVUFBVSxFQUFFO0lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQ0YsTUFBTSxFQUFFO01BQ2QsTUFBTSxJQUFJRyxTQUFTLENBQUMsb0JBQW9CLENBQUM7SUFDN0M7SUFDQSxPQUFPRCxVQUFVLENBQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUNKLE1BQU0sRUFBRTtNQUFDRixFQUFFLEVBQUUsSUFBSSxDQUFDQTtJQUFFLENBQUMsQ0FBQztFQUMxRDtBQUNKO0FBRUEsTUFBTU8saUJBQWlCLEdBQUc7RUFDdEJDLEdBQUdBLENBQUNDLE1BQU0sRUFBRUMsR0FBRyxFQUFFO0lBQ2IsTUFBTUMsS0FBSyxHQUFHRixNQUFNLENBQUNDLEdBQUcsQ0FBQyxJQUFJRSxTQUFTO0lBQ3RDLElBQUlELEtBQUssWUFBWWIsUUFBUSxFQUFFO01BQzNCLElBQUksQ0FBQ2EsS0FBSyxDQUFDWCxFQUFFLElBQUlXLEtBQUssQ0FBQ1gsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUM3QixPQUFPLElBQUk7TUFDZjtNQUNBLE1BQU1hLE1BQU0sR0FBRyxJQUFJQyxNQUFNLENBQUNILEtBQUssQ0FBQ1gsRUFBRSxDQUFDO01BQ25DYSxNQUFNLENBQUNWLElBQUksR0FBR1EsS0FBSyxDQUFDUixJQUFJLENBQUNZLElBQUksQ0FBQ0osS0FBSyxDQUFDO01BQ3BDLE9BQU9FLE1BQU07SUFDakI7SUFDQSxPQUFPRixLQUFLO0VBQ2hCLENBQUM7RUFDREssR0FBR0EsQ0FBQ1AsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRTtJQUNwQixJQUFJRCxHQUFHLElBQUlELE1BQU0sRUFBRTtNQUNmLE1BQU1RLE1BQU0sR0FBR1IsTUFBTSxDQUFDQyxHQUFHLENBQUM7TUFDMUIsSUFBSU8sTUFBTSxZQUFZbkIsUUFBUSxFQUFFO1FBQzVCLElBQUlhLEtBQUssQ0FBQ08sY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1VBQzVCRCxNQUFNLENBQUNqQixFQUFFLEdBQUdXLEtBQUssQ0FBQ1gsRUFBRTtRQUN4QixDQUFDLE1BQU07VUFDSGlCLE1BQU0sQ0FBQ2pCLEVBQUUsR0FBR1csS0FBSztRQUNyQjtNQUNKLENBQUMsTUFBTTtRQUNIRixNQUFNLENBQUNDLEdBQUcsQ0FBQyxHQUFHQyxLQUFLO01BQ3ZCO0lBQ0osQ0FBQyxNQUFNO01BQ0hGLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEdBQUdDLEtBQUs7SUFDdkI7SUFDQSxPQUFPLElBQUk7RUFDZjtBQUNKLENBQUM7QUFHRCxTQUFTUSxtQkFBbUJBLENBQUNSLEtBQUssRUFBRTtFQUVoQyxJQUFJUyxVQUFVLEdBQUcsZUFBZTtFQUNoQyxJQUFJQyxRQUFRLEdBQUcsU0FBUztFQUN4QixJQUFJQyxTQUFTLEdBQUcsZ0JBQWdCO0VBQ2hDLElBQUlDLFdBQVcsR0FBRywrQkFBK0I7RUFHakQsSUFBSVosS0FBSyxDQUFDYSxXQUFXLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUNILFNBQVMsQ0FBQyxFQUFFO0lBQ3RDLE9BQU9YLEtBQUssQ0FBQ2EsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNO0VBQ3pDLENBQUMsTUFBTSxJQUFJYixLQUFLLEtBQUssV0FBVyxFQUFFO0lBQzlCLE9BQU9DLFNBQVM7RUFDcEIsQ0FBQyxNQUFNLElBQUlELEtBQUssQ0FBQ2EsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7SUFDdkMsT0FBTyxJQUFJO0VBQ2YsQ0FBQyxNQUFNLElBQUliLEtBQUssQ0FBQ2MsS0FBSyxDQUFDSixRQUFRLENBQUMsRUFBRTtJQUM5QixPQUFPSyxRQUFRLENBQUNmLEtBQUssQ0FBQztFQUMxQixDQUFDLE1BQU0sSUFBSUEsS0FBSyxDQUFDYyxLQUFLLENBQUNMLFVBQVUsQ0FBQyxFQUFFO0lBQ2hDLE9BQU9PLFVBQVUsQ0FBQ2hCLEtBQUssQ0FBQztFQUM1QixDQUFDLE1BQU0sSUFBSUEsS0FBSyxDQUFDYyxLQUFLLENBQUNGLFdBQVcsQ0FBQyxFQUFFO0lBQ2pDLE9BQU9aLEtBQUssQ0FBQ2lCLFNBQVMsQ0FBQyxDQUFDLEVBQUVqQixLQUFLLENBQUNrQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQy9DO0VBQ0EsT0FBT2xCLEtBQUs7QUFDaEI7QUFHTyxNQUFNbUIsS0FBSyxDQUFDO0VBQ2Y7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJL0IsV0FBV0EsQ0FBQ2dDLFVBQVUsRUFBRUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RDLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsRUFBRTtJQUMzQixJQUFJLENBQUNDLFdBQVcsR0FBRyxFQUFFO0lBQ3JCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUNKLFVBQVUsR0FBR0EsVUFBVTtJQUM1QixJQUFJLENBQUNDLFdBQVcsR0FBR0EsV0FBVztJQUM5QixJQUFJLENBQUNJLGFBQWEsR0FBRyxLQUFLO0lBQzFCLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsS0FBSztJQUNsQyxJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJO0lBQzNCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksQ0FBQ0MsU0FBUyxHQUFHLE1BQU0sQ0FDdkIsQ0FBQztJQUNELElBQUksQ0FBQ0MsU0FBUyxHQUFHLE1BQU0sQ0FDdkIsQ0FBQztJQUVELElBQUksQ0FBQ0MsT0FBTyxHQUFHL0MscURBQU0sQ0FBQyxDQUFDO0VBQzNCO0VBRUEsQ0FBQ2dELE1BQU0sQ0FBQ0MsUUFBUSxJQUFJO0lBQ2hCLElBQUlDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPO01BQ0hDLElBQUksRUFBRUEsQ0FBQSxLQUFNO1FBQ1IsRUFBRUQsR0FBRztRQUNMLElBQUlBLEdBQUcsR0FBRyxJQUFJLENBQUNaLFdBQVcsQ0FBQ0wsTUFBTSxFQUFFO1VBQy9CLE9BQU87WUFBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUN1QixXQUFXLENBQUNZLEdBQUcsQ0FBQztZQUFFRSxJQUFJLEVBQUU7VUFBSyxDQUFDO1FBQ3REO1FBQ0EsT0FBTztVQUFDckMsS0FBSyxFQUFFLElBQUk7VUFBRXFDLElBQUksRUFBRTtRQUFJLENBQUM7TUFDcEM7SUFDSixDQUFDO0VBQ0w7RUFFQW5CLE1BQU1BLENBQUEsRUFBRztJQUNMLE9BQU8sSUFBSSxDQUFDSyxXQUFXLENBQUNMLE1BQU07RUFDbEM7RUFFQW9CLElBQUlBLENBQUNqRCxFQUFFLEVBQUU7SUFDTCxJQUFJQSxFQUFFLEtBQUssSUFBSSxFQUFFO01BQ2JBLEVBQUUsR0FBRzBCLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztNQUNqQixJQUFJa0QsS0FBSyxDQUFDbEQsRUFBRSxDQUFDLEVBQUU7UUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNYO01BQ0EsSUFBSW1ELElBQUksR0FBRyxJQUFJLENBQUNqQixXQUFXLENBQUNrQixJQUFJLENBQUNDLEdBQUcsSUFBSUEsR0FBRyxDQUFDckQsRUFBRSxLQUFLQSxFQUFFLENBQUM7TUFDdEQsSUFBSSxDQUFDbUQsSUFBSSxFQUFFO1FBQ1BBLElBQUksR0FBRyxJQUFJRyxLQUFLLENBQUM7VUFBQ3RELEVBQUUsRUFBRUE7UUFBRSxDQUFDLEVBQUVPLGlCQUFpQixDQUFDO1FBQzdDLElBQUksQ0FBQzJCLFdBQVcsQ0FBQ3FCLElBQUksQ0FBQ0osSUFBSSxDQUFDO01BQy9CO01BQ0EsT0FBT0EsSUFBSTtJQUNmO0lBQ0EsT0FBTztNQUFDbkQsRUFBRSxFQUFFQTtJQUFFLENBQUM7RUFFbkI7RUFFQXdELE1BQU1BLENBQUN4QixXQUFXLEVBQUU7SUFDaEIsSUFBSSxDQUFDQSxXQUFXLEdBQUd5QixNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMxQixXQUFXLEVBQUVBLFdBQVcsQ0FBQztJQUNuRSxPQUFPLElBQUk7RUFDZjtFQUVBN0IsSUFBSUEsQ0FBQSxFQUFHO0lBQ0gsT0FBTyxJQUFJLENBQUN3RCxXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtNQUNqQyxNQUFNQyxFQUFFLEdBQUdqRSxxREFBTSxDQUFDLENBQUM7TUFDbkIsT0FBTyxJQUFJa0UsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQ3BDLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7VUFDNUJDLEtBQUssRUFBRSxPQUFPO1VBQ2RDLFVBQVUsRUFBRSxNQUFNO1VBQ2xCQyxRQUFRLEVBQUVULEVBQUU7VUFDWlUsSUFBSSxFQUFFO1lBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1lBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQTtVQUN0QjtRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDUSxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFDRSxPQUFPLEVBQUVDLE1BQU0sQ0FBQztNQUM3QyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBUSxRQUFRQSxDQUFDaEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFaUIsVUFBVSxHQUFHLElBQUksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDOUUsSUFBSUMsU0FBUyxHQUFHQyxDQUFDLENBQUMsK0JBQStCLENBQUM7SUFDbEQsSUFBSSxDQUFDbEIsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDMUIsTUFBTUMsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO01BQ25CLElBQUksQ0FBQzJDLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7UUFDNUJDLEtBQUssRUFBRSxPQUFPO1FBQ2RDLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCQyxRQUFRLEVBQUVULEVBQUU7UUFDWlUsSUFBSSxFQUFFO1VBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1VBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1VBQzdCd0IsTUFBTTtVQUNObUI7UUFDSjtNQUNKLENBQUMsQ0FBQyxDQUFDO01BRUgsSUFBSSxDQUFDbkMsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBRWlCLElBQUksSUFBSztRQUMvQkYsU0FBUyxDQUFDRyxNQUFNLENBQUNELElBQUksQ0FBQ0UsSUFBSSxDQUFDO1FBQzNCdEYsNkNBQUcsQ0FBQ3VGLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDO1FBQ3RCSCxVQUFVLElBQUlBLFVBQVUsQ0FBQ0ssSUFBSSxDQUFDO01BQ2xDLENBQUMsRUFBR0ksR0FBRyxJQUFLO1FBQ1JSLFNBQVMsSUFBSUEsU0FBUyxDQUFDUSxHQUFHLENBQUM7TUFDL0IsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0lBRUYsT0FBT04sU0FBUztFQUNwQjtFQUVBTyxVQUFVQSxDQUFDbkYsRUFBRSxHQUFHLElBQUksRUFBRXlFLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUVDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQzlFM0UsRUFBRSxHQUFHQSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2JBLEVBQUUsR0FBRzBCLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztJQUNqQixJQUFJa0QsS0FBSyxDQUFDbEQsRUFBRSxDQUFDLEVBQUU7TUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYO0lBQ0EsSUFBSTRFLFNBQVMsR0FBR0MsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBRWxELElBQUlPLFlBQVk7SUFDaEIsSUFBSSxJQUFJLENBQUNsRCxXQUFXLENBQUNMLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDL0J1RCxZQUFZLEdBQUcsSUFBSSxDQUFDekIsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQyxNQUFNO01BQ0h5QixZQUFZLEdBQUcsSUFBSSxDQUFDakYsSUFBSSxDQUFDLENBQUM7SUFDOUI7SUFFQWlGLFlBQVksQ0FBQ3hCLElBQUksQ0FBQyxNQUFNO01BQ3BCLElBQUk1RCxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDWEEsRUFBRSxHQUFHLElBQUksQ0FBQ2tDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xDLEVBQUU7TUFDL0I7TUFDQSxNQUFNNkQsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO01BQ25CLElBQUksQ0FBQzJDLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7UUFDNUJDLEtBQUssRUFBRSxPQUFPO1FBQ2RDLFVBQVUsRUFBRSxhQUFhO1FBQ3pCQyxRQUFRLEVBQUVULEVBQUU7UUFDWlUsSUFBSSxFQUFFO1VBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1VBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1VBQzdCaEMsRUFBRTtVQUNGMkU7UUFDSjtNQUNKLENBQUMsQ0FBQyxDQUFDO01BRUgsSUFBSSxDQUFDbkMsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBRWlCLElBQUksSUFBSztRQUMvQkYsU0FBUyxDQUFDRyxNQUFNLENBQUNELElBQUksQ0FBQ0UsSUFBSSxDQUFDO1FBQzNCdEYsNkNBQUcsQ0FBQ3VGLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDO1FBQ3RCSCxVQUFVLElBQUlBLFVBQVUsQ0FBQ0ssSUFBSSxDQUFDO01BQ2xDLENBQUMsRUFBR0ksR0FBRyxJQUFLO1FBQ1JSLFNBQVMsSUFBSUEsU0FBUyxDQUFDUSxHQUFHLENBQUM7TUFDL0IsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0lBRUYsT0FBT04sU0FBUztFQUNwQjtFQUVBUyxlQUFlQSxDQUFDQyxNQUFNLEVBQUU7SUFDcEIsT0FBTyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDO0VBQ2hDO0VBRUFFLGVBQWVBLENBQUNGLE1BQU0sRUFBRTtJQUNwQixJQUFJLENBQUNBLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNHLFFBQVEsQ0FBQyxJQUFJLENBQUM5QyxPQUFPLENBQUMsRUFBRTtNQUMzQzJDLE1BQU0sR0FBR1QsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDbEMsT0FBTyxFQUFFLENBQUM7SUFDbEM7SUFFQSxJQUFJK0MsSUFBSSxHQUFHLElBQUk7SUFDZkosTUFBTSxDQUFDSyxJQUFJLENBQUMsWUFBWTtNQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDQyxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDckM7TUFDSjtNQUNBLElBQUk1RixFQUFFLEdBQUc2RSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFVLENBQUM7TUFDakMsSUFBSWUsUUFBUSxHQUFHSCxJQUFJLENBQUN6QyxJQUFJLENBQUNqRCxFQUFFLENBQUM7TUFDNUIsS0FBSyxJQUFJOEYsU0FBUyxJQUFJLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1FBQ2pDLElBQUlDLElBQUksR0FBR0YsU0FBUyxDQUFDRSxJQUFJO1FBQ3pCLElBQUlBLElBQUksSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRTtVQUNyQixJQUFJRixTQUFTLENBQUNHLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDL0JILFNBQVMsQ0FBQ0ksT0FBTyxHQUFHTCxRQUFRLENBQUNHLElBQUksQ0FBQztVQUN0QyxDQUFDLE1BQU0sSUFBSUYsU0FBUyxDQUFDRyxJQUFJLEtBQUssTUFBTSxJQUFJSixRQUFRLENBQUNHLElBQUksQ0FBQyxZQUFZRyxJQUFJLEVBQUU7WUFDcEUsSUFBSUMsU0FBUyxHQUFHLElBQUlDLFlBQVksQ0FBQyxDQUFDO1lBQ2xDRCxTQUFTLENBQUNFLEtBQUssQ0FBQ0MsR0FBRyxDQUFDVixRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDO1lBQ25DRixTQUFTLENBQUNVLEtBQUssR0FBR0osU0FBUztVQUMvQixDQUFDLE1BQU07WUFDSHZCLENBQUMsQ0FBQ2lCLFNBQVMsQ0FBQyxDQUFDVyxHQUFHLENBQUNaLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLENBQUM7VUFDcEM7UUFDSjtNQUNKO0lBQ0osQ0FBQyxDQUFDO0VBRU47RUFFQVQsUUFBUUEsQ0FBQ0QsTUFBTSxFQUFFO0lBQ2IsSUFBSSxDQUFDQSxNQUFNLElBQUksQ0FBQ0EsTUFBTSxDQUFDRyxRQUFRLENBQUMsSUFBSSxDQUFDOUMsT0FBTyxDQUFDLEVBQUU7TUFDM0MyQyxNQUFNLEdBQUdULENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDO0lBRUEsTUFBTStDLElBQUksR0FBRyxJQUFJO0lBQ2pCLElBQUlnQixTQUFTLEdBQUcsRUFBRTtJQUVsQnBCLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLFlBQVk7TUFDcEIsSUFBSWdCLEtBQUssR0FBRzlCLENBQUMsQ0FBQyxJQUFJLENBQUM7TUFDbkIsSUFBSTdFLEVBQUUsR0FBRzJHLEtBQUssQ0FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUM7TUFDL0IsSUFBSWUsUUFBUSxHQUFHSCxJQUFJLENBQUN6QyxJQUFJLENBQUNqRCxFQUFFLENBQUM7TUFDNUIsS0FBSyxJQUFJOEYsU0FBUyxJQUFJLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1FBQ2pDLElBQUlDLElBQUksR0FBR0YsU0FBUyxDQUFDRSxJQUFJO1FBQ3pCLElBQUlBLElBQUksSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRTtVQUNyQixJQUFJRixTQUFTLENBQUNHLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDN0JKLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEdBQUc3RSxtQkFBbUIsQ0FBQzBELENBQUMsQ0FBQ2lCLFNBQVMsQ0FBQyxDQUFDVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQzVELENBQUMsTUFBTSxJQUFJWCxTQUFTLENBQUNHLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDdENKLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEdBQUdGLFNBQVMsQ0FBQ0ksT0FBTztVQUN0QyxDQUFDLE1BQU0sSUFBSUosU0FBUyxDQUFDRyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ2xDSixRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHRixTQUFTLENBQUNVLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDdkMsQ0FBQyxNQUFNO1lBQ0hYLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEdBQUduQixDQUFDLENBQUNpQixTQUFTLENBQUMsQ0FBQ1csR0FBRyxDQUFDLENBQUM7VUFDdkM7UUFDSjtNQUNKO01BRUFDLFNBQVMsQ0FBQ25ELElBQUksQ0FBQ3NDLFFBQVEsQ0FBQztNQUN4QixPQUFPQSxRQUFRO0lBQ25CLENBQUMsQ0FBQztJQUVGLElBQUksSUFBSSxDQUFDM0QsV0FBVyxDQUFDTCxNQUFNLElBQUksQ0FBQyxJQUFJNkUsU0FBUyxDQUFDN0UsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0RCxJQUFJLENBQUNNLE1BQU0sR0FBR3VFLFNBQVMsQ0FBQ0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDO0lBRUEsT0FBT0YsU0FBUztFQUVwQjtFQUVBRyxVQUFVQSxDQUFDcEMsVUFBVSxHQUFHLElBQUksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRTtJQUM1QyxJQUFJb0MsU0FBUyxHQUFHakMsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBQ2xELElBQUksQ0FBQ2xCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQzFCLElBQUksQ0FBQ21ELFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRUQsU0FBUyxFQUFFckMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDOUUsQ0FBQyxDQUFDO0lBRUYsT0FBT29DLFNBQVM7RUFDcEI7RUFFQUUsUUFBUUEsQ0FBQ2hILEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRXlFLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUU7SUFDbkQxRSxFQUFFLEdBQUcwQixRQUFRLENBQUMxQixFQUFFLENBQUM7SUFDakIsSUFBSWtELEtBQUssQ0FBQ2xELEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLElBQUlvRixZQUFZO0lBQ2hCLElBQUksSUFBSSxDQUFDbEQsV0FBVyxDQUFDTCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQy9CdUQsWUFBWSxHQUFHLElBQUksQ0FBQ3pCLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsTUFBTTtNQUNIeUIsWUFBWSxHQUFHLElBQUksQ0FBQ2pGLElBQUksQ0FBQyxDQUFDO0lBQzlCO0lBRUEsSUFBSTJHLFNBQVMsR0FBR2pDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUVuRE8sWUFBWSxDQUFDeEIsSUFBSSxDQUFDLE1BQU07TUFDcEIsSUFBSTVELEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNWQSxFQUFFLEdBQUcsSUFBSSxDQUFDa0MsV0FBVyxDQUFDMEUsRUFBRSxDQUFDNUcsRUFBRSxDQUFDLENBQUNBLEVBQUU7TUFDbkM7TUFFQSxJQUFJLENBQUMrRyxRQUFRLENBQUMvRyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRThHLFNBQVMsRUFBRXJDLFVBQVUsRUFBRUMsU0FBUyxDQUFDO0lBQzFFLENBQUMsQ0FBQztJQUVGLE9BQU9vQyxTQUFTO0VBQ3BCO0VBRUFHLFNBQVNBLENBQUNqSCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUVrSCxRQUFRLEVBQUV6QyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxTQUFTLEdBQUcsSUFBSSxFQUFFO0lBQzlEMUUsRUFBRSxHQUFHMEIsUUFBUSxDQUFDMUIsRUFBRSxDQUFDO0lBQ2pCLElBQUlrRCxLQUFLLENBQUNsRCxFQUFFLENBQUMsRUFBRTtNQUNYQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1g7SUFDQSxJQUFJb0YsWUFBWTtJQUNoQixJQUFJLElBQUksQ0FBQ2xELFdBQVcsQ0FBQ0wsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMvQnVELFlBQVksR0FBRyxJQUFJLENBQUN6QixXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDLE1BQU07TUFDSHlCLFlBQVksR0FBRyxJQUFJLENBQUNqRixJQUFJLENBQUMsQ0FBQztJQUM5QjtJQUVBLElBQUkyRyxTQUFTLEdBQUdqQyxDQUFDLENBQUMsZ0NBQWdDLENBQUM7SUFFbkRPLFlBQVksQ0FBQ3hCLElBQUksQ0FBQyxNQUFNO01BQ3BCLElBQUk1RCxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDVkEsRUFBRSxHQUFHLElBQUksQ0FBQ2tDLFdBQVcsQ0FBQzBFLEVBQUUsQ0FBQzVHLEVBQUUsQ0FBQyxDQUFDQSxFQUFFO01BQ25DO01BRUEsSUFBSSxDQUFDK0csUUFBUSxDQUFDL0csRUFBRSxFQUFFLFlBQVksRUFBRWtILFFBQVEsRUFBRUosU0FBUyxFQUFFckMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0lBRUYsT0FBT29DLFNBQVM7RUFDcEI7RUFHQUMsUUFBUUEsQ0FBQy9HLEVBQUUsRUFBRXFFLFVBQVUsRUFBRTZDLFFBQVEsRUFBRUosU0FBUyxFQUFFckMsVUFBVSxFQUFFQyxTQUFTLEVBQUU7SUFDakUxRSxFQUFFLEdBQUcwQixRQUFRLENBQUMxQixFQUFFLENBQUM7SUFDakIsSUFBSWtELEtBQUssQ0FBQ2xELEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLE1BQU02RCxFQUFFLEdBQUdqRSxxREFBTSxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDMkMsTUFBTSxDQUFDMEIsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUM1QkMsS0FBSyxFQUFFLE9BQU87TUFDZEMsVUFBVSxFQUFFQSxVQUFVO01BQ3RCQyxRQUFRLEVBQUVULEVBQUU7TUFDWlUsSUFBSSxFQUFFO1FBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1FBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1FBQzdCaEMsRUFBRSxFQUFFQSxFQUFFO1FBQ05tSCxTQUFTLEVBQUVEO01BQ2Y7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU1FLFNBQVMsR0FBR3BILEVBQUUsS0FBSyxJQUFJLElBQUlBLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsTUFBTTtJQUU5RCxJQUFJLENBQUN3QyxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFFaUIsSUFBSSxJQUFLO01BQy9CZ0MsU0FBUyxDQUFDL0IsTUFBTSxDQUFDRCxJQUFJLENBQUNFLElBQUksQ0FBQztNQUMzQixJQUFJMkIsS0FBSyxHQUFHRyxTQUFTLENBQUNPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLGFBQWFGLFNBQVMsd0JBQXdCLElBQUksQ0FBQ3pFLE9BQU8sRUFBRSxDQUFDLENBQUNtQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDQSxJQUFJLENBQUMsVUFBVSxFQUFFOUUsRUFBRSxDQUFDO01BQ3JKLElBQUkyRyxLQUFLLENBQUM5RSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM4RSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNmLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUMxRGUsS0FBSyxDQUFDWSxJQUFJLENBQUMsWUFBWSxFQUFFLDRCQUE0QixDQUFDO01BQzFEO01BRUE3SCw2Q0FBRyxDQUFDdUYsT0FBTyxDQUFDNkIsU0FBUyxDQUFDO01BQ3RCckMsVUFBVSxJQUFJQSxVQUFVLENBQUNLLElBQUksQ0FBQztJQUNsQyxDQUFDLEVBQUdJLEdBQUcsSUFBSztNQUNSUixTQUFTLElBQUlBLFNBQVMsQ0FBQ1EsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQztFQUNOO0VBRUFzQyxHQUFHQSxDQUFBLEVBQUc7SUFDRixPQUFPLElBQUkxRCxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEMsTUFBTTJDLEtBQUssR0FBRzlCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQzhCLFVBQVUsQ0FBQyxNQUFNO1FBQ25ELElBQUksQ0FBQ3hCLGVBQWUsQ0FBQ3NCLEtBQUssQ0FBQztRQUMzQjVDLE9BQU8sQ0FBQyxDQUFDO01BQ2IsQ0FBQyxFQUFFQyxNQUFNLENBQUMsQ0FBQztJQUNmLENBQUMsQ0FBQztFQUNOO0VBRUF5RCxJQUFJQSxDQUFDekgsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ1ZBLEVBQUUsR0FBRzBCLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztJQUNqQixJQUFJa0QsS0FBSyxDQUFDbEQsRUFBRSxDQUFDLEVBQUU7TUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYO0lBQ0EsT0FBTyxJQUFJLENBQUMyRCxXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtNQUNqQyxJQUFJOEQsU0FBUztNQUNiLElBQUkxSCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDVDBILFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQ3pFLElBQUksQ0FBQ2pELEVBQUUsQ0FBQyxDQUFDO01BQy9CLENBQUMsTUFBTTtRQUNIMEgsU0FBUyxHQUFHLElBQUksQ0FBQ3hGLFdBQVc7TUFDaEM7TUFDQSxJQUFJeUYsTUFBTSxHQUFHLEVBQUU7TUFDZkQsU0FBUyxDQUFDRSxPQUFPLENBQUV6RSxJQUFJLElBQUs7UUFDeEIsTUFBTVUsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO1FBQ25CK0gsTUFBTSxDQUFDcEUsSUFBSSxDQUFDLElBQUlPLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztVQUN6QyxJQUFJLENBQUM2RCxVQUFVLENBQUMxRSxJQUFJLENBQUMsQ0FBQ1MsSUFBSSxDQUFFNEMsS0FBSyxJQUFLO1lBQ2xDLElBQUksQ0FBQ2pFLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7Y0FDNUJDLEtBQUssRUFBRSxPQUFPO2NBQ2RDLFVBQVUsRUFBRSxNQUFNO2NBQ2xCQyxRQUFRLEVBQUVULEVBQUU7Y0FDWlUsSUFBSSxFQUFFO2dCQUNGeEMsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVTtnQkFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7Z0JBQzdCOEMsSUFBSSxFQUFFM0IsSUFBSTtnQkFDVnFELEtBQUssRUFBRUE7Y0FDWDtZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDaEUsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBRXFCLEdBQUcsSUFBSztjQUM5QixJQUFJSixJQUFJLEdBQUcsT0FBT0ksR0FBRyxDQUFDSixJQUFJLENBQUNlLFFBQVEsS0FBSyxRQUFRLEdBQUczQixJQUFJLENBQUM0RCxLQUFLLENBQUM1QyxHQUFHLENBQUNKLElBQUksQ0FBQ2UsUUFBUSxDQUFDLEdBQUdYLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZSxRQUFRO2NBQ3BHWCxHQUFHLENBQUNKLElBQUksQ0FBQ2UsUUFBUSxHQUFHLElBQUksQ0FBQ2tDLGVBQWUsQ0FBQ2pELElBQUksQ0FBQztjQUM5Q2YsT0FBTyxDQUFDbUIsR0FBRyxDQUFDO1lBQ2hCLENBQUMsRUFBRWxCLE1BQU0sQ0FBQztVQUNkLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1AsQ0FBQyxDQUFDO01BRUYsT0FBT0YsT0FBTyxDQUFDa0UsR0FBRyxDQUFDTCxNQUFNLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0VBQ047RUFFQU0sTUFBTUEsQ0FBQzlGLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU0sRUFBRTtJQUN6QixNQUFNMEIsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sSUFBSSxDQUFDK0QsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDakMsT0FBTyxJQUFJRSxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDcEMsSUFBSSxDQUFDNkQsVUFBVSxDQUFDMUYsTUFBTSxDQUFDLENBQUN5QixJQUFJLENBQUU0QyxLQUFLLElBQUs7VUFDcEMsSUFBSSxDQUFDakUsTUFBTSxDQUFDMEIsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztZQUM1QkMsS0FBSyxFQUFFLE9BQU87WUFDZEMsVUFBVSxFQUFFLFFBQVE7WUFDcEJDLFFBQVEsRUFBRVQsRUFBRTtZQUNaVSxJQUFJLEVBQUU7Y0FDRnhDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7Y0FDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7Y0FDN0I4QyxJQUFJLEVBQUUzQyxNQUFNO2NBQ1pxRSxLQUFLLEVBQUVBO1lBQ1g7VUFDSixDQUFDLENBQUMsQ0FBQztVQUVILElBQUksQ0FBQ2hFLFlBQVksQ0FBQ3FCLEVBQUUsQ0FBQyxHQUFHLENBQUVxQixHQUFHLElBQUs7WUFDOUIsSUFBSUosSUFBSSxHQUFHLE9BQU9JLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZSxRQUFRLEtBQUssUUFBUSxHQUFHM0IsSUFBSSxDQUFDNEQsS0FBSyxDQUFDNUMsR0FBRyxDQUFDSixJQUFJLENBQUNlLFFBQVEsQ0FBQyxHQUFHWCxHQUFHLENBQUNKLElBQUksQ0FBQ2UsUUFBUTtZQUNwR1gsR0FBRyxDQUFDSixJQUFJLENBQUNlLFFBQVEsR0FBRyxJQUFJLENBQUNrQyxlQUFlLENBQUNqRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakRmLE9BQU8sQ0FBQ21CLEdBQUcsQ0FBQztVQUNoQixDQUFDLEVBQUVsQixNQUFNLENBQUM7UUFDZCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBa0UsTUFBTUEsQ0FBQ2xJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNaQSxFQUFFLEdBQUcwQixRQUFRLENBQUMxQixFQUFFLENBQUM7SUFDakIsSUFBSWtELEtBQUssQ0FBQ2xELEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLElBQUlBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRUEsRUFBRSxHQUFHLElBQUksQ0FBQ21DLE1BQU0sRUFBRW5DLEVBQUU7SUFDbkMsTUFBTTZELEVBQUUsR0FBR2pFLHFEQUFNLENBQUMsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQytELFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQ2pDLE9BQU8sSUFBSUUsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQ3BDLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7VUFDNUJDLEtBQUssRUFBRSxPQUFPO1VBQ2RDLFVBQVUsRUFBRSxRQUFRO1VBQ3BCQyxRQUFRLEVBQUVULEVBQUU7VUFDWlUsSUFBSSxFQUFFO1lBQ0Z4QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1lBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1lBQzdCaEMsRUFBRSxFQUFFQTtVQUNSO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUN3QyxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFDRSxPQUFPLEVBQUVDLE1BQU0sQ0FBQztNQUM3QyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBTCxXQUFXQSxDQUFBLEVBQUc7SUFDVixPQUFPLElBQUlHLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUNwQyxJQUFJLElBQUksQ0FBQzVCLGFBQWEsRUFBRTtRQUNwQjJCLE9BQU8sQ0FBQyxDQUFDO01BQ2IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMxQixxQkFBcUIsRUFBRTtRQUNwQyxJQUFJLENBQUNBLHFCQUFxQixHQUFHLElBQUk7UUFDakMsSUFBSSxDQUFDRyxZQUFZLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDbEQsQ0FBQyxFQUFFLE1BQU0sQ0FDVCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMyRixnQkFBZ0IsQ0FBQyxDQUFDLENBQUN2RSxJQUFJLENBQUMsTUFBTTtVQUMvQkcsT0FBTyxDQUFDLElBQUksQ0FBQ3FFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUM7TUFDTixDQUFDLE1BQU07UUFDSCxNQUFNLENBQUNDLGNBQWMsRUFBRUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDOUYsWUFBWSxDQUFDLHFCQUFxQixDQUFDO1FBQ2hGLElBQUksQ0FBQ0EsWUFBWSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FDdkMsTUFBTTtVQUNGNkYsY0FBYyxDQUFDLENBQUM7VUFDaEJ0RSxPQUFPLENBQUMsQ0FBQztRQUNiLENBQUMsRUFDRCxNQUFNO1VBQ0Z1RSxhQUFhLENBQUMsQ0FBQztVQUNmdEUsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDLENBQ0o7TUFDTDtJQUNKLENBQUMsQ0FBQztFQUNOO0VBRUF1RSxLQUFLQSxDQUFBLEVBQUc7SUFDSixJQUFJLElBQUksQ0FBQ2hHLE1BQU0sRUFBRTtNQUNiLElBQUksQ0FBQ0QsZUFBZSxHQUFHLEtBQUs7TUFDNUIsSUFBSSxDQUFDQyxNQUFNLENBQUNpRyxPQUFPLEdBQUcsTUFBTSxDQUM1QixDQUFDO01BQ0QsSUFBSSxDQUFDakcsTUFBTSxDQUFDZ0csS0FBSyxDQUFDLENBQUM7TUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCO0VBQ0o7RUFFQUUsS0FBS0EsQ0FBQSxFQUFHO0lBQ0osSUFBSSxDQUFDdkcsV0FBVyxHQUFHLEVBQUU7SUFDckIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sSUFBSTtFQUNmO0VBRUEwRixVQUFVQSxDQUFDMUUsSUFBSSxFQUFFO0lBQ2IsSUFBSXVGLFFBQVEsR0FBRyxFQUFFO0lBQ2pCLElBQUlsQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxNQUFNLENBQUM5RixHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJOEMsTUFBTSxDQUFDa0YsT0FBTyxDQUFDeEYsSUFBSSxDQUFDLEVBQUU7TUFDN0MsSUFBSXhDLEtBQUssWUFBWXdGLElBQUksRUFBRTtRQUN2QnVDLFFBQVEsQ0FBQ25GLElBQUksQ0FBQyxJQUFJTyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7VUFDM0MsQ0FBQyxDQUFDdEQsR0FBRyxFQUFFQyxLQUFLLEtBQUs7WUFDYixJQUFJaUksTUFBTSxHQUFHLElBQUlDLFVBQVUsQ0FBQyxDQUFDO1lBQzdCRCxNQUFNLENBQUNFLE1BQU0sR0FBR0MsQ0FBQyxJQUFJO2NBQ2pCLE1BQU1sRixFQUFFLEdBQUdqRSxxREFBTSxDQUFDLENBQUM7Y0FDbkIsSUFBSSxDQUFDNEMsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQ0UsT0FBTyxFQUFFQyxNQUFNLENBQUM7Y0FFekMsSUFBSWdGLE1BQU0sR0FBR0QsQ0FBQyxDQUFDdEksTUFBTSxDQUFDdUksTUFBTTtjQUM1QixJQUFJQyxnQkFBZ0IsR0FBR3ZILFFBQVEsQ0FBQ3dILElBQUksQ0FBQ0MsSUFBSSxDQUFDSCxNQUFNLENBQUNuSCxNQUFNLEdBQUdoQyxlQUFlLENBQUMsQ0FBQztjQUMzRTJHLEtBQUssQ0FBQzlGLEdBQUcsQ0FBQyxHQUFHO2dCQUNUbUQsRUFBRSxFQUFFQSxFQUFFO2dCQUNOdUYsU0FBUyxFQUFFekksS0FBSyxDQUFDcUYsSUFBSTtnQkFDckJxRCxVQUFVLEVBQUUzSSxHQUFHO2dCQUNmNEksY0FBYyxFQUFFM0ksS0FBSyxDQUFDNEk7Y0FDMUIsQ0FBQztjQUNELEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHUCxnQkFBZ0IsRUFBRSxFQUFFTyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQ2pILE1BQU0sQ0FBQzBCLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7a0JBQzVCQyxLQUFLLEVBQUUsT0FBTztrQkFDZEMsVUFBVSxFQUFFLFFBQVE7a0JBQ3BCQyxRQUFRLEVBQUVULEVBQUU7a0JBQ1pVLElBQUksRUFBRTtvQkFDRmtGLEtBQUssRUFBRVQsTUFBTSxDQUFDVSxLQUFLLENBQUM3SixlQUFlLEdBQUcySixDQUFDLEVBQUUzSixlQUFlLElBQUkySixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ25FMUcsR0FBRyxFQUFFMEcsQ0FBQztvQkFDTlAsZ0JBQWdCLEVBQUVBLGdCQUFnQjtvQkFDbENHLFNBQVMsRUFBRXpJLEtBQUssQ0FBQ3FGLElBQUk7b0JBQ3JCcUQsVUFBVSxFQUFFM0ksR0FBRztvQkFDZjRJLGNBQWMsRUFBRTNJLEtBQUssQ0FBQzRJLElBQUk7b0JBQzFCSSxZQUFZLEVBQUVoSixLQUFLLENBQUNzRixJQUFJO29CQUN4QmxFLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7b0JBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQTtrQkFDdEI7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Y0FDUDtZQUNKLENBQUM7WUFDRDRHLE1BQU0sQ0FBQ2dCLE9BQU8sR0FBRyxNQUFNO2NBQ25CNUYsTUFBTSxDQUFDLENBQUM7WUFDWixDQUFDO1lBQ0Q0RSxNQUFNLENBQUNpQixrQkFBa0IsQ0FBQ2xKLEtBQUssQ0FBQztVQUNwQyxDQUFDLEVBQUVELEdBQUcsRUFBRUMsS0FBSyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO01BQ1A7SUFDSjtJQUVBLE9BQU9tRCxPQUFPLENBQUNrRSxHQUFHLENBQUNVLFFBQVEsQ0FBQyxDQUFDOUUsSUFBSSxDQUFDLE1BQU07TUFDcEMsT0FBTzRDLEtBQUs7SUFDaEIsQ0FBQyxDQUFDO0VBQ047RUFFQXNELFVBQVVBLENBQUNmLENBQUMsRUFBRTtJQUNWLElBQUlqRSxJQUFJLEdBQUdaLElBQUksQ0FBQzRELEtBQUssQ0FBQ2lCLENBQUMsQ0FBQ2pFLElBQUksQ0FBQztJQUM3QixJQUFJQSxJQUFJLENBQUNpRixRQUFRLEVBQUU7TUFDZixJQUFJLElBQUksQ0FBQ3ZILFlBQVksQ0FBQ3RCLGNBQWMsQ0FBQzRELElBQUksQ0FBQ1IsUUFBUSxDQUFDLEVBQUU7UUFDakQsSUFBSSxDQUFDOUIsWUFBWSxDQUFDc0MsSUFBSSxDQUFDUixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQ2tGLGlCQUFpQixDQUFDbEYsSUFBSSxDQUFDUixRQUFRLENBQUM7TUFDekM7TUFDQSxJQUFJUSxJQUFJLENBQUNtRixHQUFHLElBQUluRixJQUFJLENBQUNvRixNQUFNLEVBQUU7UUFDekJ2Syx1REFBTyxDQUFDLGNBQWMsRUFBRW1GLElBQUksQ0FBQ29GLE1BQU0sSUFBSSxFQUFFLEVBQUVwRixJQUFJLENBQUNtRixHQUFHLElBQUksRUFBRSxDQUFDO01BQzlEO01BRUEsSUFBSW5GLElBQUksQ0FBQ21CLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxDQUFDekQsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzQyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDa0YsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFDN0MsSUFBSSxDQUFDMUgsZUFBZSxHQUFHLEtBQUs7UUFDNUIsSUFBSSxDQUFDQyxNQUFNLENBQUNnRyxLQUFLLENBQUMsQ0FBQztNQUN2QjtJQUNKLENBQUMsTUFBTTtNQUVILElBQUl6RCxJQUFJLENBQUNtRixHQUFHLElBQUluRixJQUFJLENBQUNvRixNQUFNLEVBQUU7UUFDekJ2Syx1REFBTyxDQUFDLFNBQVMsRUFBRW1GLElBQUksQ0FBQ29GLE1BQU0sSUFBSSxFQUFFLEVBQUVwRixJQUFJLENBQUNtRixHQUFHLElBQUksRUFBRSxDQUFDO01BQ3pEO01BRUEsSUFBSW5GLElBQUksQ0FBQ21CLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxDQUFDN0QsYUFBYSxHQUFHLElBQUk7UUFDekIsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxLQUFLO1FBQ2xDLElBQUksQ0FBQ0csWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNzQyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDa0YsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7TUFDakQsQ0FBQyxNQUFNLElBQUlsRixJQUFJLENBQUNtQixJQUFJLEtBQUssTUFBTSxFQUFFO1FBQzdCLE1BQU1rRSxRQUFRLEdBQUdqRyxJQUFJLENBQUM0RCxLQUFLLENBQUNoRCxJQUFJLENBQUNQLElBQUksQ0FBQ08sSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQzVDLFdBQVcsR0FBRyxFQUFFO1FBQ3JCNEMsSUFBSSxDQUFDUCxJQUFJLENBQUNPLElBQUksR0FBRyxJQUFJLENBQUNpRCxlQUFlLENBQUNvQyxRQUFRLENBQUM7TUFFbkQsQ0FBQyxNQUFNLElBQUlyRixJQUFJLENBQUNtQixJQUFJLEtBQUssV0FBVyxJQUFJbkIsSUFBSSxDQUFDbUIsSUFBSSxLQUFLLFdBQVcsRUFBRTtRQUMvRCxNQUFNa0UsUUFBUSxHQUFHakcsSUFBSSxDQUFDNEQsS0FBSyxDQUFDaEQsSUFBSSxDQUFDUCxJQUFJLENBQUNPLElBQUksQ0FBQztRQUUzQyxJQUFJc0YsR0FBRyxHQUFHLElBQUksQ0FBQ3JDLGVBQWUsQ0FBQ29DLFFBQVEsQ0FBQztRQUN4QyxJQUFJRSxFQUFFO1FBRU4sSUFBSXZGLElBQUksQ0FBQ21CLElBQUksS0FBSyxXQUFXLEVBQUU7VUFDM0JvRSxFQUFFLEdBQUcsSUFBSSxDQUFDM0gsU0FBUztRQUN2QixDQUFDLE1BQU07VUFDSDJILEVBQUUsR0FBRyxJQUFJLENBQUM1SCxTQUFTO1FBQ3ZCO1FBRUE0SCxFQUFFLENBQUNELEdBQUcsQ0FBQztRQUNQdEYsSUFBSSxDQUFDUCxJQUFJLENBQUNPLElBQUksR0FBR3NGLEdBQUc7TUFFeEI7TUFFQSxJQUFJdkUsUUFBUSxHQUFHZixJQUFJLENBQUNBLElBQUksRUFBRWUsUUFBUTtNQUNsQyxJQUFJQSxRQUFRLEVBQUU7UUFDVmYsSUFBSSxDQUFDQSxJQUFJLENBQUNlLFFBQVEsR0FBRzNCLElBQUksQ0FBQzRELEtBQUssQ0FBQ2hELElBQUksQ0FBQ0EsSUFBSSxDQUFDZSxRQUFRLENBQUM7TUFDdkQ7TUFFQSxJQUFJLElBQUksQ0FBQ3JELFlBQVksQ0FBQ3RCLGNBQWMsQ0FBQzRELElBQUksQ0FBQ1IsUUFBUSxDQUFDLEVBQUU7UUFDakQsSUFBSSxDQUFDOUIsWUFBWSxDQUFDc0MsSUFBSSxDQUFDUixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQ2tGLGlCQUFpQixDQUFDbEYsSUFBSSxDQUFDUixRQUFRLENBQUM7TUFDekM7SUFDSjtFQUNKO0VBRUFnRyxjQUFjQSxDQUFBLEVBQUc7SUFDYixPQUFPLElBQUl4RyxPQUFPLENBQUNDLE9BQU8sSUFBSTtNQUMxQixJQUFJTixNQUFNLENBQUM4RyxJQUFJLENBQUMsSUFBSSxDQUFDL0gsWUFBWSxDQUFDLENBQUNYLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0MsT0FBT2tDLE9BQU8sQ0FBQyxDQUFDO01BQ3BCO01BRUEsSUFBSSxDQUFDOUIsaUJBQWlCLENBQUNzQixJQUFJLENBQUNRLE9BQU8sQ0FBQztJQUN4QyxDQUFDLENBQUM7RUFDTjtFQUVBaUcsaUJBQWlCQSxDQUFDMUYsUUFBUSxFQUFFO0lBQ3hCLE9BQU8sSUFBSSxDQUFDOUIsWUFBWSxDQUFDOEIsUUFBUSxDQUFDO0lBQ2xDLElBQUliLE1BQU0sQ0FBQzhHLElBQUksQ0FBQyxJQUFJLENBQUMvSCxZQUFZLENBQUMsQ0FBQ1gsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUM3QyxJQUFJLENBQUNJLGlCQUFpQixDQUFDMkYsT0FBTyxDQUFDNEMsQ0FBQyxJQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3hDLElBQUksQ0FBQ3ZJLGlCQUFpQixHQUFHLEVBQUU7SUFDL0I7RUFFSjtFQUVBa0csZ0JBQWdCQSxDQUFBLEVBQUc7SUFDZixPQUFPLElBQUlyRSxPQUFPLENBQUVDLE9BQU8sSUFBSztNQUU1QixNQUFNMEcsZ0JBQWdCLEdBQUcsR0FBRyxJQUFJLENBQUMxSSxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMySSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDQSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7TUFDOUYsSUFBSUMsTUFBTSxDQUFDQyxRQUFRLENBQUNDLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDdkMsSUFBSSxDQUFDdEksTUFBTSxHQUFHLElBQUl1SSxTQUFTLENBQUMsU0FBU0gsTUFBTSxDQUFDQyxRQUFRLENBQUNHLElBQUksaUJBQWlCTixnQkFBZ0IsRUFBRSxDQUFDO01BQ2pHLENBQUMsTUFBTTtRQUNILElBQUksQ0FBQ2xJLE1BQU0sR0FBRyxJQUFJdUksU0FBUyxDQUFDLFFBQVFILE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRyxJQUFJLGlCQUFpQk4sZ0JBQWdCLEVBQUUsQ0FBQztNQUNoRztNQUdBLElBQUksQ0FBQ2xJLE1BQU0sQ0FBQ3lJLFNBQVMsR0FBRyxJQUFJLENBQUNsQixVQUFVLENBQUMvSSxJQUFJLENBQUMsSUFBSSxDQUFDO01BRWxELElBQUksQ0FBQ3dCLE1BQU0sQ0FBQ2lHLE9BQU8sR0FBSU8sQ0FBQyxJQUFLO1FBQ3pCa0MsT0FBTyxDQUFDQyxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUNuSixVQUFVLEtBQUssSUFBSSxDQUFDMkksUUFBUSw4QkFBOEIsQ0FBQztRQUM1RixJQUFJLENBQUN0SSxhQUFhLEdBQUcsS0FBSztRQUMxQixLQUFLLE1BQU0sQ0FBQytJLElBQUksRUFBRXhLLEtBQUssQ0FBQyxJQUFJOEMsTUFBTSxDQUFDa0YsT0FBTyxDQUFDLElBQUksQ0FBQ25HLFlBQVksQ0FBQyxFQUFFO1VBQzNEN0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDb0ksQ0FBQyxDQUFDO1FBQ2Y7UUFDQSxJQUFJLENBQUN2RyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXRCNEksVUFBVSxDQUFDLE1BQU07VUFDYixJQUFJLElBQUksQ0FBQzlJLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUM2RixnQkFBZ0IsQ0FBQyxDQUFDLENBQUN2RSxJQUFJLENBQUMsTUFBTSxDQUNuQyxDQUFDLENBQUM7VUFDTjtRQUNKLENBQUMsRUFBRSxJQUFJLENBQUM7TUFDWixDQUFDO01BRUQsSUFBSSxDQUFDckIsTUFBTSxDQUFDcUgsT0FBTyxHQUFJeUIsR0FBRyxJQUFLO1FBQzNCSixPQUFPLENBQUNDLEtBQUssQ0FBQyxtQ0FBbUNHLEdBQUcsaUJBQWlCLENBQUM7UUFDdEUsSUFBSSxJQUFJLENBQUNqSixhQUFhLEVBQUU7VUFDcEIsSUFBSTtZQUNBLElBQUksQ0FBQ0csTUFBTSxDQUFDZ0csS0FBSyxDQUFDLENBQUM7VUFDdkIsQ0FBQyxDQUFDLE9BQU9RLENBQUMsRUFBRSxDQUVaO1FBQ0o7TUFDSixDQUFDO01BR0QsSUFBSSxDQUFDeEcsTUFBTSxDQUFDK0ksTUFBTSxHQUFHLE1BQU07UUFDdkJ2SCxPQUFPLENBQUMsQ0FBQztNQUNiLENBQUM7SUFDTCxDQUFDLENBQUM7RUFFTjtFQUVBcUUsZ0JBQWdCQSxDQUFBLEVBQUc7SUFDZixNQUFNdkUsRUFBRSxHQUFHakUscURBQU0sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sSUFBSWtFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUNwQyxJQUFJLENBQUN6QixNQUFNLENBQUMwQixJQUFJLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO1FBQzVCQyxLQUFLLEVBQUUsT0FBTztRQUNkQyxVQUFVLEVBQUUsU0FBUztRQUNyQkMsUUFBUSxFQUFFVCxFQUFFO1FBQ1pVLElBQUksRUFBRTtVQUNGeEMsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVTtVQUMzQkMsV0FBVyxFQUFFLElBQUksQ0FBQ0E7UUFDdEI7TUFDSixDQUFDLENBQUMsQ0FBQztNQUVILElBQUksQ0FBQ1EsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQ0UsT0FBTyxFQUFFQyxNQUFNLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0VBQ047RUFFQStELGVBQWVBLENBQUM3QyxHQUFHLEVBQUU7SUFDakIsSUFBSXFHLE9BQU8sR0FBRyxFQUFFO0lBQ2hCLEtBQUssSUFBSUMsU0FBUyxJQUFJdEcsR0FBRyxFQUFFO01BQ3ZCLE1BQU1sRixFQUFFLEdBQUd3TCxTQUFTLENBQUN4TCxFQUFFO01BQ3ZCLE1BQU1vSyxHQUFHLEdBQUcsSUFBSSxDQUFDbkgsSUFBSSxDQUFDakQsRUFBRSxDQUFDO01BQ3pCLEtBQUssTUFBTSxDQUFDeUwsQ0FBQyxFQUFFQyxDQUFDLENBQUMsSUFBSWpJLE1BQU0sQ0FBQ2tGLE9BQU8sQ0FBQzZDLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLEVBQUU7UUFDbkQsSUFBSUQsQ0FBQyxJQUFJLE9BQU9BLENBQUMsS0FBSyxRQUFRLElBQUlBLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1VBQ3JEdEIsR0FBRyxDQUFDcUIsQ0FBQyxDQUFDLEdBQUcsSUFBSTNMLFFBQVEsQ0FBQzRMLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUMsTUFBTTtVQUNIdEIsR0FBRyxDQUFDcUIsQ0FBQyxDQUFDLEdBQUdDLENBQUM7UUFDZDtNQUNKO01BRUFILE9BQU8sQ0FBQ2hJLElBQUksQ0FBQzZHLEdBQUcsQ0FBQztJQUNyQjtJQUVBLElBQUksSUFBSSxDQUFDbEksV0FBVyxDQUFDTCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQy9CLElBQUksQ0FBQ00sTUFBTSxHQUFHLElBQUksQ0FBQ0QsV0FBVyxDQUFDMEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsTUFBTTtNQUNILElBQUksQ0FBQ3pFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEI7SUFFQSxPQUFPb0osT0FBTztFQUVsQjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19zb2NrZXQuanM/YWRiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcyc7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuY29uc3QgTUFYX0ZJTEVfVVBMT0FEID0gMjUwMDA7XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gICAgY29uc3RydWN0b3IocGssIG1vZGVsKSB7XG4gICAgICAgIHRoaXMucGsgPSBwaztcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTREMgTW9kZWwgTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgICAqL1xuICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAgICovXG4gICAgbG9hZChjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIubmV3TW9kZWwodGhpcy5fbW9kZWwsIHtwazogdGhpcy5wa30pO1xuICAgIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5wayAmJiB2YWx1ZS5wayAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBuZXcgTnVtYmVyKHZhbHVlLnBrKTtcbiAgICAgICAgICAgIG5ld1ZhbC5sb2FkID0gdmFsdWUubG9hZC5iaW5kKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3BrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG5cbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge2pzb259XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICAgICAgdGhpcy5tb2RlbF9xdWVyeSA9IG1vZGVsX3F1ZXJ5O1xuICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgICAgIHRoaXMub25fdXBkYXRlID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICsraWR4O1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLnZhbHVlc19saXN0W2lkeF0sIGRvbmU6IGZhbHNlfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYnlQayhwaykge1xuICAgICAgICBpZiAocGsgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdC5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwazogcGt9O1xuXG4gICAgfVxuXG4gICAgZmlsdGVyKG1vZGVsX3F1ZXJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsLCB0ZW1wbGF0ZV9jb250ZXh0ID0ge30pIHtcbiAgICAgICAgbGV0ICRkaXZfbGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsaXN0X3ZpZXcnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfY29udGV4dFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgICAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1dO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2xpc3Q7XG4gICAgfVxuXG4gICAgZGV0YWlsVmlldyhwayA9IG51bGwsIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsLCB0ZW1wbGF0ZV9jb250ZXh0ID0ge30pIHtcbiAgICAgICAgcGsgPSBwayA/PyAtMTtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0ICRkaXZfbGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdFswXS5wa1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZXRhaWxfdmlldycsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgcGssXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX2NvbnRleHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgICB9XG5cbiAgICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW1vZGVsX3BrJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JtX2l0ZW0pLnZhbChpbnN0YW5jZVtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBpbnN0YW5jZXMgPSBbXTtcblxuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHBrID0gJGZvcm0uZGF0YSgnbW9kZWxfcGsnKTtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHNlbGYuYnlQayhwayk7XG4gICAgICAgICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZm9ybV9pdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1faXRlbS50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBwYXJzZV9oaWRkZW5faW5wdXRzKCQoZm9ybV9pdGVtKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9ICQoZm9ybV9pdGVtKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcblxuICAgIH1cblxuICAgIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShudWxsLCAnY3JlYXRlX2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgZWRpdEZvcm0ocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0LmF0KHBrKS5waztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShwaywgJ25hbWVkX2Zvcm0nLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuXG4gICAgX2dldEZvcm0ocGssIGV2ZW50X3R5cGUsIGZvcm1OYW1lLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRfdHlwZSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgcGs6IHBrLFxuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/ICdjcmVhdGUnIDogJ2VkaXQnO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKS5hZGRDbGFzcyhgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7dGhpcy5mb3JtX2lkfWApLmRhdGEoJ21vZGVsJywgdGhpcykuZGF0YSgnbW9kZWxfcGsnLCBwayk7XG4gICAgICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKCdzZGNfc3VibWl0JykpIHtcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicpLmFwcGVuZCh0aGlzLmNyZWF0ZUZvcm0oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlKHBrID0gLTEpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtX2xpc3Q7XG4gICAgICAgICAgICBpZiAocGsgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IFt0aGlzLmJ5UGsocGspXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZSh2YWx1ZXMgPSB0aGlzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRmlsZXModmFsdWVzKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwayA9PT0gLTEpIHBrID0gdGhpcy52YWx1ZXM/LnBrO1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc19jb25uZXRpbmdfcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvbHZlX29yaWdpbiwgcmVqZWN0X29yaWdpbl0gPSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF9vcmlnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbJ3NvY2tldCddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW4oKSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgICAgIGxldCB0b19zb2x2ZSA9IFtdO1xuICAgICAgICBsZXQgZmlsZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyX29mX2NodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogcmVzdWx0LnNsaWNlKE1BWF9GSUxFX1VQTE9BRCAqIGksIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfY2h1bmtzOiBudW1iZXJfb2ZfY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9vbk1lc3NhZ2UoZSkge1xuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5fcmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoJ19jb25uZWN0aW5nX3Byb2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KCdfY29ubmVjdGluZ19wcm9jZXNzJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnb25fdXBkYXRlJyB8fCBkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX2NyZWF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYiA9IHRoaXMub25fdXBkYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNiKG9iaik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZVxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbm9PcGVuUmVxdWVzdHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5fcmVxdWVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5wdXNoKHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfY2xvc2VPcGVuUmVxdWVzdChldmVudF9pZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZXZlbnRfaWRdO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5vcGVuX3JlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5mb3JFYWNoKHggPT4geCgpKTtcbiAgICAgICAgICAgIHRoaXMuX29uTm9PcGVuUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsX2lkZW50aWZpZXIgPSBgJHt0aGlzLm1vZGVsX25hbWV9YCArICh0aGlzLm1vZGVsX2lkID4gMCA/IGAvJHt0aGlzLm1vZGVsX2lkfWAgOiAnJyk7XG4gICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxfaWRlbnRpZmllcn1gKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU0RDIE1vZGVsICgke3RoaXMubW9kZWxfbmFtZX0sICR7dGhpcy5tb2RlbF9pZH0pIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbX2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3Blbl9yZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3QgPSB7fTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXV0b19yZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgICAgIGxldCB1cGRhdGVkID0gW107XG4gICAgICAgIGZvciAobGV0IGpzb25fZGF0YSBvZiByZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBrID0ganNvbl9kYXRhLnBrO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25fZGF0YS5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHZbJ19faXNfc2RjX21vZGVsX18nXSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBuZXcgU3ViTW9kZWwodlsncGsnXSwgdlsnbW9kZWwnXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZC5wdXNoKG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgICB9XG59Il0sIm5hbWVzIjpbImFwcCIsInRyaWdnZXIiLCJ1dWlkdjQiLCJNQVhfRklMRV9VUExPQUQiLCJTdWJNb2RlbCIsImNvbnN0cnVjdG9yIiwicGsiLCJtb2RlbCIsIl9tb2RlbCIsImxvYWQiLCJjb250cm9sbGVyIiwiVHlwZUVycm9yIiwibmV3TW9kZWwiLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwiTnVtYmVyIiwiYmluZCIsInNldCIsIm9sZFZhbCIsImhhc093blByb3BlcnR5IiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwiX29uTm9PcGVuUmVxdWVzdHMiLCJ2YWx1ZXNfbGlzdCIsInZhbHVlcyIsIl9pc19jb25uZWN0ZWQiLCJfaXNfY29ubmV0aW5nX3Byb2Nlc3MiLCJfYXV0b19yZWNvbm5lY3QiLCJzb2NrZXQiLCJvcGVuX3JlcXVlc3QiLCJvbl91cGRhdGUiLCJvbl9jcmVhdGUiLCJmb3JtX2lkIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpZHgiLCJuZXh0IiwiZG9uZSIsImJ5UGsiLCJpc05hTiIsImVsZW0iLCJmaW5kIiwiZWxtIiwiUHJveHkiLCJwdXNoIiwiZmlsdGVyIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNDb25uZWN0ZWQiLCJ0aGVuIiwiaWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJldmVudF90eXBlIiwiZXZlbnRfaWQiLCJhcmdzIiwibGlzdFZpZXciLCJjYl9yZXNvbHZlIiwiY2JfcmVqZWN0IiwidGVtcGxhdGVfY29udGV4dCIsIiRkaXZfbGlzdCIsIiQiLCJkYXRhIiwiYXBwZW5kIiwiaHRtbCIsInJlZnJlc2giLCJyZXMiLCJkZXRhaWxWaWV3IiwibG9hZF9wcm9taXNlIiwic3luY0Zvcm1Ub01vZGVsIiwiJGZvcm1zIiwic3luY0Zvcm0iLCJzeW5jTW9kZWxUb0Zvcm0iLCJoYXNDbGFzcyIsInNlbGYiLCJlYWNoIiwiaGFzQXR0cmlidXRlIiwiaW5zdGFuY2UiLCJmb3JtX2l0ZW0iLCJlbGVtZW50cyIsIm5hbWUiLCJ0eXBlIiwiY2hlY2tlZCIsIkZpbGUiLCJjb250YWluZXIiLCJEYXRhVHJhbnNmZXIiLCJpdGVtcyIsImFkZCIsImZpbGVzIiwidmFsIiwiaW5zdGFuY2VzIiwiJGZvcm0iLCJhdCIsImNyZWF0ZUZvcm0iLCIkZGl2X2Zvcm0iLCJfZ2V0Rm9ybSIsImVkaXRGb3JtIiwibmFtZWRGb3JtIiwiZm9ybU5hbWUiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCJjbG9zZXN0IiwiYWRkQ2xhc3MiLCJhdHRyIiwibmV3Iiwic2F2ZSIsImVsZW1fbGlzdCIsInBfbGlzdCIsImZvckVhY2giLCJfcmVhZEZpbGVzIiwicGFyc2UiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJjcmVhdGUiLCJkZWxldGUiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVfb3JpZ2luIiwicmVqZWN0X29yaWdpbiIsImNsb3NlIiwib25jbG9zZSIsImNsZWFuIiwidG9fc29sdmUiLCJlbnRyaWVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwic2xpY2UiLCJjb250ZW50X3R5cGUiLCJvbmVycm9yIiwicmVhZEFzQmluYXJ5U3RyaW5nIiwiX29uTWVzc2FnZSIsImlzX2Vycm9yIiwiX2Nsb3NlT3BlblJlcXVlc3QiLCJtc2ciLCJoZWFkZXIiLCJqc29uX3JlcyIsIm9iaiIsImNiIiwibm9PcGVuUmVxdWVzdHMiLCJrZXlzIiwieCIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiY29uc29sZSIsImVycm9yIiwiX2tleSIsInNldFRpbWVvdXQiLCJlcnIiLCJvbm9wZW4iLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
|
|
98
98
|
|
|
99
99
|
/***/ }),
|
|
100
100
|
|
|
@@ -114,7 +114,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
114
114
|
\*******************************************/
|
|
115
115
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
116
116
|
|
|
117
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /([^\\s,]+)/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $('body');\n }\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, '');\n var result = fnstr.slice(fnstr.indexOf('(') + 1, fnstr.indexOf(')')).match(arg_names_reg);\n if (!result) {\n return [];\n }\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, number => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, letter => `${letter[1].toUpperCase()}`);\n return str;\n}\nfunction tagNameToReadableName(str) {\n str = str.replace(/-./g, letter => ` ${letter[1].toUpperCase()}`).replace(/^./g, letter => `${letter.toUpperCase()}`);\n return str;\n}\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(targetClass.prototype).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== '') {\n Object.getOwnPropertyNames(source.prototype).concat(Object.getOwnPropertySymbols(source.prototype)).forEach(prop => {\n if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {\n return;\n }\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(targetClass.prototype, prop, Object.getOwnPropertyDescriptor(source.prototype, prop));\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach(mixin => {\n let newMixin;\n Object.assign(this, newMixin = new mixin());\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n static get name() {\n return baseClass.name;\n }\n static className() {\n return this.name;\n }\n get mixins() {\n return this._mixins;\n }\n }\n }[baseClass.name];\n copyProps(base, baseClass);\n mixins.forEach(mixin => {\n copyProps(base, mixin);\n });\n return base;\n}\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url,\n //Server script to process data\n type: method || 'POST',\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }\n });\n}\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round(e.loaded / e.total * 100);\n var $progressContainer = $('.progress-container');\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n percentVal += '%';\n $progressContainer.find('.progress-bar').css({\n 'width': percentVal\n }).text(percentVal);\n }\n}\nfunction checkIfParamNumberBoolOrString(paramElement, controller = null) {\n if (typeof paramElement !== 'string') {\n return paramElement;\n }\n if (controller && typeof controller[paramElement] !== 'undefined') {\n if (typeof controller[paramElement] === 'function') {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (paramElement.match(isBoolReg)) {\n return paramElement === 'true';\n } else if (paramElement === 'undefined') {\n return undefined;\n } else if (paramElement.toLowerCase() === 'none') {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n return paramElement;\n}\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\nfunction clearErrorsInForm($form) {\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').remove();\n $form.find('.non-field-errors').remove();\n}\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $('<div>').append($resForm);\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').safeRemove();\n $form.find('.non-field-errors').safeRemove();\n let $file_container = $resForm.find('input[type=file]').parent();\n $form.find('input[type=file]').parent().each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n let hasNoError = $resForm.find('.non-field-errors').insertAfter($form.find('.hidden-form-fields')).length === 0;\n $resForm.find('.has-error').each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data('auto-id');\n let $errorField = $form.find('.form-group.' + className);\n $errorField.addClass('has-error');\n $errorField.find('.form-input-container').append($resErrorField.find('.alert-danger'));\n });\n return hasNoError;\n}\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQztFQUMxRixDQUFDLENBQUM7RUFFRixPQUFPa0MsVUFBVTtBQUNyQjtBQUVPLFNBQVNLLGNBQWNBLENBQUNDLFVBQVUsRUFBRVIsS0FBSyxFQUFFUyxXQUFXLEVBQUU7RUFDM0QsSUFBSUMsU0FBUyxHQUFHRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDO0VBQzVDLElBQUlaLEtBQUssR0FBR1UsU0FBUyxFQUFFO0lBQ25CRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNFLEVBQUUsQ0FBQ2IsS0FBSyxDQUFDLENBQUNjLE1BQU0sQ0FBQ0wsV0FBVyxDQUFDO0VBQ3ZELENBQUMsTUFBTTtJQUNIRCxVQUFVLENBQUNiLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDO0VBQ2xDO0VBQ0EsT0FBTyxJQUFJO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3V0aWxzLmpzP2QwZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIEhUTUwgYm9keS5cbiAqIEB0eXBlIHsqfGpRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBfJGJvZHk7XG5jb25zdCBhcmdfbmFtZXNfcmVnID0gLyhbXlxccyxdKykvZztcbmNvbnN0IGNvbW1lbmRfcmVnID0gLygoXFwvXFwvLiokKXwoXFwvXFwqW1xcc1xcU10qP1xcKlxcLykpL21nO1xuXG4vKipcbiAqIGdldEJvZHkgcmV0dXJucyB0aGUgJGJvZHkgalF1ZXJ5IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9IC0gYm9keSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgIGlmICghXyRib2R5KSB7XG4gICAgICAgIF8kYm9keSA9ICQoJ2JvZHknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXyRib2R5O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNcbiAqIEByZXR1cm5zIHtSZWdFeHBNYXRjaEFycmF5fCpbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtc05hbWVPZkZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgZm5zdHIgPSBmdW5jLnRvU3RyaW5nKCkucmVwbGFjZShjb21tZW5kX3JlZywgJycpO1xuICAgIHZhciByZXN1bHQgPSBmbnN0ci5zbGljZShmbnN0ci5pbmRleE9mKCcoJykgKyAxLCBmbnN0ci5pbmRleE9mKCcpJykpLm1hdGNoKGFyZ19uYW1lc19yZWcpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIHByb21pc2VEdW1teUZhY3RvcnkgZ2VuZXJhdGVzIGEgc2ltcGxlIHByb21pc2Ugd2hpY2ggcmV0dXJucyBpbnN0YW50bHkuXG4gKiBAcmV0dXJuIHtQcm9taXNlfSB3aW5kb3cudXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VEdW1teUZhY3RvcnkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvVGFnTmFtZShzdHIpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvW0EtWl0vZywgbGV0dGVyID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvWzAtOV0rL2csIG51bWJlciA9PiBgLSR7bnVtYmVyfWApO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlstXS9nLCBgYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9DYW1lbENhc2Uoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgJHtsZXR0ZXJbMV0udG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCAke2xldHRlclsxXS50b1VwcGVyQ2FzZSgpfWApLnJlcGxhY2UoL14uL2csIGxldHRlciA9PiBgJHtsZXR0ZXIudG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5jb25zdCBjb3B5UHJvcHMgPSAodGFyZ2V0Q2xhc3MsIHNvdXJjZUNsYXNzKSA9PiB7XG4gICAgbGV0IHNvdXJjZSA9IHNvdXJjZUNsYXNzO1xuICAgIGxldCBwcm9wTmFtZXNUYXJnZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXRDbGFzcy5wcm90b3R5cGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldENsYXNzLnByb3RvdHlwZSkpXG4gICAgd2hpbGUgKHNvdXJjZS5uYW1lICE9PSAnJykge1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UucHJvdG90eXBlKVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZS5wcm90b3R5cGUpKVxuICAgICAgICAgICAgLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcC5tYXRjaCgvXig/OmNvbnN0cnVjdG9yfHByb3RvdHlwZXxhcmd1bWVudHN8Y2FsbGVyfG5hbWV8YmluZHxjYWxsfGFwcGx5fHRvU3RyaW5nfGxlbmd0aCkkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcHJvcE5hbWVzVGFyZ2V0LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lc1RhcmdldC5wdXNoKHByb3ApO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q2xhc3MucHJvdG90eXBlLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZS5wcm90b3R5cGUsIHByb3ApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgc291cmNlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gYmFzZUNsYXNzXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG5cbiAgICBsZXQgYmFzZSA9IHtcbiAgICAgICAgW2Jhc2VDbGFzcy5uYW1lXTogY2xhc3Mge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoLi4uX2FyZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgX21peGlucyA9IHt9O1xuICAgICAgICAgICAgICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3TWl4aW47XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgKG5ld01peGluID0gbmV3IG1peGluKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWl4aW4uX3RhZ05hbWUgPSBtaXhpbi5wcm90b3R5cGUuX3RhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld01peGluLl9pc01peGluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgX21peGluc1ttaXhpbi5uYW1lXSA9IG5ld01peGluO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBuZXcgYmFzZUNsYXNzKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21peGlucyA9IF9taXhpbnM7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgc3RhdGljIGdldCBuYW1lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MubmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhdGljIGNsYXNzTmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldCBtaXhpbnMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1bYmFzZUNsYXNzLm5hbWVdO1xuXG4gICAgY29weVByb3BzKGJhc2UsIGJhc2VDbGFzcyk7XG5cbiAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgICAgY29weVByb3BzKGJhc2UsIG1peGluKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBiYXNlO1xuXG59XG5cbmZ1bmN0aW9uIGNzcmZTYWZlTWV0aG9kKG1ldGhvZCkge1xuICAgIC8vIHRoZXNlIEhUVFAgbWV0aG9kcyBkbyBub3QgcmVxdWlyZSBDU1JGIHByb3RlY3Rpb25cbiAgICByZXR1cm4gKC9eKEdFVHxIRUFEfE9QVElPTlN8VFJBQ0UpJC8udGVzdChtZXRob2QpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgdXJsLCBtZXRob2QpIHtcbiAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmwsICAvL1NlcnZlciBzY3JpcHQgdG8gcHJvY2VzcyBkYXRhXG4gICAgICAgIHR5cGU6IG1ldGhvZCB8fCAnUE9TVCcsXG4gICAgICAgIHhocjogZnVuY3Rpb24gKCkgeyAgLy8gQ3VzdG9tIFhNTEh0dHBSZXF1ZXN0XG4gICAgICAgICAgICB2YXIgbXlYaHIgPSAkLmFqYXhTZXR0aW5ncy54aHIoKTtcbiAgICAgICAgICAgIGlmIChteVhoci51cGxvYWQpIHsgLy8gQ2hlY2sgaWYgdXBsb2FkIHByb3BlcnR5IGV4aXN0c1xuICAgICAgICAgICAgICAgIG15WGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbiwgZmFsc2UpOyAvLyBGb3IgaGFuZGxpbmcgdGhlIHByb2dyZXNzIG9mIHRoZSB1cGxvYWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBteVhocjtcbiAgICAgICAgfSxcbiAgICAgICAgLy9Gb3JtIGRhdGFcbiAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgIC8vT3B0aW9ucyB0byB0ZWxsIGpRdWVyeSBub3QgdG8gcHJvY2VzcyBkYXRhIG9yIHdvcnJ5IGFib3V0IGNvbnRlbnQtdHlwZS5cbiAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGlmICghY3NyZlNhZmVNZXRob2Qoc2V0dGluZ3MudHlwZSkgJiYgIXRoaXMuY3Jvc3NEb21haW4pIHtcbiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlgtQ1NSRlRva2VuXCIsIHdpbmRvdy5DU1JGX1RPS0VOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24oZSkge1xuICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBNYXRoLnJvdW5kKChlLmxvYWRlZCAvIGUudG90YWwpICogMTAwKTtcbiAgICAgICAgdmFyICRwcm9ncmVzc0NvbnRhaW5lciA9ICQoJy5wcm9ncmVzcy1jb250YWluZXInKTtcbiAgICAgICAgaWYgKHBlcmNlbnRWYWwgPT09IDEwMCkge1xuICAgICAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJjZW50VmFsICs9ICclJztcblxuICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuZmluZCgnLnByb2dyZXNzLWJhcicpLmNzcyh7J3dpZHRoJzogcGVyY2VudFZhbH0pLnRleHQocGVyY2VudFZhbCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmcocGFyYW1FbGVtZW50LCBjb250cm9sbGVyID0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcGFyYW1FbGVtZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50O1xuICAgIH1cblxuICAgIGlmIChjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udHJvbGxlcltwYXJhbUVsZW1lbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdLmJpbmQoY29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XTtcbiAgICB9XG5cbiAgICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgICBsZXQgaXNJbnRSZWcgPSAvXi0/XFxkKyQvO1xuICAgIGxldCBpc0Jvb2xSZWcgPSAvXih0cnVlfGZhbHNlKSQvO1xuICAgIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cbiAgICBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzQm9vbFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudCA9PT0gJ3RydWUnO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50LnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0ludFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHBhcmFtRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyYW1FbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc1N0cmluZ1JlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudC5zdWJzdHIoMSwgcGFyYW1FbGVtZW50Lmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbUVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7XG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XG4gICAgICAgIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpXG4gICAgKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcnNJbkZvcm0oJGZvcm0pIHtcbiAgICAkZm9ybS5maW5kKCcuaGFzLWVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpLmZpbmQoJy5hbGVydC1kYW5nZXInKS5yZW1vdmUoKTtcbiAgICAkZm9ybS5maW5kKCcubm9uLWZpZWxkLWVycm9ycycpLnJlbW92ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RXJyb3JzSW5Gb3JtKCRmb3JtLCAkcmVzRm9ybSkge1xuICAgICRyZXNGb3JtID0gJCgnPGRpdj4nKS5hcHBlbmQoJHJlc0Zvcm0pO1xuXG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykuc2FmZVJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuc2FmZVJlbW92ZSgpO1xuICAgIGxldCAkZmlsZV9jb250YWluZXIgPSAkcmVzRm9ybS5maW5kKCdpbnB1dFt0eXBlPWZpbGVdJykucGFyZW50KCk7XG4gICAgJGZvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJGZpbGVfY29udGFpbmVyW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICBsZXQgaGFzTm9FcnJvciA9ICRyZXNGb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuaW5zZXJ0QWZ0ZXIoJGZvcm0uZmluZCgnLmhpZGRlbi1mb3JtLWZpZWxkcycpKS5sZW5ndGggPT09IDA7XG4gICAgJHJlc0Zvcm0uZmluZCgnLmhhcy1lcnJvcicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNOb0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCAkcmVzRXJyb3JGaWVsZCA9ICQodGhpcyk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKCdhdXRvLWlkJyk7XG4gICAgICAgIGxldCAkZXJyb3JGaWVsZCA9ICRmb3JtLmZpbmQoJy5mb3JtLWdyb3VwLicgKyBjbGFzc05hbWUpO1xuICAgICAgICAkZXJyb3JGaWVsZC5hZGRDbGFzcygnaGFzLWVycm9yJyk7XG4gICAgICAgICRlcnJvckZpZWxkLmZpbmQoJy5mb3JtLWlucHV0LWNvbnRhaW5lcicpLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKCcuYWxlcnQtZGFuZ2VyJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhc05vRXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqcXVlcnlJbnNlcnRBdCgkY29udGFpbmVyLCBpbmRleCwgJG5ld0VsZW1lbnQpIHtcbiAgICBsZXQgbGFzdEluZGV4ID0gJGNvbnRhaW5lci5jaGlsZHJlbigpLnNpemUoKTtcbiAgICBpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgJGNvbnRhaW5lci5jaGlsZHJlbigpLmVxKGluZGV4KS5iZWZvcmUoJG5ld0VsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRjb250YWluZXIuYXBwZW5kKCRuZXdFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOlsiXyRib2R5IiwiYXJnX25hbWVzX3JlZyIsImNvbW1lbmRfcmVnIiwiZ2V0Qm9keSIsIiQiLCJnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbiIsImZ1bmMiLCJmbnN0ciIsInRvU3RyaW5nIiwicmVwbGFjZSIsInJlc3VsdCIsInNsaWNlIiwiaW5kZXhPZiIsIm1hdGNoIiwicHJvbWlzZUR1bW15RmFjdG9yeSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2FtZWxDYXNlVG9UYWdOYW1lIiwic3RyIiwibGV0dGVyIiwidG9Mb3dlckNhc2UiLCJudW1iZXIiLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJ0b1VwcGVyQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsImNvcHlQcm9wcyIsInRhcmdldENsYXNzIiwic291cmNlQ2xhc3MiLCJzb3VyY2UiLCJwcm9wTmFtZXNUYXJnZXQiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvdG90eXBlIiwiY29uY2F0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibmFtZSIsImZvckVhY2giLCJwcm9wIiwiaW5jbHVkZXMiLCJwdXNoIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXRQcm90b3R5cGVPZiIsImFnaWxlQWdncmVnYXRpb24iLCJiYXNlQ2xhc3MiLCJtaXhpbnMiLCJiYXNlIiwiY29uc3RydWN0b3IiLCJfYXJncyIsIl9taXhpbnMiLCJtaXhpbiIsIm5ld01peGluIiwiYXNzaWduIiwiX3RhZ05hbWUiLCJfaXNNaXhpbiIsImNsYXNzTmFtZSIsImNzcmZTYWZlTWV0aG9kIiwibWV0aG9kIiwidGVzdCIsInVwbG9hZEZpbGVGb3JtRGF0YSIsImZvcm1EYXRhIiwidXJsIiwiYWpheCIsInR5cGUiLCJ4aHIiLCJteVhociIsImFqYXhTZXR0aW5ncyIsInVwbG9hZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24iLCJkYXRhIiwiY2FjaGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInNldHRpbmdzIiwiY3Jvc3NEb21haW4iLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2luZG93IiwiQ1NSRl9UT0tFTiIsImUiLCJsZW5ndGhDb21wdXRhYmxlIiwicGVyY2VudFZhbCIsIk1hdGgiLCJyb3VuZCIsImxvYWRlZCIsInRvdGFsIiwiJHByb2dyZXNzQ29udGFpbmVyIiwiaGlkZSIsInNob3ciLCJmaW5kIiwiY3NzIiwidGV4dCIsImNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyIsInBhcmFtRWxlbWVudCIsImNvbnRyb2xsZXIiLCJiaW5kIiwiaXNGbG9hdFJlZyIsImlzSW50UmVnIiwiaXNCb29sUmVnIiwiaXNTdHJpbmdSZWciLCJ1bmRlZmluZWQiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJzdWJzdHIiLCJsZW5ndGgiLCJ1dWlkdjQiLCJjIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwiJGZvcm0iLCJyZW1vdmVDbGFzcyIsInJlbW92ZSIsInNldEVycm9yc0luRm9ybSIsIiRyZXNGb3JtIiwiYXBwZW5kIiwic2FmZVJlbW92ZSIsIiRmaWxlX2NvbnRhaW5lciIsInBhcmVudCIsImVhY2giLCJpbmRleCIsInJlcGxhY2VXaXRoIiwiaGFzTm9FcnJvciIsImluc2VydEFmdGVyIiwiJHJlc0Vycm9yRmllbGQiLCIkZXJyb3JGaWVsZCIsImFkZENsYXNzIiwianF1ZXJ5SW5zZXJ0QXQiLCIkY29udGFpbmVyIiwiJG5ld0VsZW1lbnQiLCJsYXN0SW5kZXgiLCJjaGlsZHJlbiIsInNpemUiLCJlcSIsImJlZm9yZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n");
|
|
117
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /([^\\s,]+)/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $('body');\n }\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, '');\n var result = fnstr.slice(fnstr.indexOf('(') + 1, fnstr.indexOf(')')).match(arg_names_reg);\n if (!result) {\n return [];\n }\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, number => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, letter => `${letter[1].toUpperCase()}`);\n return str;\n}\nfunction tagNameToReadableName(str) {\n str = str.replace(/-./g, letter => ` ${letter[1].toUpperCase()}`).replace(/^./g, letter => `${letter.toUpperCase()}`);\n return str;\n}\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(targetClass.prototype).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== '') {\n Object.getOwnPropertyNames(source.prototype).concat(Object.getOwnPropertySymbols(source.prototype)).forEach(prop => {\n if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {\n return;\n }\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(targetClass.prototype, prop, Object.getOwnPropertyDescriptor(source.prototype, prop));\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {typeof AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach(mixin => {\n let newMixin;\n Object.assign(this, newMixin = new mixin());\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n static get name() {\n return baseClass.name;\n }\n static className() {\n return this.name;\n }\n get mixins() {\n return this._mixins;\n }\n }\n }[baseClass.name];\n copyProps(base, baseClass);\n mixins.forEach(mixin => {\n copyProps(base, mixin);\n });\n return base;\n}\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url,\n //Server script to process data\n type: method || 'POST',\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }\n });\n}\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round(e.loaded / e.total * 100);\n var $progressContainer = $('.progress-container');\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n percentVal += '%';\n $progressContainer.find('.progress-bar').css({\n 'width': percentVal\n }).text(percentVal);\n }\n}\nfunction checkIfParamNumberBoolOrString(paramElement, controller = null) {\n if (typeof paramElement !== 'string') {\n return paramElement;\n }\n if (controller && typeof controller[paramElement] !== 'undefined') {\n if (typeof controller[paramElement] === 'function') {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (paramElement.match(isBoolReg)) {\n return paramElement === 'true';\n } else if (paramElement === 'undefined') {\n return undefined;\n } else if (paramElement.toLowerCase() === 'none') {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n return paramElement;\n}\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\nfunction clearErrorsInForm($form) {\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').remove();\n $form.find('.non-field-errors').remove();\n}\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $('<div>').append($resForm);\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').safeRemove();\n $form.find('.non-field-errors').safeRemove();\n let $file_container = $resForm.find('input[type=file]').parent();\n $form.find('input[type=file]').parent().each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n let hasNoError = $resForm.find('.non-field-errors').insertAfter($form.find('.hidden-form-fields')).length === 0;\n $resForm.find('.has-error').each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data('auto-id');\n let $errorField = $form.find('.form-group.' + className);\n $errorField.addClass('has-error');\n $errorField.find('.form-input-container').append($resErrorField.find('.alert-danger'));\n });\n return hasNoError;\n}\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxNQUFNO0FBQ1YsTUFBTUMsYUFBYSxHQUFHLFlBQVk7QUFDbEMsTUFBTUMsV0FBVyxHQUFHLGtDQUFrQzs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQU9BLENBQUEsRUFBRztFQUN0QixJQUFJLENBQUNILE1BQU0sRUFBRTtJQUNUQSxNQUFNLEdBQUdJLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDdEI7RUFFQSxPQUFPSixNQUFNO0FBQ2pCOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSyx1QkFBdUJBLENBQUNDLElBQUksRUFBRTtFQUMxQyxJQUFJQyxLQUFLLEdBQUdELElBQUksQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDUCxXQUFXLEVBQUUsRUFBRSxDQUFDO0VBQ3BELElBQUlRLE1BQU0sR0FBR0gsS0FBSyxDQUFDSSxLQUFLLENBQUNKLEtBQUssQ0FBQ0ssT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRUwsS0FBSyxDQUFDSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDWixhQUFhLENBQUM7RUFDekYsSUFBSSxDQUFDUyxNQUFNLEVBQUU7SUFDVCxPQUFPLEVBQUU7RUFDYjtFQUVBLE9BQU9BLE1BQU07QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxtQkFBbUJBLENBQUEsRUFBRztFQUNsQyxPQUFPLElBQUlDLE9BQU8sQ0FBQyxVQUFVQyxPQUFPLEVBQUU7SUFDbENBLE9BQU8sQ0FBQyxDQUFDO0VBQ2IsQ0FBQyxDQUFDO0FBQ047QUFFTyxTQUFTQyxrQkFBa0JBLENBQUNDLEdBQUcsRUFBRTtFQUNwQ0EsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxRQUFRLEVBQUVVLE1BQU0sSUFBSSxJQUFJQSxNQUFNLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNqRUYsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxTQUFTLEVBQUVZLE1BQU0sSUFBSSxJQUFJQSxNQUFNLEVBQUUsQ0FBQztFQUNwRCxPQUFPSCxHQUFHLENBQUNULE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQ25DO0FBRU8sU0FBU2Esa0JBQWtCQSxDQUFDSixHQUFHLEVBQUU7RUFDcENBLEdBQUcsR0FBR0EsR0FBRyxDQUFDVCxPQUFPLENBQUMsS0FBSyxFQUFFVSxNQUFNLElBQUksR0FBR0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsT0FBT0wsR0FBRztBQUNkO0FBRU8sU0FBU00scUJBQXFCQSxDQUFDTixHQUFHLEVBQUU7RUFDdkNBLEdBQUcsR0FBR0EsR0FBRyxDQUFDVCxPQUFPLENBQUMsS0FBSyxFQUFFVSxNQUFNLElBQUksSUFBSUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2QsT0FBTyxDQUFDLEtBQUssRUFBRVUsTUFBTSxJQUFJLEdBQUdBLE1BQU0sQ0FBQ0ksV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3JILE9BQU9MLEdBQUc7QUFDZDtBQUVBLE1BQU1PLFNBQVMsR0FBR0EsQ0FBQ0MsV0FBVyxFQUFFQyxXQUFXLEtBQUs7RUFDNUMsSUFBSUMsTUFBTSxHQUFHRCxXQUFXO0VBQ3hCLElBQUlFLGVBQWUsR0FBR0MsTUFBTSxDQUFDQyxtQkFBbUIsQ0FBQ0wsV0FBVyxDQUFDTSxTQUFTLENBQUMsQ0FBQ0MsTUFBTSxDQUFDSCxNQUFNLENBQUNJLHFCQUFxQixDQUFDUixXQUFXLENBQUNNLFNBQVMsQ0FBQyxDQUFDO0VBQ25JLE9BQU9KLE1BQU0sQ0FBQ08sSUFBSSxLQUFLLEVBQUUsRUFBRTtJQUN2QkwsTUFBTSxDQUFDQyxtQkFBbUIsQ0FBQ0gsTUFBTSxDQUFDSSxTQUFTLENBQUMsQ0FDdkNDLE1BQU0sQ0FBQ0gsTUFBTSxDQUFDSSxxQkFBcUIsQ0FBQ04sTUFBTSxDQUFDSSxTQUFTLENBQUMsQ0FBQyxDQUN0REksT0FBTyxDQUFFQyxJQUFJLElBQUs7TUFDZixJQUFJQSxJQUFJLENBQUN4QixLQUFLLENBQUMsbUZBQW1GLENBQUMsRUFBRTtRQUNqRztNQUNKO01BRUEsSUFBSSxDQUFDZ0IsZUFBZSxDQUFDUyxRQUFRLENBQUNELElBQUksQ0FBQyxFQUFFO1FBQ2pDUixlQUFlLENBQUNVLElBQUksQ0FBQ0YsSUFBSSxDQUFDO1FBQzFCUCxNQUFNLENBQUNVLGNBQWMsQ0FBQ2QsV0FBVyxDQUFDTSxTQUFTLEVBQUVLLElBQUksRUFBRVAsTUFBTSxDQUFDVyx3QkFBd0IsQ0FBQ2IsTUFBTSxDQUFDSSxTQUFTLEVBQUVLLElBQUksQ0FBQyxDQUFDO01BQy9HO0lBQ0osQ0FBQyxDQUFDO0lBQ05ULE1BQU0sR0FBR0UsTUFBTSxDQUFDWSxjQUFjLENBQUNkLE1BQU0sQ0FBQztFQUMxQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2UsZ0JBQWdCQSxDQUFDQyxTQUFTLEVBQUUsR0FBR0MsTUFBTSxFQUFFO0VBRW5ELElBQUlDLElBQUksR0FBRztJQUNQLENBQUNGLFNBQVMsQ0FBQ1QsSUFBSSxHQUFHLE1BQU07TUFDcEJZLFdBQVdBLENBQUMsR0FBR0MsS0FBSyxFQUFFO1FBQ2xCLElBQUlDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEJKLE1BQU0sQ0FBQ1QsT0FBTyxDQUFFYyxLQUFLLElBQUs7VUFDdEIsSUFBSUMsUUFBUTtVQUNackIsTUFBTSxDQUFDc0IsTUFBTSxDQUFDLElBQUksRUFBR0QsUUFBUSxHQUFHLElBQUlELEtBQUssQ0FBQyxDQUFFLENBQUM7VUFDN0NDLFFBQVEsQ0FBQ0UsUUFBUSxHQUFHSCxLQUFLLENBQUNsQixTQUFTLENBQUNxQixRQUFRO1VBQzVDRixRQUFRLENBQUNHLFFBQVEsR0FBRyxJQUFJO1VBQ3hCTCxPQUFPLENBQUNDLEtBQUssQ0FBQ2YsSUFBSSxDQUFDLEdBQUdnQixRQUFRO1FBQ2xDLENBQUMsQ0FBQztRQUVGckIsTUFBTSxDQUFDc0IsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJUixTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQ0ssT0FBTyxHQUFHQSxPQUFPO01BQzFCO01BR0EsV0FBV2QsSUFBSUEsQ0FBQSxFQUFHO1FBQ2QsT0FBT1MsU0FBUyxDQUFDVCxJQUFJO01BQ3pCO01BRUEsT0FBT29CLFNBQVNBLENBQUEsRUFBRztRQUNmLE9BQU8sSUFBSSxDQUFDcEIsSUFBSTtNQUNwQjtNQUVBLElBQUlVLE1BQU1BLENBQUEsRUFBRztRQUNULE9BQU8sSUFBSSxDQUFDSSxPQUFPO01BQ3ZCO0lBQ0o7RUFDSixDQUFDLENBQUNMLFNBQVMsQ0FBQ1QsSUFBSSxDQUFDO0VBRWpCVixTQUFTLENBQUNxQixJQUFJLEVBQUVGLFNBQVMsQ0FBQztFQUUxQkMsTUFBTSxDQUFDVCxPQUFPLENBQUVjLEtBQUssSUFBSztJQUN0QnpCLFNBQVMsQ0FBQ3FCLElBQUksRUFBRUksS0FBSyxDQUFDO0VBQzFCLENBQUMsQ0FBQztFQUVGLE9BQU9KLElBQUk7QUFFZjtBQUVBLFNBQVNVLGNBQWNBLENBQUNDLE1BQU0sRUFBRTtFQUM1QjtFQUNBLE9BQVEsNEJBQTRCLENBQUNDLElBQUksQ0FBQ0QsTUFBTSxDQUFDO0FBQ3JEO0FBRU8sU0FBU0Usa0JBQWtCQSxDQUFDQyxRQUFRLEVBQUVDLEdBQUcsRUFBRUosTUFBTSxFQUFFO0VBQ3RELE9BQU9yRCxDQUFDLENBQUMwRCxJQUFJLENBQUM7SUFDVkQsR0FBRyxFQUFFQSxHQUFHO0lBQUc7SUFDWEUsSUFBSSxFQUFFTixNQUFNLElBQUksTUFBTTtJQUN0Qk8sR0FBRyxFQUFFLFNBQUFBLENBQUEsRUFBWTtNQUFHO01BQ2hCLElBQUlDLEtBQUssR0FBRzdELENBQUMsQ0FBQzhELFlBQVksQ0FBQ0YsR0FBRyxDQUFDLENBQUM7TUFDaEMsSUFBSUMsS0FBSyxDQUFDRSxNQUFNLEVBQUU7UUFBRTtRQUNoQkYsS0FBSyxDQUFDRSxNQUFNLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNoRjtNQUNBLE9BQU9KLEtBQUs7SUFDaEIsQ0FBQztJQUNEO0lBQ0FLLElBQUksRUFBRVYsUUFBUTtJQUNkO0lBQ0FXLEtBQUssRUFBRSxLQUFLO0lBQ1pDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCQyxXQUFXLEVBQUUsS0FBSztJQUNsQkMsVUFBVSxFQUFFLFNBQUFBLENBQVVWLEdBQUcsRUFBRVcsUUFBUSxFQUFFO01BQ2pDLElBQUksQ0FBQ25CLGNBQWMsQ0FBQ21CLFFBQVEsQ0FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNhLFdBQVcsRUFBRTtRQUNyRFosR0FBRyxDQUFDYSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUVDLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDO01BQzFEO0lBQ0o7RUFDSixDQUFDLENBQUM7QUFDTjtBQUVBLFNBQVNWLHdCQUF3QkEsQ0FBQ1csQ0FBQyxFQUFFO0VBQ2pDLElBQUlBLENBQUMsQ0FBQ0MsZ0JBQWdCLEVBQUU7SUFDcEIsSUFBSUMsVUFBVSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBRUosQ0FBQyxDQUFDSyxNQUFNLEdBQUdMLENBQUMsQ0FBQ00sS0FBSyxHQUFJLEdBQUcsQ0FBQztJQUN2RCxJQUFJQyxrQkFBa0IsR0FBR25GLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztJQUNqRCxJQUFJOEUsVUFBVSxLQUFLLEdBQUcsRUFBRTtNQUNwQkssa0JBQWtCLENBQUNDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUMsTUFBTTtNQUNIRCxrQkFBa0IsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7SUFDN0I7SUFFQVAsVUFBVSxJQUFJLEdBQUc7SUFFakJLLGtCQUFrQixDQUFDRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUNDLEdBQUcsQ0FBQztNQUFDLE9BQU8sRUFBRVQ7SUFBVSxDQUFDLENBQUMsQ0FBQ1UsSUFBSSxDQUFDVixVQUFVLENBQUM7RUFDeEY7QUFDSjtBQUdPLFNBQVNXLDhCQUE4QkEsQ0FBQ0MsWUFBWSxFQUFFQyxVQUFVLEdBQUcsSUFBSSxFQUFFO0VBQzVFLElBQUksT0FBT0QsWUFBWSxLQUFLLFFBQVEsRUFBRTtJQUNsQyxPQUFPQSxZQUFZO0VBQ3ZCO0VBRUEsSUFBSUMsVUFBVSxJQUFJLE9BQU9BLFVBQVUsQ0FBQ0QsWUFBWSxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQy9ELElBQUksT0FBT0MsVUFBVSxDQUFDRCxZQUFZLENBQUMsS0FBSyxVQUFVLEVBQUU7TUFDaEQsT0FBT0MsVUFBVSxDQUFDRCxZQUFZLENBQUMsQ0FBQ0UsSUFBSSxDQUFDRCxVQUFVLENBQUM7SUFDcEQ7SUFDQSxPQUFPQSxVQUFVLENBQUNELFlBQVksQ0FBQztFQUNuQztFQUVBLElBQUlHLFVBQVUsR0FBRyxlQUFlO0VBQ2hDLElBQUlDLFFBQVEsR0FBRyxTQUFTO0VBQ3hCLElBQUlDLFNBQVMsR0FBRyxnQkFBZ0I7RUFDaEMsSUFBSUMsV0FBVyxHQUFHLCtCQUErQjtFQUVqRCxJQUFJTixZQUFZLENBQUNqRixLQUFLLENBQUNzRixTQUFTLENBQUMsRUFBRTtJQUMvQixPQUFPTCxZQUFZLEtBQUssTUFBTTtFQUNsQyxDQUFDLE1BQU0sSUFBSUEsWUFBWSxLQUFLLFdBQVcsRUFBRTtJQUNyQyxPQUFPTyxTQUFTO0VBQ3BCLENBQUMsTUFBTSxJQUFJUCxZQUFZLENBQUMxRSxXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUM5QyxPQUFPLElBQUk7RUFDZixDQUFDLE1BQU0sSUFBSTBFLFlBQVksQ0FBQ2pGLEtBQUssQ0FBQ3FGLFFBQVEsQ0FBQyxFQUFFO0lBQ3JDLE9BQU9JLFFBQVEsQ0FBQ1IsWUFBWSxDQUFDO0VBQ2pDLENBQUMsTUFBTSxJQUFJQSxZQUFZLENBQUNqRixLQUFLLENBQUNvRixVQUFVLENBQUMsRUFBRTtJQUN2QyxPQUFPTSxVQUFVLENBQUNULFlBQVksQ0FBQztFQUNuQyxDQUFDLE1BQU0sSUFBSUEsWUFBWSxDQUFDakYsS0FBSyxDQUFDdUYsV0FBVyxDQUFDLEVBQUU7SUFDeEMsT0FBT04sWUFBWSxDQUFDVSxNQUFNLENBQUMsQ0FBQyxFQUFFVixZQUFZLENBQUNXLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDMUQ7RUFFQSxPQUFPWCxZQUFZO0FBQ3ZCO0FBRU8sU0FBU1ksTUFBTUEsQ0FBQSxFQUFHO0VBQ3JCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFakcsT0FBTyxDQUFDLFFBQVEsRUFBRWtHLENBQUMsSUFDM0QsQ0FBQ0EsQ0FBQyxHQUFHQyxNQUFNLENBQUNDLGVBQWUsQ0FBQyxJQUFJQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUlILENBQUMsR0FBRyxDQUFDLEVBQUVuRyxRQUFRLENBQUMsRUFBRSxDQUNoRixDQUFDO0FBQ0w7QUFHTyxTQUFTdUcsaUJBQWlCQSxDQUFDQyxLQUFLLEVBQUU7RUFDckNBLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQ3VCLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDO0VBQ2hGRixLQUFLLENBQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDO0FBQzVDO0FBRU8sU0FBU0MsZUFBZUEsQ0FBQ0gsS0FBSyxFQUFFSSxRQUFRLEVBQUU7RUFDN0NBLFFBQVEsR0FBR2hILENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ2lILE1BQU0sQ0FBQ0QsUUFBUSxDQUFDO0VBRXRDSixLQUFLLENBQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUN1QixXQUFXLENBQUMsV0FBVyxDQUFDLENBQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM0QixVQUFVLENBQUMsQ0FBQztFQUNwRk4sS0FBSyxDQUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM0QixVQUFVLENBQUMsQ0FBQztFQUM1QyxJQUFJQyxlQUFlLEdBQUdILFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUM7RUFDaEVSLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVDLEtBQUssRUFBRTtJQUMxRHRILENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3VILFdBQVcsQ0FBQ0osZUFBZSxDQUFDRyxLQUFLLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUM7RUFFRixJQUFJRSxVQUFVLEdBQUdSLFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDbUMsV0FBVyxDQUFDYixLQUFLLENBQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDZSxNQUFNLEtBQUssQ0FBQztFQUMvR1csUUFBUSxDQUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDK0IsSUFBSSxDQUFDLFlBQVk7SUFDekNHLFVBQVUsR0FBRyxLQUFLO0lBQ2xCLElBQUlFLGNBQWMsR0FBRzFILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUIsSUFBSW1ELFNBQVMsR0FBR3VFLGNBQWMsQ0FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUM7SUFDOUMsSUFBSXlELFdBQVcsR0FBR2YsS0FBSyxDQUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBR25DLFNBQVMsQ0FBQztJQUN4RHdFLFdBQVcsQ0FBQ0MsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUNqQ0QsV0FBVyxDQUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMyQixNQUFNLENBQUNTLGNBQWMsQ0FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztFQUMxRixDQUFDLENBQUM7RUFFRixPQUFPa0MsVUFBVTtBQUNyQjtBQUVPLFNBQVNLLGNBQWNBLENBQUNDLFVBQVUsRUFBRVIsS0FBSyxFQUFFUyxXQUFXLEVBQUU7RUFDM0QsSUFBSUMsU0FBUyxHQUFHRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDO0VBQzVDLElBQUlaLEtBQUssR0FBR1UsU0FBUyxFQUFFO0lBQ25CRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNFLEVBQUUsQ0FBQ2IsS0FBSyxDQUFDLENBQUNjLE1BQU0sQ0FBQ0wsV0FBVyxDQUFDO0VBQ3ZELENBQUMsTUFBTTtJQUNIRCxVQUFVLENBQUNiLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDO0VBQ2xDO0VBQ0EsT0FBTyxJQUFJO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3V0aWxzLmpzP2QwZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIEhUTUwgYm9keS5cbiAqIEB0eXBlIHsqfGpRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBfJGJvZHk7XG5jb25zdCBhcmdfbmFtZXNfcmVnID0gLyhbXlxccyxdKykvZztcbmNvbnN0IGNvbW1lbmRfcmVnID0gLygoXFwvXFwvLiokKXwoXFwvXFwqW1xcc1xcU10qP1xcKlxcLykpL21nO1xuXG4vKipcbiAqIGdldEJvZHkgcmV0dXJucyB0aGUgJGJvZHkgalF1ZXJ5IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9IC0gYm9keSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgIGlmICghXyRib2R5KSB7XG4gICAgICAgIF8kYm9keSA9ICQoJ2JvZHknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXyRib2R5O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNcbiAqIEByZXR1cm5zIHtSZWdFeHBNYXRjaEFycmF5fCpbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtc05hbWVPZkZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgZm5zdHIgPSBmdW5jLnRvU3RyaW5nKCkucmVwbGFjZShjb21tZW5kX3JlZywgJycpO1xuICAgIHZhciByZXN1bHQgPSBmbnN0ci5zbGljZShmbnN0ci5pbmRleE9mKCcoJykgKyAxLCBmbnN0ci5pbmRleE9mKCcpJykpLm1hdGNoKGFyZ19uYW1lc19yZWcpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIHByb21pc2VEdW1teUZhY3RvcnkgZ2VuZXJhdGVzIGEgc2ltcGxlIHByb21pc2Ugd2hpY2ggcmV0dXJucyBpbnN0YW50bHkuXG4gKiBAcmV0dXJuIHtQcm9taXNlfSB3aW5kb3cudXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VEdW1teUZhY3RvcnkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvVGFnTmFtZShzdHIpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvW0EtWl0vZywgbGV0dGVyID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvWzAtOV0rL2csIG51bWJlciA9PiBgLSR7bnVtYmVyfWApO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlstXS9nLCBgYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9DYW1lbENhc2Uoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgJHtsZXR0ZXJbMV0udG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCAke2xldHRlclsxXS50b1VwcGVyQ2FzZSgpfWApLnJlcGxhY2UoL14uL2csIGxldHRlciA9PiBgJHtsZXR0ZXIudG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5jb25zdCBjb3B5UHJvcHMgPSAodGFyZ2V0Q2xhc3MsIHNvdXJjZUNsYXNzKSA9PiB7XG4gICAgbGV0IHNvdXJjZSA9IHNvdXJjZUNsYXNzO1xuICAgIGxldCBwcm9wTmFtZXNUYXJnZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXRDbGFzcy5wcm90b3R5cGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldENsYXNzLnByb3RvdHlwZSkpXG4gICAgd2hpbGUgKHNvdXJjZS5uYW1lICE9PSAnJykge1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UucHJvdG90eXBlKVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZS5wcm90b3R5cGUpKVxuICAgICAgICAgICAgLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcC5tYXRjaCgvXig/OmNvbnN0cnVjdG9yfHByb3RvdHlwZXxhcmd1bWVudHN8Y2FsbGVyfG5hbWV8YmluZHxjYWxsfGFwcGx5fHRvU3RyaW5nfGxlbmd0aCkkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcHJvcE5hbWVzVGFyZ2V0LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lc1RhcmdldC5wdXNoKHByb3ApO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q2xhc3MucHJvdG90eXBlLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZS5wcm90b3R5cGUsIHByb3ApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgc291cmNlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gYmFzZUNsYXNzXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7dHlwZW9mIEFic3RyYWN0U0RDfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdpbGVBZ2dyZWdhdGlvbihiYXNlQ2xhc3MsIC4uLm1peGlucykge1xuXG4gICAgbGV0IGJhc2UgPSB7XG4gICAgICAgIFtiYXNlQ2xhc3MubmFtZV06IGNsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7XG4gICAgICAgICAgICAgICAgbGV0IF9taXhpbnMgPSB7fTtcbiAgICAgICAgICAgICAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld01peGluO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIChuZXdNaXhpbiA9IG5ldyBtaXhpbigpKSk7XG4gICAgICAgICAgICAgICAgICAgIG5ld01peGluLl90YWdOYW1lID0gbWl4aW4ucHJvdG90eXBlLl90YWdOYW1lO1xuICAgICAgICAgICAgICAgICAgICBuZXdNaXhpbi5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIF9taXhpbnNbbWl4aW4ubmFtZV0gPSBuZXdNaXhpbjtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IGJhc2VDbGFzcygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taXhpbnMgPSBfbWl4aW5zO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHN0YXRpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzLm5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRpYyBjbGFzc05hbWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgbWl4aW5zKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9taXhpbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9W2Jhc2VDbGFzcy5uYW1lXTtcblxuICAgIGNvcHlQcm9wcyhiYXNlLCBiYXNlQ2xhc3MpO1xuXG4gICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgIGNvcHlQcm9wcyhiYXNlLCBtaXhpbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmFzZTtcblxufVxuXG5mdW5jdGlvbiBjc3JmU2FmZU1ldGhvZChtZXRob2QpIHtcbiAgICAvLyB0aGVzZSBIVFRQIG1ldGhvZHMgZG8gbm90IHJlcXVpcmUgQ1NSRiBwcm90ZWN0aW9uXG4gICAgcmV0dXJuICgvXihHRVR8SEVBRHxPUFRJT05TfFRSQUNFKSQvLnRlc3QobWV0aG9kKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsIHVybCwgbWV0aG9kKSB7XG4gICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgIHVybDogdXJsLCAgLy9TZXJ2ZXIgc2NyaXB0IHRvIHByb2Nlc3MgZGF0YVxuICAgICAgICB0eXBlOiBtZXRob2QgfHwgJ1BPU1QnLFxuICAgICAgICB4aHI6IGZ1bmN0aW9uICgpIHsgIC8vIEN1c3RvbSBYTUxIdHRwUmVxdWVzdFxuICAgICAgICAgICAgdmFyIG15WGhyID0gJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICAgICAgICBpZiAobXlYaHIudXBsb2FkKSB7IC8vIENoZWNrIGlmIHVwbG9hZCBwcm9wZXJ0eSBleGlzdHNcbiAgICAgICAgICAgICAgICBteVhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24sIGZhbHNlKTsgLy8gRm9yIGhhbmRsaW5nIHRoZSBwcm9ncmVzcyBvZiB0aGUgdXBsb2FkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbXlYaHI7XG4gICAgICAgIH0sXG4gICAgICAgIC8vRm9ybSBkYXRhXG4gICAgICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICAgICAvL09wdGlvbnMgdG8gdGVsbCBqUXVlcnkgbm90IHRvIHByb2Nlc3MgZGF0YSBvciB3b3JyeSBhYm91dCBjb250ZW50LXR5cGUuXG4gICAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICh4aHIsIHNldHRpbmdzKSB7XG4gICAgICAgICAgICBpZiAoIWNzcmZTYWZlTWV0aG9kKHNldHRpbmdzLnR5cGUpICYmICF0aGlzLmNyb3NzRG9tYWluKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uKGUpIHtcbiAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHZhciBwZXJjZW50VmFsID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHZhciAkcHJvZ3Jlc3NDb250YWluZXIgPSAkKCcucHJvZ3Jlc3MtY29udGFpbmVyJyk7XG4gICAgICAgIGlmIChwZXJjZW50VmFsID09PSAxMDApIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY2VudFZhbCArPSAnJSc7XG5cbiAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmZpbmQoJy5wcm9ncmVzcy1iYXInKS5jc3Moeyd3aWR0aCc6IHBlcmNlbnRWYWx9KS50ZXh0KHBlcmNlbnRWYWwpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKHBhcmFtRWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtRWxlbWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbGxlciAmJiB0eXBlb2YgY29udHJvbGxlcltwYXJhbUVsZW1lbnRdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XS5iaW5kKGNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF07XG4gICAgfVxuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG4gICAgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJhbUVsZW1lbnQgPT09ICd0cnVlJztcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNJbnRSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChwYXJhbUVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzRmxvYXRSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHBhcmFtRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJhbUVsZW1lbnQuc3Vic3RyKDEsIHBhcmFtRWxlbWVudC5sZW5ndGggLSAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1FbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXVpZHY0KCkge1xuICAgIHJldHVybiAoWzFlN10gKyAtMWUzICsgLTRlMyArIC04ZTMgKyAtMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PlxuICAgICAgICAoYyBeIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgMTUgPj4gYyAvIDQpLnRvU3RyaW5nKDE2KVxuICAgICk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKSB7XG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykucmVtb3ZlKCk7XG4gICAgJGZvcm0uZmluZCgnLm5vbi1maWVsZC1lcnJvcnMnKS5yZW1vdmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yc0luRm9ybSgkZm9ybSwgJHJlc0Zvcm0pIHtcbiAgICAkcmVzRm9ybSA9ICQoJzxkaXY+JykuYXBwZW5kKCRyZXNGb3JtKTtcblxuICAgICRmb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJykuZmluZCgnLmFsZXJ0LWRhbmdlcicpLnNhZmVSZW1vdmUoKTtcbiAgICAkZm9ybS5maW5kKCcubm9uLWZpZWxkLWVycm9ycycpLnNhZmVSZW1vdmUoKTtcbiAgICBsZXQgJGZpbGVfY29udGFpbmVyID0gJHJlc0Zvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpO1xuICAgICRmb3JtLmZpbmQoJ2lucHV0W3R5cGU9ZmlsZV0nKS5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKCRmaWxlX2NvbnRhaW5lcltpbmRleF0pO1xuICAgIH0pO1xuXG4gICAgbGV0IGhhc05vRXJyb3IgPSAkcmVzRm9ybS5maW5kKCcubm9uLWZpZWxkLWVycm9ycycpLmluc2VydEFmdGVyKCRmb3JtLmZpbmQoJy5oaWRkZW4tZm9ybS1maWVsZHMnKSkubGVuZ3RoID09PSAwO1xuICAgICRyZXNGb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFzTm9FcnJvciA9IGZhbHNlO1xuICAgICAgICBsZXQgJHJlc0Vycm9yRmllbGQgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gJHJlc0Vycm9yRmllbGQuZGF0YSgnYXV0by1pZCcpO1xuICAgICAgICBsZXQgJGVycm9yRmllbGQgPSAkZm9ybS5maW5kKCcuZm9ybS1ncm91cC4nICsgY2xhc3NOYW1lKTtcbiAgICAgICAgJGVycm9yRmllbGQuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpO1xuICAgICAgICAkZXJyb3JGaWVsZC5maW5kKCcuZm9ybS1pbnB1dC1jb250YWluZXInKS5hcHBlbmQoJHJlc0Vycm9yRmllbGQuZmluZCgnLmFsZXJ0LWRhbmdlcicpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBoYXNOb0Vycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganF1ZXJ5SW5zZXJ0QXQoJGNvbnRhaW5lciwgaW5kZXgsICRuZXdFbGVtZW50KSB7XG4gICAgbGV0IGxhc3RJbmRleCA9ICRjb250YWluZXIuY2hpbGRyZW4oKS5zaXplKCk7XG4gICAgaWYgKGluZGV4IDwgbGFzdEluZGV4KSB7XG4gICAgICAgICRjb250YWluZXIuY2hpbGRyZW4oKS5lcShpbmRleCkuYmVmb3JlKCRuZXdFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkY29udGFpbmVyLmFwcGVuZCgkbmV3RWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufVxuIl0sIm5hbWVzIjpbIl8kYm9keSIsImFyZ19uYW1lc19yZWciLCJjb21tZW5kX3JlZyIsImdldEJvZHkiLCIkIiwiZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24iLCJmdW5jIiwiZm5zdHIiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZXN1bHQiLCJzbGljZSIsImluZGV4T2YiLCJtYXRjaCIsInByb21pc2VEdW1teUZhY3RvcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbWVsQ2FzZVRvVGFnTmFtZSIsInN0ciIsImxldHRlciIsInRvTG93ZXJDYXNlIiwibnVtYmVyIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidG9VcHBlckNhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJjb3B5UHJvcHMiLCJ0YXJnZXRDbGFzcyIsInNvdXJjZUNsYXNzIiwic291cmNlIiwicHJvcE5hbWVzVGFyZ2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsImNvbmNhdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5hbWUiLCJmb3JFYWNoIiwicHJvcCIsImluY2x1ZGVzIiwicHVzaCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiYmFzZUNsYXNzIiwibWl4aW5zIiwiYmFzZSIsImNvbnN0cnVjdG9yIiwiX2FyZ3MiLCJfbWl4aW5zIiwibWl4aW4iLCJuZXdNaXhpbiIsImFzc2lnbiIsIl90YWdOYW1lIiwiX2lzTWl4aW4iLCJjbGFzc05hbWUiLCJjc3JmU2FmZU1ldGhvZCIsIm1ldGhvZCIsInRlc3QiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJmb3JtRGF0YSIsInVybCIsImFqYXgiLCJ0eXBlIiwieGhyIiwibXlYaHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwicHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uIiwiZGF0YSIsImNhY2hlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJzZXR0aW5ncyIsImNyb3NzRG9tYWluIiwic2V0UmVxdWVzdEhlYWRlciIsIndpbmRvdyIsIkNTUkZfVE9LRU4iLCJlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInBlcmNlbnRWYWwiLCJNYXRoIiwicm91bmQiLCJsb2FkZWQiLCJ0b3RhbCIsIiRwcm9ncmVzc0NvbnRhaW5lciIsImhpZGUiLCJzaG93IiwiZmluZCIsImNzcyIsInRleHQiLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJwYXJhbUVsZW1lbnQiLCJjb250cm9sbGVyIiwiYmluZCIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidW5kZWZpbmVkIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyIiwibGVuZ3RoIiwidXVpZHY0IiwiYyIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQ4QXJyYXkiLCJjbGVhckVycm9yc0luRm9ybSIsIiRmb3JtIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJzZXRFcnJvcnNJbkZvcm0iLCIkcmVzRm9ybSIsImFwcGVuZCIsInNhZmVSZW1vdmUiLCIkZmlsZV9jb250YWluZXIiLCJwYXJlbnQiLCJlYWNoIiwiaW5kZXgiLCJyZXBsYWNlV2l0aCIsImhhc05vRXJyb3IiLCJpbnNlcnRBZnRlciIsIiRyZXNFcnJvckZpZWxkIiwiJGVycm9yRmllbGQiLCJhZGRDbGFzcyIsImpxdWVyeUluc2VydEF0IiwiJGNvbnRhaW5lciIsIiRuZXdFbGVtZW50IiwibGFzdEluZGV4IiwiY2hpbGRyZW4iLCJzaXplIiwiZXEiLCJiZWZvcmUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n");
|
|
118
118
|
|
|
119
119
|
/***/ }),
|
|
120
120
|
|
|
@@ -124,7 +124,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
124
124
|
\******************************************/
|
|
125
125
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
126
126
|
|
|
127
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\nconst DATA_CONTROLLER_KEY = '_controller_';\nconst CONTROLLER_CLASS = '_sdc_controller_';\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {$} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop('tagName').toLowerCase().split('_');\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element\n });\n } else if (tagName[0].startsWith('this.')) {\n $element.addClass(`_bind_to_update_handler sdc_uuid_${parentController._uuid}`);\n } else {\n emptyList = emptyList.concat(findSdcTgs($element, tagNameList, parentController));\n }\n });\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n url = url.replace(re, \"\" + urlValues.shift());\n }\n }\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param path - a content URL from the controller.\n * @param {object} args - get args.\n * @param tag - a normalized tag-name as string.\n * @param hardReload - true if the file has to be reloaded every time.\n * @returns {Promise<Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(path, args, tag, hardReload) {\n if (!path) {\n return Promise.resolve(false);\n } else if (htmlFiles[tag]) {\n return Promise.resolve(htmlFiles[tag]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = 'content';\n return $.get(path, args).then(function (data) {\n if (!hardReload) {\n htmlFiles[tag] = data;\n }\n return data;\n }).catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('_RedirectOnView', data['url-link']);\n }\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('navLoaded', {\n 'controller_name': () => err.status\n });\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n */\nfunction replaceAllTagElementsInContainer($container, parentController) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController);\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {string} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while (matches = re.exec(url)) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n let params = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n controller.parsedContentUrl = url;\n return {\n url: url,\n args: params[params.length - 1]\n };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = {\n args: {}\n };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller, controller.contentUrl);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload)]).then(function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $('<div></div>').append(htmlFile);\n }\n }\n return null;\n });\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller, controller.contentUrl);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload);\n }\n return new Promise(resolve => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @returns {boolean}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller);\n }\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(parentController, $element, tagName, superTagNameList);\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, $element);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, '');\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, '');\n }\n controller.$container.append($html);\n }\n return replaceAllTagElementsInContainer(controller.$container, controller);\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n */\nfunction replaceTagElementsInContainer(tagList, $container, parentController) {\n return new Promise(resolve => {\n let tagDescriptionElements = findSdcTgs($container, tagList, parentController);\n let tagCount = tagDescriptionElements.length;\n if (tagCount === 0) {\n return resolve();\n }\n for (let elementIndex = 0; elementIndex < tagDescriptionElements.length; elementIndex++) {\n runReplaceTagElementsInContainer(tagDescriptionElements[elementIndex].dom, tagDescriptionElements[elementIndex].tag, tagDescriptionElements[elementIndex].super, parentController).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container) {\n return _reloadMethodHTML(controller, $container ?? controller.$container);\n}\nfunction _reloadMethodHTML(controller, $dom) {\n const plist = [];\n $dom.find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`).each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data('handler');\n } else {\n let controller_handler = this.tagName.toLowerCase().replace(/^this./, '');\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n if (typeof result === 'function') {\n result = result.bind(controller)($this.data());\n }\n if (result !== undefined) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n $newContent = $this.clone().empty().append($newContent);\n return controller.reconcile($newContent, $this);\n }));\n }\n });\n return Promise.all(plist);\n}\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === 'INPUT') {\n [['name', ''], ['type', 'text'], ['id', '']].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join('__');\n}\nfunction reconcileTree($element, id = [], parent = null) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join('::'),\n depth: id.length,\n idx: 0,\n op: null,\n parent\n };\n return [obj].concat($element.contents().toArray().map(x => reconcileTree($(x), id.slice(), obj)).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree($realNode);\n const $new = reconcileTree($virtualNode);\n $old.map((x, i) => x.idx = i);\n $new.map((x, i) => x.idx = i);\n const depth = Math.max(...$new.concat($old).map(x => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let opIdx = 0;\n let toRemove = [];\n op_steps.forEach(op_step => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === 'keep_counterpart') {\n if (op.counterpart.idx + opIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n toRemove.push($element);\n } else if (op.type === 'delete') {\n $element.safeRemove();\n opIdx--;\n } else if (op.type === 'insert_ignore') {\n opIdx++;\n } else if (op.type === 'insert') {\n opIdx++;\n const {\n after,\n target\n } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n toRemove.forEach($element => $element.safeRemove());\n}\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach(attr => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach(attr => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes.filter(x => x.depth === depth && !x.op).forEach(newNode => {\n const oldNode = oldNodes.find(tempOldNode => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = {\n type: 'keep',\n idx: newNode.idx\n };\n newNode.op = {\n type: 'keep_counterpart',\n counterpart: oldNode\n };\n oldNode = oldNode.parent;\n if (!oldNode || oldNode.op) {\n return;\n }\n newNode = newNode.parent;\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = {\n type: 'delete',\n idx\n };\n }\n });\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === 'keep_counterpart' ? element.parent.op.counterpart : element.parent;\n }\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 0 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === 'keep_counterpart' ? element.op.counterpart : element;\n }\n }\n return null;\n }\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === 'insert' ? 'insert_ignore' : 'insert';\n x.op = {\n type,\n target,\n after: x.getBefore()\n };\n }\n });\n const tagged = [...oldNodes, ...newNodes];\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n return aVal - bVal;\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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USxHQUFHLGVBQWUsR0FBRyxRQUFRO01BQ3RFckMsQ0FBQyxDQUFDbUIsRUFBRSxHQUFHO1FBQUNrQixJQUFJO1FBQUVVLE1BQU07UUFBRUQsS0FBSyxFQUFFOUMsQ0FBQyxDQUFDd0MsU0FBUyxDQUFDO01BQUMsQ0FBQztJQUMvQztFQUNKLENBQUMsQ0FBQztFQUVGLE1BQU0yQixNQUFNLEdBQUcsQ0FDWCxHQUFHUixRQUFRLEVBQ1gsR0FBR0MsUUFBUSxDQUNkO0VBR0QsT0FBT08sTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUs7SUFDekIsTUFBTUMsSUFBSSxHQUFHRixDQUFDLENBQUNsRCxFQUFFLEVBQUVELEdBQUcsSUFBSW1ELENBQUMsQ0FBQ25ELEdBQUc7SUFDL0IsTUFBTXNELElBQUksR0FBR0YsQ0FBQyxDQUFDbkQsRUFBRSxFQUFFRCxHQUFHLElBQUlvRCxDQUFDLENBQUNwRCxHQUFHO0lBRS9CLE9BQU9xRCxJQUFJLEdBQUdDLElBQUk7RUFDdEIsQ0FBQyxDQUFDO0FBQ04iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3ZpZXcuanM/MjRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvbnRyb2xsZXJGYWN0b3J5LCBydW5Db250cm9sRmxvd0Z1bmN0aW9uc30gZnJvbSBcIi4vc2RjX2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCB7Z2V0VXJsUGFyYW19IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5cbi8qKlxuICogTGlzdCBvZiBIVE1MIGZpbGVzLlxuICogQHR5cGUge3t9fVxuICovXG5sZXQgaHRtbEZpbGVzID0ge307XG5cbmV4cG9ydCBjb25zdCBEQVRBX0NPTlRST0xMRVJfS0VZID0gJ19jb250cm9sbGVyXyc7XG5leHBvcnQgY29uc3QgQ09OVFJPTExFUl9DTEFTUyA9ICdfc2RjX2NvbnRyb2xsZXJfJztcblxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5DYWNoZSgpIHtcbiAgICBodG1sRmlsZXMgPSB7fTtcbn1cblxuLyoqXG4gKiBmaW5kU2RjVGdzIEZpbmRzIGFsbCByZWdpc3RlcmVkIHRhZ3MgaW4gYSBjb250YWluZXIuIEJ1dCBpdCBpZ25vcmVzXG4gKiByZWdpc3RlcmVkIHRhZ3MgaW4gcmVnaXN0ZXJlZCB0YWdzLiBJdCBjb2xsZWN0cyBhbGwgdGhvc2VcbiAqIGRvbXMgYW5kIHJldHVybnMgYSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyBhbHNvIHRoZSB0YWcgbmFtZSB0aGUgZG9tIGFuZCB0aGUgdGFnXG4gKiBuYW1lcyBvZiB0aGUgc3VwZXIgY29udHJvbGxlclxuICpcbiAqIEBwYXJhbSB7JH0gJGNvbnRhaW5lciAtIGpRdWVyeSBjb250YWluZXJcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdGFnTmFtZUxpc3QgLSBhIHN0cmluZyBsaXN0IHdpdGggdGFnIG5hbWVzLlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGNvbnRyb2xsZXIgaW4gc3Vycm91bmRpbmdcbiAqIEByZXR1cm4ge0FycmF5fSAtIGEgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGFsbCByZWdpc3RlciB0YWdzIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGZpbmRTZGNUZ3MoJGNvbnRhaW5lciwgdGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICBpZiAoISRjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBsZXQgJGNoaWxkcmVuID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICAgIGxldCBlbXB0eUxpc3QgPSBbXTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICBsZXQgdGFnTmFtZSA9ICRlbGVtZW50LnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCdfJyk7XG4gICAgICAgIGlmICgkLmluQXJyYXkodGFnTmFtZVswXSwgdGFnTmFtZUxpc3QpID49IDApIHtcbiAgICAgICAgICAgIGVtcHR5TGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB0YWc6IHRhZ05hbWVbMF0sXG4gICAgICAgICAgICAgICAgc3VwZXI6IHRhZ05hbWUuc3BsaWNlKDEpIHx8IFtdLFxuICAgICAgICAgICAgICAgIGRvbTogJGVsZW1lbnRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXS5zdGFydHNXaXRoKCd0aGlzLicpKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5hZGRDbGFzcyhgX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgc2RjX3V1aWRfJHtwYXJlbnRDb250cm9sbGVyLl91dWlkfWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbXB0eUxpc3QgPSBlbXB0eUxpc3QuY29uY2F0KGZpbmRTZGNUZ3MoJGVsZW1lbnQsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSlcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5TGlzdDtcbn1cblxuLyoqXG4gKiByZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyIGZpbGxzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIGNvbnRlbnRcbiAqIHVybCB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHRhZyBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcGFyYW0gdXJsIC0gdGhlIG9yaWdpbiBjb250ZW50IFVSTFxuICogQHBhcmFtIHVybFZhbHVlcyAtIHZhbHVlcyBmb3IgdGhlIHVybCBwbGFjZWhvbGRlci4gSW4gc2FtZSBvcmRlciEhXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlcihjb250cm9sbGVyLCB1cmwsIHVybFZhbHVlcykge1xuICAgIGZvciAobGV0IGtleV9pZHggaW4gY29udHJvbGxlci5fdXJsUGFyYW1zKSB7XG4gICAgICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5X2lkeCkpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBjb250cm9sbGVyLl91cmxQYXJhbXNba2V5X2lkeF07XG4gICAgICAgICAgICBsZXQgcmUgPSBSZWdFeHAoXCIlXFxcXChcIiArIGtleSArIFwiXFxcXClcXFxcd1wiLCBcImdtXCIpO1xuICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UocmUsIFwiXCIgKyB1cmxWYWx1ZXMuc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIGxvYWRIVE1MRmlsZSBsb2FkcyB0aGUgSFRNTCBjb250ZW50IGZpbGUgZnJvbSB0aGUgc2VydmVyIHZpYSBhamF4IHJlcXVlc3QuXG4gKlxuICogSWYgdGhlIEhUTUwgZmlsZSBpcyBsb2FkZWQgYWxyZWFkeSB0aGUgZnVuY3Rpb24gdGFrZXMgbm8gYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gYSBjb250ZW50IFVSTCBmcm9tIHRoZSBjb250cm9sbGVyLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBnZXQgYXJncy5cbiAqIEBwYXJhbSB0YWcgLSBhIG5vcm1hbGl6ZWQgdGFnLW5hbWUgYXMgc3RyaW5nLlxuICogQHBhcmFtIGhhcmRSZWxvYWQgLSB0cnVlIGlmIHRoZSBmaWxlIGhhcyB0byBiZSByZWxvYWRlZCBldmVyeSB0aW1lLlxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59IC0gd2FpdHMgZm9yIHRoZSBmaWxlIHRvIGJlIGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gbG9hZEhUTUxGaWxlKHBhdGgsIGFyZ3MsIHRhZywgaGFyZFJlbG9hZCkge1xuICAgIGlmICghcGF0aCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGh0bWxGaWxlc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaHRtbEZpbGVzW3RhZ10pXG4gICAgfVxuXG4gICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgYXJncy5fbWV0aG9kID0gJ2NvbnRlbnQnO1xuXG4gICAgcmV0dXJuICQuZ2V0KHBhdGgsIGFyZ3MpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKCFoYXJkUmVsb2FkKSB7XG4gICAgICAgICAgICBodG1sRmlsZXNbdGFnXSA9IGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnIucmVzcG9uc2VKU09OO1xuICAgICAgICAgICAgdHJpZ2dlcignX1JlZGlyZWN0T25WaWV3JywgZGF0YVsndXJsLWxpbmsnXSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlcignbmF2TG9hZGVkJywgeydjb250cm9sbGVyX25hbWUnOiAoKSA9PiBlcnIuc3RhdHVzfSk7XG5cbiAgICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHBhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyIHx8ICRjb250YWluZXIuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKTtcbiAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRVcmwgdXNlcyB0aGUgY29udGVudCBVUkwgcHJlZml4IHRvIG1hcmdlIHRoZVxuICogY29ycmVjdCBVUkwuIEFsc28gcGFyc2VzIHRoZSB1cmwgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgICAgICBsZXQgbWF0Y2hlcztcbiAgICAgICAgY29udHJvbGxlci5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICAgIHJldHVybiB7dXJsOiB1cmwsIGFyZ3M6IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV19O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gICAgaWYgKCRlbGVtLmhhc0NsYXNzKENPTlRST0xMRVJfQ0xBU1MpKSB7XG4gICAgICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gICAgbGV0IGdldEVsZW1lbnRzID0ge2FyZ3M6IHt9fTtcbiAgICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgICAgIGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICBsb2FkSFRNTEZpbGUoY29udHJvbGxlci5jb250ZW50VXJsLCBnZXRFbGVtZW50cy5hcmdzLCBjb250cm9sbGVyLl90YWdOYW1lLCBjb250cm9sbGVyLmNvbnRlbnRSZWxvYWQpXG4gICAgXSkudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICBsZXQgaHRtbEZpbGUgPSByZXN1bHRzWzBdO1xuICAgICAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoaHRtbEZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJzxkaXY+PC9kaXY+JykuYXBwZW5kKGh0bWxGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbG9hZEhUTUxDb250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnk+fSAtIHRoZSBwcm9taXNlIHdhaXRzIHRvIHRoZSBmaWxlcyBhcmUgbG9hZGVkLiBpdCByZXR1cm5zIHRoZSBqUXVlcnkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkSFRNTENvbnRyb2xsZXIoY29udHJvbGxlcikge1xuICAgIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICAgICAgbGV0IGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICAgICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLmNvbnRlbnRVcmwsIGdldEVsZW1lbnRzLmFyZ3MsIGNvbnRyb2xsZXIuX3RhZ05hbWUsIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKCQoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdFxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKCRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICAgIGlmIChjb250cm9sbGVyKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJGYWN0b3J5KHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbiAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAgICRlbGVtZW50LmFkZENsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCAkZWxlbWVudCk7XG59XG5cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX3RhZ05hbWUsICcnKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gY29udHJvbGxlci5fbWl4aW5zKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl9taXhpbnNbbWl4aW5LZXldLl90YWdOYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmFwcGVuZCgkaHRtbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG59XG5cblxuLyoqXG4gKiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciBGaW5kcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGluIGEgY29udGFpbmVyLiBCdXQgaXQgaWdub3Jlc1xuICogcmVnaXN0ZXJlZCB0YWdzIGluIHJlZ2lzdGVyZWQgdGFncy4gRm9yIGVhY2ggcmVnaXN0ZXJlZCB0YWcgaXQgbG9hZHMgdGhlIGNvbnRlbnQuXG4gKiBBZnRlcndhcmRzIGl0IHN0YXJ0cyB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgY29udHJvbGxlci4gSSB0aGUgbmV4dCBzdGVwIGl0IHN0YXJ0cyB0aGVcbiAqIHByb2NlZHVyZSBmb3IgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBjb250cm9sbGVyIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ0xpc3QgLSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIHRhZ3NcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0galF1ZXJ5IGNvbnRhaW5lciB0byBmaW5kIHRoZSB0YWdzXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gY29udHJvbGxlciBpbiBzdXJyb3VuZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnTGlzdCwgJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgICAgIGxldCB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzID0gZmluZFNkY1RncygkY29udGFpbmVyLCB0YWdMaXN0LCBwYXJlbnRDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7IGVsZW1lbnRJbmRleCsrKSB7XG4gICAgICAgICAgICBydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdEZXNjcmlwdGlvbkVsZW1lbnRzW2VsZW1lbnRJbmRleF0uZG9tLFxuICAgICAgICAgICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgICAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgICAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lcikge1xuICAgIHJldHVybiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCAkY29udGFpbmVyID8/IGNvbnRyb2xsZXIuJGNvbnRhaW5lcilcbn1cblxuZnVuY3Rpb24gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGRvbSkge1xuICAgIGNvbnN0IHBsaXN0ID0gW107XG5cbiAgICAkZG9tLmZpbmQoYC5fYmluZF90b191cGRhdGVfaGFuZGxlci5zZGNfdXVpZF8ke2NvbnRyb2xsZXIuX3V1aWR9YCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKGBfd2l0aF9oYW5kbGVyYCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9ICR0aGlzLmRhdGEoJ2hhbmRsZXInKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjb250cm9sbGVyX2hhbmRsZXIgPSB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9edGhpcy4vLCAnJyk7XG4gICAgICAgICAgICBpZiAoY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmJpbmQoY29udHJvbGxlcikoJHRoaXMuZGF0YSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBsaXN0LnB1c2goUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCAkbmV3Q29udGVudCA9ICQoYDxkaXY+PC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgJG5ld0NvbnRlbnQuYXBwZW5kKHgpO1xuICAgICAgICAgICAgICAgICRuZXdDb250ZW50ID0gJHRoaXMuY2xvbmUoKS5lbXB0eSgpLmFwcGVuZCgkbmV3Q29udGVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucmVjb25jaWxlKCRuZXdDb250ZW50LCAkdGhpcyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHBsaXN0KTtcbn1cblxuXG5mdW5jdGlvbiBnZXROb2RlS2V5KG5vZGUpIHtcbiAgICBpZiAobm9kZVswXS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICByZXR1cm4gYFRFWFRfXyR7bm9kZVswXS5ub2RlVmFsdWV9YDtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gW25vZGVbMF0udGFnTmFtZV07XG4gICAgaWYgKG5vZGVbMF0ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICAgW1snbmFtZScsICcnXSwgWyd0eXBlJywgJ3RleHQnXSwgWydpZCcsICcnXV0uZm9yRWFjaCgoW2tleSwgZGVmYXVsdFZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXR0ciA9IG5vZGUuYXR0cihrZXkpID8/IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLmpvaW4oJ19fJyk7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRyZWUoJGVsZW1lbnQsIGlkID0gW10sIHBhcmVudCA9IG51bGwpIHtcbiAgICBpZC5wdXNoKGdldE5vZGVLZXkoJGVsZW1lbnQpKTtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICRlbGVtZW50LFxuICAgICAgICBpZDogaWQuam9pbignOjonKSxcbiAgICAgICAgZGVwdGg6IGlkLmxlbmd0aCxcbiAgICAgICAgaWR4OiAwLFxuICAgICAgICBvcDogbnVsbCxcbiAgICAgICAgcGFyZW50XG4gICAgfTtcbiAgICByZXR1cm4gW29ial0uY29uY2F0KCRlbGVtZW50LmNvbnRlbnRzKCkudG9BcnJheSgpLm1hcCgoeCkgPT4gcmVjb25jaWxlVHJlZSgkKHgpLCBpZC5zbGljZSgpLCBvYmopKS5mbGF0KCkpO1xuXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSkge1xuICAgIGNvbnN0ICRvbGQgPSByZWNvbmNpbGVUcmVlKCRyZWFsTm9kZSk7XG4gICAgY29uc3QgJG5ldyA9IHJlY29uY2lsZVRyZWUoJHZpcnR1YWxOb2RlKTtcbiAgICAkb2xkLm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgICAkbmV3Lm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgICBjb25zdCBkZXB0aCA9IE1hdGgubWF4KC4uLiRuZXcuY29uY2F0KCRvbGQpLm1hcCh4ID0+IHguZGVwdGgpKTtcbiAgICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICAgIGxldCBvcElkeCA9IDA7XG4gICAgbGV0IHRvUmVtb3ZlID0gW107XG5cbiAgICBvcF9zdGVwcy5mb3JFYWNoKG9wX3N0ZXAgPT4ge1xuICAgICAgICBjb25zdCB7b3AsICRlbGVtZW50LCBpZHh9ID0gb3Bfc3RlcDtcbiAgICAgICAgaWYgKG9wLnR5cGUgPT09ICdrZWVwX2NvdW50ZXJwYXJ0Jykge1xuXG4gICAgICAgICAgICBpZiAob3AuY291bnRlcnBhcnQuaWR4ICsgb3BJZHggIT09IGlkeCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1CZWZvcmUgPSBvcF9zdGVwLmdldEJlZm9yZSgpO1xuICAgICAgICAgICAgICAgIGlmICghZWxlbUJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICBvcF9zdGVwLmdldFJlYWxQYXJlbnQoKS4kZWxlbWVudC5wcmVwZW5kKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvcC5jb3VudGVycGFydC4kZWxlbWVudC5pbnNlcnRBZnRlcihlbGVtQmVmb3JlLiRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN5bmNBdHRyaWJ1dGVzKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50LCAkZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoJGVsZW1lbnQuaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpLiRjb250YWluZXIgPSBvcC5jb3VudGVycGFydC4kZWxlbWVudDtcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b1JlbW92ZS5wdXNoKCRlbGVtZW50KTtcblxuICAgICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5zYWZlUmVtb3ZlKCk7XG4gICAgICAgICAgICBvcElkeC0tO1xuICAgICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09ICdpbnNlcnRfaWdub3JlJykge1xuICAgICAgICAgICAgb3BJZHgrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSAnaW5zZXJ0Jykge1xuICAgICAgICAgICAgb3BJZHgrKztcbiAgICAgICAgICAgIGNvbnN0IHthZnRlciwgdGFyZ2V0fSA9IG9wX3N0ZXAub3A7XG4gICAgICAgICAgICBpZiAoYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5pbnNlcnRBZnRlcihhZnRlci4kZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC4kZWxlbWVudC5wcmVwZW5kKCRlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0b1JlbW92ZS5mb3JFYWNoKCgkZWxlbWVudCkgPT4gJGVsZW1lbnQuc2FmZVJlbW92ZSgpKTtcbn1cblxuZnVuY3Rpb24gc3luY0F0dHJpYnV0ZXMoJHJlYWwsICR2aXJ0dWFsKSB7XG4gICAgY29uc3QgcmVhbEF0dHJzID0gJHJlYWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgICBjb25zdCB2aXJ0dWFsQXR0cnMgPSAkdmlydHVhbFswXS5hdHRyaWJ1dGVzID8/IFtdO1xuICAgIC8vIFJlbW92ZSBtaXNzaW5nIGF0dHJzXG4gICAgWy4uLnJlYWxBdHRyc10uZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgaWYgKCEkdmlydHVhbC5pcyhgWyR7YXR0ci5uYW1lfV1gKSkge1xuICAgICAgICAgICAgJHJlYWwucmVtb3ZlQXR0cihhdHRyLm5hbWUpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgb3IgdXBkYXRlXG4gICAgWy4uLnZpcnR1YWxBdHRyc10uZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgaWYgKCFhdHRyLm5hbWUuc3RhcnRzV2l0aChgZGF0YWApICYmICRyZWFsLmF0dHIoYXR0ci5uYW1lKSAhPT0gYXR0ci52YWx1ZSkge1xuICAgICAgICAgICAgJHJlYWwuYXR0cihhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZW50cmllcygkdmlydHVhbC5kYXRhKCkpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIExDQiAoTG9uZ2VzdCBDb21tb24gQnJhbmNoKSBmaW5kcyBtYXRjaGluZyBicmFuY2hlcyBhbmQgcmVzZXJ2ZXMgdGhlbSFcbiAqXG4gKiBAcGFyYW0gb2xkTm9kZXNcbiAqIEBwYXJhbSBuZXdOb2Rlc1xuICogQHBhcmFtIGRlcHRoXG4gKiBAcmV0dXJucyB7KnwqW119XG4gKi9cbmZ1bmN0aW9uIGxjYkRpZmYob2xkTm9kZXMsIG5ld05vZGVzLCBkZXB0aCkge1xuICAgIG5ld05vZGVzLmZpbHRlcih4ID0+IHguZGVwdGggPT09IGRlcHRoICYmICF4Lm9wKS5mb3JFYWNoKChuZXdOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZE5vZGUgPSBvbGROb2Rlcy5maW5kKCh0ZW1wT2xkTm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0ZW1wT2xkTm9kZS5vcCAmJiB0ZW1wT2xkTm9kZS5pZCA9PT0gbmV3Tm9kZS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9sZE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtlZXBUcmVlQnJhbmNoID0gKG9sZE5vZGUsIG5ld05vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBvbGROb2RlLm9wID0ge3R5cGU6ICdrZWVwJywgaWR4OiBuZXdOb2RlLmlkeH07XG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5vcCA9IHt0eXBlOiAna2VlcF9jb3VudGVycGFydCcsIGNvdW50ZXJwYXJ0OiBvbGROb2RlfTtcbiAgICAgICAgICAgICAgICBvbGROb2RlID0gb2xkTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCFvbGROb2RlIHx8IG9sZE5vZGUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtlZXBUcmVlQnJhbmNoKG9sZE5vZGUsIG5ld05vZGUpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICByZXR1cm4gbGNiRGlmZihvbGROb2RlcywgbmV3Tm9kZXMsIGRlcHRoIC0gMSk7XG4gICAgfVxuXG4gICAgb2xkTm9kZXMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICBpZiAoIXgub3ApIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IChvbGROb2Rlc1tpIC0gMV0/Lm9wLmlkeCA/PyAtMSkgKyAxO1xuICAgICAgICAgICAgeC5vcCA9IHt0eXBlOiAnZGVsZXRlJywgaWR4fVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRSZWFsUGFyZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Lm9wLnR5cGUgPT09ICdrZWVwX2NvdW50ZXJwYXJ0JyA/IGVsZW1lbnQucGFyZW50Lm9wLmNvdW50ZXJwYXJ0IDogZWxlbWVudC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QmVmb3JlKGVsZW1lbnQsIGlkeCkge1xuICAgICAgICBjb25zdCBzdGFydERlcHRoID0gZWxlbWVudC5kZXB0aDtcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIGVsZW1lbnQuZGVwdGggPj0gc3RhcnREZXB0aCkge1xuICAgICAgICAgICAgaWR4IC09IDE7XG4gICAgICAgICAgICBlbGVtZW50ID0gbmV3Tm9kZXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmRlcHRoID09PSBzdGFydERlcHRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQub3AudHlwZSA9PT0gJ2tlZXBfY291bnRlcnBhcnQnID8gZWxlbWVudC5vcC5jb3VudGVycGFydCA6IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgfVxuXG4gICAgbmV3Tm9kZXMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICB4LmdldEJlZm9yZSA9ICgpID0+IGdldEJlZm9yZSh4LCBpKTtcbiAgICAgICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgICAgICBpZiAoIXgub3ApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHguZ2V0UmVhbFBhcmVudCgpO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRhcmdldD8ub3AudHlwZSA9PT0gJ2luc2VydCcgPyAnaW5zZXJ0X2lnbm9yZScgOiAnaW5zZXJ0JztcbiAgICAgICAgICAgIHgub3AgPSB7dHlwZSwgdGFyZ2V0LCBhZnRlcjogeC5nZXRCZWZvcmUoKX1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGFnZ2VkID0gW1xuICAgICAgICAuLi5vbGROb2RlcyxcbiAgICAgICAgLi4ubmV3Tm9kZXMsXG4gICAgXTtcblxuXG4gICAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFWYWwgPSBhLm9wPy5pZHggPz8gYS5pZHg7XG4gICAgICAgIGNvbnN0IGJWYWwgPSBiLm9wPy5pZHggPz8gYi5pZHg7XG5cbiAgICAgICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICAgIH0pO1xufSJdLCJuYW1lcyI6WyJjb250cm9sbGVyRmFjdG9yeSIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwiZ2V0VXJsUGFyYW0iLCJhcHAiLCJ0cmlnZ2VyIiwiaHRtbEZpbGVzIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJjbGVhbkNhY2hlIiwiZmluZFNkY1RncyIsIiRjb250YWluZXIiLCJ0YWdOYW1lTGlzdCIsInBhcmVudENvbnRyb2xsZXIiLCIkY2hpbGRyZW4iLCJjaGlsZHJlbiIsImVtcHR5TGlzdCIsImVhY2giLCJfIiwiZWxlbWVudCIsIiRlbGVtZW50IiwiJCIsInRhZ05hbWUiLCJwcm9wIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImluQXJyYXkiLCJwdXNoIiwidGFnIiwic3VwZXIiLCJzcGxpY2UiLCJkb20iLCJzdGFydHNXaXRoIiwiYWRkQ2xhc3MiLCJfdXVpZCIsImNvbmNhdCIsInJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidXJsIiwidXJsVmFsdWVzIiwia2V5X2lkeCIsIl91cmxQYXJhbXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsInJlIiwiUmVnRXhwIiwicmVwbGFjZSIsInNoaWZ0IiwibG9hZEhUTUxGaWxlIiwicGF0aCIsImFyZ3MiLCJoYXJkUmVsb2FkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJWRVJTSU9OIiwiX21ldGhvZCIsImdldCIsInRoZW4iLCJkYXRhIiwiY2F0Y2giLCJlcnIiLCJzdGF0dXMiLCJyZXNwb25zZUpTT04iLCJjb250cm9sbGVyX25hbWUiLCJyZXNwb25zZVRleHQiLCJyZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwidGFnTmFtZXMiLCJwYXJzZUNvbnRlbnRVcmwiLCJjb250ZW50VXJsIiwibGVuZ3RoIiwibWF0Y2hlcyIsImV4ZWMiLCJjb250ZW50UmVsb2FkIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJfdGFnTmFtZSIsInJlc3VsdHMiLCJodG1sRmlsZSIsImFwcGVuZCIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwicnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJzdXBlclRhZ05hbWVMaXN0IiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwiJGh0bWwiLCJlbXB0eSIsImF0dHIiLCJtaXhpbktleSIsIl9taXhpbnMiLCJ0YWdMaXN0IiwidGFnRGVzY3JpcHRpb25FbGVtZW50cyIsInRhZ0NvdW50IiwiZWxlbWVudEluZGV4IiwicmVsb2FkTWV0aG9kSFRNTCIsIl9yZWxvYWRNZXRob2RIVE1MIiwiJGRvbSIsInBsaXN0IiwiZmluZCIsIiR0aGlzIiwicmVzdWx0IiwidW5kZWZpbmVkIiwiY29udHJvbGxlcl9oYW5kbGVyIiwiYmluZCIsIngiLCIkbmV3Q29udGVudCIsImNsb25lIiwicmVjb25jaWxlIiwiZ2V0Tm9kZUtleSIsIm5vZGUiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsInJlcyIsIm5vZGVOYW1lIiwiZm9yRWFjaCIsImRlZmF1bHRWYWx1ZSIsImpvaW4iLCJyZWNvbmNpbGVUcmVlIiwiaWQiLCJwYXJlbnQiLCJvYmoiLCJkZXB0aCIsImlkeCIsIm9wIiwiY29udGVudHMiLCJ0b0FycmF5IiwibWFwIiwic2xpY2UiLCJmbGF0IiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwiJG9sZCIsIiRuZXciLCJpIiwiTWF0aCIsIm1heCIsIm9wX3N0ZXBzIiwibGNiRGlmZiIsIm9wSWR4IiwidG9SZW1vdmUiLCJvcF9zdGVwIiwidHlwZSIsImNvdW50ZXJwYXJ0IiwiZWxlbUJlZm9yZSIsImdldEJlZm9yZSIsImdldFJlYWxQYXJlbnQiLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJzeW5jQXR0cmlidXRlcyIsInNhZmVSZW1vdmUiLCJhZnRlciIsInRhcmdldCIsIiRyZWFsIiwiJHZpcnR1YWwiLCJyZWFsQXR0cnMiLCJhdHRyaWJ1dGVzIiwidmlydHVhbEF0dHJzIiwiaXMiLCJuYW1lIiwicmVtb3ZlQXR0ciIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsIm9sZE5vZGVzIiwibmV3Tm9kZXMiLCJmaWx0ZXIiLCJuZXdOb2RlIiwib2xkTm9kZSIsInRlbXBPbGROb2RlIiwia2VlcFRyZWVCcmFuY2giLCJzdGFydERlcHRoIiwidGFnZ2VkIiwic29ydCIsImEiLCJiIiwiYVZhbCIsImJWYWwiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n");
|
|
127
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ refresh: () => (/* binding */ refresh),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\nconst DATA_CONTROLLER_KEY = '_controller_';\nconst CONTROLLER_CLASS = '_sdc_controller_';\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {jquery} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop('tagName').toLowerCase().split('_');\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element\n });\n } else if (tagName[0].startsWith('this.')) {\n $element.addClass(`_bind_to_update_handler sdc_uuid_${parentController._uuid}`);\n } else {\n emptyList = emptyList.concat(findSdcTgs($element, tagNameList, parentController));\n }\n });\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n url = url.replace(re, \"\" + urlValues.shift());\n }\n }\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param path - a content URL from the controller.\n * @param {object} args - get args.\n * @param tag - a normalized tag-name as string.\n * @param hardReload - true if the file has to be reloaded every time.\n * @returns {Promise<Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(path, args, tag, hardReload) {\n if (!path) {\n return Promise.resolve(false);\n } else if (htmlFiles[tag]) {\n return Promise.resolve(htmlFiles[tag]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = 'content';\n return $.get(path, args).then(function (data) {\n if (!hardReload) {\n htmlFiles[tag] = data;\n }\n return data;\n }).catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('_RedirectOnView', data['url-link']);\n }\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('navLoaded', {\n 'controller_name': () => err.status\n });\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceAllTagElementsInContainer($container, parentController, process = null) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController, process);\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {string} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while (matches = re.exec(url)) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n let params = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n controller.parsedContentUrl = url;\n return {\n url: url,\n args: params[params.length - 1]\n };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = {\n args: {}\n };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller, controller.contentUrl);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload)]).then(function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $('<div></div>').append(htmlFile);\n }\n }\n return null;\n });\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller, controller.contentUrl);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload);\n }\n return new Promise(resolve => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @param {Object} process - Process object containing the refresh process\n * @returns {Promise}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController, process) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller, process);\n }\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(parentController, $element, tagName, superTagNameList);\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, process);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html, process = null) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, '');\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, '');\n }\n controller.$container.append($html);\n }\n return replaceAllTagElementsInContainer(controller.$container, controller, process);\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceTagElementsInContainer(tagList, $container, parentController, process) {\n return new Promise(resolve => {\n let tagDescriptionElements = findSdcTgs($container, tagList, parentController);\n let tagCount = tagDescriptionElements.length;\n if (tagCount === 0) {\n return resolve();\n }\n for (let elementIndex = 0; elementIndex < tagDescriptionElements.length; elementIndex++) {\n runReplaceTagElementsInContainer(tagDescriptionElements[elementIndex].dom, tagDescriptionElements[elementIndex].tag, tagDescriptionElements[elementIndex].super, parentController, process).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container, process) {\n return _reloadMethodHTML(controller, $container ?? controller.$container, process);\n}\nfunction _reloadMethodHTML(controller, $dom, process) {\n const plist = [];\n $dom.find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`).each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data('handler');\n } else {\n let controller_handler = this.tagName.toLowerCase().replace(/^this./, '');\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n if (typeof result === 'function') {\n result = result.bind(controller)($this.data());\n }\n if (result !== undefined) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n if ($this.html() === '') {\n $this.append('<div></div>');\n }\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.reconcile(controller, $newContent, $this.children(), process);\n }));\n }\n });\n return Promise.all(plist);\n}\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === 'INPUT') {\n [['name', ''], ['type', 'text'], ['id', '']].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join('__');\n}\nfunction reconcileTree({\n $element,\n id = [],\n parent = null\n}) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join('::'),\n depth: id.length,\n idx: 0,\n getRealParent: () => parent,\n getIdx: function () {\n this.idx = (this.getRealParent()?.getIdx() ?? -1) + $element.index() + 1;\n return this.idx;\n },\n op: null,\n parent\n };\n obj.getIdx.bind(obj);\n return [obj].concat($element.contents().toArray().map(x => reconcileTree({\n $element: $(x),\n id: id.slice(),\n parent: obj\n })).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree({\n $element: $realNode\n });\n const $new = reconcileTree({\n $element: $virtualNode\n });\n $old.map((x, i) => x.idx = i);\n $new.map((x, i) => x.idx = i);\n const depth = Math.max(...$new.concat($old).map(x => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let toRemove = [];\n window.MAIN = $realNode;\n window.OPS = op_steps;\n op_steps.forEach((op_step, i) => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === 'keep_counterpart') {\n let cIdx = op.counterpart.getIdx();\n if (cIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n toRemove.push($element);\n } else if (op.type === 'delete') {\n $element.safeRemove();\n } else if (op.type === 'insert') {\n const {\n after,\n target\n } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n toRemove.forEach($element => $element.safeRemove());\n}\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach(attr => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach(attr => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n $real.removeData();\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes.filter(x => x.depth === depth && !x.op).forEach(newNode => {\n const oldNode = oldNodes.find(tempOldNode => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = {\n type: 'keep',\n idx: newNode.idx\n };\n newNode.op = {\n type: 'keep_counterpart',\n counterpart: oldNode\n };\n oldNode = oldNode.parent;\n newNode = newNode.parent;\n if (!oldNode || oldNode.op || newNode?.op) {\n return;\n }\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = {\n type: 'delete',\n idx\n };\n }\n });\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === 'keep_counterpart' ? element.parent.op.counterpart : element.parent;\n }\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 1 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === 'keep_counterpart' ? element.op.counterpart : element;\n }\n }\n return null;\n }\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === 'insert' ? 'insert_ignore' : 'insert';\n x.op = {\n type,\n target,\n after: x.getBefore()\n };\n }\n });\n const tagged = [...oldNodes, ...newNodes];\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n return aVal - bVal;\n });\n}\n\n/**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise<void>}\n */\n\nfunction refresh($dom, leafController, process = null) {\n if (!leafController) {\n leafController = getController($dom);\n }\n if (!leafController) {\n return Promise.resolve();\n }\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.prepareRefreshProcess)(process, leafController);\n $dom ??= leafController.$container;\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $dom, leafController, process).then(() => {\n reloadMethodHTML(leafController, $dom, refreshProcess).then(() => {\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3ZpZXcuanM/MjRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb250cm9sbGVyRmFjdG9yeSxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzLFxuICBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyxcbiAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge2dldFVybFBhcmFtfSBmcm9tIFwiLi9zZGNfcGFyYW1zLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG4vKipcbiAqIExpc3Qgb2YgSFRNTCBmaWxlcy5cbiAqIEB0eXBlIHt7fX1cbiAqL1xubGV0IGh0bWxGaWxlcyA9IHt9O1xuXG5leHBvcnQgY29uc3QgREFUQV9DT05UUk9MTEVSX0tFWSA9ICdfY29udHJvbGxlcl8nO1xuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfQ0xBU1MgPSAnX3NkY19jb250cm9sbGVyXyc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQ2FjaGUoKSB7XG4gIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gIGlmICghJGNvbnRhaW5lcikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgJGNoaWxkcmVuID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBsZXQgdGFnTmFtZSA9ICRlbGVtZW50LnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCdfJyk7XG4gICAgaWYgKCQuaW5BcnJheSh0YWdOYW1lWzBdLCB0YWdOYW1lTGlzdCkgPj0gMCkge1xuICAgICAgZW1wdHlMaXN0LnB1c2goe1xuICAgICAgICB0YWc6IHRhZ05hbWVbMF0sXG4gICAgICAgIHN1cGVyOiB0YWdOYW1lLnNwbGljZSgxKSB8fCBbXSxcbiAgICAgICAgZG9tOiAkZWxlbWVudFxuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aCgndGhpcy4nKSkge1xuICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbXB0eUxpc3QgPSBlbXB0eUxpc3QuY29uY2F0KGZpbmRTZGNUZ3MoJGVsZW1lbnQsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSlcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgZm9yIChsZXQga2V5X2lkeCBpbiBjb250cm9sbGVyLl91cmxQYXJhbXMpIHtcbiAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCBcIlwiICsgdXJsVmFsdWVzLnNoaWZ0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogbG9hZEhUTUxGaWxlIGxvYWRzIHRoZSBIVE1MIGNvbnRlbnQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdmlhIGFqYXggcmVxdWVzdC5cbiAqXG4gKiBJZiB0aGUgSFRNTCBmaWxlIGlzIGxvYWRlZCBhbHJlYWR5IHRoZSBmdW5jdGlvbiB0YWtlcyBubyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHBhdGggLSBhIGNvbnRlbnQgVVJMIGZyb20gdGhlIGNvbnRyb2xsZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIGdldCBhcmdzLlxuICogQHBhcmFtIHRhZyAtIGEgbm9ybWFsaXplZCB0YWctbmFtZSBhcyBzdHJpbmcuXG4gKiBAcGFyYW0gaGFyZFJlbG9hZCAtIHRydWUgaWYgdGhlIGZpbGUgaGFzIHRvIGJlIHJlbG9hZGVkIGV2ZXJ5IHRpbWUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gLSB3YWl0cyBmb3IgdGhlIGZpbGUgdG8gYmUgbG9hZGVkLlxuICovXG5mdW5jdGlvbiBsb2FkSFRNTEZpbGUocGF0aCwgYXJncywgdGFnLCBoYXJkUmVsb2FkKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9IGVsc2UgaWYgKGh0bWxGaWxlc1t0YWddKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShodG1sRmlsZXNbdGFnXSlcbiAgfVxuXG4gIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICBhcmdzLl9tZXRob2QgPSAnY29udGVudCc7XG5cbiAgcmV0dXJuICQuZ2V0KHBhdGgsIGFyZ3MpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoIWhhcmRSZWxvYWQpIHtcbiAgICAgIGh0bWxGaWxlc1t0YWddID0gZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBlcnIucmVzcG9uc2VKU09OO1xuICAgICAgdHJpZ2dlcignX1JlZGlyZWN0T25WaWV3JywgZGF0YVsndXJsLWxpbmsnXSk7XG4gICAgfVxuICAgIHRyaWdnZXIoJ25hdkxvYWRlZCcsIHsnY29udHJvbGxlcl9uYW1lJzogKCkgPT4gZXJyLnN0YXR1c30pO1xuXG4gICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICB9KTtcbn1cblxuLyoqXG4gKiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciByZXBsYWNlcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGJ5IHRoZSBjb250cm9sbGVyLlxuICogSW4gdGhpcyBzdGVwIHRoZSBsaWZlLWN5Y2xlIHN0YXJ0cy5cbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGNvbnRhaW5lciAtIGdpdmVuIGNvbnRhaW5lclxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIHBhcmVudCBjb250b2xsZXIgc3Vycm91bmRlZCB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5mdW5jdGlvbiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzID0gbnVsbCkge1xuICBwYXJlbnRDb250cm9sbGVyID0gcGFyZW50Q29udHJvbGxlciB8fCAkY29udGFpbmVyLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSk7XG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihhcHAudGFnTmFtZXMsICRjb250YWluZXIsIHBhcmVudENvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG4vKipcbiAqIHBhcnNlQ29udGVudFVybCB1c2VzIHRoZSBjb250ZW50IFVSTCBwcmVmaXggdG8gbWFyZ2UgdGhlXG4gKiBjb3JyZWN0IFVSTC4gQWxzbyBwYXJzZXMgdGhlIHVybCBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gY29udHJvbGxlciBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGNvcnJlY3QgVVJMIHdpdGggcHJlZml4LlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRlbnRVcmwoY29udHJvbGxlcikge1xuICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgIGxldCBtYXRjaGVzO1xuICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcyA9IFtdO1xuICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgcGFyYW1zID0gZ2V0VXJsUGFyYW0oY29udHJvbGxlciwgY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgaWYgKGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGgpIHtcbiAgICB1cmwgPSByZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyKGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zKTtcbiAgfVxuXG4gIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICByZXR1cm4ge3VybDogdXJsLCBhcmdzOiBwYXJhbXNbcGFyYW1zLmxlbmd0aCAtIDFdfTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcigkZWxlbSkge1xuICBpZiAoJGVsZW0uaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICByZXR1cm4gJGVsZW0uZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xuICB9XG4gIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gIGxldCBnZXRFbGVtZW50cyA9IHthcmdzOiB7fX07XG4gIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyLCBjb250cm9sbGVyLmNvbnRlbnRVcmwpO1xuICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIuY29udGVudFVybCwgZ2V0RWxlbWVudHMuYXJncywgY29udHJvbGxlci5fdGFnTmFtZSwgY29udHJvbGxlci5jb250ZW50UmVsb2FkKVxuICBdKS50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgbGV0IGh0bWxGaWxlID0gcmVzdWx0c1swXTtcbiAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxGaWxlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoaHRtbEZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcbn1cblxuLyoqXG4gKiByZWxvYWRIVE1MQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgaWYgKGNvbnRyb2xsZXIuY29udGVudFVybCkge1xuICAgIGxldCBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyLCBjb250cm9sbGVyLmNvbnRlbnRVcmwpO1xuICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICByZXR1cm4gbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIuY29udGVudFVybCwgZ2V0RWxlbWVudHMuYXJncywgY29udHJvbGxlci5fdGFnTmFtZSwgY29udHJvbGxlci5jb250ZW50UmVsb2FkKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICByZXNvbHZlKCQoKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHN1cGVyVGFnTmFtZUxpc3RcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICBpZiAoY29udHJvbGxlcikge1xuICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlciwgcHJvY2Vzcyk7XG4gIH1cblxuICBjb250cm9sbGVyID0gY29udHJvbGxlckZhY3RvcnkocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpO1xuICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAkZWxlbWVudC5hZGRDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgcmV0dXJuIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG5cbi8qKlxuICogcnVuQ29udHJvbGxlckZpbGxDb250ZW50IGVtcHRpZXMgdGhlIHJlZ2lzdGVyZWQgdGFnIGFuZCByZXBsYWNlcyBpdCBieSB0aGUgY29udHJvbGxlclxuICogY29udGVudC4gSXQgc2V0cyB0aGUgQ1NTIHRhZ3MgZm9yIHRoZSByZWxhdGlvbiB3aXRoIHRoZSBDU1MgZmlsZXMuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkaHRtbCAtIGpRdWVyeSBsb2FkZWQgY29udGVudFxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwsIHByb2Nlc3MgPSBudWxsKSB7XG4gIGlmICgkaHRtbCAmJiAkaHRtbC5sZW5ndGggPiAwKSB7XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyLmF0dHIoY29udHJvbGxlci5fdGFnTmFtZSwgJycpO1xuICAgIGZvciAobGV0IG1peGluS2V5IGluIGNvbnRyb2xsZXIuX21peGlucykge1xuICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmF0dHIoY29udHJvbGxlci5fbWl4aW5zW21peGluS2V5XS5fdGFnTmFtZSwgJycpO1xuICAgIH1cbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcihjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG5cbi8qKlxuICogcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEZvciBlYWNoIHJlZ2lzdGVyZWQgdGFnIGl0IGxvYWRzIHRoZSBjb250ZW50LlxuICogQWZ0ZXJ3YXJkcyBpdCBzdGFydHMgdGhlIGxpZmUgY3ljbGUgb2YgdGhlIGNvbnRyb2xsZXIuIEkgdGhlIG5leHQgc3RlcCBpdCBzdGFydHMgdGhlXG4gKiBwcm9jZWR1cmUgZm9yIHRoZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgY29udHJvbGxlciB0YWcuXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB0YWdMaXN0IC0gbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCB0YWdzXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGNvbnRhaW5lciAtIGpRdWVyeSBjb250YWluZXIgdG8gZmluZCB0aGUgdGFnc1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGNvbnRyb2xsZXIgaW4gc3Vycm91bmRpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdMaXN0LCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMgPSBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ0xpc3QsIHBhcmVudENvbnRyb2xsZXIpO1xuICAgIGxldCB0YWdDb3VudCA9IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMubGVuZ3RoOyBlbGVtZW50SW5kZXgrKykge1xuICAgICAgcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLmRvbSxcbiAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnRhZyxcbiAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGFnQ291bnQtLTtcbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lciwgcHJvY2Vzcykge1xuICByZXR1cm4gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lciA/PyBjb250cm9sbGVyLiRjb250YWluZXIsIHByb2Nlc3MpXG59XG5cbmZ1bmN0aW9uIF9yZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRkb20sIHByb2Nlc3MpIHtcbiAgY29uc3QgcGxpc3QgPSBbXTtcblxuICAkZG9tLmZpbmQoYC5fYmluZF90b191cGRhdGVfaGFuZGxlci5zZGNfdXVpZF8ke2NvbnRyb2xsZXIuX3V1aWR9YCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGxldCByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCR0aGlzLmhhc0NsYXNzKGBfd2l0aF9oYW5kbGVyYCkpIHtcbiAgICAgIHJlc3VsdCA9ICR0aGlzLmRhdGEoJ2hhbmRsZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRyb2xsZXJfaGFuZGxlciA9IHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL150aGlzLi8sICcnKTtcbiAgICAgIGlmIChjb250cm9sbGVyW2NvbnRyb2xsZXJfaGFuZGxlcl0pIHtcbiAgICAgICAgcmVzdWx0ID0gY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5iaW5kKGNvbnRyb2xsZXIpKCR0aGlzLmRhdGEoKSk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGxpc3QucHVzaChQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKCh4KSA9PiB7XG4gICAgICAgIGxldCAkbmV3Q29udGVudCA9ICQoYDxkaXY+PC9kaXY+YCk7XG4gICAgICAgICRuZXdDb250ZW50LmFwcGVuZCh4KTtcblxuICAgICAgICBpZiAoJHRoaXMuaHRtbCgpID09PSAnJykge1xuICAgICAgICAgICR0aGlzLmFwcGVuZCgnPGRpdj48L2Rpdj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcHAucmVjb25jaWxlKGNvbnRyb2xsZXIsICRuZXdDb250ZW50LCAkdGhpcy5jaGlsZHJlbigpLCBwcm9jZXNzKTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKHBsaXN0KTtcbn1cblxuXG5mdW5jdGlvbiBnZXROb2RlS2V5KG5vZGUpIHtcbiAgaWYgKG5vZGVbMF0ubm9kZVR5cGUgPT09IDMpIHtcbiAgICByZXR1cm4gYFRFWFRfXyR7bm9kZVswXS5ub2RlVmFsdWV9YDtcbiAgfVxuICBjb25zdCByZXMgPSBbbm9kZVswXS50YWdOYW1lXTtcbiAgaWYgKG5vZGVbMF0ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICBbWyduYW1lJywgJyddLCBbJ3R5cGUnLCAndGV4dCddLCBbJ2lkJywgJyddXS5mb3JFYWNoKChba2V5LCBkZWZhdWx0VmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gbm9kZS5hdHRyKGtleSkgPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlcy5qb2luKCdfXycpO1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVUcmVlKHskZWxlbWVudCwgaWQgPSBbXSwgcGFyZW50ID0gbnVsbH0pIHtcbiAgaWQucHVzaChnZXROb2RlS2V5KCRlbGVtZW50KSk7XG4gIGNvbnN0IG9iaiA9IHtcbiAgICAkZWxlbWVudCxcbiAgICBpZDogaWQuam9pbignOjonKSxcbiAgICBkZXB0aDogaWQubGVuZ3RoLFxuICAgIGlkeDogMCxcbiAgICBnZXRSZWFsUGFyZW50OiAoKSA9PiBwYXJlbnQsXG4gICAgZ2V0SWR4OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmlkeCA9ICh0aGlzLmdldFJlYWxQYXJlbnQoKT8uZ2V0SWR4KCkgPz8gLTEpICsgJGVsZW1lbnQuaW5kZXgoKSArIDE7XG4gICAgICByZXR1cm4gdGhpcy5pZHg7XG4gICAgfSxcbiAgICBvcDogbnVsbCxcbiAgICBwYXJlbnRcbiAgfTtcbiAgb2JqLmdldElkeC5iaW5kKG9iaik7XG4gIHJldHVybiBbb2JqXS5jb25jYXQoJGVsZW1lbnQuY29udGVudHMoKS50b0FycmF5KCkubWFwKCh4KSA9PiByZWNvbmNpbGVUcmVlKHtcbiAgICAkZWxlbWVudDogJCh4KSxcbiAgICBpZDogaWQuc2xpY2UoKSxcbiAgICBwYXJlbnQ6IG9ialxuICB9KSkuZmxhdCgpKTtcblxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUpIHtcblxuICBjb25zdCAkb2xkID0gcmVjb25jaWxlVHJlZSh7JGVsZW1lbnQ6ICRyZWFsTm9kZX0pO1xuICBjb25zdCAkbmV3ID0gcmVjb25jaWxlVHJlZSh7JGVsZW1lbnQ6ICR2aXJ0dWFsTm9kZX0pO1xuICAkb2xkLm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgJG5ldy5tYXAoKHgsIGkpID0+IHguaWR4ID0gaSk7XG4gIGNvbnN0IGRlcHRoID0gTWF0aC5tYXgoLi4uJG5ldy5jb25jYXQoJG9sZCkubWFwKHggPT4geC5kZXB0aCkpO1xuICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICBsZXQgdG9SZW1vdmUgPSBbXTtcbiAgd2luZG93Lk1BSU4gPSAkcmVhbE5vZGU7XG4gIHdpbmRvdy5PUFMgPSBvcF9zdGVwcztcblxuICBvcF9zdGVwcy5mb3JFYWNoKChvcF9zdGVwLCBpKSA9PiB7XG4gICAgY29uc3Qge29wLCAkZWxlbWVudCwgaWR4fSA9IG9wX3N0ZXA7XG5cbiAgICBpZiAob3AudHlwZSA9PT0gJ2tlZXBfY291bnRlcnBhcnQnKSB7XG4gICAgICBsZXQgY0lkeCA9IG9wLmNvdW50ZXJwYXJ0LmdldElkeCgpO1xuICAgICAgaWYgKGNJZHggIT09IGlkeCkge1xuICAgICAgICBjb25zdCBlbGVtQmVmb3JlID0gb3Bfc3RlcC5nZXRCZWZvcmUoKTtcbiAgICAgICAgaWYgKCFlbGVtQmVmb3JlKSB7XG4gICAgICAgICAgb3Bfc3RlcC5nZXRSZWFsUGFyZW50KCkuJGVsZW1lbnQucHJlcGVuZChvcC5jb3VudGVycGFydC4kZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3AuY291bnRlcnBhcnQuJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIoZWxlbUJlZm9yZS4kZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3luY0F0dHJpYnV0ZXMob3AuY291bnRlcnBhcnQuJGVsZW1lbnQsICRlbGVtZW50KTtcbiAgICAgIGlmICgkZWxlbWVudC5oYXNDbGFzcyhDT05UUk9MTEVSX0NMQVNTKSkge1xuICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpLiRjb250YWluZXIgPSBvcC5jb3VudGVycGFydC4kZWxlbWVudDtcbiAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdG9SZW1vdmUucHVzaCgkZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChvcC50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgJGVsZW1lbnQuc2FmZVJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gJ2luc2VydCcpIHtcbiAgICAgIGNvbnN0IHthZnRlciwgdGFyZ2V0fSA9IG9wX3N0ZXAub3A7XG4gICAgICBpZiAoYWZ0ZXIpIHtcbiAgICAgICAgJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIoYWZ0ZXIuJGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LiRlbGVtZW50LnByZXBlbmQoJGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgfVxuICB9KTtcblxuICB0b1JlbW92ZS5mb3JFYWNoKCgkZWxlbWVudCkgPT4gJGVsZW1lbnQuc2FmZVJlbW92ZSgpKTtcbn1cblxuZnVuY3Rpb24gc3luY0F0dHJpYnV0ZXMoJHJlYWwsICR2aXJ0dWFsKSB7XG4gIGNvbnN0IHJlYWxBdHRycyA9ICRyZWFsWzBdLmF0dHJpYnV0ZXMgPz8gW107XG4gIGNvbnN0IHZpcnR1YWxBdHRycyA9ICR2aXJ0dWFsWzBdLmF0dHJpYnV0ZXMgPz8gW107XG4gIC8vIFJlbW92ZSBtaXNzaW5nIGF0dHJzXG4gIFsuLi5yZWFsQXR0cnNdLmZvckVhY2goYXR0ciA9PiB7XG4gICAgaWYgKCEkdmlydHVhbC5pcyhgWyR7YXR0ci5uYW1lfV1gKSkge1xuICAgICAgJHJlYWwucmVtb3ZlQXR0cihhdHRyLm5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQWRkIG9yIHVwZGF0ZVxuICBbLi4udmlydHVhbEF0dHJzXS5mb3JFYWNoKGF0dHIgPT4ge1xuICAgIGlmICghYXR0ci5uYW1lLnN0YXJ0c1dpdGgoYGRhdGFgKSAmJiAkcmVhbC5hdHRyKGF0dHIubmFtZSkgIT09IGF0dHIudmFsdWUpIHtcbiAgICAgICRyZWFsLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gICRyZWFsLnJlbW92ZURhdGEoKTtcbiAgT2JqZWN0LmVudHJpZXMoJHZpcnR1YWwuZGF0YSgpKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBMQ0IgKExvbmdlc3QgQ29tbW9uIEJyYW5jaCkgZmluZHMgbWF0Y2hpbmcgYnJhbmNoZXMgYW5kIHJlc2VydmVzIHRoZW0hXG4gKlxuICogQHBhcmFtIG9sZE5vZGVzXG4gKiBAcGFyYW0gbmV3Tm9kZXNcbiAqIEBwYXJhbSBkZXB0aFxuICogQHJldHVybnMgeyp8KltdfVxuICovXG5mdW5jdGlvbiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGgpIHtcbiAgbmV3Tm9kZXMuZmlsdGVyKHggPT4geC5kZXB0aCA9PT0gZGVwdGggJiYgIXgub3ApLmZvckVhY2goKG5ld05vZGUpID0+IHtcbiAgICBjb25zdCBvbGROb2RlID0gb2xkTm9kZXMuZmluZCgodGVtcE9sZE5vZGUpID0+IHtcbiAgICAgIHJldHVybiAhdGVtcE9sZE5vZGUub3AgJiYgdGVtcE9sZE5vZGUuaWQgPT09IG5ld05vZGUuaWQ7XG4gICAgfSk7XG5cbiAgICBpZiAob2xkTm9kZSkge1xuICAgICAgY29uc3Qga2VlcFRyZWVCcmFuY2ggPSAob2xkTm9kZSwgbmV3Tm9kZSkgPT4ge1xuICAgICAgICBvbGROb2RlLm9wID0ge3R5cGU6ICdrZWVwJywgaWR4OiBuZXdOb2RlLmlkeH07XG4gICAgICAgIG5ld05vZGUub3AgPSB7dHlwZTogJ2tlZXBfY291bnRlcnBhcnQnLCBjb3VudGVycGFydDogb2xkTm9kZX07XG4gICAgICAgIG9sZE5vZGUgPSBvbGROb2RlLnBhcmVudDtcbiAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50O1xuICAgICAgICBpZiAoIW9sZE5vZGUgfHwgb2xkTm9kZS5vcCB8fCBuZXdOb2RlPy5vcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBrZWVwVHJlZUJyYW5jaChvbGROb2RlLCBuZXdOb2RlKTtcblxuICAgICAgfVxuICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG4gICAgfVxuICB9KTtcbiAgaWYgKGRlcHRoID4gMSkge1xuICAgIHJldHVybiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGggLSAxKTtcbiAgfVxuXG4gIG9sZE5vZGVzLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICBpZiAoIXgub3ApIHtcbiAgICAgIGNvbnN0IGlkeCA9IChvbGROb2Rlc1tpIC0gMV0/Lm9wLmlkeCA/PyAtMSkgKyAxO1xuICAgICAgeC5vcCA9IHt0eXBlOiAnZGVsZXRlJywgaWR4fVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0UmVhbFBhcmVudChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5vcC50eXBlID09PSAna2VlcF9jb3VudGVycGFydCcgPyBlbGVtZW50LnBhcmVudC5vcC5jb3VudGVycGFydCA6IGVsZW1lbnQucGFyZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmVmb3JlKGVsZW1lbnQsIGlkeCkge1xuICAgIGNvbnN0IHN0YXJ0RGVwdGggPSBlbGVtZW50LmRlcHRoO1xuICAgIHdoaWxlIChpZHggPj0gMSAmJiBlbGVtZW50LmRlcHRoID49IHN0YXJ0RGVwdGgpIHtcbiAgICAgIGlkeCAtPSAxO1xuICAgICAgZWxlbWVudCA9IG5ld05vZGVzW2lkeF07XG4gICAgICBpZiAoZWxlbWVudC5kZXB0aCA9PT0gc3RhcnREZXB0aCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5vcC50eXBlID09PSAna2VlcF9jb3VudGVycGFydCcgPyBlbGVtZW50Lm9wLmNvdW50ZXJwYXJ0IDogZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuXG4gIH1cblxuICBuZXdOb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgeC5nZXRCZWZvcmUgPSAoKSA9PiBnZXRCZWZvcmUoeCwgaSk7XG4gICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgIGlmICgheC5vcCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0geC5nZXRSZWFsUGFyZW50KCk7XG4gICAgICBjb25zdCB0eXBlID0gdGFyZ2V0Py5vcC50eXBlID09PSAnaW5zZXJ0JyA/ICdpbnNlcnRfaWdub3JlJyA6ICdpbnNlcnQnO1xuICAgICAgeC5vcCA9IHt0eXBlLCB0YXJnZXQsIGFmdGVyOiB4LmdldEJlZm9yZSgpfVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGFnZ2VkID0gW1xuICAgIC4uLm9sZE5vZGVzLFxuICAgIC4uLm5ld05vZGVzLFxuICBdO1xuXG5cbiAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVZhbCA9IGEub3A/LmlkeCA/PyBhLmlkeDtcbiAgICBjb25zdCBiVmFsID0gYi5vcD8uaWR4ID8/IGIuaWR4O1xuXG4gICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRkb21cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGxlYWZDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaCgkZG9tLCBsZWFmQ29udHJvbGxlciwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCFsZWFmQ29udHJvbGxlcikge1xuICAgIGxlYWZDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkZG9tKTtcbiAgfVxuXG4gIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjb25zdCB7cmVmcmVzaFByb2Nlc3MsIGlzUnVubmluZ1Byb2Nlc3N9ID0gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKHByb2Nlc3MsIGxlYWZDb250cm9sbGVyKTtcblxuICAkZG9tID8/PSBsZWFmQ29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihhcHAudGFnTmFtZXMsICRkb20sIGxlYWZDb250cm9sbGVyLCBwcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICByZWxvYWRNZXRob2RIVE1MKGxlYWZDb250cm9sbGVyLCAkZG9tLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9KTtcbn0iXSwibmFtZXMiOlsiY29udHJvbGxlckZhY3RvcnkiLCJwcmVwYXJlUmVmcmVzaFByb2Nlc3MiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsImdldFVybFBhcmFtIiwiYXBwIiwidHJpZ2dlciIsImh0bWxGaWxlcyIsIkRBVEFfQ09OVFJPTExFUl9LRVkiLCJDT05UUk9MTEVSX0NMQVNTIiwiY2xlYW5DYWNoZSIsImZpbmRTZGNUZ3MiLCIkY29udGFpbmVyIiwidGFnTmFtZUxpc3QiLCJwYXJlbnRDb250cm9sbGVyIiwiJGNoaWxkcmVuIiwiY2hpbGRyZW4iLCJlbXB0eUxpc3QiLCJlYWNoIiwiXyIsImVsZW1lbnQiLCIkZWxlbWVudCIsIiQiLCJ0YWdOYW1lIiwicHJvcCIsInRvTG93ZXJDYXNlIiwic3BsaXQiLCJpbkFycmF5IiwicHVzaCIsInRhZyIsInN1cGVyIiwic3BsaWNlIiwiZG9tIiwic3RhcnRzV2l0aCIsImFkZENsYXNzIiwiX3V1aWQiLCJjb25jYXQiLCJyZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyIiwiY29udHJvbGxlciIsInVybCIsInVybFZhbHVlcyIsImtleV9pZHgiLCJfdXJsUGFyYW1zIiwiaGFzT3duUHJvcGVydHkiLCJrZXkiLCJyZSIsIlJlZ0V4cCIsInJlcGxhY2UiLCJzaGlmdCIsImxvYWRIVE1MRmlsZSIsInBhdGgiLCJhcmdzIiwiaGFyZFJlbG9hZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiVkVSU0lPTiIsIl9tZXRob2QiLCJnZXQiLCJ0aGVuIiwiZGF0YSIsImNhdGNoIiwiZXJyIiwic3RhdHVzIiwicmVzcG9uc2VKU09OIiwiY29udHJvbGxlcl9uYW1lIiwicmVzcG9uc2VUZXh0IiwicmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJwcm9jZXNzIiwicmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJ0YWdOYW1lcyIsInBhcnNlQ29udGVudFVybCIsImNvbnRlbnRVcmwiLCJsZW5ndGgiLCJtYXRjaGVzIiwiZXhlYyIsImNvbnRlbnRSZWxvYWQiLCJwYXJhbXMiLCJwYXJzZWRDb250ZW50VXJsIiwiZ2V0Q29udHJvbGxlciIsIiRlbGVtIiwiaGFzQ2xhc3MiLCJjbG9zZXN0IiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJnZXRFbGVtZW50cyIsImFsbCIsIl90YWdOYW1lIiwicmVzdWx0cyIsImh0bWxGaWxlIiwiYXBwZW5kIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInN1cGVyVGFnTmFtZUxpc3QiLCJydW5Db250cm9sbGVyRmlsbENvbnRlbnQiLCIkaHRtbCIsImVtcHR5IiwiYXR0ciIsIm1peGluS2V5IiwiX21peGlucyIsInRhZ0xpc3QiLCJ0YWdEZXNjcmlwdGlvbkVsZW1lbnRzIiwidGFnQ291bnQiLCJlbGVtZW50SW5kZXgiLCJyZWxvYWRNZXRob2RIVE1MIiwiX3JlbG9hZE1ldGhvZEhUTUwiLCIkZG9tIiwicGxpc3QiLCJmaW5kIiwiJHRoaXMiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJjb250cm9sbGVyX2hhbmRsZXIiLCJiaW5kIiwieCIsIiRuZXdDb250ZW50IiwiaHRtbCIsInJlY29uY2lsZSIsImdldE5vZGVLZXkiLCJub2RlIiwibm9kZVR5cGUiLCJub2RlVmFsdWUiLCJyZXMiLCJub2RlTmFtZSIsImZvckVhY2giLCJkZWZhdWx0VmFsdWUiLCJqb2luIiwicmVjb25jaWxlVHJlZSIsImlkIiwicGFyZW50Iiwib2JqIiwiZGVwdGgiLCJpZHgiLCJnZXRSZWFsUGFyZW50IiwiZ2V0SWR4IiwiaW5kZXgiLCJvcCIsImNvbnRlbnRzIiwidG9BcnJheSIsIm1hcCIsInNsaWNlIiwiZmxhdCIsIiR2aXJ0dWFsTm9kZSIsIiRyZWFsTm9kZSIsIiRvbGQiLCIkbmV3IiwiaSIsIk1hdGgiLCJtYXgiLCJvcF9zdGVwcyIsImxjYkRpZmYiLCJ0b1JlbW92ZSIsIndpbmRvdyIsIk1BSU4iLCJPUFMiLCJvcF9zdGVwIiwidHlwZSIsImNJZHgiLCJjb3VudGVycGFydCIsImVsZW1CZWZvcmUiLCJnZXRCZWZvcmUiLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJzeW5jQXR0cmlidXRlcyIsInNhZmVSZW1vdmUiLCJhZnRlciIsInRhcmdldCIsIiRyZWFsIiwiJHZpcnR1YWwiLCJyZWFsQXR0cnMiLCJhdHRyaWJ1dGVzIiwidmlydHVhbEF0dHJzIiwiaXMiLCJuYW1lIiwicmVtb3ZlQXR0ciIsInZhbHVlIiwicmVtb3ZlRGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJvbGROb2RlcyIsIm5ld05vZGVzIiwiZmlsdGVyIiwibmV3Tm9kZSIsIm9sZE5vZGUiLCJ0ZW1wT2xkTm9kZSIsImtlZXBUcmVlQnJhbmNoIiwic3RhcnREZXB0aCIsInRhZ2dlZCIsInNvcnQiLCJhIiwiYiIsImFWYWwiLCJiVmFsIiwicmVmcmVzaCIsImxlYWZDb250cm9sbGVyIiwicmVmcmVzaFByb2Nlc3MiLCJpc1J1bm5pbmdQcm9jZXNzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n");
|
|
128
128
|
|
|
129
129
|
/***/ })
|
|
130
130
|
|