sdc_client 0.56.0 → 0.56.2

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/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_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\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 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_3__.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_3__.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 = Object.assign({}, ...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_socket_js__WEBPACK_IMPORTED_MODULE_2__.callServer)(app[1], this._tagName, 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 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_3__.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_3__.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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c3RyYWN0U0RDLmpzP2Q3ZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbGxPZmZ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHtjYWxsU2VydmVyLCBNb2RlbH0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiO1xuaW1wb3J0IHt1dWlkdjQsIHNldEVycm9yc0luRm9ybSwgY2xlYXJFcnJvcnNJbkZvcm0sIHRhZ05hbWVUb0NhbWVsQ2FzZSwgdGFnTmFtZVRvUmVhZGFibGVOYW1lfSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0U0RDIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fdXVpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRVcmwgPSAnJztcbiAgICAgICAgdGhpcy5jb250ZW50UmVsb2FkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMubG9hZF9hc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3VybFBhcmFtcyA9IFtdO1xuICAgICAgICB0aGlzLl9tb2RlbHMgPSBbXTtcblxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gT2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHRoaXMuX2Nzc1VybHMgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlclNob3cgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2FmdGVyU2hvdyBpcyBkZXByZWNhdGVkISEnKVxuICAgICAgICB9O1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLSBFbmQgb2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge3tzdHJpbmc6IEFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX21peGlucyA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fdGFnTmFtZSA9ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IE9iamVjdC5hc3NpZ24oe30sIC4uLmFsbEV2ZW50cykpO1xuICAgIH1cblxuICAgIHBvc3QodXJsLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBhcHAucG9zdCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIGdldCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5nZXQodGhpcywgdXJsLCBhcmdzKTtcbiAgICB9XG5cbiAgICBzdWJtaXRGb3JtKGZvcm0sIHVybCwgbWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBhcHAuc3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXcodGhpcywgZm9ybSwgdXJsLCBtZXRob2QpO1xuICAgIH1cblxuICAgIHNlcnZlckNhbGwobWV0aG9kZSwgYXJncykge1xuICAgICAgICBsZXQgcmUgPSAvc2RjX3ZpZXdcXC8oW14vXSspL2k7XG4gICAgICAgIGxldCBhcHAgPSB0aGlzLmNvbnRlbnRVcmwubWF0Y2gocmUpO1xuICAgICAgICBpZiAoIWFwcCB8fCBhcHAubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVG8gdXNlIHRoZSBzZXJ2ZXJDYWxsIGZ1bmN0aW9uIHRoZSBjb250ZW50VXJsIG11c3QgYmUgc2V0OiAnICsgdGhpcy5uYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxsU2VydmVyKGFwcFsxXSwgdGhpcy5fdGFnTmFtZSwgbWV0aG9kZSwgYXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nIHwgTnVtYmVyfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIG5ld01vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5ID0ge30pIHtcbiAgICAgICAgaWYobW9kZWxfbmFtZSBpbnN0YW5jZW9mIE51bWJlciAmJiBtb2RlbF9uYW1lLmhhc093blByb3BlcnR5KCdsb2FkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlbF9uYW1lLmxvYWQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHRoaXMuX21vZGVscy5wdXNoKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge09iamVjdH1cbiAgICAgKiBAcGFyYW0gdmFsdWVzIHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgdXBkYXRlTW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSwgdmFsdWVzKSB7XG4gICAgICAgIGxldCBtb2RlbCA9IG5ldyBNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiBtb2RlbC5sb2FkKCkudGhlbigoKT0+e1xuICAgICAgICAgICAgbW9kZWwudmFsdWVzIHw9IHZhbHVlcztcbiAgICAgICAgICAgIG1vZGVsLnNhdmUoKS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgIG1vZGVsLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnZhbHVlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkYXB0ZXIgdG8gdGhpcy4kY29udGFpbmVyLmZpbmRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZG9tU2VsZWN0b3JcbiAgICAgKi9cbiAgICBmaW5kKGRvbVNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250YWluZXIuZmluZChkb21TZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5yZWZyZXNoKHRoaXMuJGNvbnRhaW5lciwgdGhpcyk7XG4gICAgfVxuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlbG9hZENvbnRyb2xsZXIodGhpcyk7XG4gICAgfVxuXG4gICAgc3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3IoJGZvcm0sIGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJtaXRNb2RlbEZvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgfVxuXG4gICAgaXRlcmF0ZUFsbENoaWxkcmVuKCkge1xuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpIGluIF9jaGlsZENvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGRDb250cm9sbGVyLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChjYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKC4uLmNjLml0ZXJhdGVBbGxDaGlsZHJlbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RlbCBGb3JtIEV2ZW50c1xuICAgICAqL1xuICAgIGRlZmF1bHRTdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpIHtcbiAgICAgICAgbGV0IHBfbGlzdCA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuX2lzTWl4aW4pIHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsZXQgbW9kZWwgPSAkZm9ybS5kYXRhKCdtb2RlbCcpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbW9kZWwuc3luY0Zvcm0oJGZvcm0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5zdGFuY2VfdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcF9saXN0LnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlX3ZhbHVlLnBrICE9PSBudWxsICYmIGluc3RhbmNlX3ZhbHVlLnBrID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb20gPSBtb2RlbC5zYXZlKGluc3RhbmNlX3ZhbHVlLnBrKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb20gPSBtb2RlbC5jcmVhdGUoaW5zdGFuY2VfdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvbS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJiB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MocmVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiYgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICQoZGF0YS5odG1sKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocF9saXN0KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCAuLi5yZXMuZmxhdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJhbGxPZmYiLCJhcHAiLCJjYWxsU2VydmVyIiwiTW9kZWwiLCJ1dWlkdjQiLCJzZXRFcnJvcnNJbkZvcm0iLCJjbGVhckVycm9yc0luRm9ybSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsIkFic3RyYWN0U0RDIiwiY29uc3RydWN0b3IiLCJfdXVpZCIsImNvbnRlbnRVcmwiLCJjb250ZW50UmVsb2FkIiwiZXZlbnRzIiwibG9hZF9hc3luYyIsIl9pc0V2ZW50c1NldCIsIl9hbGxFdmVudHMiLCJfdXJsUGFyYW1zIiwiX21vZGVscyIsIl9jc3NVcmxzIiwiYWZ0ZXJTaG93IiwiY29uc29sZSIsIndhcm4iLCJfbWl4aW5zIiwiX3RhZ05hbWUiLCJfY2hpbGRDb250cm9sbGVyIiwiX3BhcmVudENvbnRyb2xsZXIiLCJfb25Mb2FkRG9uZSIsIiRjb250YWluZXIiLCJfaXNNaXhpbiIsIl9ydW5MaWZlY3ljbGUiLCJtZXRob2QiLCJhcmdzIiwiREVCVUciLCJkZWJ1ZyIsInJldHVyblByb21pc3NlcyIsIm1peGluS2V5IiwibWl4aW4iLCJwdXNoIiwiYXBwbHkiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsIm9uSW5pdCIsIkFycmF5IiwiYXJndW1lbnRzIiwicGFyZW50Q29udHJvbGxlciIsImNoaWxkQ29udHJvbGxlciIsIm9uTG9hZCIsIndpbGxTaG93Iiwib25SZWZyZXNoIiwib25SZW1vdmUiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIk9iamVjdCIsImFzc2lnbiIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwibmV3TW9kZWwiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJOdW1iZXIiLCJsb2FkIiwidXBkYXRlTW9kZWwiLCJ2YWx1ZXMiLCJzYXZlIiwiZmluZCIsImRvbVNlbGVjdG9yIiwicmVmcmVzaCIsInJlbG9hZCIsInJlbG9hZENvbnRyb2xsZXIiLCJzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvciIsIiRmb3JtIiwiZSIsIl9zdWJtaXRNb2RlbEZvcm0iLCJzdWJtaXRNb2RlbEZvcm0iLCJkZWZhdWx0U3VibWl0TW9kZWxGb3JtIiwiaXRlcmF0ZUFsbENoaWxkcmVuIiwicmVzIiwicF9saXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJkYXRhIiwic3luY0Zvcm0iLCJpbnN0YW5jZV92YWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9tIiwicGsiLCJjcmVhdGUiLCJzdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzIiwiY29udHJvbGxlciIsImNhdGNoIiwiJCIsImh0bWwiLCJzdWJtaXRfbW9kZWxfZm9ybV9lcnJvciIsImZsYXQiXSwic291cmNlUm9vdCI6IiJ9\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_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\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 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_3__.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_3__.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_socket_js__WEBPACK_IMPORTED_MODULE_2__.callServer)(app[1], this._tagName, 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 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_3__.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_3__.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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SyxDQUFDO1lBQ3hCLElBQUksQ0FBQ2tCLHlCQUF5QixJQUFJLElBQUksQ0FBQ0EseUJBQXlCLENBQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RSxLQUFJLE1BQU1hLFVBQVUsSUFBSSxJQUFJLENBQUNkLGtCQUFrQixDQUFDLENBQUMsRUFBRTtjQUMvQ2MsVUFBVSxDQUFDRCx5QkFBeUIsSUFBSUMsVUFBVSxDQUFDRCx5QkFBeUIsQ0FBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hGO1lBQ0FPLE9BQU8sQ0FBQ1AsR0FBRyxDQUFDO1VBQ2hCLENBQUMsQ0FBQyxDQUFDYyxLQUFLLENBQUVWLElBQUksSUFBSztZQUNmekcsOERBQWUsQ0FBQytGLEtBQUssRUFBRXFCLENBQUMsQ0FBQ1gsSUFBSSxDQUFDWSxJQUFJLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUNDLHVCQUF1QixJQUFJLElBQUksQ0FBQ0EsdUJBQXVCLENBQUNiLElBQUksQ0FBQztZQUNsRSxLQUFJLE1BQU1TLFVBQVUsSUFBSSxJQUFJLENBQUNkLGtCQUFrQixDQUFDLENBQUMsRUFBRTtjQUMvQ2MsVUFBVSxDQUFDSSx1QkFBdUIsSUFBSUosVUFBVSxDQUFDSSx1QkFBdUIsQ0FBQ2IsSUFBSSxDQUFDO1lBQ2xGO1lBQ0FJLE1BQU0sQ0FBQ0osSUFBSSxDQUFDO1VBQ2hCLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1A7SUFDSjtJQUVBLE9BQU9yRSxPQUFPLENBQUNDLEdBQUcsQ0FBQ2lFLE1BQU0sQ0FBQyxDQUFDaEUsSUFBSSxDQUFFK0QsR0FBRyxJQUFLO01BQ3JDLE9BQU9rQixNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHbkIsR0FBRyxDQUFDb0IsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUM7RUFDTjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzP2Q3ZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbGxPZmZ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHtjYWxsU2VydmVyLCBNb2RlbH0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiO1xuaW1wb3J0IHt1dWlkdjQsIHNldEVycm9yc0luRm9ybSwgY2xlYXJFcnJvcnNJbkZvcm0sIHRhZ05hbWVUb0NhbWVsQ2FzZSwgdGFnTmFtZVRvUmVhZGFibGVOYW1lfSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0U0RDIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fdXVpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRVcmwgPSAnJztcbiAgICAgICAgdGhpcy5jb250ZW50UmVsb2FkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMubG9hZF9hc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3VybFBhcmFtcyA9IFtdO1xuICAgICAgICB0aGlzLl9tb2RlbHMgPSBbXTtcblxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gT2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHRoaXMuX2Nzc1VybHMgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlclNob3cgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2FmdGVyU2hvdyBpcyBkZXByZWNhdGVkISEnKVxuICAgICAgICB9O1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLSBFbmQgb2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge3tzdHJpbmc6IEFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX21peGlucyA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fdGFnTmFtZSA9ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gICAgfVxuXG4gICAgcG9zdCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgZ2V0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLmdldCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2VydmVyQ2FsbChtZXRob2RlLCBhcmdzKSB7XG4gICAgICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICAgICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgICAgIGlmICghYXBwIHx8IGFwcC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6ICcgKyB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoYXBwWzFdLCB0aGlzLl90YWdOYW1lLCBtZXRob2RlLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmcgfCBOdW1iZXJ9XG4gICAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgbmV3TW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICBpZihtb2RlbF9uYW1lIGluc3RhbmNlb2YgTnVtYmVyICYmIG1vZGVsX25hbWUuaGFzT3duUHJvcGVydHkoJ2xvYWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsX25hbWUubG9hZCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBwYXJhbSB2YWx1ZXMge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB1cGRhdGVNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9LCB2YWx1ZXMpIHtcbiAgICAgICAgbGV0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIG1vZGVsLmxvYWQoKS50aGVuKCgpPT57XG4gICAgICAgICAgICBtb2RlbC52YWx1ZXMgfD0gdmFsdWVzO1xuICAgICAgICAgICAgbW9kZWwuc2F2ZSgpLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWwudmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRhcHRlciB0byB0aGlzLiRjb250YWluZXIuZmluZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb21TZWxlY3RvclxuICAgICAqL1xuICAgIGZpbmQoZG9tU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlZnJlc2godGhpcy4kY29udGFpbmVyLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVsb2FkQ29udHJvbGxlcih0aGlzKTtcbiAgICB9XG5cbiAgICBzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcigkZm9ybSwgZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG5cbiAgICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYyBvZiBfY2hpbGRDb250cm9sbGVyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goLi4uY2MuaXRlcmF0ZUFsbENoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIEZvcm0gRXZlbnRzXG4gICAgICovXG4gICAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgICAgICBsZXQgcF9saXN0ID0gW107XG4gICAgICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCBtb2RlbCA9ICRmb3JtLmRhdGEoJ21vZGVsJyk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtb2RlbC5zeW5jRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbnN0YW5jZV92YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VfdmFsdWUucGsgIT09IG51bGwgJiYgaW5zdGFuY2VfdmFsdWUucGsgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLnNhdmUoaW5zdGFuY2VfdmFsdWUucGspO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLmNyZWF0ZShpbnN0YW5jZV92YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9tLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJFcnJvcnNJbkZvcm0oJGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MocmVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yc0luRm9ybSgkZm9ybSwgJChkYXRhLmh0bWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnJlcy5mbGF0KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59Il0sIm5hbWVzIjpbImFsbE9mZiIsImFwcCIsImNhbGxTZXJ2ZXIiLCJNb2RlbCIsInV1aWR2NCIsInNldEVycm9yc0luRm9ybSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidGFnTmFtZVRvUmVhZGFibGVOYW1lIiwiQWJzdHJhY3RTREMiLCJjb25zdHJ1Y3RvciIsIl91dWlkIiwiY29udGVudFVybCIsImNvbnRlbnRSZWxvYWQiLCJldmVudHMiLCJsb2FkX2FzeW5jIiwiX2lzRXZlbnRzU2V0IiwiX2FsbEV2ZW50cyIsIl91cmxQYXJhbXMiLCJfbW9kZWxzIiwiX2Nzc1VybHMiLCJhZnRlclNob3ciLCJjb25zb2xlIiwid2FybiIsIl9taXhpbnMiLCJfdGFnTmFtZSIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsIl9vbkxvYWREb25lIiwiJGNvbnRhaW5lciIsIl9pc01peGluIiwiX3J1bkxpZmVjeWNsZSIsIm1ldGhvZCIsImFyZ3MiLCJERUJVRyIsImRlYnVnIiwicmV0dXJuUHJvbWlzc2VzIiwibWl4aW5LZXkiLCJtaXhpbiIsInB1c2giLCJhcHBseSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwib25Jbml0IiwiQXJyYXkiLCJhcmd1bWVudHMiLCJwYXJlbnRDb250cm9sbGVyIiwiY2hpbGRDb250cm9sbGVyIiwib25Mb2FkIiwid2lsbFNob3ciLCJvblJlZnJlc2giLCJvblJlbW92ZSIsInJlbW92ZSIsIm1vZGVsIiwiY2xvc2UiLCJpIiwiaGFzT3duUHJvcGVydHkiLCJjYyIsImNfbmFtZSIsImFyciIsImxlbmd0aCIsInNwbGljZSIsImNvbnRyb2xsZXJfbmFtZSIsImFkZEV2ZW50IiwiZXZlbnQiLCJzZWxlY3RvciIsImhhbmRsZXIiLCJnZXRFdmVudHMiLCJhbGxFdmVudHMiLCJjb25jYXQiLCJpc0FycmF5IiwiXyIsIm1lcmdlIiwicG9zdCIsInVybCIsImdldCIsInN1Ym1pdEZvcm0iLCJmb3JtIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJzZXJ2ZXJDYWxsIiwibWV0aG9kZSIsInJlIiwibWF0Y2giLCJlcnJvciIsIm5hbWUiLCJuZXdNb2RlbCIsIm1vZGVsX25hbWUiLCJtb2RlbF9xdWVyeSIsIk51bWJlciIsImxvYWQiLCJ1cGRhdGVNb2RlbCIsInZhbHVlcyIsInNhdmUiLCJmaW5kIiwiZG9tU2VsZWN0b3IiLCJyZWZyZXNoIiwicmVsb2FkIiwicmVsb2FkQ29udHJvbGxlciIsInN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yIiwiJGZvcm0iLCJlIiwiX3N1Ym1pdE1vZGVsRm9ybSIsInN1Ym1pdE1vZGVsRm9ybSIsImRlZmF1bHRTdWJtaXRNb2RlbEZvcm0iLCJpdGVyYXRlQWxsQ2hpbGRyZW4iLCJyZXMiLCJwX2xpc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImRhdGEiLCJzeW5jRm9ybSIsImluc3RhbmNlX3ZhbHVlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb20iLCJwayIsImNyZWF0ZSIsInN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MiLCJjb250cm9sbGVyIiwiY2F0Y2giLCIkIiwiaHRtbCIsInN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yIiwiT2JqZWN0IiwiYXNzaWduIiwiZmxhdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n");
28
28
 
29
29
  /***/ }),
30
30
 
@@ -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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O1lBQ3pELElBQUksQ0FBQ29DLFVBQVUsRUFBRUEsVUFBVSxHQUFHLEVBQUUsQ0FBQyxLQUM1QkEsVUFBVSxHQUFHQSxVQUFVLENBQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLE1BQU1zQixPQUFPLEdBQUksY0FBYUwsV0FBWSxFQUFDO1lBQzNDLElBQUlJLFVBQVUsQ0FBQ0UsT0FBTyxDQUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtjQUNwQ0QsVUFBVSxDQUFDRyxJQUFJLENBQUNGLE9BQU8sQ0FBQztjQUN4QkYsU0FBUyxDQUFDckIsSUFBSSxDQUFFLE9BQU1kLE9BQVEsRUFBQyxFQUFFb0MsVUFBVSxDQUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUQ7VUFFSixDQUFDLENBQUM7UUFDTjtNQUNKO0lBQ0o7RUFDSjtFQUNBO0VBQ0E7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZG9tX2V2ZW50cy5qcz80MzM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Z2V0Q29udHJvbGxlcn0gZnJvbSAnLi9zZGNfdmlldy5qcyc7XG5cbmV4cG9ydCBjb25zdCBTVERfRVZFTlRfQkxBQ0tfTElTVCA9IFsnb25iZWZvcmV1bmxvYWQnXTtcbmV4cG9ydCBjb25zdCBTVERfRVZFTlRfTElTVCA9IE9iamVjdC5rZXlzKHdpbmRvdykuZmlsdGVyKGtleSA9PiAvXm9uLy50ZXN0KGtleSkgJiYgIVNURF9FVkVOVF9CTEFDS19MSVNULmluY2x1ZGVzKGtleSkpLm1hcCh4ID0+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'];\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");
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_socket_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\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_socket_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_socket_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 controller._childController = {};\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $html, controller).then(() => {\n app.safeEmpty(controller.$container);\n controller.$container.append($html);\n app.refresh(controller.$container, controller);\n });\n });\n },\n /**\n *\n * @param {jquery} $container\n * @param {AbstractSDC} leafController\n * @return {Promise<jQuery>}\n */\n refresh: ($container, leafController) => {\n if (!leafController) {\n leafController = app.getController($container);\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 return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, leafController.$container, leafController).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadMethodHTML)(leafController).then(() => {\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.setControllerEvents)(con);\n }\n leafController.onRefresh($container);\n });\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU13QjtBQU1EO0FBQ3NCO0FBQ3VCO0FBQ29DO0FBQ2hFO0FBQ1c7QUFFbkQsTUFBTXVCLGlCQUFpQixHQUFHO0VBQUMsV0FBVyxFQUFFO0FBQU8sQ0FBQztBQUVoRCxJQUFJQyxjQUFjLEdBQUcsU0FBQUEsQ0FBVUMsT0FBTyxFQUFFQyxLQUFLLEVBQUU7RUFDM0MsSUFBSUMsU0FBUztJQUFFQyxPQUFPLEdBQUcsS0FBSztFQUM5QixJQUFJLE9BQU9ILE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFDN0JFLFNBQVMsR0FBR0UsQ0FBQyxDQUFDQyxRQUFRLENBQUNDLGFBQWEsQ0FBQ04sT0FBTyxDQUFDLENBQUM7RUFDbEQsQ0FBQyxNQUFNO0lBQ0gsTUFBTU8sT0FBTyxHQUFJLFFBQU9QLE9BQU8sQ0FBQ1EsSUFBSyxFQUFDO0lBQ3RDTixTQUFTLEdBQUdFLENBQUMsQ0FBQ0MsUUFBUSxDQUFDQyxhQUFhLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDTCxTQUFTLENBQUNPLElBQUksQ0FBQyxTQUFTLEVBQUVULE9BQU8sQ0FBQztJQUNsQ0csT0FBTyxHQUFHLElBQUk7RUFDbEI7RUFHQSxJQUFJRixLQUFLLEVBQUU7SUFDUFMsTUFBTSxDQUFDQyxPQUFPLENBQUNWLEtBQUssQ0FBQyxDQUFDVyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxDQUFDLEVBQUVDLENBQUMsQ0FBQyxLQUFLO01BQ3RDLElBQUlELENBQUMsQ0FBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCYixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNjLGdCQUFnQixDQUFDSCxDQUFDLENBQUNJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsRUFBRUosQ0FBQyxDQUFDO01BQ2xFLENBQUMsTUFBTTtRQUNILElBQUdoQixpQkFBaUIsQ0FBQ2UsQ0FBQyxDQUFDSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDbkNMLENBQUMsR0FBR2YsaUJBQWlCLENBQUNlLENBQUMsQ0FBQ0ssV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMxQztRQUNBaEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDaUIsWUFBWSxDQUFDTixDQUFDLEVBQUVDLENBQUMsQ0FBQztNQUNuQztJQUNKLENBQUMsQ0FBQztFQUNOO0VBRUEsSUFBSVgsT0FBTyxFQUFFO0lBQ1RELFNBQVMsQ0FBQ2tCLFFBQVEsQ0FBQyx1Q0FBdUMsQ0FBQztFQUMvRDtFQUVBLE9BQU9sQixTQUFTO0FBQ3BCLENBQUM7QUFFRG1CLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHLFVBQVVmLE9BQU8sRUFBRU4sS0FBSyxFQUFFLEdBQUdzQixRQUFRLEVBQUU7RUFDbkQsSUFBSSxDQUFDaEIsT0FBTyxFQUFFO0lBQ1YsT0FBTyxFQUFFO0VBQ2I7RUFDQSxNQUFNTCxTQUFTLEdBQUdILGNBQWMsQ0FBQ1EsT0FBTyxFQUFFTixLQUFLLENBQUM7RUFDaEQsS0FBSyxNQUFNdUIsQ0FBQyxJQUFJRCxRQUFRLEVBQUU7SUFDdEJyQixTQUFTLENBQUN1QixNQUFNLENBQUNELENBQUMsQ0FBQztFQUN2QjtFQUNBLE9BQU90QixTQUFTO0FBRXBCLENBQUM7QUFFTSxJQUFJd0IsR0FBRyxHQUFHO0VBQ2JDLFVBQVUsRUFBRU4sTUFBTSxDQUFDTSxVQUFVLElBQUksRUFBRTtFQUNuQ0MsYUFBYSxFQUFFUCxNQUFNLENBQUNPLGFBQWEsSUFBSSxJQUFJO0VBQzNDQyxLQUFLLEVBQUVSLE1BQU0sQ0FBQ1EsS0FBSyxJQUFJLEtBQUs7RUFDNUJDLE9BQU8sRUFBRVQsTUFBTSxDQUFDUyxPQUFPLElBQUksS0FBSztFQUNoQ0MsUUFBUSxFQUFFLEVBQUU7RUFDWjNDLE1BQU0sRUFBRUEsc0RBQU07RUFDZDRDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxPQUFPLEVBQUUsS0FBSztFQUNkQyxlQUFlLEVBQUUsSUFBSTtFQUVyQkMsUUFBUSxFQUFFQSxDQUFBLEtBQU07SUFDWixJQUFJLENBQUNULEdBQUcsQ0FBQ08sT0FBTyxFQUFFO01BQ2RQLEdBQUcsQ0FBQ08sT0FBTyxHQUFHLElBQUk7TUFDbEIsSUFBSSxDQUFDUCxHQUFHLENBQUNRLGVBQWUsRUFBRTtRQUN0QlIsR0FBRyxDQUFDUSxlQUFlLEdBQUc5QixDQUFDLENBQUNnQyxFQUFFLENBQUN6QyxPQUFPO1FBQ2xDUyxDQUFDLENBQUNnQyxFQUFFLENBQUN6QyxPQUFPLEdBQUcsVUFBVTBDLEtBQUssRUFBRTtVQUM1QixNQUFNQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUdBLEtBQUssQ0FBQ0ksSUFBSSxHQUFHSixLQUFLO1VBQzFFLElBQUksQ0FBQzVDLDhEQUFjLENBQUNpRCxRQUFRLENBQUNKLE9BQU8sQ0FBQyxFQUFFO1lBQ25DN0MsOERBQWMsQ0FBQ2tELElBQUksQ0FBQ0wsT0FBTyxDQUFDO1lBQzVCbEMsQ0FBQyxDQUFDaUIsTUFBTSxDQUFDLENBQUN1QixFQUFFLENBQUNOLE9BQU8sRUFBRTVDLGtFQUFrQixDQUFDO1VBQzdDO1VBQ0EsT0FBT2dDLEdBQUcsQ0FBQ1EsZUFBZSxDQUFDTSxJQUFJLENBQUMsSUFBSSxFQUFFSCxLQUFLLENBQUM7UUFDaEQsQ0FBQztRQUVEWCxHQUFHLENBQUNtQixZQUFZLENBQUMsQ0FBQztNQUN0QixDQUFDLE1BQUs7UUFDRmhELHFEQUFLLENBQUMsQ0FBQztNQUNYO01BRUFELDJEQUFXLENBQUMsQ0FBQztNQUViTCw4REFBVSxDQUFDLENBQUM7TUFFWm1DLEdBQUcsQ0FBQ00sY0FBYyxHQUFHTixHQUFHLENBQUNNLGNBQWMsSUFBSSxJQUFJN0Msd0RBQVcsQ0FBQyxDQUFDO0lBQ2hFO0lBRUF1QyxHQUFHLENBQUNLLFFBQVEsR0FBR3pDLDJEQUFPLENBQUMsQ0FBQztJQUV4QixLQUFJLElBQUksQ0FBQ3dELEdBQUcsRUFBRUMsVUFBVSxDQUFDLElBQUlyQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ2UsR0FBRyxDQUFDdEMsTUFBTSxDQUFDLEVBQUU7TUFDckQsSUFBRyxDQUFDMkQsVUFBVSxDQUFDQyxVQUFVLEVBQUU1RCxzREFBTSxDQUFDMEQsR0FBRyxDQUFDLENBQUNFLFVBQVUsR0FBR3ZFLHNEQUFPLENBQUMsQ0FBQztJQUNqRTtJQUVBLE9BQU9HLDJFQUE2QixDQUFDOEMsR0FBRyxDQUFDSyxRQUFRLEVBQUV0RCxzREFBTyxDQUFDLENBQUMsRUFBRWlELEdBQUcsQ0FBQ00sY0FBYyxDQUFDO0VBQ3JGLENBQUM7RUFFRGEsWUFBWSxFQUFFQSxDQUFBLEtBQUs7SUFDZnpDLENBQUMsQ0FBQ2dDLEVBQUUsQ0FBQ2EsV0FBVyxHQUFHLFVBQVVDLEtBQUssRUFBRTtNQUNoQyxPQUFPeEIsR0FBRyxDQUFDdUIsV0FBVyxDQUFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFOEMsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFDRDlDLENBQUMsQ0FBQ2dDLEVBQUUsQ0FBQ2UsU0FBUyxHQUFHLFlBQVk7TUFDekIsT0FBT3pCLEdBQUcsQ0FBQ3lCLFNBQVMsQ0FBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0RBLENBQUMsQ0FBQ2dDLEVBQUUsQ0FBQ2dCLFVBQVUsR0FBRyxZQUFZO01BQzFCLE9BQU8xQixHQUFHLENBQUMwQixVQUFVLENBQUNoRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztFQUNMLENBQUM7RUFFRGlELGVBQWUsRUFBR0MsVUFBVSxJQUFLO0lBQzdCLElBQUkvQyxPQUFPLEdBQUdoQyxpRUFBa0IsQ0FBQytFLFVBQVUsQ0FBQzlDLElBQUksQ0FBQztJQUNqRCxPQUFPRCxPQUFPLENBQUNnRCxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztFQUM5QyxDQUFDO0VBRUQ7QUFDSjtBQUNBO0FBQ0E7RUFDSUMsY0FBYyxFQUFHRixVQUFVLElBQUs7SUFDNUIsSUFBSS9DLE9BQU8sR0FBR21CLEdBQUcsQ0FBQzJCLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDO0lBQzdDLElBQUlHLGdCQUFnQixHQUFHLElBQUlILFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDakUsOERBQWMsQ0FBQ2tCLE9BQU8sQ0FBQyxHQUFHLENBQUNrRCxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7SUFDaERBLGdCQUFnQixDQUFDQyxRQUFRLEdBQUduRCxPQUFPO0lBQ25DYyxNQUFNLENBQUM3QyxpRUFBa0IsQ0FBQytCLE9BQU8sQ0FBQyxDQUFDLEdBQUduQixzREFBTSxDQUFDWixpRUFBa0IsQ0FBQytCLE9BQU8sQ0FBQyxDQUFDLEdBQUdrRCxnQkFBZ0I7RUFDaEcsQ0FBQztFQUVEeEUsVUFBVSxFQUFFQSxDQUFBLEtBQU07SUFDZEEsd0RBQVUsQ0FBQyxDQUFDO0VBQ2hCLENBQUM7RUFFRDtBQUNKO0FBQ0E7QUFDQTtFQUNJMEUsUUFBUSxFQUFHTCxVQUFVLElBQUs7SUFDdEIsSUFBSS9DLE9BQU8sR0FBR21CLEdBQUcsQ0FBQzJCLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDO0lBQzdDakUsOERBQWMsQ0FBQ2tCLE9BQU8sQ0FBQyxHQUFHLENBQUMrQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQzFDQSxVQUFVLENBQUNNLFNBQVMsQ0FBQ0YsUUFBUSxHQUFHbkQsT0FBTztJQUN2QyxPQUFPO01BQ0g7QUFDWjtBQUNBO0FBQ0E7TUFDWXNELFFBQVEsRUFBRUEsQ0FBQyxHQUFHQyxNQUFNLEtBQUs7UUFDckIsS0FBSyxJQUFJQyxLQUFLLElBQUlELE1BQU0sRUFBRTtVQUN0QixJQUFJRSxTQUFTO1VBQ2IsSUFBSSxPQUFPRCxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCQyxTQUFTLEdBQUd6RixpRUFBa0IsQ0FBQ3dGLEtBQUssQ0FBQztVQUN6QyxDQUFDLE1BQU0sSUFBSUEsS0FBSyxFQUFFO1lBQ2RDLFNBQVMsR0FBR3RDLEdBQUcsQ0FBQzJCLGVBQWUsQ0FBQ1UsS0FBSyxDQUFDO1VBQzFDO1VBQ0ExRSw4REFBYyxDQUFDa0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvQyxJQUFJLENBQUNxQixTQUFTLENBQUM7UUFDOUM7TUFDSjtJQUNKLENBQUM7RUFDTCxDQUFDO0VBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsSUFBSSxFQUFFQSxDQUFDbEIsVUFBVSxFQUFFbUIsR0FBRyxFQUFFQyxJQUFJLEtBQUs7SUFDN0IsSUFBSSxDQUFDQSxJQUFJLEVBQUU7TUFDUEEsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiO0lBRUFBLElBQUksQ0FBQ3hDLFVBQVUsR0FBR0QsR0FBRyxDQUFDQyxVQUFVO0lBQ2hDLE9BQU9ELEdBQUcsQ0FBQzBDLElBQUksQ0FBQ3JCLFVBQVUsRUFBRW1CLEdBQUcsRUFBRUcsTUFBTSxFQUFFakUsQ0FBQyxDQUFDNkQsSUFBSSxDQUFDO0VBQ3BELENBQUM7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJSyxHQUFHLEVBQUVBLENBQUN2QixVQUFVLEVBQUVtQixHQUFHLEVBQUVDLElBQUksS0FBSztJQUM1QixPQUFPekMsR0FBRyxDQUFDMEMsSUFBSSxDQUFDckIsVUFBVSxFQUFFbUIsR0FBRyxFQUFFQyxJQUFJLEVBQUUvRCxDQUFDLENBQUNrRSxHQUFHLENBQUM7RUFDakQsQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUYsSUFBSSxFQUFFQSxDQUFDckIsVUFBVSxFQUFFbUIsR0FBRyxFQUFFQyxJQUFJLEVBQUVJLE1BQU0sS0FBSztJQUNyQyxJQUFJLENBQUNKLElBQUksRUFBRTtNQUNQQSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2I7SUFFQUEsSUFBSSxDQUFDckMsT0FBTyxHQUFHSixHQUFHLENBQUNJLE9BQU87SUFDMUJxQyxJQUFJLENBQUNLLE9BQU8sR0FBR0wsSUFBSSxDQUFDSyxPQUFPLElBQUksS0FBSztJQUVwQyxNQUFNQyxDQUFDLEdBQUcsSUFBSUMsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3ZDLE9BQU9MLE1BQU0sQ0FBQ0wsR0FBRyxFQUFFQyxJQUFJLENBQUMsQ0FBQ1UsSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxFQUFFdkQsQ0FBQyxLQUFLO1FBQ3ZDbUQsT0FBTyxDQUFDRyxDQUFDLEVBQUVDLENBQUMsRUFBRXZELENBQUMsQ0FBQztRQUNoQixJQUFJc0QsQ0FBQyxDQUFDRSxNQUFNLEtBQUssVUFBVSxFQUFFO1VBQ3pCckYsdURBQU8sQ0FBQyxXQUFXLEVBQUVtRixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxNQUFNO1VBQ0hMLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLE1BQU07WUFDVG5ELEdBQUcsQ0FBQ3VELE9BQU8sQ0FBQ2xDLFVBQVUsQ0FBQ0MsVUFBVSxDQUFDO1VBQ3RDLENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQyxDQUFDLENBQUNrQyxLQUFLLENBQUNOLE1BQU0sQ0FBQztJQUNwQixDQUFDLENBQUM7SUFFRixPQUFPSCxDQUFDO0VBQ1osQ0FBQztFQUVEVSx1QkFBdUIsRUFBRUEsQ0FBQ3BDLFVBQVUsRUFBRXFDLElBQUksRUFBRWxCLEdBQUcsRUFBRUssTUFBTSxLQUFLO0lBQ3hELElBQUljLFFBQVEsR0FBRyxJQUFJQyxRQUFRLENBQUNGLElBQUksQ0FBQztJQUNqQyxNQUFNRyxVQUFVLEdBQUlULENBQUMsSUFBSTtNQUNyQixJQUFJQSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDZm5GLHVEQUFPLENBQUMsV0FBVyxFQUFFbUYsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQ3ZDLENBQUMsTUFBTTtRQUNIekQsTUFBTSxDQUFDbUUsUUFBUSxDQUFDQyxJQUFJLEdBQUdYLENBQUMsQ0FBQyxLQUFLLENBQUM7TUFDbkM7SUFFSixDQUFDO0lBRUQsTUFBTUwsQ0FBQyxHQUFHLElBQUlDLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUN2Q2xHLGlFQUFrQixDQUFDMkcsUUFBUSxFQUFHbkIsR0FBRyxJQUFJa0IsSUFBSSxDQUFDTSxNQUFNLEVBQUluQixNQUFNLElBQUlhLElBQUksQ0FBQ2IsTUFBTyxDQUFDLENBQ3RFTSxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEVBQUV2RCxDQUFDLEtBQUs7UUFDZm1ELE9BQU8sQ0FBQ0csQ0FBQyxFQUFFQyxDQUFDLEVBQUV2RCxDQUFDLENBQUM7UUFDaEIsSUFBSXNELENBQUMsQ0FBQ0UsTUFBTSxLQUFLLFVBQVUsRUFBRTtVQUN6Qk8sVUFBVSxDQUFDVCxDQUFDLENBQUM7UUFDakIsQ0FBQyxNQUFNO1VBQ0hMLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLE1BQU07WUFDVG5ELEdBQUcsQ0FBQ3VELE9BQU8sQ0FBQ2xDLFVBQVUsQ0FBQ0MsVUFBVSxDQUFDO1VBQ3RDLENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQyxDQUFDLENBQ0RrQyxLQUFLLENBQUMsQ0FBQ0osQ0FBQyxFQUFDQyxDQUFDLEVBQUN2RCxDQUFDLEtBQUs7UUFDZCxJQUFHc0QsQ0FBQyxDQUFDRSxNQUFNLEtBQUssR0FBRyxFQUFFO1VBQ2pCRixDQUFDLEdBQUdBLENBQUMsQ0FBQ2EsWUFBWTtVQUNsQkosVUFBVSxDQUFDVCxDQUFDLENBQUM7VUFDYkgsT0FBTyxDQUFDRyxDQUFDLEVBQUVDLENBQUMsRUFBRXZELENBQUMsQ0FBQztRQUNwQixDQUFDLE1BQUs7VUFDRm9ELE1BQU0sQ0FBQ0UsQ0FBQyxFQUFFQyxDQUFDLEVBQUV2RCxDQUFDLENBQUM7UUFDbkI7TUFDSixDQUFDLENBQUM7SUFDVixDQUFDLENBQUM7SUFFRixPQUFPaUQsQ0FBQztFQUVaLENBQUM7RUFDRG1CLFVBQVUsRUFBRUEsQ0FBQ1IsSUFBSSxFQUFFbEIsR0FBRyxFQUFFSyxNQUFNLEtBQUs7SUFDL0IsSUFBSWMsUUFBUSxHQUFHLElBQUlDLFFBQVEsQ0FBQ0YsSUFBSSxDQUFDO0lBQ2pDLE9BQU8sSUFBSVYsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3BDbEcsaUVBQWtCLENBQUMyRyxRQUFRLEVBQUduQixHQUFHLElBQUlrQixJQUFJLENBQUNNLE1BQU0sRUFBSW5CLE1BQU0sSUFBSWEsSUFBSSxDQUFDYixNQUFPLENBQUMsQ0FDdEVNLElBQUksQ0FBQ0YsT0FBTyxDQUFDLENBQUNPLEtBQUssQ0FBQ04sTUFBTSxDQUFDO0lBQ3BDLENBQUMsQ0FBQztFQUNOLENBQUM7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0k1RixhQUFhLEVBQUdrRSxLQUFLLElBQUtsRSwyREFBYSxDQUFDa0UsS0FBSyxDQUFDO0VBRTlDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxTQUFTLEVBQUdELEtBQUssSUFBSztJQUNsQixJQUFJMkMsU0FBUyxHQUFHM0MsS0FBSyxDQUFDM0IsUUFBUSxDQUFDLENBQUM7SUFDaENzRSxTQUFTLENBQUNDLElBQUksQ0FBQyxVQUFVQyxDQUFDLEVBQUUvRixPQUFPLEVBQUU7TUFDakMsSUFBSWdHLFFBQVEsR0FBRzVGLENBQUMsQ0FBQ0osT0FBTyxDQUFDO01BQ3pCMEIsR0FBRyxDQUFDMEIsVUFBVSxDQUFDNEMsUUFBUSxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUVGLE9BQU85QyxLQUFLO0VBQ2hCLENBQUM7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJRCxXQUFXLEVBQUVBLENBQUNDLEtBQUssRUFBRStDLElBQUksS0FBSztJQUMxQkEsSUFBSSxDQUFDQyxZQUFZLENBQUNoRCxLQUFLLENBQUM7SUFDeEIsT0FBT3hCLEdBQUcsQ0FBQzBCLFVBQVUsQ0FBQ0YsS0FBSyxDQUFDO0VBQ2hDLENBQUM7RUFHRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0lFLFVBQVUsRUFBR0YsS0FBSyxJQUFLO0lBQ25CQSxLQUFLLENBQUM0QyxJQUFJLENBQUMsWUFBWTtNQUNuQixJQUFJSyxLQUFLLEdBQUcvRixDQUFDLENBQUMsSUFBSSxDQUFDO01BQ25CLElBQUkrRixLQUFLLENBQUMxRixJQUFJLENBQUUsR0FBRTNCLDZEQUFvQixFQUFDLENBQUMsRUFBRTtRQUN0Q3FILEtBQUssQ0FBQzFGLElBQUksQ0FBRSxHQUFFM0IsNkRBQW9CLEVBQUMsQ0FBQyxDQUFDc0gsTUFBTSxDQUFDLENBQUM7TUFDakQ7SUFDSixDQUFDLENBQUM7SUFFRmxELEtBQUssQ0FBQ21ELElBQUksQ0FBRSxJQUFHdEgsMERBQWlCLEVBQUMsQ0FBQyxDQUFDK0csSUFBSSxDQUFDLFlBQVk7TUFDaEQsTUFBTS9DLFVBQVUsR0FBRzNDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ0ssSUFBSSxDQUFFLEdBQUUzQiw2REFBb0IsRUFBQyxDQUFDO01BQ3pEaUUsVUFBVSxJQUFJQSxVQUFVLENBQUNxRCxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUM7SUFFRixPQUFPbEQsS0FBSyxDQUFDa0QsTUFBTSxDQUFDLENBQUM7RUFDekIsQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7RUFDSUUsZ0JBQWdCLEVBQUd2RCxVQUFVLElBQUs7SUFDOUIsT0FBT2xFLGtFQUFvQixDQUFDa0UsVUFBVSxDQUFDLENBQUM4QixJQUFJLENBQUUwQixJQUFJLElBQUs7TUFDbkQsSUFBSUMsS0FBSyxHQUFHcEcsQ0FBQyxDQUFDbUcsSUFBSSxDQUFDO01BQ25CeEQsVUFBVSxDQUFDMEQsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO01BQ2hDN0gsMkVBQTZCLENBQUM4QyxHQUFHLENBQUNLLFFBQVEsRUFBRXlFLEtBQUssRUFBRXpELFVBQVUsQ0FBQyxDQUFDOEIsSUFBSSxDQUFDLE1BQU07UUFDdEVuRCxHQUFHLENBQUN5QixTQUFTLENBQUNKLFVBQVUsQ0FBQ0MsVUFBVSxDQUFDO1FBQ3BDRCxVQUFVLENBQUNDLFVBQVUsQ0FBQ3ZCLE1BQU0sQ0FBQytFLEtBQUssQ0FBQztRQUNuQzlFLEdBQUcsQ0FBQ3VELE9BQU8sQ0FBQ2xDLFVBQVUsQ0FBQ0MsVUFBVSxFQUFFRCxVQUFVLENBQUM7TUFDbEQsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ04sQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJa0MsT0FBTyxFQUFFQSxDQUFDakMsVUFBVSxFQUFFMEQsY0FBYyxLQUFLO0lBQ3JDLElBQUksQ0FBQ0EsY0FBYyxFQUFFO01BQ2pCQSxjQUFjLEdBQUdoRixHQUFHLENBQUMxQyxhQUFhLENBQUNnRSxVQUFVLENBQUM7SUFDbEQ7SUFFQSxJQUFJLENBQUMwRCxjQUFjLEVBQUU7TUFDakIsT0FBTy9ILGtFQUFtQixDQUFDLENBQUM7SUFDaEM7SUFFQSxJQUFJb0UsVUFBVSxHQUFHMkQsY0FBYztJQUMvQixJQUFJckgsY0FBYyxHQUFHLEVBQUU7SUFDdkIsT0FBTzBELFVBQVUsRUFBRTtNQUNmQSxVQUFVLENBQUM0RCxZQUFZLEdBQUcsS0FBSztNQUMvQnRILGNBQWMsQ0FBQ3VILE9BQU8sQ0FBQzdELFVBQVUsQ0FBQztNQUNsQ0EsVUFBVSxHQUFHQSxVQUFVLENBQUM4RCxpQkFBaUI7SUFDN0M7SUFFQSxPQUFPakksMkVBQTZCLENBQUM4QyxHQUFHLENBQUNLLFFBQVEsRUFBRTJFLGNBQWMsQ0FBQzFELFVBQVUsRUFBRTBELGNBQWMsQ0FBQyxDQUFDN0IsSUFBSSxDQUFDLE1BQU07TUFDckczRiw4REFBZ0IsQ0FBQ3dILGNBQWMsQ0FBQyxDQUFDN0IsSUFBSSxDQUFDLE1BQU07UUFDeEMsS0FBSyxJQUFJaUMsR0FBRyxJQUFJekgsY0FBYyxFQUFFO1VBQzVCRyx1RUFBbUIsQ0FBQ3NILEdBQUcsQ0FBQztRQUM1QjtRQUVBSixjQUFjLENBQUNLLFNBQVMsQ0FBQy9ELFVBQVUsQ0FBQztNQUN4QyxDQUFDLENBQUM7SUFFTixDQUFDLENBQUM7RUFDTjtBQUNKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX21haW4uanM/MDhmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgICB0YWdOYW1lVG9DYW1lbENhc2UsXG4gICAgZ2V0Qm9keSxcbiAgICB1cGxvYWRGaWxlRm9ybURhdGEsXG4gICAgcHJvbWlzZUR1bW15RmFjdG9yeVxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gICAgcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIsXG4gICAgcmVsb2FkSFRNTENvbnRyb2xsZXIsXG4gICAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgICBDT05UUk9MTEVSX0NMQVNTLCBnZXRDb250cm9sbGVyLCBjbGVhbkNhY2hlLCByZWxvYWRNZXRob2RIVE1MXG59IGZyb20gXCIuL3NkY192aWV3LmpzXCI7XG5pbXBvcnQge0Fic3RyYWN0U0RDfSBmcm9tIFwiLi9BYnN0cmFjdFNEQy5qc1wiO1xuaW1wb3J0IHtHbG9iYWwsIGNvbnRyb2xsZXJMaXN0LCB0YWdMaXN0fSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtpbml0RXZlbnRzLCBzZXRDb250cm9sbGVyRXZlbnRzLCBTVERfRVZFTlRfTElTVCwgd2luZG93RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi9zZGNfZG9tX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2lzQ29ubmVjdGVkLCBjbG9zZX0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgbGV0ICRuZXdfZWxlbSwgaXNfc2VsZiA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gYHRoaXMuJHtlbGVtZW50Lm5hbWV9YDtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAgICAgJG5ld19lbGVtLmRhdGEoJ2hhbmRsZXInLCBlbGVtZW50KTtcbiAgICAgICAgaXNfc2VsZiA9IHRydWVcbiAgICB9XG5cblxuICAgIGlmIChwcm9wcykge1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBpZiAoay5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgICAgICAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc19zZWxmKSB7XG4gICAgICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiAkbmV3X2VsZW07XG59XG5cbndpbmRvdy5zZGNEb20gPSBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICAgIH1cbiAgICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICAgIENTUkZfVE9LRU46IHdpbmRvdy5DU1JGX1RPS0VOIHx8ICcnLFxuICAgIExBTkdVQUdFX0NPREU6IHdpbmRvdy5MQU5HVUFHRV9DT0RFIHx8ICdlbicsXG4gICAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCAnMC4wJyxcbiAgICB0YWdOYW1lczogW10sXG4gICAgR2xvYmFsOiBHbG9iYWwsXG4gICAgcm9vdENvbnRyb2xsZXI6IG51bGwsXG4gICAgX2lzSW5pdDogZmFsc2UsXG4gICAgX29yaWdpbl90cmlnZ2VyOiBudWxsLFxuXG4gICAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICAgICAgaWYgKCFhcHAuX2lzSW5pdCkge1xuICAgICAgICAgICAgYXBwLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhcHAuX29yaWdpbl90cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHAuX29yaWdpbl90cmlnZ2VyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICAgICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcC50YWdOYW1lcyA9IHRhZ0xpc3QoKTtcblxuICAgICAgICBmb3IobGV0IFt0YWcsIGNvbnRyb2xsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFwcC5HbG9iYWwpKSB7XG4gICAgICAgICAgICBpZighY29udHJvbGxlci4kY29udGFpbmVyKSBHbG9iYWxbdGFnXS4kY29udGFpbmVyID0gZ2V0Qm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgZ2V0Qm9keSgpLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVKcXVlcnk6ICgpPT4ge1xuICAgICAgICAkLmZuLnNhZmVSZXBsYWNlID0gZnVuY3Rpb24gKCRlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVSZXBsYWNlKCQodGhpcyksICRlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICAkLmZuLnNhZmVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZUVtcHR5KCQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250cm9sbGVyVG9UYWc6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnJlcGxhY2UoLy1jb250cm9sbGVyJC8sICcnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAgICovXG4gICAgcmVnaXN0ZXJHbG9iYWw6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IGdsb2JhbENvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXSA9IFtnbG9iYWxDb250cm9sbGVyLCBbXV07XG4gICAgICAgIGdsb2JhbENvbnRyb2xsZXIuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICB3aW5kb3dbdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpXSA9IEdsb2JhbFt0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSldID0gZ2xvYmFsQ29udHJvbGxlcjtcbiAgICB9LFxuXG4gICAgY2xlYW5DYWNoZTogKCkgPT4ge1xuICAgICAgICBjbGVhbkNhY2hlKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gQ29udHJvbGxlclxuICAgICAqL1xuICAgIHJlZ2lzdGVyOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdID0gW0NvbnRyb2xsZXIsIFtdXTtcbiAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtaXhpbiBvZiBtaXhpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKG1peGluKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhtaXhpbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXS5wdXNoKG1peGluTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgcG9zdDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MuQ1NSRl9UT0tFTiA9IGFwcC5DU1JGX1RPS0VOO1xuICAgICAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBwYXJhbXMsICQucG9zdCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgZ2V0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kICQuZ2V0IG9yICQucG9zdFxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgYWpheDogKGNvbnRyb2xsZXIsIHVybCwgYXJncywgbWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCh1cmwsIGFyZ3MpLnRoZW4oKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfSxcblxuICAgIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICAgICAgICBjb25zdCByZWRpcmVjdG9yID0gKGEpPT4ge1xuICAgICAgICAgICAgaWYgKGFbJ3VybC1saW5rJ10pIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhWyd1cmwnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgKHVybCB8fCBmb3JtLmFjdGlvbiksIChtZXRob2QgfHwgZm9ybS5tZXRob2QpKVxuICAgICAgICAgICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGEsYixjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGEuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBhLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG5cbiAgICB9LFxuICAgIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsICh1cmwgfHwgZm9ybS5hY3Rpb24pLCAobWV0aG9kIHx8IGZvcm0ubWV0aG9kKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gICAgLyoqXG4gICAgICogc2FmZUVtcHR5IHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIGNvbnRhaW5lciB0byBiZSBlbXB0eWVkXG4gICAgICovXG4gICAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwLnNhZmVSZW1vdmUoJGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGVsZW07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAgICovXG4gICAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICAgICAkbmV3Lmluc2VydEJlZm9yZSgkZWxlbSk7XG4gICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICAgKi9cbiAgICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgICAgICAgICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGh0bWwsIGNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFwcC5zYWZlRW1wdHkoY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVmcmVzaDogKCRjb250YWluZXIsIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGxlYWZDb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZUR1bW15RmFjdG9yeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBsZWFmQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lciwgbGVhZkNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVsb2FkTWV0aG9kSFRNTChsZWFmQ29udHJvbGxlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29uIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbnRyb2xsZXJFdmVudHMoY29uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZWFmQ29udHJvbGxlci5vblJlZnJlc2goJGNvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInByb21pc2VEdW1teUZhY3RvcnkiLCJyZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwiY2xlYW5DYWNoZSIsInJlbG9hZE1ldGhvZEhUTUwiLCJBYnN0cmFjdFNEQyIsIkdsb2JhbCIsImNvbnRyb2xsZXJMaXN0IiwidGFnTGlzdCIsImluaXRFdmVudHMiLCJzZXRDb250cm9sbGVyRXZlbnRzIiwiU1REX0VWRU5UX0xJU1QiLCJ3aW5kb3dFdmVudEhhbmRsZXIiLCJ0cmlnZ2VyIiwiaXNDb25uZWN0ZWQiLCJjbG9zZSIsIlBST1BFUlRJRVNfVVBEQVRFIiwic2RjRG9tRnJhZ21lbnQiLCJlbGVtZW50IiwicHJvcHMiLCIkbmV3X2VsZW0iLCJpc19zZWxmIiwiJCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJuYW1lIiwiZGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiayIsInYiLCJzdGFydHNXaXRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwic2V0QXR0cmlidXRlIiwiYWRkQ2xhc3MiLCJ3aW5kb3ciLCJzZGNEb20iLCJjaGlsZHJlbiIsImMiLCJhcHBlbmQiLCJhcHAiLCJDU1JGX1RPS0VOIiwiTEFOR1VBR0VfQ09ERSIsIkRFQlVHIiwiVkVSU0lPTiIsInRhZ05hbWVzIiwicm9vdENvbnRyb2xsZXIiLCJfaXNJbml0IiwiX29yaWdpbl90cmlnZ2VyIiwiaW5pdF9zZGMiLCJmbiIsImV2ZW50IiwiZXZfdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR5cGUiLCJpbmNsdWRlcyIsInB1c2giLCJvbiIsInVwZGF0ZUpxdWVyeSIsInRhZyIsImNvbnRyb2xsZXIiLCIkY29udGFpbmVyIiwic2FmZVJlcGxhY2UiLCIkZWxlbSIsInNhZmVFbXB0eSIsInNhZmVSZW1vdmUiLCJjb250cm9sbGVyVG9UYWciLCJDb250cm9sbGVyIiwicmVwbGFjZSIsInJlZ2lzdGVyR2xvYmFsIiwiZ2xvYmFsQ29udHJvbGxlciIsIl90YWdOYW1lIiwicmVnaXN0ZXIiLCJwcm90b3R5cGUiLCJhZGRNaXhpbiIsIm1peGlucyIsIm1peGluIiwibWl4aW5OYW1lIiwicG9zdCIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRoZW4iLCJhIiwiYiIsInN0YXR1cyIsInJlZnJlc2giLCJjYXRjaCIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJyZWRpcmVjdG9yIiwibG9jYXRpb24iLCJocmVmIiwiYWN0aW9uIiwicmVzcG9uc2VKU09OIiwic3VibWl0Rm9ybSIsIiRjaGlsZHJlbiIsImVhY2giLCJfIiwiJGVsZW1lbnQiLCIkbmV3IiwiaW5zZXJ0QmVmb3JlIiwiJHRoaXMiLCJyZW1vdmUiLCJmaW5kIiwicmVsb2FkQ29udHJvbGxlciIsImh0bWwiLCIkaHRtbCIsIl9jaGlsZENvbnRyb2xsZXIiLCJsZWFmQ29udHJvbGxlciIsIl9pc0V2ZW50c1NldCIsInVuc2hpZnQiLCJfcGFyZW50Q29udHJvbGxlciIsImNvbiIsIm9uUmVmcmVzaCJdLCJzb3VyY2VSb290IjoiIn0=\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_socket_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\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_socket_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_socket_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 controller._childController = {};\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $html, controller).then(() => {\n app.safeEmpty(controller.$container);\n controller.$container.append($html);\n app.refresh(controller.$container, controller);\n });\n });\n },\n /**\n *\n * @param {jquery} $container\n * @param {AbstractSDC} leafController\n * @return {Promise<jQuery>}\n */\n refresh: ($container, leafController) => {\n if (!leafController) {\n leafController = app.getController($container);\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 return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, leafController.$container, leafController).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadMethodHTML)(leafController).then(() => {\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.setControllerEvents)(con);\n }\n leafController.onRefresh($container);\n });\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtFQUNJa0MsT0FBTyxFQUFFQSxDQUFDakMsVUFBVSxFQUFFMEQsY0FBYyxLQUFLO0lBQ3JDLElBQUksQ0FBQ0EsY0FBYyxFQUFFO01BQ2pCQSxjQUFjLEdBQUdoRixHQUFHLENBQUMxQyxhQUFhLENBQUNnRSxVQUFVLENBQUM7SUFDbEQ7SUFFQSxJQUFJLENBQUMwRCxjQUFjLEVBQUU7TUFDakIsT0FBTy9ILGtFQUFtQixDQUFDLENBQUM7SUFDaEM7SUFFQSxJQUFJb0UsVUFBVSxHQUFHMkQsY0FBYztJQUMvQixJQUFJckgsY0FBYyxHQUFHLEVBQUU7SUFDdkIsT0FBTzBELFVBQVUsRUFBRTtNQUNmQSxVQUFVLENBQUM0RCxZQUFZLEdBQUcsS0FBSztNQUMvQnRILGNBQWMsQ0FBQ3VILE9BQU8sQ0FBQzdELFVBQVUsQ0FBQztNQUNsQ0EsVUFBVSxHQUFHQSxVQUFVLENBQUM4RCxpQkFBaUI7SUFDN0M7SUFFQSxPQUFPakksMkVBQTZCLENBQUM4QyxHQUFHLENBQUNLLFFBQVEsRUFBRTJFLGNBQWMsQ0FBQzFELFVBQVUsRUFBRTBELGNBQWMsQ0FBQyxDQUFDN0IsSUFBSSxDQUFDLE1BQU07TUFDckczRiw4REFBZ0IsQ0FBQ3dILGNBQWMsQ0FBQyxDQUFDN0IsSUFBSSxDQUFDLE1BQU07UUFDeEMsS0FBSyxJQUFJaUMsR0FBRyxJQUFJekgsY0FBYyxFQUFFO1VBQzVCRyx1RUFBbUIsQ0FBQ3NILEdBQUcsQ0FBQztRQUM1QjtRQUVBSixjQUFjLENBQUNLLFNBQVMsQ0FBQy9ELFVBQVUsQ0FBQztNQUN4QyxDQUFDLENBQUM7SUFFTixDQUFDLENBQUM7RUFDTjtBQUNKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX21haW4uanM/MDhmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgICB0YWdOYW1lVG9DYW1lbENhc2UsXG4gICAgZ2V0Qm9keSxcbiAgICB1cGxvYWRGaWxlRm9ybURhdGEsXG4gICAgcHJvbWlzZUR1bW15RmFjdG9yeVxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gICAgcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIsXG4gICAgcmVsb2FkSFRNTENvbnRyb2xsZXIsXG4gICAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgICBDT05UUk9MTEVSX0NMQVNTLCBnZXRDb250cm9sbGVyLCBjbGVhbkNhY2hlLCByZWxvYWRNZXRob2RIVE1MXG59IGZyb20gXCIuL3NkY192aWV3LmpzXCI7XG5pbXBvcnQge0Fic3RyYWN0U0RDfSBmcm9tIFwiLi9BYnN0cmFjdFNEQy5qc1wiO1xuaW1wb3J0IHtHbG9iYWwsIGNvbnRyb2xsZXJMaXN0LCB0YWdMaXN0fSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtpbml0RXZlbnRzLCBzZXRDb250cm9sbGVyRXZlbnRzLCBTVERfRVZFTlRfTElTVCwgd2luZG93RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi9zZGNfZG9tX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2lzQ29ubmVjdGVkLCBjbG9zZX0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgbGV0ICRuZXdfZWxlbSwgaXNfc2VsZiA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gYHRoaXMuJHtlbGVtZW50Lm5hbWV9YDtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAgICAgJG5ld19lbGVtLmRhdGEoJ2hhbmRsZXInLCBlbGVtZW50KTtcbiAgICAgICAgaXNfc2VsZiA9IHRydWVcbiAgICB9XG5cblxuICAgIGlmIChwcm9wcykge1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBpZiAoay5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgICAgICAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc19zZWxmKSB7XG4gICAgICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiAkbmV3X2VsZW07XG59XG5cbndpbmRvdy5zZGNEb20gPSBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICAgIH1cbiAgICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICAgIENTUkZfVE9LRU46IHdpbmRvdy5DU1JGX1RPS0VOIHx8ICcnLFxuICAgIExBTkdVQUdFX0NPREU6IHdpbmRvdy5MQU5HVUFHRV9DT0RFIHx8ICdlbicsXG4gICAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCAnMC4wJyxcbiAgICB0YWdOYW1lczogW10sXG4gICAgR2xvYmFsOiBHbG9iYWwsXG4gICAgcm9vdENvbnRyb2xsZXI6IG51bGwsXG4gICAgX2lzSW5pdDogZmFsc2UsXG4gICAgX29yaWdpbl90cmlnZ2VyOiBudWxsLFxuXG4gICAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICAgICAgaWYgKCFhcHAuX2lzSW5pdCkge1xuICAgICAgICAgICAgYXBwLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhcHAuX29yaWdpbl90cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHAuX29yaWdpbl90cmlnZ2VyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICAgICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcC50YWdOYW1lcyA9IHRhZ0xpc3QoKTtcblxuICAgICAgICBmb3IobGV0IFt0YWcsIGNvbnRyb2xsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFwcC5HbG9iYWwpKSB7XG4gICAgICAgICAgICBpZighY29udHJvbGxlci4kY29udGFpbmVyKSBHbG9iYWxbdGFnXS4kY29udGFpbmVyID0gZ2V0Qm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgZ2V0Qm9keSgpLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVKcXVlcnk6ICgpPT4ge1xuICAgICAgICAkLmZuLnNhZmVSZXBsYWNlID0gZnVuY3Rpb24gKCRlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVSZXBsYWNlKCQodGhpcyksICRlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICAkLmZuLnNhZmVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZUVtcHR5KCQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250cm9sbGVyVG9UYWc6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnJlcGxhY2UoLy1jb250cm9sbGVyJC8sICcnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAgICovXG4gICAgcmVnaXN0ZXJHbG9iYWw6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IGdsb2JhbENvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXSA9IFtnbG9iYWxDb250cm9sbGVyLCBbXV07XG4gICAgICAgIGdsb2JhbENvbnRyb2xsZXIuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICB3aW5kb3dbdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpXSA9IEdsb2JhbFt0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSldID0gZ2xvYmFsQ29udHJvbGxlcjtcbiAgICB9LFxuXG4gICAgY2xlYW5DYWNoZTogKCkgPT4ge1xuICAgICAgICBjbGVhbkNhY2hlKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gQ29udHJvbGxlclxuICAgICAqL1xuICAgIHJlZ2lzdGVyOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdID0gW0NvbnRyb2xsZXIsIFtdXTtcbiAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtaXhpbiBvZiBtaXhpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKG1peGluKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhtaXhpbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXS5wdXNoKG1peGluTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgcG9zdDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MuQ1NSRl9UT0tFTiA9IGFwcC5DU1JGX1RPS0VOO1xuICAgICAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBwYXJhbXMsICQucG9zdCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgZ2V0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kICQuZ2V0IG9yICQucG9zdFxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgYWpheDogKGNvbnRyb2xsZXIsIHVybCwgYXJncywgbWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCh1cmwsIGFyZ3MpLnRoZW4oKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfSxcblxuICAgIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICAgICAgICBjb25zdCByZWRpcmVjdG9yID0gKGEpPT4ge1xuICAgICAgICAgICAgaWYgKGFbJ3VybC1saW5rJ10pIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhWyd1cmwnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgKHVybCB8fCBmb3JtLmFjdGlvbiksIChtZXRob2QgfHwgZm9ybS5tZXRob2QpKVxuICAgICAgICAgICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGEsYixjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGEuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBhLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG5cbiAgICB9LFxuICAgIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsICh1cmwgfHwgZm9ybS5hY3Rpb24pLCAobWV0aG9kIHx8IGZvcm0ubWV0aG9kKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gICAgLyoqXG4gICAgICogc2FmZUVtcHR5IHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIGNvbnRhaW5lciB0byBiZSBlbXB0eWVkXG4gICAgICovXG4gICAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwLnNhZmVSZW1vdmUoJGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGVsZW07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAgICovXG4gICAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICAgICAkbmV3Lmluc2VydEJlZm9yZSgkZWxlbSk7XG4gICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICAgKi9cbiAgICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgICAgICAgICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGh0bWwsIGNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFwcC5zYWZlRW1wdHkoY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVmcmVzaDogKCRjb250YWluZXIsIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGxlYWZDb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZUR1bW15RmFjdG9yeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBsZWFmQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lciwgbGVhZkNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVsb2FkTWV0aG9kSFRNTChsZWFmQ29udHJvbGxlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29uIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbnRyb2xsZXJFdmVudHMoY29uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZWFmQ29udHJvbGxlci5vblJlZnJlc2goJGNvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInByb21pc2VEdW1teUZhY3RvcnkiLCJyZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwiY2xlYW5DYWNoZSIsInJlbG9hZE1ldGhvZEhUTUwiLCJBYnN0cmFjdFNEQyIsIkdsb2JhbCIsImNvbnRyb2xsZXJMaXN0IiwidGFnTGlzdCIsImluaXRFdmVudHMiLCJzZXRDb250cm9sbGVyRXZlbnRzIiwiU1REX0VWRU5UX0xJU1QiLCJ3aW5kb3dFdmVudEhhbmRsZXIiLCJ0cmlnZ2VyIiwiaXNDb25uZWN0ZWQiLCJjbG9zZSIsIlBST1BFUlRJRVNfVVBEQVRFIiwic2RjRG9tRnJhZ21lbnQiLCJlbGVtZW50IiwicHJvcHMiLCIkbmV3X2VsZW0iLCJpc19zZWxmIiwiJCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJuYW1lIiwiZGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiayIsInYiLCJzdGFydHNXaXRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwic2V0QXR0cmlidXRlIiwiYWRkQ2xhc3MiLCJ3aW5kb3ciLCJzZGNEb20iLCJjaGlsZHJlbiIsImMiLCJhcHBlbmQiLCJhcHAiLCJDU1JGX1RPS0VOIiwiTEFOR1VBR0VfQ09ERSIsIkRFQlVHIiwiVkVSU0lPTiIsInRhZ05hbWVzIiwicm9vdENvbnRyb2xsZXIiLCJfaXNJbml0IiwiX29yaWdpbl90cmlnZ2VyIiwiaW5pdF9zZGMiLCJmbiIsImV2ZW50IiwiZXZfdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR5cGUiLCJpbmNsdWRlcyIsInB1c2giLCJvbiIsInVwZGF0ZUpxdWVyeSIsInRhZyIsImNvbnRyb2xsZXIiLCIkY29udGFpbmVyIiwic2FmZVJlcGxhY2UiLCIkZWxlbSIsInNhZmVFbXB0eSIsInNhZmVSZW1vdmUiLCJjb250cm9sbGVyVG9UYWciLCJDb250cm9sbGVyIiwicmVwbGFjZSIsInJlZ2lzdGVyR2xvYmFsIiwiZ2xvYmFsQ29udHJvbGxlciIsIl90YWdOYW1lIiwicmVnaXN0ZXIiLCJwcm90b3R5cGUiLCJhZGRNaXhpbiIsIm1peGlucyIsIm1peGluIiwibWl4aW5OYW1lIiwicG9zdCIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRoZW4iLCJhIiwiYiIsInN0YXR1cyIsInJlZnJlc2giLCJjYXRjaCIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJyZWRpcmVjdG9yIiwibG9jYXRpb24iLCJocmVmIiwiYWN0aW9uIiwicmVzcG9uc2VKU09OIiwic3VibWl0Rm9ybSIsIiRjaGlsZHJlbiIsImVhY2giLCJfIiwiJGVsZW1lbnQiLCIkbmV3IiwiaW5zZXJ0QmVmb3JlIiwiJHRoaXMiLCJyZW1vdmUiLCJmaW5kIiwicmVsb2FkQ29udHJvbGxlciIsImh0bWwiLCIkaHRtbCIsIl9jaGlsZENvbnRyb2xsZXIiLCJsZWFmQ29udHJvbGxlciIsIl9pc0V2ZW50c1NldCIsInVuc2hpZnQiLCJfcGFyZW50Q29udHJvbGxlciIsImNvbiIsIm9uUmVmcmVzaCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n");
68
68
 
69
69
  /***/ }),
70
70
 
@@ -84,7 +84,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
84
84
  \********************************************/
85
85
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
86
86
 
87
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model),\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\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\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nconst MAX_FILE_UPLOAD = 25000;\nlet OPEN_REQUESTS = {};\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 callServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: 'sdc_call',\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\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 && data.type === 'sdc_recall') {\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === 'sdc_event') {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === 'sdc_redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('onNavLink', data.link);\n }\n }\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error('SDC Socket closed unexpectedly');\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error('Socket encountered error: ', err.message, 'Closing socket');\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction close() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\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}\nfunction isConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\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 delete this.open_request[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 delete this.open_request['_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 delete this.open_request['_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 delete this.open_request[data.event_id];\n }\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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SSxDQUFDb0YsR0FBRyxDQUFDO0lBQ3JCO0lBRUEsSUFBSSxJQUFJLENBQUN6RyxXQUFXLENBQUNKLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDL0IsSUFBSSxDQUFDSyxNQUFNLEdBQUcsSUFBSSxDQUFDRCxXQUFXLENBQUMyRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxNQUFNO01BQ0gsSUFBSSxDQUFDMUQsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQjtJQUVBLE9BQU82RyxPQUFPO0VBRWxCO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NvY2tldC5qcz9hZGJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NkY19tYWluLmpzJztcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt1dWlkdjR9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsXG5jb25zdCBNQVhfRklMRV9VUExPQUQgPSAyNTAwMDtcbmxldCBPUEVOX1JFUVVFU1RTID0ge307XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gICAgY29uc3RydWN0b3IocGssIG1vZGVsKSB7XG4gICAgICAgIHRoaXMucGsgPSBwaztcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTREMgTW9kZWwgTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgICAqL1xuICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAgICovXG4gICAgbG9hZChjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIubmV3TW9kZWwodGhpcy5fbW9kZWwsIHtwazogdGhpcy5wa30pO1xuICAgIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5wayAmJiB2YWx1ZS5wayAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBuZXcgTnVtYmVyKHZhbHVlLnBrKTtcbiAgICAgICAgICAgIG5ld1ZhbC5sb2FkID0gdmFsdWUubG9hZC5iaW5kKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3BrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcblxuICAgIGxldCBpZCA9IHV1aWR2NCgpO1xuICAgIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgIFNEQ19TT0NLRVQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ3NkY19jYWxsJyxcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgT1BFTl9SRVFVRVNUU1tpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2Nvbm5lY3QoKSB7XG4gICAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTRENfU09DS0VUID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIFNEQ19TT0NLRVQub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcigncHVzaEVycm9yTXNnJywgZGF0YS5oZWFkZXIgfHwgJycsIGRhdGEubXNnIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXVsxXShkYXRhLmRhdGEgfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX3JlY2FsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMF0oZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX2V2ZW50Jykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBkYXRhLmV2ZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZXZlbnQsIGRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlICYmIGRhdGEudHlwZSA9PT0gJ3NkY19yZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgZGF0YS5saW5rKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgU0RDX1NPQ0tFVC5vbmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NEQyBTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhPUEVOX1JFUVVFU1RTKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlWzFdKHt9KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1trZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBfY29ubmVjdCgpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgU0RDX1NPQ0tFVC5vbmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAnLCBlcnIubWVzc2FnZSwgJ0Nsb3Npbmcgc29ja2V0Jyk7XG4gICAgICAgICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgU0RDX1NPQ0tFVC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIElTX0NPTk5FQ1RFRCA9IHRydWU7XG4gICAgICAgICAgICBJU19DT05ORUNUSU5HID0gZmFsc2U7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG5cbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29ubmVjdGVkKCkge1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoSVNfQ09OTkVDVElORykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKF9jb25uZWN0KCkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RlbCB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7anNvbn1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9KSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICAgICAgdGhpcy5tb2RlbF9xdWVyeSA9IG1vZGVsX3F1ZXJ5O1xuICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgICAgIHRoaXMub25fdXBkYXRlID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICsraWR4O1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLnZhbHVlc19saXN0W2lkeF0sIGRvbmU6IGZhbHNlfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYnlQayhwaykge1xuICAgICAgICBpZiAocGsgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdC5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwazogcGt9O1xuXG4gICAgfVxuXG4gICAgZmlsdGVyKG1vZGVsX3F1ZXJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnbGlzdF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgICAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1dO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2xpc3Q7XG4gICAgfVxuXG4gICAgZGV0YWlsVmlldyhwayA9IC0xLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocGsgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0WzBdLnBrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2RldGFpbF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBwazogcGtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgICB9XG5cbiAgICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW1vZGVsX3BrJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JtX2l0ZW0pLnZhbChpbnN0YW5jZVtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBpbnN0YW5jZXMgPSBbXTtcblxuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHBrID0gJGZvcm0uZGF0YSgnbW9kZWxfcGsnKTtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHNlbGYuYnlQayhwayk7XG4gICAgICAgICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZm9ybV9pdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1faXRlbS50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBwYXJzZV9oaWRkZW5faW5wdXRzKCQoZm9ybV9pdGVtKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9ICQoZm9ybV9pdGVtKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcblxuICAgIH1cblxuICAgIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShudWxsLCAnY3JlYXRlX2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgZWRpdEZvcm0ocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0LmF0KHBrKS5waztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShwaywgJ25hbWVkX2Zvcm0nLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuXG4gICAgX2dldEZvcm0ocGssIGV2ZW50X3R5cGUsIGZvcm1OYW1lLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRfdHlwZSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgcGs6IHBrLFxuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/ICdjcmVhdGUnIDogJ2VkaXQnO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKS5hZGRDbGFzcyhgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7dGhpcy5mb3JtX2lkfWApLmRhdGEoJ21vZGVsJywgdGhpcykuZGF0YSgnbW9kZWxfcGsnLCBwayk7XG4gICAgICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKCdzZGNfc3VibWl0JykpIHtcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicpLmFwcGVuZCh0aGlzLmNyZWF0ZUZvcm0oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlKHBrID0gLTEpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtX2xpc3Q7XG4gICAgICAgICAgICBpZiAocGsgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IFt0aGlzLmJ5UGsocGspXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZSh2YWx1ZXMgPSB0aGlzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRmlsZXModmFsdWVzKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwayA9PT0gLTEpIHBrID0gdGhpcy52YWx1ZXM/LnBrO1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc19jb25uZXRpbmdfcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvbHZlX29yaWdpbiwgcmVqZWN0X29yaWdpbl0gPSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF9vcmlnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbJ3NvY2tldCddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW4oKSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgICAgIGxldCB0b19zb2x2ZSA9IFtdO1xuICAgICAgICBsZXQgZmlsZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyX29mX2NodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogcmVzdWx0LnNsaWNlKE1BWF9GSUxFX1VQTE9BRCAqIGksIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfY2h1bmtzOiBudW1iZXJfb2ZfY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9vbk1lc3NhZ2UoZSkge1xuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5fcmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hFcnJvck1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ11bMV0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ107XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoTXNnJywgZGF0YS5oZWFkZXIgfHwgJycsIGRhdGEubXNnIHx8ICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZXRpbmdfcHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ11bMF0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnb25fdXBkYXRlJyB8fCBkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX2NyZWF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYiA9IHRoaXMub25fdXBkYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNiKG9iaik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZVxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29ubmVjdFRvU2VydmVyKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgbW9kZWxfaWRlbnRpZmllciA9IGAke3RoaXMubW9kZWxfbmFtZX1gICsgKHRoaXMubW9kZWxfaWQgPiAwID8gYC8ke3RoaXMubW9kZWxfaWR9YCA6ICcnKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzczovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy9tb2RlbC8ke21vZGVsX2lkZW50aWZpZXJ9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTREMgTW9kZWwgKCR7dGhpcy5tb2RlbF9uYW1lfSwgJHt0aGlzLm1vZGVsX2lkfSkgU29ja2V0IGNsb3NlZCB1bmV4cGVjdGVkbHlgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5vcGVuX3JlcXVlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvX3JlY29ubmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNb2RlbCBTb2NrZXQgZW5jb3VudGVyZWQgZXJyb3I6ICR7ZXJyfSBDbG9zaW5nIHNvY2tldGApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIF9jaGVja0Nvbm5lY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnY29ubmVjdCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9wYXJzZVNlcnZlclJlcyhyZXMpIHtcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQganNvbl9kYXRhIG9mIHJlcykge1xuICAgICAgICAgICAgY29uc3QgcGsgPSBqc29uX2RhdGEucGs7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoanNvbl9kYXRhLmZpZWxkcykpIHtcbiAgICAgICAgICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdlsnX19pc19zZGNfbW9kZWxfXyddKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IG5ldyBTdWJNb2RlbCh2WydwayddLCB2Wydtb2RlbCddKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IHY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2gob2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlc19saXN0LmF0KC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcblxuICAgIH1cbn0iXSwibmFtZXMiOlsiYXBwIiwidHJpZ2dlciIsInV1aWR2NCIsIklTX0NPTk5FQ1RFRCIsIklTX0NPTk5FQ1RJTkciLCJTRENfU09DS0VUIiwiTUFYX0ZJTEVfVVBMT0FEIiwiT1BFTl9SRVFVRVNUUyIsIlN1Yk1vZGVsIiwiY29uc3RydWN0b3IiLCJwayIsIm1vZGVsIiwiX21vZGVsIiwibG9hZCIsImNvbnRyb2xsZXIiLCJUeXBlRXJyb3IiLCJuZXdNb2RlbCIsIk1vZGVsUHJveHlIYW5kbGVyIiwiZ2V0IiwidGFyZ2V0Iiwia2V5IiwidmFsdWUiLCJ1bmRlZmluZWQiLCJuZXdWYWwiLCJOdW1iZXIiLCJiaW5kIiwic2V0Iiwib2xkVmFsIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsU2VydmVyIiwiZnVuY05hbWUiLCJhcmdzIiwiaWQiLCJpc0Nvbm5lY3RlZCIsInRoZW4iLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiZnVuY3Rpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9jb25uZWN0Iiwid2luZG93IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJlIiwiZGF0YSIsInBhcnNlIiwiaXNfZXJyb3IiLCJtc2ciLCJoZWFkZXIiLCJ0eXBlIiwicGF5bG9hZCIsImxpbmsiLCJvbmNsb3NlIiwiY29uc29sZSIsImVycm9yIiwiT2JqZWN0IiwiZW50cmllcyIsInNldFRpbWVvdXQiLCJvbmVycm9yIiwiZXJyIiwibWVzc2FnZSIsImNsb3NlIiwib25vcGVuIiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwidmFsdWVzX2xpc3QiLCJ2YWx1ZXMiLCJfaXNfY29ubmVjdGVkIiwiX2lzX2Nvbm5ldGluZ19wcm9jZXNzIiwiX2F1dG9fcmVjb25uZWN0Iiwic29ja2V0Iiwib3Blbl9yZXF1ZXN0Iiwib25fdXBkYXRlIiwib25fY3JlYXRlIiwiZm9ybV9pZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaWR4IiwibmV4dCIsImRvbmUiLCJieVBrIiwiaXNOYU4iLCJlbGVtIiwiZmluZCIsImVsbSIsIlByb3h5IiwicHVzaCIsImZpbHRlciIsImFzc2lnbiIsImV2ZW50X3R5cGUiLCJldmVudF9pZCIsImxpc3RWaWV3IiwiY2JfcmVzb2x2ZSIsImNiX3JlamVjdCIsIiRkaXZfbGlzdCIsIiQiLCJhcHBlbmQiLCJodG1sIiwicmVmcmVzaCIsInJlcyIsImRldGFpbFZpZXciLCJsb2FkX3Byb21pc2UiLCJzeW5jRm9ybVRvTW9kZWwiLCIkZm9ybXMiLCJzeW5jRm9ybSIsInN5bmNNb2RlbFRvRm9ybSIsImhhc0NsYXNzIiwic2VsZiIsImVhY2giLCJoYXNBdHRyaWJ1dGUiLCJpbnN0YW5jZSIsImZvcm1faXRlbSIsImVsZW1lbnRzIiwibmFtZSIsImNoZWNrZWQiLCJGaWxlIiwiY29udGFpbmVyIiwiRGF0YVRyYW5zZmVyIiwiaXRlbXMiLCJhZGQiLCJmaWxlcyIsInZhbCIsImluc3RhbmNlcyIsIiRmb3JtIiwiYXQiLCJjcmVhdGVGb3JtIiwiJGRpdl9mb3JtIiwiX2dldEZvcm0iLCJlZGl0Rm9ybSIsIm5hbWVkRm9ybSIsImZvcm1OYW1lIiwiZm9ybV9uYW1lIiwiY2xhc3NOYW1lIiwiY2xvc2VzdCIsImFkZENsYXNzIiwiYXR0ciIsIm5ldyIsInNhdmUiLCJlbGVtX2xpc3QiLCJwX2xpc3QiLCJmb3JFYWNoIiwiX3JlYWRGaWxlcyIsIl9wYXJzZVNlcnZlclJlcyIsImFsbCIsImNyZWF0ZSIsImRlbGV0ZSIsIl9jb25uZWN0VG9TZXJ2ZXIiLCJfY2hlY2tDb25uZWN0aW9uIiwicmVzb2x2ZV9vcmlnaW4iLCJyZWplY3Rfb3JpZ2luIiwiY2xlYW4iLCJ0b19zb2x2ZSIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwic2xpY2UiLCJjb250ZW50X3R5cGUiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJfb25NZXNzYWdlIiwianNvbl9yZXMiLCJvYmoiLCJjYiIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIl9rZXkiLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
87
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model),\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\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\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nconst MAX_FILE_UPLOAD = 25000;\nlet OPEN_REQUESTS = {};\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 callServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: 'sdc_call',\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\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 && data.type === 'sdc_recall') {\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === 'sdc_event') {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === 'sdc_redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('onNavLink', data.link);\n }\n }\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error('SDC Socket closed unexpectedly');\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error('Socket encountered error: ', err.message, 'Closing socket');\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction close() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\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}\nfunction isConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\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 delete this.open_request[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 delete this.open_request['_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 delete this.open_request['_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 delete this.open_request[data.event_id];\n }\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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SSxDQUFDb0YsR0FBRyxDQUFDO0lBQ3JCO0lBRUEsSUFBSSxJQUFJLENBQUN6RyxXQUFXLENBQUNKLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDL0IsSUFBSSxDQUFDSyxNQUFNLEdBQUcsSUFBSSxDQUFDRCxXQUFXLENBQUMyRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxNQUFNO01BQ0gsSUFBSSxDQUFDMUQsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQjtJQUVBLE9BQU82RyxPQUFPO0VBRWxCO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NvY2tldC5qcz9hZGJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NkY19tYWluLmpzJztcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt1dWlkdjR9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsXG5jb25zdCBNQVhfRklMRV9VUExPQUQgPSAyNTAwMDtcbmxldCBPUEVOX1JFUVVFU1RTID0ge307XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gICAgY29uc3RydWN0b3IocGssIG1vZGVsKSB7XG4gICAgICAgIHRoaXMucGsgPSBwaztcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTREMgTW9kZWwgTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgICAqL1xuICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAgICovXG4gICAgbG9hZChjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIubmV3TW9kZWwodGhpcy5fbW9kZWwsIHtwazogdGhpcy5wa30pO1xuICAgIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5wayAmJiB2YWx1ZS5wayAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBuZXcgTnVtYmVyKHZhbHVlLnBrKTtcbiAgICAgICAgICAgIG5ld1ZhbC5sb2FkID0gdmFsdWUubG9hZC5iaW5kKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3BrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcblxuICAgIGxldCBpZCA9IHV1aWR2NCgpO1xuICAgIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgIFNEQ19TT0NLRVQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ3NkY19jYWxsJyxcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgT1BFTl9SRVFVRVNUU1tpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2Nvbm5lY3QoKSB7XG4gICAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTRENfU09DS0VUID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIFNEQ19TT0NLRVQub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcigncHVzaEVycm9yTXNnJywgZGF0YS5oZWFkZXIgfHwgJycsIGRhdGEubXNnIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXVsxXShkYXRhLmRhdGEgfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX3JlY2FsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMF0oZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX2V2ZW50Jykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBkYXRhLmV2ZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZXZlbnQsIGRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlICYmIGRhdGEudHlwZSA9PT0gJ3NkY19yZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgZGF0YS5saW5rKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgU0RDX1NPQ0tFVC5vbmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NEQyBTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhPUEVOX1JFUVVFU1RTKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlWzFdKHt9KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1trZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBfY29ubmVjdCgpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgU0RDX1NPQ0tFVC5vbmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAnLCBlcnIubWVzc2FnZSwgJ0Nsb3Npbmcgc29ja2V0Jyk7XG4gICAgICAgICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgU0RDX1NPQ0tFVC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIElTX0NPTk5FQ1RFRCA9IHRydWU7XG4gICAgICAgICAgICBJU19DT05ORUNUSU5HID0gZmFsc2U7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG5cbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29ubmVjdGVkKCkge1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoSVNfQ09OTkVDVElORykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKF9jb25uZWN0KCkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RlbCB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7anNvbn1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9KSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICAgICAgdGhpcy5tb2RlbF9xdWVyeSA9IG1vZGVsX3F1ZXJ5O1xuICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgICAgIHRoaXMub25fdXBkYXRlID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICsraWR4O1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLnZhbHVlc19saXN0W2lkeF0sIGRvbmU6IGZhbHNlfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYnlQayhwaykge1xuICAgICAgICBpZiAocGsgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdC5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwazogcGt9O1xuXG4gICAgfVxuXG4gICAgZmlsdGVyKG1vZGVsX3F1ZXJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnbGlzdF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgICAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1dO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2xpc3Q7XG4gICAgfVxuXG4gICAgZGV0YWlsVmlldyhwayA9IC0xLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocGsgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0WzBdLnBrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2RldGFpbF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBwazogcGtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgICB9XG5cbiAgICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW1vZGVsX3BrJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JtX2l0ZW0pLnZhbChpbnN0YW5jZVtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBpbnN0YW5jZXMgPSBbXTtcblxuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHBrID0gJGZvcm0uZGF0YSgnbW9kZWxfcGsnKTtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHNlbGYuYnlQayhwayk7XG4gICAgICAgICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZm9ybV9pdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1faXRlbS50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBwYXJzZV9oaWRkZW5faW5wdXRzKCQoZm9ybV9pdGVtKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9ICQoZm9ybV9pdGVtKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcblxuICAgIH1cblxuICAgIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShudWxsLCAnY3JlYXRlX2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgZWRpdEZvcm0ocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0LmF0KHBrKS5waztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShwaywgJ25hbWVkX2Zvcm0nLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuXG4gICAgX2dldEZvcm0ocGssIGV2ZW50X3R5cGUsIGZvcm1OYW1lLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRfdHlwZSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgcGs6IHBrLFxuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/ICdjcmVhdGUnIDogJ2VkaXQnO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKS5hZGRDbGFzcyhgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7dGhpcy5mb3JtX2lkfWApLmRhdGEoJ21vZGVsJywgdGhpcykuZGF0YSgnbW9kZWxfcGsnLCBwayk7XG4gICAgICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKCdzZGNfc3VibWl0JykpIHtcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicpLmFwcGVuZCh0aGlzLmNyZWF0ZUZvcm0oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlKHBrID0gLTEpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtX2xpc3Q7XG4gICAgICAgICAgICBpZiAocGsgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IFt0aGlzLmJ5UGsocGspXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZSh2YWx1ZXMgPSB0aGlzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRmlsZXModmFsdWVzKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwayA9PT0gLTEpIHBrID0gdGhpcy52YWx1ZXM/LnBrO1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc19jb25uZXRpbmdfcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvbHZlX29yaWdpbiwgcmVqZWN0X29yaWdpbl0gPSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF9vcmlnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbJ3NvY2tldCddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW4oKSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgICAgIGxldCB0b19zb2x2ZSA9IFtdO1xuICAgICAgICBsZXQgZmlsZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyX29mX2NodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogcmVzdWx0LnNsaWNlKE1BWF9GSUxFX1VQTE9BRCAqIGksIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfY2h1bmtzOiBudW1iZXJfb2ZfY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9vbk1lc3NhZ2UoZSkge1xuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5fcmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hFcnJvck1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ11bMV0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ107XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoTXNnJywgZGF0YS5oZWFkZXIgfHwgJycsIGRhdGEubXNnIHx8ICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZXRpbmdfcHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ11bMF0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnb25fdXBkYXRlJyB8fCBkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX2NyZWF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYiA9IHRoaXMub25fdXBkYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNiKG9iaik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZVxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29ubmVjdFRvU2VydmVyKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgbW9kZWxfaWRlbnRpZmllciA9IGAke3RoaXMubW9kZWxfbmFtZX1gICsgKHRoaXMubW9kZWxfaWQgPiAwID8gYC8ke3RoaXMubW9kZWxfaWR9YCA6ICcnKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzczovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy9tb2RlbC8ke21vZGVsX2lkZW50aWZpZXJ9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTREMgTW9kZWwgKCR7dGhpcy5tb2RlbF9uYW1lfSwgJHt0aGlzLm1vZGVsX2lkfSkgU29ja2V0IGNsb3NlZCB1bmV4cGVjdGVkbHlgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5vcGVuX3JlcXVlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvX3JlY29ubmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNb2RlbCBTb2NrZXQgZW5jb3VudGVyZWQgZXJyb3I6ICR7ZXJyfSBDbG9zaW5nIHNvY2tldGApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIF9jaGVja0Nvbm5lY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnY29ubmVjdCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9wYXJzZVNlcnZlclJlcyhyZXMpIHtcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQganNvbl9kYXRhIG9mIHJlcykge1xuICAgICAgICAgICAgY29uc3QgcGsgPSBqc29uX2RhdGEucGs7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoanNvbl9kYXRhLmZpZWxkcykpIHtcbiAgICAgICAgICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdlsnX19pc19zZGNfbW9kZWxfXyddKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IG5ldyBTdWJNb2RlbCh2WydwayddLCB2Wydtb2RlbCddKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IHY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2gob2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlc19saXN0LmF0KC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcblxuICAgIH1cbn0iXSwibmFtZXMiOlsiYXBwIiwidHJpZ2dlciIsInV1aWR2NCIsIklTX0NPTk5FQ1RFRCIsIklTX0NPTk5FQ1RJTkciLCJTRENfU09DS0VUIiwiTUFYX0ZJTEVfVVBMT0FEIiwiT1BFTl9SRVFVRVNUUyIsIlN1Yk1vZGVsIiwiY29uc3RydWN0b3IiLCJwayIsIm1vZGVsIiwiX21vZGVsIiwibG9hZCIsImNvbnRyb2xsZXIiLCJUeXBlRXJyb3IiLCJuZXdNb2RlbCIsIk1vZGVsUHJveHlIYW5kbGVyIiwiZ2V0IiwidGFyZ2V0Iiwia2V5IiwidmFsdWUiLCJ1bmRlZmluZWQiLCJuZXdWYWwiLCJOdW1iZXIiLCJiaW5kIiwic2V0Iiwib2xkVmFsIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsU2VydmVyIiwiZnVuY05hbWUiLCJhcmdzIiwiaWQiLCJpc0Nvbm5lY3RlZCIsInRoZW4iLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiZnVuY3Rpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9jb25uZWN0Iiwid2luZG93IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJlIiwiZGF0YSIsInBhcnNlIiwiaXNfZXJyb3IiLCJtc2ciLCJoZWFkZXIiLCJ0eXBlIiwicGF5bG9hZCIsImxpbmsiLCJvbmNsb3NlIiwiY29uc29sZSIsImVycm9yIiwiT2JqZWN0IiwiZW50cmllcyIsInNldFRpbWVvdXQiLCJvbmVycm9yIiwiZXJyIiwibWVzc2FnZSIsImNsb3NlIiwib25vcGVuIiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwidmFsdWVzX2xpc3QiLCJ2YWx1ZXMiLCJfaXNfY29ubmVjdGVkIiwiX2lzX2Nvbm5ldGluZ19wcm9jZXNzIiwiX2F1dG9fcmVjb25uZWN0Iiwic29ja2V0Iiwib3Blbl9yZXF1ZXN0Iiwib25fdXBkYXRlIiwib25fY3JlYXRlIiwiZm9ybV9pZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaWR4IiwibmV4dCIsImRvbmUiLCJieVBrIiwiaXNOYU4iLCJlbGVtIiwiZmluZCIsImVsbSIsIlByb3h5IiwicHVzaCIsImZpbHRlciIsImFzc2lnbiIsImV2ZW50X3R5cGUiLCJldmVudF9pZCIsImxpc3RWaWV3IiwiY2JfcmVzb2x2ZSIsImNiX3JlamVjdCIsIiRkaXZfbGlzdCIsIiQiLCJhcHBlbmQiLCJodG1sIiwicmVmcmVzaCIsInJlcyIsImRldGFpbFZpZXciLCJsb2FkX3Byb21pc2UiLCJzeW5jRm9ybVRvTW9kZWwiLCIkZm9ybXMiLCJzeW5jRm9ybSIsInN5bmNNb2RlbFRvRm9ybSIsImhhc0NsYXNzIiwic2VsZiIsImVhY2giLCJoYXNBdHRyaWJ1dGUiLCJpbnN0YW5jZSIsImZvcm1faXRlbSIsImVsZW1lbnRzIiwibmFtZSIsImNoZWNrZWQiLCJGaWxlIiwiY29udGFpbmVyIiwiRGF0YVRyYW5zZmVyIiwiaXRlbXMiLCJhZGQiLCJmaWxlcyIsInZhbCIsImluc3RhbmNlcyIsIiRmb3JtIiwiYXQiLCJjcmVhdGVGb3JtIiwiJGRpdl9mb3JtIiwiX2dldEZvcm0iLCJlZGl0Rm9ybSIsIm5hbWVkRm9ybSIsImZvcm1OYW1lIiwiZm9ybV9uYW1lIiwiY2xhc3NOYW1lIiwiY2xvc2VzdCIsImFkZENsYXNzIiwiYXR0ciIsIm5ldyIsInNhdmUiLCJlbGVtX2xpc3QiLCJwX2xpc3QiLCJmb3JFYWNoIiwiX3JlYWRGaWxlcyIsIl9wYXJzZVNlcnZlclJlcyIsImFsbCIsImNyZWF0ZSIsImRlbGV0ZSIsIl9jb25uZWN0VG9TZXJ2ZXIiLCJfY2hlY2tDb25uZWN0aW9uIiwicmVzb2x2ZV9vcmlnaW4iLCJyZWplY3Rfb3JpZ2luIiwiY2xlYW4iLCJ0b19zb2x2ZSIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwic2xpY2UiLCJjb250ZW50X3R5cGUiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJfb25NZXNzYWdlIiwianNvbl9yZXMiLCJvYmoiLCJjYiIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIl9rZXkiLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
88
88
 
89
89
  /***/ }),
90
90
 
@@ -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 */ get_controller: () => (/* binding */ get_controller)\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/**\n * @jest-environment jsdom\n */\n\n\nlet spy, _originAjax;\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = '') {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (!spy) {\n _originAjax = $.ajax.bind($);\n spy = jest.spyOn($, 'ajax');\n spy.mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $('<div></div>').append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFa0M7QUFDbEMsSUFBSUMsR0FBRyxFQUFFQyxXQUFXOztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZUFBZUMsY0FBY0EsQ0FBRUMsUUFBUSxFQUFFQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLFdBQVcsR0FBRyxFQUFFLEVBQUU7RUFDbkYsSUFBRyxDQUFDQyxJQUFJLEVBQUUsTUFBTSxJQUFJQyxLQUFLLENBQUMscUJBQXFCLENBQUM7RUFDaEQsSUFBRyxDQUFDUCxHQUFHLEVBQUU7SUFDTEMsV0FBVyxHQUFHTyxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDRixDQUFDLENBQUM7SUFFNUJSLEdBQUcsR0FBR00sSUFBSSxDQUFDSyxLQUFLLENBQ1pILENBQUMsRUFDRCxNQUNKLENBQUM7SUFDRFIsR0FBRyxDQUFDWSxrQkFBa0IsQ0FBQyxVQUFVQyxDQUFDLEVBQUU7TUFDaEMsT0FBT1osV0FBVyxDQUFDWSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFQyxJQUFJLElBQUs7UUFDakMsT0FBT0EsSUFBSTtNQUNmLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUVELElBQUksSUFBSztRQUNmLE9BQU9BLElBQUk7TUFDZixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUNBLE1BQU1FLEtBQUssR0FBR1QsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN2QlQsNkNBQUcsQ0FBQ21CLFlBQVksQ0FBQyxDQUFDO0VBRWxCRCxLQUFLLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0VBRWpCLE1BQU1DLFdBQVcsR0FBR1osQ0FBQyxDQUFFLElBQUdMLFFBQVMsSUFBR0UsV0FBWSxLQUFJRixRQUFTLEdBQUUsQ0FBQztFQUNsRSxLQUFLLE1BQU0sQ0FBQ2tCLEdBQUcsRUFBRUMsS0FBSyxDQUFDLElBQUlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDcEIsY0FBYyxDQUFDLEVBQUU7SUFDdkRnQixXQUFXLENBQUNLLElBQUksQ0FBQ0osR0FBRyxFQUFFQyxLQUFLLENBQUM7RUFDaEM7RUFDQSxNQUFNSSxhQUFhLEdBQUdsQixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNtQixNQUFNLENBQUNQLFdBQVcsQ0FBQztFQUUxREgsS0FBSyxDQUFDVSxNQUFNLENBQUNELGFBQWEsQ0FBQztFQUMzQjNCLDZDQUFHLENBQUM2QixPQUFPLEdBQUcsS0FBSztFQUNuQjdCLDZDQUFHLENBQUM4QixVQUFVLENBQUMsQ0FBQztFQUNoQixNQUFNOUIsNkNBQUcsQ0FBQytCLFFBQVEsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8vQiw2Q0FBRyxDQUFDZ0MsYUFBYSxDQUFDWCxXQUFXLENBQUM7QUFDekMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanM/YTQzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBqZXN0LWVudmlyb25tZW50IGpzZG9tXG4gKi9cblxuaW1wb3J0IHthcHB9IGZyb20gJy4vc2RjX21haW4uanMnO1xubGV0IHNweSwgX29yaWdpbkFqYXg7XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbnRyb2xsZXIuIFRoaXMgY29udHJvbGxlciBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSB1c2luZyB0aGUgbm9ybWFsIFNEQyBsaWZlIGN5Y2xlLlxuICpcbiAqIEBwYXJhbSB0YWdfbmFtZXtzdHJpbmd9IENvbnRyb2xsZXIgdGFnIG5hbWUgKHNuYWtlLWNhc2UpXG4gKiBAcGFyYW0gaW5pdF9hcmd1bWVudHN7b2JqZWN0fSBvYmplY3Q6IE1vY2tlZHMgdGhlIHRhZyBkYXRhIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBvcmlnZW5faHRtbHtzdHJpbmd9IEhUTUw6IE1vY2tlZCBjb250ZW50IG9mIHRoZSBjb250ZW50IGluIHlvdXIgdGFyZ2V0IEhUTUwgY29udGFpbmVyLlxuICogQHJldHVybnMge1Byb21pc2U8e0Fic3RyYWN0U0RDfT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRfY29udHJvbGxlciggdGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBpZighamVzdCkgdGhyb3cgbmV3IEVycm9yKFwiSkVTVCBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICBpZighc3B5KSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5ID0gamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKTtcbiAgICAgICAgc3B5Lm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5BamF4KGEpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgICAgIH0pLmNhdGNoKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsImdldF9jb250cm9sbGVyIiwidGFnX25hbWUiLCJpbml0X2FyZ3VtZW50cyIsIm9yaWdlbl9odG1sIiwiamVzdCIsIkVycm9yIiwiJCIsImFqYXgiLCJiaW5kIiwic3B5T24iLCJtb2NrSW1wbGVtZW50YXRpb24iLCJhIiwidGhlbiIsImh0bWwiLCJjYXRjaCIsIiRib2R5IiwidXBkYXRlSnF1ZXJ5Iiwic2FmZUVtcHR5IiwiJGNvbnRyb2xsZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJkYXRhIiwiJGRpdkNvbnRhaW5lciIsImFwcGVuZCIsIl9pc0luaXQiLCJjbGVhbkNhY2hlIiwiaW5pdF9zZGMiLCJnZXRDb250cm9sbGVyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n");
97
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ get_controller: () => (/* binding */ get_controller)\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/**\n * @jest-environment jsdom\n */\n\n\nlet spy, _originAjax;\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = '') {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (!spy) {\n _originAjax = $.ajax.bind($);\n spy = jest.spyOn($, 'ajax');\n spy.mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $('<div></div>').append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFa0M7QUFDbEMsSUFBSUMsR0FBRyxFQUFFQyxXQUFXOztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZUFBZUMsY0FBY0EsQ0FBRUMsUUFBUSxFQUFFQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLFdBQVcsR0FBRyxFQUFFLEVBQUU7RUFDbkYsSUFBRyxDQUFDQyxJQUFJLEVBQUUsTUFBTSxJQUFJQyxLQUFLLENBQUMscUJBQXFCLENBQUM7RUFDaEQsSUFBRyxDQUFDUCxHQUFHLEVBQUU7SUFDTEMsV0FBVyxHQUFHTyxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDRixDQUFDLENBQUM7SUFFNUJSLEdBQUcsR0FBR00sSUFBSSxDQUFDSyxLQUFLLENBQ1pILENBQUMsRUFDRCxNQUNKLENBQUM7SUFDRFIsR0FBRyxDQUFDWSxrQkFBa0IsQ0FBQyxVQUFVQyxDQUFDLEVBQUU7TUFDaEMsT0FBT1osV0FBVyxDQUFDWSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFQyxJQUFJLElBQUs7UUFDakMsT0FBT0EsSUFBSTtNQUNmLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUVELElBQUksSUFBSztRQUNmLE9BQU9BLElBQUk7TUFDZixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUNBLE1BQU1FLEtBQUssR0FBR1QsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN2QlQsNkNBQUcsQ0FBQ21CLFlBQVksQ0FBQyxDQUFDO0VBRWxCRCxLQUFLLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0VBRWpCLE1BQU1DLFdBQVcsR0FBR1osQ0FBQyxDQUFDLElBQUlMLFFBQVEsSUFBSUUsV0FBVyxLQUFLRixRQUFRLEdBQUcsQ0FBQztFQUNsRSxLQUFLLE1BQU0sQ0FBQ2tCLEdBQUcsRUFBRUMsS0FBSyxDQUFDLElBQUlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDcEIsY0FBYyxDQUFDLEVBQUU7SUFDdkRnQixXQUFXLENBQUNLLElBQUksQ0FBQ0osR0FBRyxFQUFFQyxLQUFLLENBQUM7RUFDaEM7RUFDQSxNQUFNSSxhQUFhLEdBQUdsQixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNtQixNQUFNLENBQUNQLFdBQVcsQ0FBQztFQUUxREgsS0FBSyxDQUFDVSxNQUFNLENBQUNELGFBQWEsQ0FBQztFQUMzQjNCLDZDQUFHLENBQUM2QixPQUFPLEdBQUcsS0FBSztFQUNuQjdCLDZDQUFHLENBQUM4QixVQUFVLENBQUMsQ0FBQztFQUNoQixNQUFNOUIsNkNBQUcsQ0FBQytCLFFBQVEsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8vQiw2Q0FBRyxDQUFDZ0MsYUFBYSxDQUFDWCxXQUFXLENBQUM7QUFDekMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanM/YTQzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBqZXN0LWVudmlyb25tZW50IGpzZG9tXG4gKi9cblxuaW1wb3J0IHthcHB9IGZyb20gJy4vc2RjX21haW4uanMnO1xubGV0IHNweSwgX29yaWdpbkFqYXg7XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbnRyb2xsZXIuIFRoaXMgY29udHJvbGxlciBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSB1c2luZyB0aGUgbm9ybWFsIFNEQyBsaWZlIGN5Y2xlLlxuICpcbiAqIEBwYXJhbSB0YWdfbmFtZXtzdHJpbmd9IENvbnRyb2xsZXIgdGFnIG5hbWUgKHNuYWtlLWNhc2UpXG4gKiBAcGFyYW0gaW5pdF9hcmd1bWVudHN7b2JqZWN0fSBvYmplY3Q6IE1vY2tlZHMgdGhlIHRhZyBkYXRhIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBvcmlnZW5faHRtbHtzdHJpbmd9IEhUTUw6IE1vY2tlZCBjb250ZW50IG9mIHRoZSBjb250ZW50IGluIHlvdXIgdGFyZ2V0IEhUTUwgY29udGFpbmVyLlxuICogQHJldHVybnMge1Byb21pc2U8e0Fic3RyYWN0U0RDfT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRfY29udHJvbGxlciggdGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBpZighamVzdCkgdGhyb3cgbmV3IEVycm9yKFwiSkVTVCBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICBpZighc3B5KSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5ID0gamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKTtcbiAgICAgICAgc3B5Lm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5BamF4KGEpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgICAgIH0pLmNhdGNoKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsImdldF9jb250cm9sbGVyIiwidGFnX25hbWUiLCJpbml0X2FyZ3VtZW50cyIsIm9yaWdlbl9odG1sIiwiamVzdCIsIkVycm9yIiwiJCIsImFqYXgiLCJiaW5kIiwic3B5T24iLCJtb2NrSW1wbGVtZW50YXRpb24iLCJhIiwidGhlbiIsImh0bWwiLCJjYXRjaCIsIiRib2R5IiwidXBkYXRlSnF1ZXJ5Iiwic2FmZUVtcHR5IiwiJGNvbnRyb2xsZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJkYXRhIiwiJGRpdkNvbnRhaW5lciIsImFwcGVuZCIsIl9pc0luaXQiLCJjbGVhbkNhY2hlIiwiaW5pdF9zZGMiLCJnZXRDb250cm9sbGVyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n");
98
98
 
99
99
  /***/ }),
100
100
 
@@ -104,7 +104,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
104
104
  \*******************************************/
105
105
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
106
106
 
107
- 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 */ 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 {AbstractSDC} baseClass\n * @param {AbstractSDC} mixins\n * @returns {AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = class _Combined {\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 get mixins() {\n return this._mixins;\n }\n };\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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUM7RUFDaEVSLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVDLEtBQUssRUFBRTtJQUMxRHRILENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3VILFdBQVcsQ0FBQ0osZUFBZSxDQUFDRyxLQUFLLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUM7RUFFRixJQUFJRSxVQUFVLEdBQUdSLFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDbUMsV0FBVyxDQUFDYixLQUFLLENBQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDZSxNQUFNLEtBQUssQ0FBQztFQUMvR1csUUFBUSxDQUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDK0IsSUFBSSxDQUFDLFlBQVk7SUFDekNHLFVBQVUsR0FBRyxLQUFLO0lBQ2xCLElBQUlFLGNBQWMsR0FBRzFILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUIsSUFBSTJILFNBQVMsR0FBR0QsY0FBYyxDQUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM5QyxJQUFJMEQsV0FBVyxHQUFHaEIsS0FBSyxDQUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBR3FDLFNBQVMsQ0FBQztJQUN4REMsV0FBVyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ2pDRCxXQUFXLENBQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzJCLE1BQU0sQ0FBQ1MsY0FBYyxDQUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0VBQzFGLENBQUMsQ0FBQztFQUVGLE9BQU9rQyxVQUFVO0FBQ3JCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY191dGlscy5qcz9kMGUzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVmZXJlbmNlIHRvIHRoZSBIVE1MIGJvZHkuXG4gKiBAdHlwZSB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgXyRib2R5O1xuY29uc3QgYXJnX25hbWVzX3JlZyA9IC8oW15cXHMsXSspL2c7XG5jb25zdCBjb21tZW5kX3JlZyA9IC8oKFxcL1xcLy4qJCl8KFxcL1xcKltcXHNcXFNdKj9cXCpcXC8pKS9tZztcblxuLyoqXG4gKiBnZXRCb2R5IHJldHVybnMgdGhlICRib2R5IGpRdWVyeSBvYmplY3QuXG4gKlxuICogQHJldHVybnMgeyp8alF1ZXJ5fEhUTUxFbGVtZW50fSAtIGJvZHkgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9keSgpIHtcbiAgICBpZiAoIV8kYm9keSkge1xuICAgICAgICBfJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF8kYm9keTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7UmVnRXhwTWF0Y2hBcnJheXwqW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGZuc3RyID0gZnVuYy50b1N0cmluZygpLnJlcGxhY2UoY29tbWVuZF9yZWcsICcnKTtcbiAgICB2YXIgcmVzdWx0ID0gZm5zdHIuc2xpY2UoZm5zdHIuaW5kZXhPZignKCcpICsgMSwgZm5zdHIuaW5kZXhPZignKScpKS5tYXRjaChhcmdfbmFtZXNfcmVnKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBwcm9taXNlRHVtbXlGYWN0b3J5IGdlbmVyYXRlcyBhIHNpbXBsZSBwcm9taXNlIHdoaWNoIHJldHVybnMgaW5zdGFudGx5LlxuICogQHJldHVybiB7UHJvbWlzZX0gd2luZG93LnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRHVtbXlGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1RhZ05hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGxldHRlciA9PiBgLSR7bGV0dGVyLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1swLTldKy9nLCBudW1iZXIgPT4gYC0ke251bWJlcn1gKTtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15bLV0vZywgYGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvQ2FtZWxDYXNlKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCk7XG4gICAgcmV0dXJuIHN0cjtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgICR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCkucmVwbGFjZSgvXi4vZywgbGV0dGVyID0+IGAke2xldHRlci50b1VwcGVyQ2FzZSgpfWApO1xuICAgIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGNvcHlQcm9wcyA9ICh0YXJnZXRDbGFzcywgc291cmNlQ2xhc3MpID0+IHtcbiAgICBsZXQgc291cmNlID0gc291cmNlQ2xhc3M7XG4gICAgbGV0IHByb3BOYW1lc1RhcmdldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldENsYXNzLnByb3RvdHlwZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0Q2xhc3MucHJvdG90eXBlKSlcbiAgICB3aGlsZSAoc291cmNlLm5hbWUgIT09ICcnKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZS5wcm90b3R5cGUpXG4gICAgICAgICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlLnByb3RvdHlwZSkpXG4gICAgICAgICAgICAuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wLm1hdGNoKC9eKD86Y29uc3RydWN0b3J8cHJvdG90eXBlfGFyZ3VtZW50c3xjYWxsZXJ8bmFtZXxiaW5kfGNhbGx8YXBwbHl8dG9TdHJpbmd8bGVuZ3RoKSQvKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wTmFtZXNUYXJnZXQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWVzVGFyZ2V0LnB1c2gocHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDbGFzcy5wcm90b3R5cGUsIHByb3AsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLnByb3RvdHlwZSwgcHJvcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICBzb3VyY2UgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGJhc2VDbGFzc1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG5cbiAgICBsZXQgYmFzZSA9IGNsYXNzIF9Db21iaW5lZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7XG4gICAgICAgICAgICBsZXQgX21peGlucyA9IHt9O1xuICAgICAgICAgICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld01peGluO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgKG5ld01peGluID0gbmV3IG1peGluKCkpKTtcbiAgICAgICAgICAgICAgICBuZXdNaXhpbi5fdGFnTmFtZSA9IG1peGluLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICAgICAgICAgICAgICBuZXdNaXhpbi5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgX21peGluc1ttaXhpbi5uYW1lXSA9IG5ld01peGluO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IGJhc2VDbGFzcygpKTtcbiAgICAgICAgICAgIHRoaXMuX21peGlucyA9IF9taXhpbnM7XG4gICAgICAgIH1cblxuICAgICAgICBnZXQgbWl4aW5zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb3B5UHJvcHMoYmFzZSwgYmFzZUNsYXNzKTtcblxuICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICBjb3B5UHJvcHMoYmFzZSwgbWl4aW4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJhc2U7XG5cbn1cblxuZnVuY3Rpb24gY3NyZlNhZmVNZXRob2QobWV0aG9kKSB7XG4gICAgLy8gdGhlc2UgSFRUUCBtZXRob2RzIGRvIG5vdCByZXF1aXJlIENTUkYgcHJvdGVjdGlvblxuICAgIHJldHVybiAoL14oR0VUfEhFQUR8T1BUSU9OU3xUUkFDRSkkLy50ZXN0KG1ldGhvZCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwsIG1ldGhvZCkge1xuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICB1cmw6IHVybCwgIC8vU2VydmVyIHNjcmlwdCB0byBwcm9jZXNzIGRhdGFcbiAgICAgICAgdHlwZTogbWV0aG9kIHx8ICdQT1NUJyxcbiAgICAgICAgeGhyOiBmdW5jdGlvbiAoKSB7ICAvLyBDdXN0b20gWE1MSHR0cFJlcXVlc3RcbiAgICAgICAgICAgIHZhciBteVhociA9ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgICAgICAgaWYgKG15WGhyLnVwbG9hZCkgeyAvLyBDaGVjayBpZiB1cGxvYWQgcHJvcGVydHkgZXhpc3RzXG4gICAgICAgICAgICAgICAgbXlYaHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uLCBmYWxzZSk7IC8vIEZvciBoYW5kbGluZyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHVwbG9hZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG15WGhyO1xuICAgICAgICB9LFxuICAgICAgICAvL0Zvcm0gZGF0YVxuICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgLy9PcHRpb25zIHRvIHRlbGwgalF1ZXJ5IG5vdCB0byBwcm9jZXNzIGRhdGEgb3Igd29ycnkgYWJvdXQgY29udGVudC10eXBlLlxuICAgICAgICBjYWNoZTogZmFsc2UsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbih4aHIsIHNldHRpbmdzKSB7XG4gICAgICAgICAgICBpZiAoIWNzcmZTYWZlTWV0aG9kKHNldHRpbmdzLnR5cGUpICYmICF0aGlzLmNyb3NzRG9tYWluKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uKGUpIHtcbiAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHZhciBwZXJjZW50VmFsID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHZhciAkcHJvZ3Jlc3NDb250YWluZXIgPSAkKCcucHJvZ3Jlc3MtY29udGFpbmVyJyk7XG4gICAgICAgIGlmIChwZXJjZW50VmFsID09PSAxMDApIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY2VudFZhbCArPSAnJSc7XG5cbiAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmZpbmQoJy5wcm9ncmVzcy1iYXInKS5jc3Moeyd3aWR0aCc6IHBlcmNlbnRWYWx9KS50ZXh0KHBlcmNlbnRWYWwpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKHBhcmFtRWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtRWxlbWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZihjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmKHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0uYmluZChjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdO1xuICAgIH1cblxuICAgIGxldCBpc0Zsb2F0UmVnID0gL14tP1xcZCtcXC4/XFxkKyQvO1xuICAgIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gICAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gICAgbGV0IGlzU3RyaW5nUmVnID0gL14oWyddW14nXSpbJ10pfChbXCJdW15cIl0qW1wiXSkkLztcblxuICAgIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNCb29sUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50ID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQudG9Mb3dlckNhc2UoKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQocGFyYW1FbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChwYXJhbUVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzU3RyaW5nUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50LnN1YnN0cigxLCBwYXJhbUVsZW1lbnQubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHtcbiAgICByZXR1cm4gKFsxZTddICsgLTFlMyArIC00ZTMgKyAtOGUzICsgLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcbiAgICApO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVycm9yc0luRm9ybSgkZm9ybSkge1xuICAgICRmb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJykuZmluZCgnLmFsZXJ0LWRhbmdlcicpLnJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykucmVtb3ZlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICRyZXNGb3JtKSB7XG4gICAgJHJlc0Zvcm0gID0gJCgnPGRpdj4nKS5hcHBlbmQoJHJlc0Zvcm0pO1xuXG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykuc2FmZVJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuc2FmZVJlbW92ZSgpO1xuICAgIGxldCAkZmlsZV9jb250YWluZXIgPSAkcmVzRm9ybS5maW5kKCdpbnB1dFt0eXBlPWZpbGVdJykucGFyZW50KCk7XG4gICAgJGZvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJGZpbGVfY29udGFpbmVyW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICBsZXQgaGFzTm9FcnJvciA9ICRyZXNGb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuaW5zZXJ0QWZ0ZXIoJGZvcm0uZmluZCgnLmhpZGRlbi1mb3JtLWZpZWxkcycpKS5sZW5ndGggPT09IDA7XG4gICAgJHJlc0Zvcm0uZmluZCgnLmhhcy1lcnJvcicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNOb0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCAkcmVzRXJyb3JGaWVsZCA9ICQodGhpcyk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKCdhdXRvLWlkJyk7XG4gICAgICAgIGxldCAkZXJyb3JGaWVsZCA9ICRmb3JtLmZpbmQoJy5mb3JtLWdyb3VwLicgKyBjbGFzc05hbWUpO1xuICAgICAgICAkZXJyb3JGaWVsZC5hZGRDbGFzcygnaGFzLWVycm9yJyk7XG4gICAgICAgICRlcnJvckZpZWxkLmZpbmQoJy5mb3JtLWlucHV0LWNvbnRhaW5lcicpLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKCcuYWxlcnQtZGFuZ2VyJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhc05vRXJyb3I7XG59Il0sIm5hbWVzIjpbIl8kYm9keSIsImFyZ19uYW1lc19yZWciLCJjb21tZW5kX3JlZyIsImdldEJvZHkiLCIkIiwiZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24iLCJmdW5jIiwiZm5zdHIiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZXN1bHQiLCJzbGljZSIsImluZGV4T2YiLCJtYXRjaCIsInByb21pc2VEdW1teUZhY3RvcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbWVsQ2FzZVRvVGFnTmFtZSIsInN0ciIsImxldHRlciIsInRvTG93ZXJDYXNlIiwibnVtYmVyIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidG9VcHBlckNhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJjb3B5UHJvcHMiLCJ0YXJnZXRDbGFzcyIsInNvdXJjZUNsYXNzIiwic291cmNlIiwicHJvcE5hbWVzVGFyZ2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsImNvbmNhdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5hbWUiLCJmb3JFYWNoIiwicHJvcCIsImluY2x1ZGVzIiwicHVzaCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiYmFzZUNsYXNzIiwibWl4aW5zIiwiYmFzZSIsIl9Db21iaW5lZCIsImNvbnN0cnVjdG9yIiwiX2FyZ3MiLCJfbWl4aW5zIiwibWl4aW4iLCJuZXdNaXhpbiIsImFzc2lnbiIsIl90YWdOYW1lIiwiX2lzTWl4aW4iLCJjc3JmU2FmZU1ldGhvZCIsIm1ldGhvZCIsInRlc3QiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJmb3JtRGF0YSIsInVybCIsImFqYXgiLCJ0eXBlIiwieGhyIiwibXlYaHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwicHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uIiwiZGF0YSIsImNhY2hlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJzZXR0aW5ncyIsImNyb3NzRG9tYWluIiwic2V0UmVxdWVzdEhlYWRlciIsIndpbmRvdyIsIkNTUkZfVE9LRU4iLCJlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInBlcmNlbnRWYWwiLCJNYXRoIiwicm91bmQiLCJsb2FkZWQiLCJ0b3RhbCIsIiRwcm9ncmVzc0NvbnRhaW5lciIsImhpZGUiLCJzaG93IiwiZmluZCIsImNzcyIsInRleHQiLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJwYXJhbUVsZW1lbnQiLCJjb250cm9sbGVyIiwiYmluZCIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidW5kZWZpbmVkIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyIiwibGVuZ3RoIiwidXVpZHY0IiwiYyIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQ4QXJyYXkiLCJjbGVhckVycm9yc0luRm9ybSIsIiRmb3JtIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJzZXRFcnJvcnNJbkZvcm0iLCIkcmVzRm9ybSIsImFwcGVuZCIsInNhZmVSZW1vdmUiLCIkZmlsZV9jb250YWluZXIiLCJwYXJlbnQiLCJlYWNoIiwiaW5kZXgiLCJyZXBsYWNlV2l0aCIsImhhc05vRXJyb3IiLCJpbnNlcnRBZnRlciIsIiRyZXNFcnJvckZpZWxkIiwiY2xhc3NOYW1lIiwiJGVycm9yRmllbGQiLCJhZGRDbGFzcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n");
107
+ 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 */ 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 {AbstractSDC} baseClass\n * @param {AbstractSDC} mixins\n * @returns {AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = class _Combined {\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 get mixins() {\n return this._mixins;\n }\n };\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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLE1BQU07QUFDVixNQUFNQyxhQUFhLEdBQUcsWUFBWTtBQUNsQyxNQUFNQyxXQUFXLEdBQUcsa0NBQWtDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsT0FBT0EsQ0FBQSxFQUFHO0VBQ3RCLElBQUksQ0FBQ0gsTUFBTSxFQUFFO0lBQ1RBLE1BQU0sR0FBR0ksQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN0QjtFQUVBLE9BQU9KLE1BQU07QUFDakI7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNLLHVCQUF1QkEsQ0FBQ0MsSUFBSSxFQUFFO0VBQzFDLElBQUlDLEtBQUssR0FBR0QsSUFBSSxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUNQLFdBQVcsRUFBRSxFQUFFLENBQUM7RUFDcEQsSUFBSVEsTUFBTSxHQUFHSCxLQUFLLENBQUNJLEtBQUssQ0FBQ0osS0FBSyxDQUFDSyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFTCxLQUFLLENBQUNLLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUNaLGFBQWEsQ0FBQztFQUN6RixJQUFJLENBQUNTLE1BQU0sRUFBRTtJQUNULE9BQU8sRUFBRTtFQUNiO0VBRUEsT0FBT0EsTUFBTTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNJLG1CQUFtQkEsQ0FBQSxFQUFHO0VBQ2xDLE9BQU8sSUFBSUMsT0FBTyxDQUFDLFVBQVVDLE9BQU8sRUFBRTtJQUNsQ0EsT0FBTyxDQUFDLENBQUM7RUFDYixDQUFDLENBQUM7QUFDTjtBQUVPLFNBQVNDLGtCQUFrQkEsQ0FBQ0MsR0FBRyxFQUFFO0VBQ3BDQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLFFBQVEsRUFBRVUsTUFBTSxJQUFJLElBQUlBLE1BQU0sQ0FBQ0MsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ2pFRixHQUFHLEdBQUdBLEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLFNBQVMsRUFBRVksTUFBTSxJQUFJLElBQUlBLE1BQU0sRUFBRSxDQUFDO0VBQ3BELE9BQU9ILEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDbkM7QUFFTyxTQUFTYSxrQkFBa0JBLENBQUNKLEdBQUcsRUFBRTtFQUNwQ0EsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUVVLE1BQU0sSUFBSSxHQUFHQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNoRSxPQUFPTCxHQUFHO0FBQ2Q7QUFDTyxTQUFTTSxxQkFBcUJBLENBQUNOLEdBQUcsRUFBRTtFQUN2Q0EsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUVVLE1BQU0sSUFBSSxJQUFJQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDZCxPQUFPLENBQUMsS0FBSyxFQUFFVSxNQUFNLElBQUksR0FBR0EsTUFBTSxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDckgsT0FBT0wsR0FBRztBQUNkO0FBRUEsTUFBTU8sU0FBUyxHQUFHQSxDQUFDQyxXQUFXLEVBQUVDLFdBQVcsS0FBSztFQUM1QyxJQUFJQyxNQUFNLEdBQUdELFdBQVc7RUFDeEIsSUFBSUUsZUFBZSxHQUFHQyxNQUFNLENBQUNDLG1CQUFtQixDQUFDTCxXQUFXLENBQUNNLFNBQVMsQ0FBQyxDQUFDQyxNQUFNLENBQUNILE1BQU0sQ0FBQ0kscUJBQXFCLENBQUNSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDLENBQUM7RUFDbkksT0FBT0osTUFBTSxDQUFDTyxJQUFJLEtBQUssRUFBRSxFQUFFO0lBQ3ZCTCxNQUFNLENBQUNDLG1CQUFtQixDQUFDSCxNQUFNLENBQUNJLFNBQVMsQ0FBQyxDQUN2Q0MsTUFBTSxDQUFDSCxNQUFNLENBQUNJLHFCQUFxQixDQUFDTixNQUFNLENBQUNJLFNBQVMsQ0FBQyxDQUFDLENBQ3RESSxPQUFPLENBQUVDLElBQUksSUFBSztNQUNmLElBQUlBLElBQUksQ0FBQ3hCLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxFQUFFO1FBQ2pHO01BQ0o7TUFFQSxJQUFJLENBQUNnQixlQUFlLENBQUNTLFFBQVEsQ0FBQ0QsSUFBSSxDQUFDLEVBQUU7UUFDakNSLGVBQWUsQ0FBQ1UsSUFBSSxDQUFDRixJQUFJLENBQUM7UUFDMUJQLE1BQU0sQ0FBQ1UsY0FBYyxDQUFDZCxXQUFXLENBQUNNLFNBQVMsRUFBRUssSUFBSSxFQUFFUCxNQUFNLENBQUNXLHdCQUF3QixDQUFDYixNQUFNLENBQUNJLFNBQVMsRUFBRUssSUFBSSxDQUFDLENBQUM7TUFDL0c7SUFDSixDQUFDLENBQUM7SUFDTlQsTUFBTSxHQUFHRSxNQUFNLENBQUNZLGNBQWMsQ0FBQ2QsTUFBTSxDQUFDO0VBQzFDO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZSxnQkFBZ0JBLENBQUNDLFNBQVMsRUFBRSxHQUFHQyxNQUFNLEVBQUU7RUFFbkQsSUFBSUMsSUFBSSxHQUFHLE1BQU1DLFNBQVMsQ0FBQztJQUN2QkMsV0FBV0EsQ0FBQyxHQUFHQyxLQUFLLEVBQUU7TUFDbEIsSUFBSUMsT0FBTyxHQUFHLENBQUMsQ0FBQztNQUNoQkwsTUFBTSxDQUFDVCxPQUFPLENBQUVlLEtBQUssSUFBSztRQUN0QixJQUFJQyxRQUFRO1FBQ1p0QixNQUFNLENBQUN1QixNQUFNLENBQUMsSUFBSSxFQUFHRCxRQUFRLEdBQUcsSUFBSUQsS0FBSyxDQUFDLENBQUUsQ0FBQztRQUM3Q0MsUUFBUSxDQUFDRSxRQUFRLEdBQUdILEtBQUssQ0FBQ25CLFNBQVMsQ0FBQ3NCLFFBQVE7UUFDNUNGLFFBQVEsQ0FBQ0csUUFBUSxHQUFHLElBQUk7UUFDeEJMLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDaEIsSUFBSSxDQUFDLEdBQUdpQixRQUFRO01BQ2xDLENBQUMsQ0FBQztNQUVGdEIsTUFBTSxDQUFDdUIsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJVCxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ3BDLElBQUksQ0FBQ00sT0FBTyxHQUFHQSxPQUFPO0lBQzFCO0lBRUEsSUFBSUwsTUFBTUEsQ0FBQSxFQUFHO01BQ1QsT0FBTyxJQUFJLENBQUNLLE9BQU87SUFDdkI7RUFDSixDQUFDO0VBRUR6QixTQUFTLENBQUNxQixJQUFJLEVBQUVGLFNBQVMsQ0FBQztFQUUxQkMsTUFBTSxDQUFDVCxPQUFPLENBQUVlLEtBQUssSUFBSztJQUN0QjFCLFNBQVMsQ0FBQ3FCLElBQUksRUFBRUssS0FBSyxDQUFDO0VBQzFCLENBQUMsQ0FBQztFQUVGLE9BQU9MLElBQUk7QUFFZjtBQUVBLFNBQVNVLGNBQWNBLENBQUNDLE1BQU0sRUFBRTtFQUM1QjtFQUNBLE9BQVEsNEJBQTRCLENBQUNDLElBQUksQ0FBQ0QsTUFBTSxDQUFDO0FBQ3JEO0FBRU8sU0FBU0Usa0JBQWtCQSxDQUFDQyxRQUFRLEVBQUVDLEdBQUcsRUFBRUosTUFBTSxFQUFFO0VBQ3RELE9BQU9yRCxDQUFDLENBQUMwRCxJQUFJLENBQUM7SUFDVkQsR0FBRyxFQUFFQSxHQUFHO0lBQUc7SUFDWEUsSUFBSSxFQUFFTixNQUFNLElBQUksTUFBTTtJQUN0Qk8sR0FBRyxFQUFFLFNBQUFBLENBQUEsRUFBWTtNQUFHO01BQ2hCLElBQUlDLEtBQUssR0FBRzdELENBQUMsQ0FBQzhELFlBQVksQ0FBQ0YsR0FBRyxDQUFDLENBQUM7TUFDaEMsSUFBSUMsS0FBSyxDQUFDRSxNQUFNLEVBQUU7UUFBRTtRQUNoQkYsS0FBSyxDQUFDRSxNQUFNLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNoRjtNQUNBLE9BQU9KLEtBQUs7SUFDaEIsQ0FBQztJQUNEO0lBQ0FLLElBQUksRUFBRVYsUUFBUTtJQUNkO0lBQ0FXLEtBQUssRUFBRSxLQUFLO0lBQ1pDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCQyxXQUFXLEVBQUUsS0FBSztJQUNsQkMsVUFBVSxFQUFFLFNBQUFBLENBQVNWLEdBQUcsRUFBRVcsUUFBUSxFQUFFO01BQ2hDLElBQUksQ0FBQ25CLGNBQWMsQ0FBQ21CLFFBQVEsQ0FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNhLFdBQVcsRUFBRTtRQUNyRFosR0FBRyxDQUFDYSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUVDLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDO01BQzFEO0lBQ0o7RUFDSixDQUFDLENBQUM7QUFDTjtBQUVBLFNBQVNWLHdCQUF3QkEsQ0FBQ1csQ0FBQyxFQUFFO0VBQ2pDLElBQUlBLENBQUMsQ0FBQ0MsZ0JBQWdCLEVBQUU7SUFDcEIsSUFBSUMsVUFBVSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBRUosQ0FBQyxDQUFDSyxNQUFNLEdBQUdMLENBQUMsQ0FBQ00sS0FBSyxHQUFJLEdBQUcsQ0FBQztJQUN2RCxJQUFJQyxrQkFBa0IsR0FBR25GLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztJQUNqRCxJQUFJOEUsVUFBVSxLQUFLLEdBQUcsRUFBRTtNQUNwQkssa0JBQWtCLENBQUNDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUMsTUFBTTtNQUNIRCxrQkFBa0IsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7SUFDN0I7SUFFQVAsVUFBVSxJQUFJLEdBQUc7SUFFakJLLGtCQUFrQixDQUFDRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUNDLEdBQUcsQ0FBQztNQUFDLE9BQU8sRUFBRVQ7SUFBVSxDQUFDLENBQUMsQ0FBQ1UsSUFBSSxDQUFDVixVQUFVLENBQUM7RUFDeEY7QUFDSjtBQUdPLFNBQVNXLDhCQUE4QkEsQ0FBQ0MsWUFBWSxFQUFFQyxVQUFVLEdBQUcsSUFBSSxFQUFFO0VBQzVFLElBQUksT0FBT0QsWUFBWSxLQUFLLFFBQVEsRUFBRTtJQUNsQyxPQUFPQSxZQUFZO0VBQ3ZCO0VBRUEsSUFBR0MsVUFBVSxJQUFJLE9BQU9BLFVBQVUsQ0FBQ0QsWUFBWSxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQzlELElBQUcsT0FBT0MsVUFBVSxDQUFDRCxZQUFZLENBQUMsS0FBSyxVQUFVLEVBQUU7TUFDL0MsT0FBT0MsVUFBVSxDQUFDRCxZQUFZLENBQUMsQ0FBQ0UsSUFBSSxDQUFDRCxVQUFVLENBQUM7SUFDcEQ7SUFDQSxPQUFPQSxVQUFVLENBQUNELFlBQVksQ0FBQztFQUNuQztFQUVBLElBQUlHLFVBQVUsR0FBRyxlQUFlO0VBQ2hDLElBQUlDLFFBQVEsR0FBRyxTQUFTO0VBQ3hCLElBQUlDLFNBQVMsR0FBRyxnQkFBZ0I7RUFDaEMsSUFBSUMsV0FBVyxHQUFHLCtCQUErQjtFQUVqRCxJQUFJTixZQUFZLENBQUNqRixLQUFLLENBQUNzRixTQUFTLENBQUMsRUFBRTtJQUMvQixPQUFPTCxZQUFZLEtBQUssTUFBTTtFQUNsQyxDQUFDLE1BQU0sSUFBSUEsWUFBWSxLQUFLLFdBQVcsRUFBRTtJQUNyQyxPQUFPTyxTQUFTO0VBQ3BCLENBQUMsTUFBTSxJQUFJUCxZQUFZLENBQUMxRSxXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUM5QyxPQUFPLElBQUk7RUFDZixDQUFDLE1BQU0sSUFBSTBFLFlBQVksQ0FBQ2pGLEtBQUssQ0FBQ3FGLFFBQVEsQ0FBQyxFQUFFO0lBQ3JDLE9BQU9JLFFBQVEsQ0FBQ1IsWUFBWSxDQUFDO0VBQ2pDLENBQUMsTUFBTSxJQUFJQSxZQUFZLENBQUNqRixLQUFLLENBQUNvRixVQUFVLENBQUMsRUFBRTtJQUN2QyxPQUFPTSxVQUFVLENBQUNULFlBQVksQ0FBQztFQUNuQyxDQUFDLE1BQU0sSUFBSUEsWUFBWSxDQUFDakYsS0FBSyxDQUFDdUYsV0FBVyxDQUFDLEVBQUU7SUFDeEMsT0FBT04sWUFBWSxDQUFDVSxNQUFNLENBQUMsQ0FBQyxFQUFFVixZQUFZLENBQUNXLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDMUQ7RUFFQSxPQUFPWCxZQUFZO0FBQ3ZCO0FBRU8sU0FBU1ksTUFBTUEsQ0FBQSxFQUFHO0VBQ3JCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFakcsT0FBTyxDQUFDLFFBQVEsRUFBRWtHLENBQUMsSUFDM0QsQ0FBQ0EsQ0FBQyxHQUFHQyxNQUFNLENBQUNDLGVBQWUsQ0FBQyxJQUFJQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUlILENBQUMsR0FBRyxDQUFDLEVBQUVuRyxRQUFRLENBQUMsRUFBRSxDQUNoRixDQUFDO0FBQ0w7QUFHTyxTQUFTdUcsaUJBQWlCQSxDQUFDQyxLQUFLLEVBQUU7RUFDckNBLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQ3VCLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDO0VBQ2hGRixLQUFLLENBQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDO0FBQzVDO0FBRU8sU0FBU0MsZUFBZUEsQ0FBQ0gsS0FBSyxFQUFFSSxRQUFRLEVBQUU7RUFDN0NBLFFBQVEsR0FBSWhILENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ2lILE1BQU0sQ0FBQ0QsUUFBUSxDQUFDO0VBRXZDSixLQUFLLENBQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUN1QixXQUFXLENBQUMsV0FBVyxDQUFDLENBQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM0QixVQUFVLENBQUMsQ0FBQztFQUNwRk4sS0FBSyxDQUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM0QixVQUFVLENBQUMsQ0FBQztFQUM1QyxJQUFJQyxlQUFlLEdBQUdILFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUM7RUFDaEVSLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVDLEtBQUssRUFBRTtJQUMxRHRILENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3VILFdBQVcsQ0FBQ0osZUFBZSxDQUFDRyxLQUFLLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUM7RUFFRixJQUFJRSxVQUFVLEdBQUdSLFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDbUMsV0FBVyxDQUFDYixLQUFLLENBQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDZSxNQUFNLEtBQUssQ0FBQztFQUMvR1csUUFBUSxDQUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDK0IsSUFBSSxDQUFDLFlBQVk7SUFDekNHLFVBQVUsR0FBRyxLQUFLO0lBQ2xCLElBQUlFLGNBQWMsR0FBRzFILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUIsSUFBSTJILFNBQVMsR0FBR0QsY0FBYyxDQUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM5QyxJQUFJMEQsV0FBVyxHQUFHaEIsS0FBSyxDQUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBR3FDLFNBQVMsQ0FBQztJQUN4REMsV0FBVyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ2pDRCxXQUFXLENBQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzJCLE1BQU0sQ0FBQ1MsY0FBYyxDQUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0VBQzFGLENBQUMsQ0FBQztFQUVGLE9BQU9rQyxVQUFVO0FBQ3JCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY191dGlscy5qcz9kMGUzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVmZXJlbmNlIHRvIHRoZSBIVE1MIGJvZHkuXG4gKiBAdHlwZSB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgXyRib2R5O1xuY29uc3QgYXJnX25hbWVzX3JlZyA9IC8oW15cXHMsXSspL2c7XG5jb25zdCBjb21tZW5kX3JlZyA9IC8oKFxcL1xcLy4qJCl8KFxcL1xcKltcXHNcXFNdKj9cXCpcXC8pKS9tZztcblxuLyoqXG4gKiBnZXRCb2R5IHJldHVybnMgdGhlICRib2R5IGpRdWVyeSBvYmplY3QuXG4gKlxuICogQHJldHVybnMgeyp8alF1ZXJ5fEhUTUxFbGVtZW50fSAtIGJvZHkgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9keSgpIHtcbiAgICBpZiAoIV8kYm9keSkge1xuICAgICAgICBfJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF8kYm9keTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7UmVnRXhwTWF0Y2hBcnJheXwqW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGZuc3RyID0gZnVuYy50b1N0cmluZygpLnJlcGxhY2UoY29tbWVuZF9yZWcsICcnKTtcbiAgICB2YXIgcmVzdWx0ID0gZm5zdHIuc2xpY2UoZm5zdHIuaW5kZXhPZignKCcpICsgMSwgZm5zdHIuaW5kZXhPZignKScpKS5tYXRjaChhcmdfbmFtZXNfcmVnKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBwcm9taXNlRHVtbXlGYWN0b3J5IGdlbmVyYXRlcyBhIHNpbXBsZSBwcm9taXNlIHdoaWNoIHJldHVybnMgaW5zdGFudGx5LlxuICogQHJldHVybiB7UHJvbWlzZX0gd2luZG93LnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRHVtbXlGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1RhZ05hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGxldHRlciA9PiBgLSR7bGV0dGVyLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1swLTldKy9nLCBudW1iZXIgPT4gYC0ke251bWJlcn1gKTtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15bLV0vZywgYGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvQ2FtZWxDYXNlKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCk7XG4gICAgcmV0dXJuIHN0cjtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgICR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCkucmVwbGFjZSgvXi4vZywgbGV0dGVyID0+IGAke2xldHRlci50b1VwcGVyQ2FzZSgpfWApO1xuICAgIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGNvcHlQcm9wcyA9ICh0YXJnZXRDbGFzcywgc291cmNlQ2xhc3MpID0+IHtcbiAgICBsZXQgc291cmNlID0gc291cmNlQ2xhc3M7XG4gICAgbGV0IHByb3BOYW1lc1RhcmdldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldENsYXNzLnByb3RvdHlwZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0Q2xhc3MucHJvdG90eXBlKSlcbiAgICB3aGlsZSAoc291cmNlLm5hbWUgIT09ICcnKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZS5wcm90b3R5cGUpXG4gICAgICAgICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlLnByb3RvdHlwZSkpXG4gICAgICAgICAgICAuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wLm1hdGNoKC9eKD86Y29uc3RydWN0b3J8cHJvdG90eXBlfGFyZ3VtZW50c3xjYWxsZXJ8bmFtZXxiaW5kfGNhbGx8YXBwbHl8dG9TdHJpbmd8bGVuZ3RoKSQvKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wTmFtZXNUYXJnZXQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWVzVGFyZ2V0LnB1c2gocHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDbGFzcy5wcm90b3R5cGUsIHByb3AsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLnByb3RvdHlwZSwgcHJvcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICBzb3VyY2UgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGJhc2VDbGFzc1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG5cbiAgICBsZXQgYmFzZSA9IGNsYXNzIF9Db21iaW5lZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7XG4gICAgICAgICAgICBsZXQgX21peGlucyA9IHt9O1xuICAgICAgICAgICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld01peGluO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgKG5ld01peGluID0gbmV3IG1peGluKCkpKTtcbiAgICAgICAgICAgICAgICBuZXdNaXhpbi5fdGFnTmFtZSA9IG1peGluLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICAgICAgICAgICAgICBuZXdNaXhpbi5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgX21peGluc1ttaXhpbi5uYW1lXSA9IG5ld01peGluO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IGJhc2VDbGFzcygpKTtcbiAgICAgICAgICAgIHRoaXMuX21peGlucyA9IF9taXhpbnM7XG4gICAgICAgIH1cblxuICAgICAgICBnZXQgbWl4aW5zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb3B5UHJvcHMoYmFzZSwgYmFzZUNsYXNzKTtcblxuICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICBjb3B5UHJvcHMoYmFzZSwgbWl4aW4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJhc2U7XG5cbn1cblxuZnVuY3Rpb24gY3NyZlNhZmVNZXRob2QobWV0aG9kKSB7XG4gICAgLy8gdGhlc2UgSFRUUCBtZXRob2RzIGRvIG5vdCByZXF1aXJlIENTUkYgcHJvdGVjdGlvblxuICAgIHJldHVybiAoL14oR0VUfEhFQUR8T1BUSU9OU3xUUkFDRSkkLy50ZXN0KG1ldGhvZCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwsIG1ldGhvZCkge1xuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICB1cmw6IHVybCwgIC8vU2VydmVyIHNjcmlwdCB0byBwcm9jZXNzIGRhdGFcbiAgICAgICAgdHlwZTogbWV0aG9kIHx8ICdQT1NUJyxcbiAgICAgICAgeGhyOiBmdW5jdGlvbiAoKSB7ICAvLyBDdXN0b20gWE1MSHR0cFJlcXVlc3RcbiAgICAgICAgICAgIHZhciBteVhociA9ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgICAgICAgaWYgKG15WGhyLnVwbG9hZCkgeyAvLyBDaGVjayBpZiB1cGxvYWQgcHJvcGVydHkgZXhpc3RzXG4gICAgICAgICAgICAgICAgbXlYaHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uLCBmYWxzZSk7IC8vIEZvciBoYW5kbGluZyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHVwbG9hZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG15WGhyO1xuICAgICAgICB9LFxuICAgICAgICAvL0Zvcm0gZGF0YVxuICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgLy9PcHRpb25zIHRvIHRlbGwgalF1ZXJ5IG5vdCB0byBwcm9jZXNzIGRhdGEgb3Igd29ycnkgYWJvdXQgY29udGVudC10eXBlLlxuICAgICAgICBjYWNoZTogZmFsc2UsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbih4aHIsIHNldHRpbmdzKSB7XG4gICAgICAgICAgICBpZiAoIWNzcmZTYWZlTWV0aG9kKHNldHRpbmdzLnR5cGUpICYmICF0aGlzLmNyb3NzRG9tYWluKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uKGUpIHtcbiAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHZhciBwZXJjZW50VmFsID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHZhciAkcHJvZ3Jlc3NDb250YWluZXIgPSAkKCcucHJvZ3Jlc3MtY29udGFpbmVyJyk7XG4gICAgICAgIGlmIChwZXJjZW50VmFsID09PSAxMDApIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY2VudFZhbCArPSAnJSc7XG5cbiAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmZpbmQoJy5wcm9ncmVzcy1iYXInKS5jc3Moeyd3aWR0aCc6IHBlcmNlbnRWYWx9KS50ZXh0KHBlcmNlbnRWYWwpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKHBhcmFtRWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtRWxlbWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZihjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmKHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0uYmluZChjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdO1xuICAgIH1cblxuICAgIGxldCBpc0Zsb2F0UmVnID0gL14tP1xcZCtcXC4/XFxkKyQvO1xuICAgIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gICAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gICAgbGV0IGlzU3RyaW5nUmVnID0gL14oWyddW14nXSpbJ10pfChbXCJdW15cIl0qW1wiXSkkLztcblxuICAgIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNCb29sUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50ID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQudG9Mb3dlckNhc2UoKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQocGFyYW1FbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChwYXJhbUVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzU3RyaW5nUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50LnN1YnN0cigxLCBwYXJhbUVsZW1lbnQubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHtcbiAgICByZXR1cm4gKFsxZTddICsgLTFlMyArIC00ZTMgKyAtOGUzICsgLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcbiAgICApO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVycm9yc0luRm9ybSgkZm9ybSkge1xuICAgICRmb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJykuZmluZCgnLmFsZXJ0LWRhbmdlcicpLnJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykucmVtb3ZlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICRyZXNGb3JtKSB7XG4gICAgJHJlc0Zvcm0gID0gJCgnPGRpdj4nKS5hcHBlbmQoJHJlc0Zvcm0pO1xuXG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykuc2FmZVJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuc2FmZVJlbW92ZSgpO1xuICAgIGxldCAkZmlsZV9jb250YWluZXIgPSAkcmVzRm9ybS5maW5kKCdpbnB1dFt0eXBlPWZpbGVdJykucGFyZW50KCk7XG4gICAgJGZvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJGZpbGVfY29udGFpbmVyW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICBsZXQgaGFzTm9FcnJvciA9ICRyZXNGb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuaW5zZXJ0QWZ0ZXIoJGZvcm0uZmluZCgnLmhpZGRlbi1mb3JtLWZpZWxkcycpKS5sZW5ndGggPT09IDA7XG4gICAgJHJlc0Zvcm0uZmluZCgnLmhhcy1lcnJvcicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNOb0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCAkcmVzRXJyb3JGaWVsZCA9ICQodGhpcyk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKCdhdXRvLWlkJyk7XG4gICAgICAgIGxldCAkZXJyb3JGaWVsZCA9ICRmb3JtLmZpbmQoJy5mb3JtLWdyb3VwLicgKyBjbGFzc05hbWUpO1xuICAgICAgICAkZXJyb3JGaWVsZC5hZGRDbGFzcygnaGFzLWVycm9yJyk7XG4gICAgICAgICRlcnJvckZpZWxkLmZpbmQoJy5mb3JtLWlucHV0LWNvbnRhaW5lcicpLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKCcuYWxlcnQtZGFuZ2VyJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhc05vRXJyb3I7XG59Il0sIm5hbWVzIjpbIl8kYm9keSIsImFyZ19uYW1lc19yZWciLCJjb21tZW5kX3JlZyIsImdldEJvZHkiLCIkIiwiZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24iLCJmdW5jIiwiZm5zdHIiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZXN1bHQiLCJzbGljZSIsImluZGV4T2YiLCJtYXRjaCIsInByb21pc2VEdW1teUZhY3RvcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbWVsQ2FzZVRvVGFnTmFtZSIsInN0ciIsImxldHRlciIsInRvTG93ZXJDYXNlIiwibnVtYmVyIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidG9VcHBlckNhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJjb3B5UHJvcHMiLCJ0YXJnZXRDbGFzcyIsInNvdXJjZUNsYXNzIiwic291cmNlIiwicHJvcE5hbWVzVGFyZ2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsImNvbmNhdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5hbWUiLCJmb3JFYWNoIiwicHJvcCIsImluY2x1ZGVzIiwicHVzaCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiYmFzZUNsYXNzIiwibWl4aW5zIiwiYmFzZSIsIl9Db21iaW5lZCIsImNvbnN0cnVjdG9yIiwiX2FyZ3MiLCJfbWl4aW5zIiwibWl4aW4iLCJuZXdNaXhpbiIsImFzc2lnbiIsIl90YWdOYW1lIiwiX2lzTWl4aW4iLCJjc3JmU2FmZU1ldGhvZCIsIm1ldGhvZCIsInRlc3QiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJmb3JtRGF0YSIsInVybCIsImFqYXgiLCJ0eXBlIiwieGhyIiwibXlYaHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwicHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uIiwiZGF0YSIsImNhY2hlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJzZXR0aW5ncyIsImNyb3NzRG9tYWluIiwic2V0UmVxdWVzdEhlYWRlciIsIndpbmRvdyIsIkNTUkZfVE9LRU4iLCJlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInBlcmNlbnRWYWwiLCJNYXRoIiwicm91bmQiLCJsb2FkZWQiLCJ0b3RhbCIsIiRwcm9ncmVzc0NvbnRhaW5lciIsImhpZGUiLCJzaG93IiwiZmluZCIsImNzcyIsInRleHQiLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJwYXJhbUVsZW1lbnQiLCJjb250cm9sbGVyIiwiYmluZCIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidW5kZWZpbmVkIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyIiwibGVuZ3RoIiwidXVpZHY0IiwiYyIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQ4QXJyYXkiLCJjbGVhckVycm9yc0luRm9ybSIsIiRmb3JtIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJzZXRFcnJvcnNJbkZvcm0iLCIkcmVzRm9ybSIsImFwcGVuZCIsInNhZmVSZW1vdmUiLCIkZmlsZV9jb250YWluZXIiLCJwYXJlbnQiLCJlYWNoIiwiaW5kZXgiLCJyZXBsYWNlV2l0aCIsImhhc05vRXJyb3IiLCJpbnNlcnRBZnRlciIsIiRyZXNFcnJvckZpZWxkIiwiY2xhc3NOYW1lIiwiJGVycm9yRmllbGQiLCJhZGRDbGFzcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n");
108
108
 
109
109
  /***/ }),
110
110
 
@@ -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 */ 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 */ 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 */\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) {\n return _reloadMethodHTML(controller, 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 (result !== undefined) {\n if (typeof result === 'function') {\n result = result.bind(controller)($this.data());\n }\n plist.push(Promise.resolve(result).then(x => {\n const $new_content = $(`<div></div>`);\n $new_content.append(x);\n return replaceTagElementsInContainer((0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.tagList)(), $new_content, controller).then(() => {\n return _reloadMethodHTML(controller, $new_content).then(() => {\n $this.safeEmpty().text('').append(x);\n return true;\n });\n });\n }));\n }\n });\n return Promise.all(plist);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQXdGO0FBQzVDO0FBQ1Y7QUFDTTs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRVgsTUFBTUMsbUJBQW1CLEdBQUcsY0FBYztBQUMxQyxNQUFNQyxnQkFBZ0IsR0FBRyxrQkFBa0I7QUFHM0MsU0FBU0MsVUFBVUEsQ0FBQSxFQUFHO0VBQ3pCSCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTSSxVQUFVQSxDQUFDQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsZ0JBQWdCLEVBQUU7RUFDM0QsSUFBSSxDQUFDRixVQUFVLEVBQUU7SUFDYixPQUFPLEVBQUU7RUFDYjtFQUNBLElBQUlHLFNBQVMsR0FBR0gsVUFBVSxDQUFDSSxRQUFRLENBQUMsQ0FBQztFQUNyQyxJQUFJQyxTQUFTLEdBQUcsRUFBRTtFQUNsQkYsU0FBUyxDQUFDRyxJQUFJLENBQUMsVUFBVUMsQ0FBQyxFQUFFQyxPQUFPLEVBQUU7SUFDakMsSUFBSUMsUUFBUSxHQUFHQyxDQUFDLENBQUNGLE9BQU8sQ0FBQztJQUN6QixJQUFJRyxPQUFPLEdBQUdGLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQy9ELElBQUlKLENBQUMsQ0FBQ0ssT0FBTyxDQUFDSixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUVWLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUN6Q0ksU0FBUyxDQUFDVyxJQUFJLENBQUM7UUFDWEMsR0FBRyxFQUFFTixPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2ZPLEtBQUssRUFBRVAsT0FBTyxDQUFDUSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtRQUM5QkMsR0FBRyxFQUFFWDtNQUNULENBQUMsQ0FBQztJQUVOLENBQUMsTUFBTSxJQUFJRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNVLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUN2Q1osUUFBUSxDQUFDYSxRQUFRLENBQUUsb0NBQW1DcEIsZ0JBQWdCLENBQUNxQixLQUFNLEVBQUMsQ0FBQztJQUNuRixDQUFDLE1BQU07TUFDSGxCLFNBQVMsR0FBR0EsU0FBUyxDQUFDbUIsTUFBTSxDQUFDekIsVUFBVSxDQUFDVSxRQUFRLEVBQUVSLFdBQVcsRUFBRUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRjtFQUNKLENBQUMsQ0FBQztFQUVGLE9BQU9HLFNBQVM7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU29CLDRCQUE0QkEsQ0FBQ0MsVUFBVSxFQUFFQyxHQUFHLEVBQUVDLFNBQVMsRUFBRTtFQUM5RCxLQUFLLElBQUlDLE9BQU8sSUFBSUgsVUFBVSxDQUFDSSxVQUFVLEVBQUU7SUFDdkMsSUFBSUosVUFBVSxDQUFDSSxVQUFVLENBQUNDLGNBQWMsQ0FBQ0YsT0FBTyxDQUFDLEVBQUU7TUFDL0MsSUFBSUcsR0FBRyxHQUFHTixVQUFVLENBQUNJLFVBQVUsQ0FBQ0QsT0FBTyxDQUFDO01BQ3hDLElBQUlJLEVBQUUsR0FBR0MsTUFBTSxDQUFDLE1BQU0sR0FBR0YsR0FBRyxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUM7TUFDOUNMLEdBQUcsR0FBR0EsR0FBRyxDQUFDUSxPQUFPLENBQUNGLEVBQUUsRUFBRSxFQUFFLEdBQUdMLFNBQVMsQ0FBQ1EsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRDtFQUNKO0VBRUEsT0FBT1QsR0FBRztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTVSxZQUFZQSxDQUFDQyxJQUFJLEVBQUVDLElBQUksRUFBRXRCLEdBQUcsRUFBRXVCLFVBQVUsRUFBRTtFQUMvQyxJQUFJLENBQUNGLElBQUksRUFBRTtJQUNQLE9BQU9HLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztFQUNqQyxDQUFDLE1BQU0sSUFBSS9DLFNBQVMsQ0FBQ3NCLEdBQUcsQ0FBQyxFQUFFO0lBQ3ZCLE9BQU93QixPQUFPLENBQUNDLE9BQU8sQ0FBQy9DLFNBQVMsQ0FBQ3NCLEdBQUcsQ0FBQyxDQUFDO0VBQzFDO0VBRUFzQixJQUFJLENBQUNJLE9BQU8sR0FBR2xELDZDQUFHLENBQUNrRCxPQUFPO0VBQzFCSixJQUFJLENBQUNLLE9BQU8sR0FBRyxTQUFTO0VBRXhCLE9BQU9sQyxDQUFDLENBQUNtQyxHQUFHLENBQUNQLElBQUksRUFBRUMsSUFBSSxDQUFDLENBQUNPLElBQUksQ0FBQyxVQUFVQyxJQUFJLEVBQUU7SUFDMUMsSUFBSSxDQUFDUCxVQUFVLEVBQUU7TUFDYjdDLFNBQVMsQ0FBQ3NCLEdBQUcsQ0FBQyxHQUFHOEIsSUFBSTtJQUN6QjtJQUVBLE9BQU9BLElBQUk7RUFDZixDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQVVDLEdBQUcsRUFBRTtJQUNwQixJQUFJQSxHQUFHLENBQUNDLE1BQU0sS0FBSyxHQUFHLEVBQUU7TUFDcEIsTUFBTUgsSUFBSSxHQUFHRSxHQUFHLENBQUNFLFlBQVk7TUFDN0J6RCx1REFBTyxDQUFDLGlCQUFpQixFQUFFcUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hEO0lBQ0FyRCx1REFBTyxDQUFDLFdBQVcsRUFBRTtNQUFDLGlCQUFpQixFQUFFMEQsQ0FBQSxLQUFLSCxHQUFHLENBQUNDO0lBQU0sQ0FBQyxDQUFDO0lBRTFELE1BQU8seUJBQXdCRCxHQUFHLENBQUNDLE1BQU8sS0FBSUQsR0FBRyxDQUFDSSxZQUFhLGNBQWE7RUFDaEYsQ0FBQyxDQUFDO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxnQ0FBZ0NBLENBQUN0RCxVQUFVLEVBQUVFLGdCQUFnQixFQUFFO0VBQ3BFQSxnQkFBZ0IsR0FBR0EsZ0JBQWdCLElBQUlGLFVBQVUsQ0FBQytDLElBQUksQ0FBQ25ELG1CQUFtQixDQUFDO0VBQzNFLE9BQU8yRCw2QkFBNkIsQ0FBQzlELDZDQUFHLENBQUMrRCxRQUFRLEVBQUV4RCxVQUFVLEVBQUVFLGdCQUFnQixDQUFDO0FBQ3BGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU3VELGVBQWVBLENBQUMvQixVQUFVLEVBQUU7RUFDakMsSUFBSUMsR0FBRyxHQUFHRCxVQUFVLENBQUNnQyxVQUFVO0VBQy9CLElBQUloQyxVQUFVLElBQUlBLFVBQVUsQ0FBQ0ksVUFBVSxDQUFDNkIsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUNsRCxJQUFJMUIsRUFBRSxHQUFHLGtCQUFrQjtJQUMzQixJQUFJMkIsT0FBTztJQUNYbEMsVUFBVSxDQUFDSSxVQUFVLEdBQUcsRUFBRTtJQUMxQixPQUFROEIsT0FBTyxHQUFHM0IsRUFBRSxDQUFDNEIsSUFBSSxDQUFDbEMsR0FBRyxDQUFDLEVBQUc7TUFDN0JELFVBQVUsQ0FBQ0ksVUFBVSxDQUFDZCxJQUFJLENBQUM0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdENsQyxVQUFVLENBQUNvQyxhQUFhLEdBQUcsSUFBSTtJQUNuQztFQUNKO0VBRUEsSUFBSUMsTUFBTSxHQUFHdkUsMkRBQVcsQ0FBQ2tDLFVBQVUsRUFBRUEsVUFBVSxDQUFDMUIsVUFBVSxDQUFDO0VBQzNELElBQUkwQixVQUFVLENBQUNJLFVBQVUsQ0FBQzZCLE1BQU0sRUFBRTtJQUM5QmhDLEdBQUcsR0FBR0YsNEJBQTRCLENBQUNDLFVBQVUsRUFBRUMsR0FBRyxFQUFFb0MsTUFBTSxDQUFDO0VBQy9EO0VBRUFyQyxVQUFVLENBQUNzQyxnQkFBZ0IsR0FBR3JDLEdBQUc7RUFFakMsT0FBTztJQUFDQSxHQUFHLEVBQUVBLEdBQUc7SUFBRVksSUFBSSxFQUFFd0IsTUFBTSxDQUFDQSxNQUFNLENBQUNKLE1BQU0sR0FBRyxDQUFDO0VBQUMsQ0FBQztBQUN0RDs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU00sYUFBYUEsQ0FBQ0MsS0FBSyxFQUFFO0VBQ2pDLElBQUlBLEtBQUssQ0FBQ0MsUUFBUSxDQUFDdEUsZ0JBQWdCLENBQUMsRUFBRTtJQUNsQyxPQUFPcUUsS0FBSyxDQUFDbkIsSUFBSSxDQUFFLEdBQUVuRCxtQkFBb0IsRUFBQyxDQUFDO0VBQy9DO0VBQ0EsT0FBT3NFLEtBQUssQ0FBQ0UsT0FBTyxDQUFFLElBQUd2RSxnQkFBaUIsRUFBQyxDQUFDLENBQUNrRCxJQUFJLENBQUUsR0FBRW5ELG1CQUFvQixFQUFDLENBQUM7QUFDL0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN5RSx1QkFBdUJBLENBQUMzQyxVQUFVLEVBQUU7RUFDaEQsSUFBSTRDLFdBQVcsR0FBRztJQUFDL0IsSUFBSSxFQUFFLENBQUM7RUFBQyxDQUFDO0VBQzVCLElBQUliLFVBQVUsQ0FBQ2dDLFVBQVUsRUFBRTtJQUN2QlksV0FBVyxHQUFHYixlQUFlLENBQUMvQixVQUFVLEVBQUVBLFVBQVUsQ0FBQ2dDLFVBQVUsQ0FBQztJQUNoRWhDLFVBQVUsQ0FBQ2dDLFVBQVUsR0FBR1ksV0FBVyxDQUFDM0MsR0FBRztFQUMzQztFQUVBLE9BQU9jLE9BQU8sQ0FBQzhCLEdBQUcsQ0FBQyxDQUNmbEMsWUFBWSxDQUFDWCxVQUFVLENBQUNnQyxVQUFVLEVBQUVZLFdBQVcsQ0FBQy9CLElBQUksRUFBRWIsVUFBVSxDQUFDOEMsUUFBUSxFQUFFOUMsVUFBVSxDQUFDb0MsYUFBYSxDQUFDLENBQ3ZHLENBQUMsQ0FBQ2hCLElBQUksQ0FBQyxVQUFVMkIsT0FBTyxFQUFFO0lBQ3ZCLElBQUlDLFFBQVEsR0FBR0QsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJQyxRQUFRLEVBQUU7TUFDVixJQUFJO1FBQ0EsT0FBT2hFLENBQUMsQ0FBQ2dFLFFBQVEsQ0FBQztNQUN0QixDQUFDLENBQUMsTUFBTTtRQUNKLE9BQU9oRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNpRSxNQUFNLENBQUNELFFBQVEsQ0FBQztNQUM1QztJQUNKO0lBRUEsT0FBTyxJQUFJO0VBQ2YsQ0FBQyxDQUFDO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxvQkFBb0JBLENBQUNsRCxVQUFVLEVBQUU7RUFDN0MsSUFBSUEsVUFBVSxDQUFDZ0MsVUFBVSxFQUFFO0lBQ3ZCLElBQUlZLFdBQVcsR0FBR2IsZUFBZSxDQUFDL0IsVUFBVSxFQUFFQSxVQUFVLENBQUNnQyxVQUFVLENBQUM7SUFDcEVoQyxVQUFVLENBQUNnQyxVQUFVLEdBQUdZLFdBQVcsQ0FBQzNDLEdBQUc7SUFDdkMsT0FBT1UsWUFBWSxDQUFDWCxVQUFVLENBQUNnQyxVQUFVLEVBQUVZLFdBQVcsQ0FBQy9CLElBQUksRUFBRWIsVUFBVSxDQUFDOEMsUUFBUSxFQUFFOUMsVUFBVSxDQUFDb0MsYUFBYSxDQUFDO0VBQy9HO0VBRUEsT0FBTyxJQUFJckIsT0FBTyxDQUFDQyxPQUFPLElBQUk7SUFDMUJBLE9BQU8sQ0FBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsQ0FBQyxDQUFDO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNtRSxnQ0FBZ0NBLENBQUNwRSxRQUFRLEVBQUVFLE9BQU8sRUFBRW1FLGdCQUFnQixFQUFFNUUsZ0JBQWdCLEVBQUU7RUFDN0YsSUFBSXdCLFVBQVUsR0FBR2pCLFFBQVEsQ0FBQ3NDLElBQUksQ0FBQ25ELG1CQUFtQixDQUFDO0VBQ25ELElBQUk4QixVQUFVLEVBQUU7SUFDWixPQUFPNEIsZ0NBQWdDLENBQUM3QyxRQUFRLEVBQUVpQixVQUFVLENBQUM7RUFDakU7RUFFQUEsVUFBVSxHQUFHckMscUVBQWlCLENBQUNhLGdCQUFnQixFQUFFTyxRQUFRLEVBQUVFLE9BQU8sRUFBRW1FLGdCQUFnQixDQUFDO0VBQ3JGckUsUUFBUSxDQUFDc0MsSUFBSSxDQUFDbkQsbUJBQW1CLEVBQUU4QixVQUFVLENBQUM7RUFDOUNqQixRQUFRLENBQUNhLFFBQVEsQ0FBQ3pCLGdCQUFnQixDQUFDO0VBQ25DLE9BQU9QLDJFQUF1QixDQUFDb0MsVUFBVSxFQUFFakIsUUFBUSxDQUFDO0FBQ3hEOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTc0Usd0JBQXdCQSxDQUFDckQsVUFBVSxFQUFFc0QsS0FBSyxFQUFFO0VBQ3hELElBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDckIsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUMzQmpDLFVBQVUsQ0FBQzFCLFVBQVUsQ0FBQ2lGLEtBQUssQ0FBQyxDQUFDO0lBQzdCdkQsVUFBVSxDQUFDMUIsVUFBVSxDQUFDa0YsSUFBSSxDQUFDeEQsVUFBVSxDQUFDOEMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxLQUFLLElBQUlXLFFBQVEsSUFBSXpELFVBQVUsQ0FBQzBELE9BQU8sRUFBRTtNQUNyQzFELFVBQVUsQ0FBQzFCLFVBQVUsQ0FBQ2tGLElBQUksQ0FBQ3hELFVBQVUsQ0FBQzBELE9BQU8sQ0FBQ0QsUUFBUSxDQUFDLENBQUNYLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDekU7SUFDQTlDLFVBQVUsQ0FBQzFCLFVBQVUsQ0FBQzJFLE1BQU0sQ0FBQ0ssS0FBSyxDQUFDO0VBQ3ZDO0VBRUEsT0FBTzFCLGdDQUFnQyxDQUFDNUIsVUFBVSxDQUFDMUIsVUFBVSxFQUFFMEIsVUFBVSxDQUFDO0FBQzlFOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZCLDZCQUE2QkEsQ0FBQ2hFLE9BQU8sRUFBRVMsVUFBVSxFQUFFRSxnQkFBZ0IsRUFBRTtFQUNqRixPQUFPLElBQUl1QyxPQUFPLENBQUVDLE9BQU8sSUFBSztJQUU1QixJQUFJMkMsc0JBQXNCLEdBQUd0RixVQUFVLENBQUNDLFVBQVUsRUFBRVQsT0FBTyxFQUFFVyxnQkFBZ0IsQ0FBQztJQUM5RSxJQUFJb0YsUUFBUSxHQUFHRCxzQkFBc0IsQ0FBQzFCLE1BQU07SUFFNUMsSUFBSTJCLFFBQVEsS0FBSyxDQUFDLEVBQUU7TUFDaEIsT0FBTzVDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCO0lBRUEsS0FBSyxJQUFJNkMsWUFBWSxHQUFHLENBQUMsRUFBRUEsWUFBWSxHQUFHRixzQkFBc0IsQ0FBQzFCLE1BQU0sRUFBRTRCLFlBQVksRUFBRSxFQUFFO01BQ3JGVixnQ0FBZ0MsQ0FBQ1Esc0JBQXNCLENBQUNFLFlBQVksQ0FBQyxDQUFDbkUsR0FBRyxFQUNyRWlFLHNCQUFzQixDQUFDRSxZQUFZLENBQUMsQ0FBQ3RFLEdBQUcsRUFDeENvRSxzQkFBc0IsQ0FBQ0UsWUFBWSxDQUFDLENBQUNyRSxLQUFLLEVBQzFDaEIsZ0JBQWdCLENBQUMsQ0FBQzRDLElBQUksQ0FBQyxNQUFNO1FBQzdCd0MsUUFBUSxFQUFFO1FBQ1YsSUFBSUEsUUFBUSxLQUFLLENBQUMsRUFBRTtVQUNoQixPQUFPNUMsT0FBTyxDQUFDLENBQUM7UUFDcEI7TUFDSixDQUFDLENBQUM7SUFDTjtFQUNKLENBQUMsQ0FBQztBQUNOO0FBRU8sU0FBUzhDLGdCQUFnQkEsQ0FBQzlELFVBQVUsRUFBRTtFQUN6QyxPQUFPK0QsaUJBQWlCLENBQUMvRCxVQUFVLEVBQUVBLFVBQVUsQ0FBQzFCLFVBQVUsQ0FBQztBQUMvRDtBQUNBLFNBQVN5RixpQkFBaUJBLENBQUMvRCxVQUFVLEVBQUVnRSxJQUFJLEVBQUU7RUFDekMsTUFBTUMsS0FBSyxHQUFHLEVBQUU7RUFFaEJELElBQUksQ0FBQ0UsSUFBSSxDQUFFLHFDQUFvQ2xFLFVBQVUsQ0FBQ0gsS0FBTSxFQUFDLENBQUMsQ0FBQ2pCLElBQUksQ0FBQyxZQUFZO0lBQ2hGLE1BQU11RixLQUFLLEdBQUduRixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUlvRixNQUFNLEdBQUdDLFNBQVM7SUFDdEIsSUFBR0YsS0FBSyxDQUFDMUIsUUFBUSxDQUFFLGVBQWMsQ0FBQyxFQUFFO01BQ2hDMkIsTUFBTSxHQUFHRCxLQUFLLENBQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUMsTUFBTTtNQUNILElBQUlpRCxrQkFBa0IsR0FBRyxJQUFJLENBQUNyRixPQUFPLENBQUNFLFdBQVcsQ0FBQyxDQUFDLENBQUNzQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztNQUN6RSxJQUFJVCxVQUFVLENBQUNzRSxrQkFBa0IsQ0FBQyxFQUFFO1FBQ2hDRixNQUFNLEdBQUdwRSxVQUFVLENBQUNzRSxrQkFBa0IsQ0FBQztNQUMzQztJQUNKO0lBRUEsSUFBSUYsTUFBTSxLQUFLQyxTQUFTLEVBQUU7TUFDdEIsSUFBSSxPQUFPRCxNQUFNLEtBQUssVUFBVSxFQUFFO1FBQzlCQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0csSUFBSSxDQUFDdkUsVUFBVSxDQUFDLENBQUNtRSxLQUFLLENBQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ2xEO01BRUE0QyxLQUFLLENBQUMzRSxJQUFJLENBQUN5QixPQUFPLENBQUNDLE9BQU8sQ0FBQ29ELE1BQU0sQ0FBQyxDQUFDaEQsSUFBSSxDQUFFb0QsQ0FBQyxJQUFLO1FBQzNDLE1BQU1DLFlBQVksR0FBR3pGLENBQUMsQ0FBRSxhQUFZLENBQUM7UUFDckN5RixZQUFZLENBQUN4QixNQUFNLENBQUN1QixDQUFDLENBQUM7UUFDdEIsT0FBTzNDLDZCQUE2QixDQUFDaEUsMkRBQU8sQ0FBQyxDQUFDLEVBQUU0RyxZQUFZLEVBQUV6RSxVQUFVLENBQUMsQ0FBQ29CLElBQUksQ0FBQyxNQUFLO1VBQ2hGLE9BQU8yQyxpQkFBaUIsQ0FBQy9ELFVBQVUsRUFBRXlFLFlBQVksQ0FBQyxDQUFDckQsSUFBSSxDQUFDLE1BQUs7WUFDekQrQyxLQUFLLENBQUNPLFNBQVMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzFCLE1BQU0sQ0FBQ3VCLENBQUMsQ0FBQztZQUNwQyxPQUFPLElBQUk7VUFDZixDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7TUFDTixDQUFDLENBQUMsQ0FBQztJQUNQO0VBRUosQ0FBQyxDQUFDO0VBRUYsT0FBT3pELE9BQU8sQ0FBQzhCLEdBQUcsQ0FBQ29CLEtBQUssQ0FBQztBQUM3QiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcz8yNGI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLCB0YWdMaXN0fSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtnZXRVcmxQYXJhbX0gZnJvbSBcIi4vc2RjX3BhcmFtcy5qc1wiO1xuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxuLyoqXG4gKiBMaXN0IG9mIEhUTUwgZmlsZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBodG1sRmlsZXMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFfQ09OVFJPTExFUl9LRVkgPSAnX2NvbnRyb2xsZXJfJztcbmV4cG9ydCBjb25zdCBDT05UUk9MTEVSX0NMQVNTID0gJ19zZGNfY29udHJvbGxlcl8nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNhY2hlKCkge1xuICAgIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgaWYgKCEkY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbGV0ICRjaGlsZHJlbiA9ICRjb250YWluZXIuY2hpbGRyZW4oKTtcbiAgICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICAgJGNoaWxkcmVuLmVhY2goZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHtcbiAgICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAkZWxlbWVudC5wcm9wKCd0YWdOYW1lJykudG9Mb3dlckNhc2UoKS5zcGxpdCgnXycpO1xuICAgICAgICBpZiAoJC5pbkFycmF5KHRhZ05hbWVbMF0sIHRhZ05hbWVMaXN0KSA+PSAwKSB7XG4gICAgICAgICAgICBlbXB0eUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFnOiB0YWdOYW1lWzBdLFxuICAgICAgICAgICAgICAgIHN1cGVyOiB0YWdOYW1lLnNwbGljZSgxKSB8fCBbXSxcbiAgICAgICAgICAgICAgICBkb206ICRlbGVtZW50XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aCgndGhpcy4nKSkge1xuICAgICAgICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW1wdHlMaXN0ID0gZW1wdHlMaXN0LmNvbmNhdChmaW5kU2RjVGdzKCRlbGVtZW50LCB0YWdOYW1lTGlzdCwgcGFyZW50Q29udHJvbGxlcikpXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgICBmb3IgKGxldCBrZXlfaWR4IGluIGNvbnRyb2xsZXIuX3VybFBhcmFtcykge1xuICAgICAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCBcIlwiICsgdXJsVmFsdWVzLnNoaWZ0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBsb2FkSFRNTEZpbGUgbG9hZHMgdGhlIEhUTUwgY29udGVudCBmaWxlIGZyb20gdGhlIHNlcnZlciB2aWEgYWpheCByZXF1ZXN0LlxuICpcbiAqIElmIHRoZSBIVE1MIGZpbGUgaXMgbG9hZGVkIGFscmVhZHkgdGhlIGZ1bmN0aW9uIHRha2VzIG5vIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIGEgY29udGVudCBVUkwgZnJvbSB0aGUgY29udHJvbGxlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gZ2V0IGFyZ3MuXG4gKiBAcGFyYW0gdGFnIC0gYSBub3JtYWxpemVkIHRhZy1uYW1lIGFzIHN0cmluZy5cbiAqIEBwYXJhbSBoYXJkUmVsb2FkIC0gdHJ1ZSBpZiB0aGUgZmlsZSBoYXMgdG8gYmUgcmVsb2FkZWQgZXZlcnkgdGltZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fSAtIHdhaXRzIGZvciB0aGUgZmlsZSB0byBiZSBsb2FkZWQuXG4gKi9cbmZ1bmN0aW9uIGxvYWRIVE1MRmlsZShwYXRoLCBhcmdzLCB0YWcsIGhhcmRSZWxvYWQpIHtcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChodG1sRmlsZXNbdGFnXSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGh0bWxGaWxlc1t0YWddKVxuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9ICdjb250ZW50JztcblxuICAgIHJldHVybiAkLmdldChwYXRoLCBhcmdzKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghaGFyZFJlbG9hZCkge1xuICAgICAgICAgICAgaHRtbEZpbGVzW3RhZ10gPSBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZXJyLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgIHRyaWdnZXIoJ19SZWRpcmVjdE9uVmlldycsIGRhdGFbJ3VybC1saW5rJ10pO1xuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXIoJ25hdkxvYWRlZCcsIHsnY29udHJvbGxlcl9uYW1lJzogKCk9PiBlcnIuc3RhdHVzfSk7XG5cbiAgICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHBhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyIHx8ICRjb250YWluZXIuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKTtcbiAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRVcmwgdXNlcyB0aGUgY29udGVudCBVUkwgcHJlZml4IHRvIG1hcmdlIHRoZVxuICogY29ycmVjdCBVUkwuIEFsc28gcGFyc2VzIHRoZSB1cmwgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgICAgICBsZXQgbWF0Y2hlcztcbiAgICAgICAgY29udHJvbGxlci5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICAgIHJldHVybiB7dXJsOiB1cmwsIGFyZ3M6IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV19O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gICAgaWYgKCRlbGVtLmhhc0NsYXNzKENPTlRST0xMRVJfQ0xBU1MpKSB7XG4gICAgICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gICAgbGV0IGdldEVsZW1lbnRzID0ge2FyZ3M6IHt9fTtcbiAgICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgICAgIGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICBsb2FkSFRNTEZpbGUoY29udHJvbGxlci5jb250ZW50VXJsLCBnZXRFbGVtZW50cy5hcmdzLCBjb250cm9sbGVyLl90YWdOYW1lLCBjb250cm9sbGVyLmNvbnRlbnRSZWxvYWQpXG4gICAgXSkudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICBsZXQgaHRtbEZpbGUgPSByZXN1bHRzWzBdO1xuICAgICAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoaHRtbEZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJzxkaXY+PC9kaXY+JykuYXBwZW5kKGh0bWxGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbG9hZEhUTUxDb250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnk+fSAtIHRoZSBwcm9taXNlIHdhaXRzIHRvIHRoZSBmaWxlcyBhcmUgbG9hZGVkLiBpdCByZXR1cm5zIHRoZSBqUXVlcnkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkSFRNTENvbnRyb2xsZXIoY29udHJvbGxlcikge1xuICAgIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICAgICAgbGV0IGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICAgICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLmNvbnRlbnRVcmwsIGdldEVsZW1lbnRzLmFyZ3MsIGNvbnRyb2xsZXIuX3RhZ05hbWUsIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKCQoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdFxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKCRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICAgIGlmIChjb250cm9sbGVyKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJGYWN0b3J5KHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbiAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAgICRlbGVtZW50LmFkZENsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCAkZWxlbWVudCk7XG59XG5cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX3RhZ05hbWUsICcnKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gY29udHJvbGxlci5fbWl4aW5zKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl9taXhpbnNbbWl4aW5LZXldLl90YWdOYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmFwcGVuZCgkaHRtbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG59XG5cblxuLyoqXG4gKiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciBGaW5kcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGluIGEgY29udGFpbmVyLiBCdXQgaXQgaWdub3Jlc1xuICogcmVnaXN0ZXJlZCB0YWdzIGluIHJlZ2lzdGVyZWQgdGFncy4gRm9yIGVhY2ggcmVnaXN0ZXJlZCB0YWcgaXQgbG9hZHMgdGhlIGNvbnRlbnQuXG4gKiBBZnRlcndhcmRzIGl0IHN0YXJ0cyB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgY29udHJvbGxlci4gSSB0aGUgbmV4dCBzdGVwIGl0IHN0YXJ0cyB0aGVcbiAqIHByb2NlZHVyZSBmb3IgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBjb250cm9sbGVyIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ0xpc3QgLSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIHRhZ3NcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0galF1ZXJ5IGNvbnRhaW5lciB0byBmaW5kIHRoZSB0YWdzXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gY29udHJvbGxlciBpbiBzdXJyb3VuZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnTGlzdCwgJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgICAgIGxldCB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzID0gZmluZFNkY1RncygkY29udGFpbmVyLCB0YWdMaXN0LCBwYXJlbnRDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7IGVsZW1lbnRJbmRleCsrKSB7XG4gICAgICAgICAgICBydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdEZXNjcmlwdGlvbkVsZW1lbnRzW2VsZW1lbnRJbmRleF0uZG9tLFxuICAgICAgICAgICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgICAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgICAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlcikge1xuICAgIHJldHVybiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpXG59XG5mdW5jdGlvbiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCAkZG9tKSB7XG4gICAgY29uc3QgcGxpc3QgPSBbXTtcblxuICAgICRkb20uZmluZChgLl9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyLnNkY191dWlkXyR7Y29udHJvbGxlci5fdXVpZH1gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZigkdGhpcy5oYXNDbGFzcyhgX3dpdGhfaGFuZGxlcmApKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAkdGhpcy5kYXRhKCdoYW5kbGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29udHJvbGxlcl9oYW5kbGVyID0gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXnRoaXMuLywgJycpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYmluZChjb250cm9sbGVyKSgkdGhpcy5kYXRhKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwbGlzdC5wdXNoKFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4oKHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkbmV3X2NvbnRlbnQgPSAkKGA8ZGl2PjwvZGl2PmApO1xuICAgICAgICAgICAgICAgICRuZXdfY29udGVudC5hcHBlbmQoeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKHRhZ0xpc3QoKSwgJG5ld19jb250ZW50LCBjb250cm9sbGVyKS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJG5ld19jb250ZW50KS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuc2FmZUVtcHR5KCkudGV4dCgnJykuYXBwZW5kKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwbGlzdCk7XG59Il0sIm5hbWVzIjpbImNvbnRyb2xsZXJGYWN0b3J5IiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJ0YWdMaXN0IiwiZ2V0VXJsUGFyYW0iLCJhcHAiLCJ0cmlnZ2VyIiwiaHRtbEZpbGVzIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJjbGVhbkNhY2hlIiwiZmluZFNkY1RncyIsIiRjb250YWluZXIiLCJ0YWdOYW1lTGlzdCIsInBhcmVudENvbnRyb2xsZXIiLCIkY2hpbGRyZW4iLCJjaGlsZHJlbiIsImVtcHR5TGlzdCIsImVhY2giLCJfIiwiZWxlbWVudCIsIiRlbGVtZW50IiwiJCIsInRhZ05hbWUiLCJwcm9wIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImluQXJyYXkiLCJwdXNoIiwidGFnIiwic3VwZXIiLCJzcGxpY2UiLCJkb20iLCJzdGFydHNXaXRoIiwiYWRkQ2xhc3MiLCJfdXVpZCIsImNvbmNhdCIsInJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidXJsIiwidXJsVmFsdWVzIiwia2V5X2lkeCIsIl91cmxQYXJhbXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsInJlIiwiUmVnRXhwIiwicmVwbGFjZSIsInNoaWZ0IiwibG9hZEhUTUxGaWxlIiwicGF0aCIsImFyZ3MiLCJoYXJkUmVsb2FkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJWRVJTSU9OIiwiX21ldGhvZCIsImdldCIsInRoZW4iLCJkYXRhIiwiY2F0Y2giLCJlcnIiLCJzdGF0dXMiLCJyZXNwb25zZUpTT04iLCJjb250cm9sbGVyX25hbWUiLCJyZXNwb25zZVRleHQiLCJyZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwidGFnTmFtZXMiLCJwYXJzZUNvbnRlbnRVcmwiLCJjb250ZW50VXJsIiwibGVuZ3RoIiwibWF0Y2hlcyIsImV4ZWMiLCJjb250ZW50UmVsb2FkIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJfdGFnTmFtZSIsInJlc3VsdHMiLCJodG1sRmlsZSIsImFwcGVuZCIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwicnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJzdXBlclRhZ05hbWVMaXN0IiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwiJGh0bWwiLCJlbXB0eSIsImF0dHIiLCJtaXhpbktleSIsIl9taXhpbnMiLCJ0YWdEZXNjcmlwdGlvbkVsZW1lbnRzIiwidGFnQ291bnQiLCJlbGVtZW50SW5kZXgiLCJyZWxvYWRNZXRob2RIVE1MIiwiX3JlbG9hZE1ldGhvZEhUTUwiLCIkZG9tIiwicGxpc3QiLCJmaW5kIiwiJHRoaXMiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJjb250cm9sbGVyX2hhbmRsZXIiLCJiaW5kIiwieCIsIiRuZXdfY29udGVudCIsInNhZmVFbXB0eSIsInRleHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n");
117
+ 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 */ 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 */\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) {\n return _reloadMethodHTML(controller, 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 (result !== undefined) {\n if (typeof result === 'function') {\n result = result.bind(controller)($this.data());\n }\n plist.push(Promise.resolve(result).then(x => {\n const $new_content = $(`<div></div>`);\n $new_content.append(x);\n return replaceTagElementsInContainer((0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.tagList)(), $new_content, controller).then(() => {\n return _reloadMethodHTML(controller, $new_content).then(() => {\n $this.safeEmpty().text('').append(x);\n return true;\n });\n });\n }));\n }\n });\n return Promise.all(plist);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q3VCLENBQUMsQ0FBQztZQUNwQyxPQUFPLElBQUk7VUFDZixDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7TUFDTixDQUFDLENBQUMsQ0FBQztJQUNQO0VBRUosQ0FBQyxDQUFDO0VBRUYsT0FBT3pELE9BQU8sQ0FBQzhCLEdBQUcsQ0FBQ29CLEtBQUssQ0FBQztBQUM3QiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcz8yNGI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLCB0YWdMaXN0fSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtnZXRVcmxQYXJhbX0gZnJvbSBcIi4vc2RjX3BhcmFtcy5qc1wiO1xuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxuLyoqXG4gKiBMaXN0IG9mIEhUTUwgZmlsZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBodG1sRmlsZXMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFfQ09OVFJPTExFUl9LRVkgPSAnX2NvbnRyb2xsZXJfJztcbmV4cG9ydCBjb25zdCBDT05UUk9MTEVSX0NMQVNTID0gJ19zZGNfY29udHJvbGxlcl8nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNhY2hlKCkge1xuICAgIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgaWYgKCEkY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbGV0ICRjaGlsZHJlbiA9ICRjb250YWluZXIuY2hpbGRyZW4oKTtcbiAgICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICAgJGNoaWxkcmVuLmVhY2goZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHtcbiAgICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAkZWxlbWVudC5wcm9wKCd0YWdOYW1lJykudG9Mb3dlckNhc2UoKS5zcGxpdCgnXycpO1xuICAgICAgICBpZiAoJC5pbkFycmF5KHRhZ05hbWVbMF0sIHRhZ05hbWVMaXN0KSA+PSAwKSB7XG4gICAgICAgICAgICBlbXB0eUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFnOiB0YWdOYW1lWzBdLFxuICAgICAgICAgICAgICAgIHN1cGVyOiB0YWdOYW1lLnNwbGljZSgxKSB8fCBbXSxcbiAgICAgICAgICAgICAgICBkb206ICRlbGVtZW50XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aCgndGhpcy4nKSkge1xuICAgICAgICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW1wdHlMaXN0ID0gZW1wdHlMaXN0LmNvbmNhdChmaW5kU2RjVGdzKCRlbGVtZW50LCB0YWdOYW1lTGlzdCwgcGFyZW50Q29udHJvbGxlcikpXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgICBmb3IgKGxldCBrZXlfaWR4IGluIGNvbnRyb2xsZXIuX3VybFBhcmFtcykge1xuICAgICAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCBcIlwiICsgdXJsVmFsdWVzLnNoaWZ0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBsb2FkSFRNTEZpbGUgbG9hZHMgdGhlIEhUTUwgY29udGVudCBmaWxlIGZyb20gdGhlIHNlcnZlciB2aWEgYWpheCByZXF1ZXN0LlxuICpcbiAqIElmIHRoZSBIVE1MIGZpbGUgaXMgbG9hZGVkIGFscmVhZHkgdGhlIGZ1bmN0aW9uIHRha2VzIG5vIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIGEgY29udGVudCBVUkwgZnJvbSB0aGUgY29udHJvbGxlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gZ2V0IGFyZ3MuXG4gKiBAcGFyYW0gdGFnIC0gYSBub3JtYWxpemVkIHRhZy1uYW1lIGFzIHN0cmluZy5cbiAqIEBwYXJhbSBoYXJkUmVsb2FkIC0gdHJ1ZSBpZiB0aGUgZmlsZSBoYXMgdG8gYmUgcmVsb2FkZWQgZXZlcnkgdGltZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fSAtIHdhaXRzIGZvciB0aGUgZmlsZSB0byBiZSBsb2FkZWQuXG4gKi9cbmZ1bmN0aW9uIGxvYWRIVE1MRmlsZShwYXRoLCBhcmdzLCB0YWcsIGhhcmRSZWxvYWQpIHtcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChodG1sRmlsZXNbdGFnXSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGh0bWxGaWxlc1t0YWddKVxuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9ICdjb250ZW50JztcblxuICAgIHJldHVybiAkLmdldChwYXRoLCBhcmdzKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghaGFyZFJlbG9hZCkge1xuICAgICAgICAgICAgaHRtbEZpbGVzW3RhZ10gPSBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZXJyLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgIHRyaWdnZXIoJ19SZWRpcmVjdE9uVmlldycsIGRhdGFbJ3VybC1saW5rJ10pO1xuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXIoJ25hdkxvYWRlZCcsIHsnY29udHJvbGxlcl9uYW1lJzogKCk9PiBlcnIuc3RhdHVzfSk7XG5cbiAgICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHBhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyIHx8ICRjb250YWluZXIuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKTtcbiAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRVcmwgdXNlcyB0aGUgY29udGVudCBVUkwgcHJlZml4IHRvIG1hcmdlIHRoZVxuICogY29ycmVjdCBVUkwuIEFsc28gcGFyc2VzIHRoZSB1cmwgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgICAgICBsZXQgbWF0Y2hlcztcbiAgICAgICAgY29udHJvbGxlci5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICAgIHJldHVybiB7dXJsOiB1cmwsIGFyZ3M6IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV19O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gICAgaWYgKCRlbGVtLmhhc0NsYXNzKENPTlRST0xMRVJfQ0xBU1MpKSB7XG4gICAgICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gICAgbGV0IGdldEVsZW1lbnRzID0ge2FyZ3M6IHt9fTtcbiAgICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgICAgIGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICBsb2FkSFRNTEZpbGUoY29udHJvbGxlci5jb250ZW50VXJsLCBnZXRFbGVtZW50cy5hcmdzLCBjb250cm9sbGVyLl90YWdOYW1lLCBjb250cm9sbGVyLmNvbnRlbnRSZWxvYWQpXG4gICAgXSkudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICBsZXQgaHRtbEZpbGUgPSByZXN1bHRzWzBdO1xuICAgICAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoaHRtbEZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJzxkaXY+PC9kaXY+JykuYXBwZW5kKGh0bWxGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbG9hZEhUTUxDb250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnk+fSAtIHRoZSBwcm9taXNlIHdhaXRzIHRvIHRoZSBmaWxlcyBhcmUgbG9hZGVkLiBpdCByZXR1cm5zIHRoZSBqUXVlcnkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkSFRNTENvbnRyb2xsZXIoY29udHJvbGxlcikge1xuICAgIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICAgICAgbGV0IGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICAgICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLmNvbnRlbnRVcmwsIGdldEVsZW1lbnRzLmFyZ3MsIGNvbnRyb2xsZXIuX3RhZ05hbWUsIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKCQoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdFxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKCRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICAgIGlmIChjb250cm9sbGVyKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJGYWN0b3J5KHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbiAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAgICRlbGVtZW50LmFkZENsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCAkZWxlbWVudCk7XG59XG5cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX3RhZ05hbWUsICcnKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gY29udHJvbGxlci5fbWl4aW5zKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl9taXhpbnNbbWl4aW5LZXldLl90YWdOYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmFwcGVuZCgkaHRtbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG59XG5cblxuLyoqXG4gKiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciBGaW5kcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGluIGEgY29udGFpbmVyLiBCdXQgaXQgaWdub3Jlc1xuICogcmVnaXN0ZXJlZCB0YWdzIGluIHJlZ2lzdGVyZWQgdGFncy4gRm9yIGVhY2ggcmVnaXN0ZXJlZCB0YWcgaXQgbG9hZHMgdGhlIGNvbnRlbnQuXG4gKiBBZnRlcndhcmRzIGl0IHN0YXJ0cyB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgY29udHJvbGxlci4gSSB0aGUgbmV4dCBzdGVwIGl0IHN0YXJ0cyB0aGVcbiAqIHByb2NlZHVyZSBmb3IgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBjb250cm9sbGVyIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ0xpc3QgLSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIHRhZ3NcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0galF1ZXJ5IGNvbnRhaW5lciB0byBmaW5kIHRoZSB0YWdzXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gY29udHJvbGxlciBpbiBzdXJyb3VuZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnTGlzdCwgJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgICAgIGxldCB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzID0gZmluZFNkY1RncygkY29udGFpbmVyLCB0YWdMaXN0LCBwYXJlbnRDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7IGVsZW1lbnRJbmRleCsrKSB7XG4gICAgICAgICAgICBydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdEZXNjcmlwdGlvbkVsZW1lbnRzW2VsZW1lbnRJbmRleF0uZG9tLFxuICAgICAgICAgICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgICAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgICAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlcikge1xuICAgIHJldHVybiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpXG59XG5mdW5jdGlvbiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCAkZG9tKSB7XG4gICAgY29uc3QgcGxpc3QgPSBbXTtcblxuICAgICRkb20uZmluZChgLl9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyLnNkY191dWlkXyR7Y29udHJvbGxlci5fdXVpZH1gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZigkdGhpcy5oYXNDbGFzcyhgX3dpdGhfaGFuZGxlcmApKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAkdGhpcy5kYXRhKCdoYW5kbGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29udHJvbGxlcl9oYW5kbGVyID0gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXnRoaXMuLywgJycpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYmluZChjb250cm9sbGVyKSgkdGhpcy5kYXRhKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwbGlzdC5wdXNoKFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4oKHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkbmV3X2NvbnRlbnQgPSAkKGA8ZGl2PjwvZGl2PmApO1xuICAgICAgICAgICAgICAgICRuZXdfY29udGVudC5hcHBlbmQoeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKHRhZ0xpc3QoKSwgJG5ld19jb250ZW50LCBjb250cm9sbGVyKS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJG5ld19jb250ZW50KS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuc2FmZUVtcHR5KCkudGV4dCgnJykuYXBwZW5kKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwbGlzdCk7XG59Il0sIm5hbWVzIjpbImNvbnRyb2xsZXJGYWN0b3J5IiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJ0YWdMaXN0IiwiZ2V0VXJsUGFyYW0iLCJhcHAiLCJ0cmlnZ2VyIiwiaHRtbEZpbGVzIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJjbGVhbkNhY2hlIiwiZmluZFNkY1RncyIsIiRjb250YWluZXIiLCJ0YWdOYW1lTGlzdCIsInBhcmVudENvbnRyb2xsZXIiLCIkY2hpbGRyZW4iLCJjaGlsZHJlbiIsImVtcHR5TGlzdCIsImVhY2giLCJfIiwiZWxlbWVudCIsIiRlbGVtZW50IiwiJCIsInRhZ05hbWUiLCJwcm9wIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImluQXJyYXkiLCJwdXNoIiwidGFnIiwic3VwZXIiLCJzcGxpY2UiLCJkb20iLCJzdGFydHNXaXRoIiwiYWRkQ2xhc3MiLCJfdXVpZCIsImNvbmNhdCIsInJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidXJsIiwidXJsVmFsdWVzIiwia2V5X2lkeCIsIl91cmxQYXJhbXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsInJlIiwiUmVnRXhwIiwicmVwbGFjZSIsInNoaWZ0IiwibG9hZEhUTUxGaWxlIiwicGF0aCIsImFyZ3MiLCJoYXJkUmVsb2FkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJWRVJTSU9OIiwiX21ldGhvZCIsImdldCIsInRoZW4iLCJkYXRhIiwiY2F0Y2giLCJlcnIiLCJzdGF0dXMiLCJyZXNwb25zZUpTT04iLCJjb250cm9sbGVyX25hbWUiLCJyZXNwb25zZVRleHQiLCJyZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwidGFnTmFtZXMiLCJwYXJzZUNvbnRlbnRVcmwiLCJjb250ZW50VXJsIiwibGVuZ3RoIiwibWF0Y2hlcyIsImV4ZWMiLCJjb250ZW50UmVsb2FkIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJfdGFnTmFtZSIsInJlc3VsdHMiLCJodG1sRmlsZSIsImFwcGVuZCIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwicnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJzdXBlclRhZ05hbWVMaXN0IiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwiJGh0bWwiLCJlbXB0eSIsImF0dHIiLCJtaXhpbktleSIsIl9taXhpbnMiLCJ0YWdEZXNjcmlwdGlvbkVsZW1lbnRzIiwidGFnQ291bnQiLCJlbGVtZW50SW5kZXgiLCJyZWxvYWRNZXRob2RIVE1MIiwiX3JlbG9hZE1ldGhvZEhUTUwiLCIkZG9tIiwicGxpc3QiLCJmaW5kIiwiJHRoaXMiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJjb250cm9sbGVyX2hhbmRsZXIiLCJiaW5kIiwieCIsIiRuZXdfY29udGVudCIsInNhZmVFbXB0eSIsInRleHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n");
118
118
 
119
119
  /***/ })
120
120