| | |
| | | focus: _vm._$s( |
| | | "6-" + $30, |
| | | "a-focus", |
| | | _vm.focusMateria |
| | | _vm.focusFieldId == item.fieldId |
| | | ), |
| | | _i: "6-" + $30, |
| | | }, |
| | |
| | | }, |
| | | on: { |
| | | focus: function ($event) { |
| | | return _vm.ontap(item) |
| | | return _vm.ontap(index, item) |
| | | }, |
| | | keyup: function ($event) { |
| | | if ( |
| | |
| | | /***/ (function(module, exports, __webpack_require__) { |
| | | |
| | | "use strict"; |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n modules: {\n Base64: _base.default\n },\n data: function data() {\n return {\n title: '码盘',\n ClsID: 'CG_Detail',\n param: {},\n focusMateria: false,\n head_styledef: {\n form: {\n items: []\n }\n },\n detail1_styledef: {},\n detail1StyleDefList: [],\n detail2_styledef: {},\n detail2StyleDefList: [],\n // 分段器数据\n current: 0,\n Before_OK_Event: {},\n After_OK_Event: {},\n items: [],\n active_id: '',\n activelist: []\n };\n },\n onLoad: function onLoad(options) {\n // console.log(options);\n uni.setNavigationBarTitle({\n title: options.titlename\n }); //设置顶部标题 \n this.$data.title = options.titlename;\n this.$data.param = JSON.parse(options.param);\n // console.log(this.$data.param);\n //获取数据类的自定义表单参数\n this.Head_UIStyleGetInfo(this.$data.ClsID, this.$data.param.Input_UI_Style.ID);\n\n //加载初始界面\n if (this.$data.param.Show_Welcom_Page) {\n this.$data.param.Welcome_Page.Img = this.$data.param.Welcome_Page.Img.replace(/ /g, '+');\n this.$data.param.Welcome_Page.Width = parseInt(this.$data.param.Welcome_Page.Width);\n this.$data.param.Welcome_Page.Height = parseInt(this.$data.param.Welcome_Page.Height);\n }\n //加载Tab页签\n this.$data.items.push(this.$data.param.Sub_Page[0].Name);\n this.$data.items.push(this.$data.param.Sub_Page[1].Name);\n this.Detail1_UIstyleGetInfo(this.ClsID, this.$data.param.Sub_Page[0].UI_Style.ID);\n this.Detail2_UIstyleGetInfo(this.ClsID, this.$data.param.Sub_Page[1].UI_Style.ID);\n __f__(\"log\", this.$data.param, \" at pages/modal/5600.vue:513\");\n //页面初始化获取焦点\n // this.focusMateria=true; \n },\n\n methods: {\n Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n var _this = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n //获取自定义表单样式\n $this = _this;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n // this.form = this.head_styledef.form.model;\n // console.log($this.$data.head_styledef);\n $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context.next = 3;\n break;\n }\n _context.next = 3;\n return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误1\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误1.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n var _this2 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n //获取自定义表单样式\n $this = _this2;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail1_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail1_styledef);\n // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n // var aa = JSON.stringify(this.detail1_styledef);\n // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n // console.log($this.$data.detail1StyleDefList);\n $this.detail1_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(ele, index) {\n return _regenerator.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context3.next = 3;\n break;\n }\n _context3.next = 3;\n return _this2.DictGetInfo(ele.bind.dict, index, 'sub');\n case 3:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误2\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误2.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4);\n }))();\n },\n Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n var _this3 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n //获取自定义表单样式\n $this = _this3;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this3.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail2_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail2_styledef);\n } else {\n uni.showModal({\n title: \"错误3\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误3.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5);\n }))();\n },\n DictGetInfo: function DictGetInfo(dict, index, type) {\n var _this4 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n //Mobox3得到得到字典信息字典项列表\n _this4.data = [];\n $this = _this4;\n dataInfo = {\n dict_id: dict.id,\n dict_name: dict.name\n }; // console.log(dataInfo);\n _this4.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(success) {\n var list, itemName, attr, head_styledef, detail1_styledef;\n return _regenerator.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n __f__(\"log\", success, \" at pages/modal/5600.vue:626\");\n if (success.err_code == 0) {\n list = [];\n itemName = '';\n success.result.dict_item_list.forEach(function (item) {\n if (item.is_default == '1') itemName = item.name;\n list.push({\n text: item.value,\n value: item.name\n });\n });\n if (type == 'mast') {\n //有默认值,显示默认值\n if (itemName) {\n $this.head_styledef.form.items[index].value = itemName;\n attr = $this.head_styledef.form.items[index].fieldId;\n $this.head_styledef.form.model[attr] = itemName;\n }\n $this.head_styledef.form.items[index].dict = list;\n head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n $this.head_styledef = [];\n $this.head_styledef = head_styledef;\n // console.log($this.head_styledef);\n } else {\n if (itemName) {\n $this.detail1_styledef.form.items[index].value = itemName;\n attr = $this.detail1_styledef.form.items[index].fieldId;\n $this.detail1_styledef.form.model[attr] = itemName;\n }\n $this.detail1_styledef.form.items[index].dict = list;\n detail1_styledef = JSON.parse(JSON.stringify($this.detail1_styledef));\n $this.detail1_styledef = [];\n $this.detail1_styledef = detail1_styledef;\n // console.log($this.$data.detail1_styledef);\n }\n } else {\n uni.showModal({\n title: \"错误3.1\",\n content: success.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 2:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }));\n return function (_x5) {\n return _ref3.apply(this, arguments);\n };\n }()).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误3\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7);\n }))();\n },\n ontap: function ontap(item) {\n var _this5 = this;\n //扫码功能\n // var $ele = e;\n //console.log(e.target)\n getApp().onScan(function (result) {\n __f__(\"log\", result.decodedata, \" at pages/modal/5600.vue:677\");\n item.value = result.decodedata;\n uni.hideKeyboard();\n var $this = _this5;\n\n // if(item.value=='B61DF51DD50645CEB9D152DD77D2466A'){\n // \tthis.active_id = 'B61DF51DD50645CEB9D152DD77D2466A';\n // \t// var target = uni.createSelectorQuery().select('#B61DF51DD50645CEB9D152DD77D2466A');\n // \tuni.createSelectorQuery()\n // \t .select(\"#tabpanel\")//对应外层节点\n // \t .boundingClientRect((container) => {\n // \t uni.createSelectorQuery()\n // \t .select(\"#B61DF51DD50645CEB9D152DD77D2466A\")//目标节点\n // \t .boundingClientRect((target) => {\n // \t uni.pageScrollTo({\n // \t scrollTop: target.top - container.top,//滚动到实际距离是元素距离顶部的距离减去最外层盒子的滚动距离\n // \t });\n // \t })\n // \t .exec();\n // \t })\n // \t .exec();\n // }\n __f__(\"log\", item, \" at pages/modal/5600.vue:699\");\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n _this5.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n $this.onChange(onChangeEvent);\n }\n if (item.value) {\n //第一个输入框不为空\n $this.focusMateria = true; //初始化,第二个输入框focus属性\n // setTimeout(function(){\n // \t$this.focusMateria=true; //第二个输入框获取焦点\n setTimeout(function () {\n uni.hideKeyboard();\n }, 1000);\n // },500);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n });\n },\n onEnterChange: function onEnterChange(item) {\n //回车,点击按钮,取消节点事件\n // console.log(item);\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n this.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n this.onChange(onChangeEvent);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n },\n // 内容变化后事件\n onChange: function onChange(event) {\n var _this6 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n var obj_attr, input_param, $this, dataInfo, tip;\n return _regenerator.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n try {\n if (event.id) {\n obj_attr = _this6.head_styledef.form.model; // console.log(obj_attr);\n input_param = _base.default.encode(JSON.stringify(Object.keys(obj_attr).map(function (a) {\n return {\n attr: a,\n value: obj_attr[a] || \"\"\n };\n })));\n $this = _this6;\n dataInfo = {\n ed_type: 0,\n start_transaction: true,\n class_id: _this6.$data.head_styledef.form.clsId,\n class_name: '',\n event_id: event.id,\n event_name: '',\n data_obj_id: '',\n obj_attr: obj_attr,\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: '',\n compose_info: '',\n ext_info: '',\n global_attr: '',\n input_param: input_param\n };\n _this6.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var result = ret.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0 && result.action) {\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //码盘中\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n $this.viewAceionRow(value);\n } else if (item.action_type == \"set_subtable_page_content\") {\n //已码盘\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n if (value.clear == true && $this.$data.detail1StyleDefList.length > 0 && value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断是否清空页签内容,正在码盘是否有数据\n uni.showModal({\n title: '提示',\n content: '系统检测到有正在码盘中的货品,继续操作会清空,是否继续?',\n success: function success(res) {\n if (res.confirm) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n } else if (res.cancel) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n }\n }\n });\n } else {\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.$data.detail1StyleDefList = [];\n } else {\n $this.$data.detail2StyleDefList = [];\n }\n $this.viewAceionContent(value);\n }\n } else if (item.action_type == \"select_subtable_page_row\") {\n // value = {\"page_name\":\"码盘中\", \"row\":{\"id\":\"xx\"}}\n var value = item.value;\n $this.detail1StyleDefList.forEach(function (ele) {\n $this.activelist[index].active = false;\n if (ele.form.objId == value.row.id) {\n ele.SelBut_Checked = true;\n $this.active_id = ele.form.htmlobjId;\n //自动滚动到指定元素\n uni.createSelectorQuery().select(\"#tabpanel\") //对应外层节点\n .boundingClientRect(function (container) {\n uni.createSelectorQuery().select(\"#tabpanel\" + ele.form.htmlobjId) //目标节点\n .boundingClientRect(function (target) {\n uni.pageScrollTo({\n scrollTop: target.top - container.top //滚动到实际距离是元素距离顶部的距离减去最外层盒子的滚动距离\n });\n }).exec();\n }).exec();\n }\n });\n } else if (item.action_type == \"set_dlg_attr\") {\n // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n var data = item.value;\n $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(ele, index) {\n return _regenerator.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n data.forEach( /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(ele2, index) {\n return _regenerator.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (ele.fieldId == ele2.attr) {\n ele.value = ele2.value;\n }\n case 1:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8);\n }));\n return function (_x8, _x9) {\n return _ref5.apply(this, arguments);\n };\n }());\n case 1:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9);\n }));\n return function (_x6, _x7) {\n return _ref4.apply(this, arguments);\n };\n }());\n }\n });\n } else {\n // this.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"错误4.3\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误4\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误4.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n }\n } catch (ex) {\n tip = typeof ex == \"string\" ? ex : ex.message;\n uni.showModal({\n title: \"错误4.2\",\n content: \"执行“内容变化后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10);\n }))();\n },\n //加载正在码盘内容\n viewAceionRow: function viewAceionRow(data, type) {\n var _this7 = this;\n // console.log(data);\n if (JSON.stringify(data.row) == '{}') {\n return;\n }\n data.row.forEach(function (row) {\n var styleStr = JSON.stringify(_this7.$data.detail1_styledef);\n if (type) {\n //确定后脚本进入加载已分拣数据\n styleStr = JSON.stringify(_this7.$data.detail2_styledef);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n styleStr = JSON.stringify(_this7.$data.detail2_styledef); //待分拣\n }\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.form.objId = row.id;\n detailStyle.form.htmlobjId = row.id ? row.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = row.attrs;\n row.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (type) {\n //确定后脚本进入加载已分拣数据\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n _this7.$data.detail1StyleDefList.push(detailStyle);\n _this7.activelist.push({\n active: false\n });\n // console.log(this.$data.detail1StyleDefList);\n }\n }\n });\n },\n //加载已码盘内容\n viewAceionContent: function viewAceionContent(data) {\n var $this = this;\n if (JSON.stringify(data.content) == '{}') {\n return;\n }\n data.content.forEach(function (cont) {\n var _data$checkbox;\n var styleStr = JSON.stringify($this.$data.detail2_styledef);\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是码盘中\n styleStr = JSON.stringify($this.$data.detail1_styledef); //码盘中\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.SelBut_Checked = (_data$checkbox = data.checkbox) !== null && _data$checkbox !== void 0 ? _data$checkbox : true;\n detailStyle.form.objId = cont.id;\n detailStyle.form.htmlobjId = cont.id ? cont.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = cont.attrs;\n cont.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n if (data.clear == false) {\n var isflag = true;\n $this.detail1StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail1StyleDefList.push(detailStyle); //待分拣\n } else {\n $this.detail1StyleDefList.push(detailStyle); //待分拣\n }\n\n $this.activelist.push({\n active: false\n });\n // console.log($this.$data.detail1StyleDefList);\n } else {\n if (data.clear == false) {\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n var isflag = true;\n $this.detail2StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail2StyleDefList.push(detailStyle); //已分拣\n } else {\n $this.detail2StyleDefList.push(detailStyle); //已分拣\n }\n // console.log($this.$data.detail2StyleDefList);\n }\n });\n },\n onClickItem: function onClickItem(e) {\n //选择页签\n // console.log(e);\n this.current = e.currentIndex;\n },\n onDetail1EnterChange: function onDetail1EnterChange(item) {\n //码盘中样式回车事件\n __f__(\"log\", item, \" at pages/modal/5600.vue:1031\");\n },\n delItem: function delItem(index) {\n //删除码盘中样式面板\n this.detail1StyleDefList.splice(index, 1);\n },\n delDataObj: function delDataObj(style, index) {\n //删除已码盘数\n // console.log(style);\n var $this = this;\n uni.showModal({\n title: '提示',\n content: '确定删除该已码盘数据!',\n success: function success(res) {\n if (res.confirm) {\n var objID = style.form.objId;\n if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n var dataInfo = {\n class_id: style.form.clsId,\n class_name: '',\n obj_id: objID\n };\n // console.log(dataInfo);\n $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n $this.detail2StyleDefList.splice(index, 1);\n uni.showModal({\n title: \"提示\",\n content: \"删除成功!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n } else {\n uni.showModal({\n title: \"错误5\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误5.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n } else if (res.cancel) {}\n }\n });\n },\n onPanelClick: function onPanelClick(value) {\n // console.log(value);\n this.active_id = '';\n this.activelist.forEach(function (ele) {\n ele.active = false;\n });\n this.activelist[value].active = true;\n // console.log(this.$data.activelist);\n },\n //确定\n ok: function ok() {\n this.Before_OK_Event = this.param.Sub_Page[0].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[0].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava(this.$data.After_OK_Event);\n },\n sava: function sava(event) {\n var $this = this;\n if (this.$data.detail1StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有正在码盘的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在码盘属性\n var detailAttrList = [];\n this.$data.detail1StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[0].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取正在码盘里没有显示的字段\n this.$data.detail1StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: '',\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n })\n });\n });\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, jsonlist, '1');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'1');\n // });\n },\n ok2: function ok2() {\n this.Before_OK_Event = this.param.Sub_Page[1].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[1].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava2(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava2(this.$data.After_OK_Event);\n },\n sava2: function sava2(event) {\n var $this = this;\n if (this.$data.detail2StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有已码盘的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在码盘属性\n var detailAttrList = [];\n this.$data.detail2StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[1].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取正在码盘里没有显示的字段\n this.$data.detail2StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: '',\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n })\n });\n });\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, jsonlist, '2');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'2');\n // });\n },\n //执行确定脚本\n runCustomEvent: function runCustomEvent(event, input_param, json, type) {\n var _this8 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n var $this, data_json, dataInfo;\n return _regenerator.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n $this = _this8;\n data_json = _base.default.encode(JSON.stringify(json));\n dataInfo = {\n ed_type: 0,\n start_transaction: true,\n class_id: _this8.$data.ClsID,\n class_name: '',\n event_id: event.ID,\n event_name: '',\n data_obj_id: '',\n obj_attr: '',\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: data_json,\n compose_info: '',\n ext_info: '',\n global_attr: '',\n input_param: input_param\n }; // console.log(dataInfo);\n _this8.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n __f__(\"log\", res, \" at pages/modal/5600.vue:1282\");\n if (res.err_code == 0) {\n var result = res.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0) {\n if (result.action) {\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //码盘中\n var value = item.value;\n //加载已经码盘数据\n $this.viewAceionRow(value, 'add');\n //清空条码内容\n $this.$data.head_styledef.form.items.forEach(function (item, index) {\n if (item.fieldId != \"S_CNTR_CODE\") {\n item.value = '';\n item.oldvalue = '';\n $this.$data.head_styledef.form.model[item.fieldId] = '';\n }\n });\n //清除正在码盘中成功的数据\n // $this.$data.detail1StyleDefList.forEach((style,index)=>{\n // if(style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value){ \n // \t$this.$data.detail1StyleDefList.splice(index,1);\n // \treturn;\n // }\n // });\n // this.detail2StyleDefList=[];\n uni.showModal({\n title: \"提示\",\n content: \"码盘成功\",\n showCancel: false,\n confirmText: \"取消\"\n });\n // } else if(item.action_type == \"refresh\"){ //刷新\n // var value = item.value;\n // //刷新当前页面\n // // location.reload();\n // uni.redirectTo({\n // \turl:'../modal/5600?param='+JSON.stringify(this.$data.param)+\"&titlename=\"+this.$data.title\n // });\n // } else if(item.action_type == \"prompt\"){ //打开系统提示弹框\n // var value = '';\n // item.value.forEach(ele=>{\n // \tif(value) value+='\\n';\n // \tvalue+=ele;\n // });\n // uni.showModal({title:\"系统提示\",content:value,showCancel:false,confirmText:\"关闭\"});\n }\n });\n } else {\n if ($this.$data.After_OK_Event.ID != event.ID) {\n //判断当前事件是否是确定后事件\n if (type == '1') {\n $this.sava($this.$data.After_OK_Event); //执行确定后事件\n } else {\n $this.sava2($this.$data.After_OK_Event); //执行确定后事件\n }\n }\n }\n } else {\n // $this.$data.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"提示\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误8\",\n content: res.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n uni.showModal({\n title: \"错误8.1\",\n content: \"执行“确定后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11);\n }))();\n },\n cancel: function cancel(e) {\n //取消\n uni.navigateBack({\n delta: 1 //返回层数,2则上上页\n });\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsIkNsc0lEIiwicGFyYW0iLCJmb2N1c01hdGVyaWEiLCJoZWFkX3N0eWxlZGVmIiwiZm9ybSIsIml0ZW1zIiwiZGV0YWlsMV9zdHlsZWRlZiIsImRldGFpbDFTdHlsZURlZkxpc3QiLCJkZXRhaWwyX3N0eWxlZGVmIiwiZGV0YWlsMlN0eWxlRGVmTGlzdCIsImN1cnJlbnQiLCJCZWZvcmVfT0tfRXZlbnQiLCJBZnRlcl9PS19FdmVudCIsImFjdGl2ZV9pZCIsImFjdGl2ZWxpc3QiLCJvbkxvYWQiLCJ1bmkiLCJtZXRob2RzIiwiSGVhZF9VSVN0eWxlR2V0SW5mbyIsIiR0aGlzIiwiZGF0YUluZm8iLCJjbGFzc19pZCIsInVpX3N0eWxlX2lkIiwic3R5bGVkZWYiLCJlbGUiLCJjb250ZW50Iiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwiRGV0YWlsMV9VSXN0eWxlR2V0SW5mbyIsIkRldGFpbDJfVUlzdHlsZUdldEluZm8iLCJEaWN0R2V0SW5mbyIsImRpY3RfaWQiLCJkaWN0X25hbWUiLCJsaXN0IiwiaXRlbU5hbWUiLCJzdWNjZXNzIiwidGV4dCIsInZhbHVlIiwiYXR0ciIsIm9udGFwIiwiZ2V0QXBwIiwiaXRlbSIsInNldFRpbWVvdXQiLCJvbkVudGVyQ2hhbmdlIiwib25DaGFuZ2UiLCJvYmpfYXR0ciIsImlucHV0X3BhcmFtIiwiSlNPTiIsIk9iamVjdCIsImVkX3R5cGUiLCJzdGFydF90cmFuc2FjdGlvbiIsImNsYXNzX25hbWUiLCJldmVudF9pZCIsImV2ZW50X25hbWUiLCJkYXRhX29ial9pZCIsInByal9pZCIsInJlZl9jbHNfaWQiLCJyZWxfb2JqX2lkIiwidXNlcl9sb2dpbiIsImRhdGFfanNvbiIsImNvbXBvc2VfaW5mbyIsImV4dF9pbmZvIiwiZ2xvYmFsX2F0dHIiLCJyZXN1bHQiLCJzZWxlY3QiLCJib3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb3AiLCJleGVjIiwidGlwIiwidmlld0FjZWlvblJvdyIsInN0eWxlU3RyIiwiZGV0YWlsU3R5bGUiLCJyb3ciLCJhY3RpdmUiLCJ2aWV3QWNlaW9uQ29udGVudCIsImNvbnQiLCJzdHlsZSIsImlzZmxhZyIsIm9uQ2xpY2tJdGVtIiwib25EZXRhaWwxRW50ZXJDaGFuZ2UiLCJkZWxJdGVtIiwiZGVsRGF0YU9iaiIsIm9ial9pZCIsIm9uUGFuZWxDbGljayIsIm9rIiwic2F2YSIsImhlYWRfYXR0ciIsImRldGFpbF9hdHRyIiwiZGV0YWlsQXR0ckxpc3QiLCJrZXlzIiwianNvbmxpc3QiLCJpZCIsImF0dHJzIiwib2syIiwic2F2YTIiLCJydW5DdXN0b21FdmVudCIsImNhbmNlbCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUE4Y0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQUNBO0VBQ0FBO0lBQ0FDO0VBQ0E7RUFDQUM7SUFDQTtNQUNBQztNQUNBQztN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O3NCQUFBQztvQkFBQTtrQkFDQTtnQkFDQTtrQkFDQTtrQkFDQVg7b0JBQUFqQjtvQkFBQTBCO29CQUFBQztvQkFBQUM7a0JBQUE7Z0JBQ0E7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUE7SUFDQTtJQUVBcUU7TUFBQTtNQUNBaEY7UUFDQWlGO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiIxOTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8c3R5bGU+XHJcbi52LWhlYWRTdHlsZTpmaXJzdC1jaGlsZHtcclxuXHRtYXJnaW4tdG9wOiAxNXJweDtcclxufVxyXG4udi1oZWFkU3R5bGUgLnR4dF90aXRsZXtcclxuICBmb250LXNpemU6IDM0cnB4O1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB2ZXJ0aWNhbC1hbGlnbjogMTJweDtcclxufVxyXG4udi1oZWFkU3R5bGUgaW5wdXR7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7ICovXHJcblx0Lyogd2lkdGg6IDY1JTsgKi9cclxuXHR3aWR0aDogODUlOyAgICBcclxuXHRoZWlnaHQ6IDUycnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDM0cnB4O1xyXG5cdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHBhZGRpbmc6IDEwcnB4IDhycHggMTJycHg7XHJcblx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XHJcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRtYXJnaW4tdG9wOiA0cnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0Zm9udC1zaXplOiAxMnJweDtcclxufVxyXG4uaW5wdXQtd3JhcHBlcntcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgd2lkdGg6IDY1JTsgICAgXHJcblx0bGluZS1oZWlnaHQ6IDIycnB4O1xyXG59XHJcbltudnVlXSB1bmktdmlldyB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBib3JkZXI6IDAgc29saWQgIzAwMDtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbn1cclxuLnVuaS1pbnB1dCB7XHJcblx0LyogYm9yZGVyOiBub25lOyAqL1xyXG59XHJcbi51bmktaWNvbntcclxuXHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcblx0d2lkdGg6IDglO1xyXG4gICAgZm9udC1mYW1pbHk6IHVuaWljb25zO1xyXG4gICAgZm9udC1zaXplOiA0MHJweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XHJcbiAgICAvKiB3aWR0aDogNDhycHg7ICovXHJcbiAgICBoZWlnaHQ6IDQ4cnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDQ4cnB4O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHZlcnRpY2FsLWFsaWduOiAxOHJweDtcclxufVxyXG4udmlldy1jb250ZW50e1xyXG5cdG1pbi1oZWlnaHQ6IDc1MHJweDtcclxuXHQvKiBib3JkZXI6MXB4IHNvbGlkIHJlZDsgKi9cclxufVxyXG4uZHYtcGFuZWx7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNlZmVmZWY7XHJcbiAgICBwYWRkaW5nOiAyMHJweCAyMHJweCA0cnB4IDBweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEycnB4O1xyXG4gICAgbWFyZ2luOiAxMHJweCAwIDIwcnB4IDA7XHJcblx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi5kdi1wYW5lbC1pbnB1dHtcclxuXHR3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG59XHJcbi5kdi1wYW5lbC1pbnB1dCAuZHYtaW5wdXR7XHJcblx0bWFyZ2luLWJvdHRvbTogMnJweDtcclxufVxyXG4uZHYtcGFuZWwgLnR4dF90aXRsZXtcclxuICBmb250LXNpemU6IDM0cnB4O1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5cclxuLmR2LXBhbmVsIGlucHV0e1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcblx0d2lkdGg6IDY4JTsgXHJcblx0aGVpZ2h0OiA1MnJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAzNHJweDtcclxuXHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdGJvcmRlci1yYWRpdXM6IDdweCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdHBhZGRpbmc6IDZycHggOHJweCA4cnB4O1xyXG5cdGZvbnQtc2l6ZTogMzJycHg7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcblx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0bWFyZ2luLXRvcDogMHJweDtcclxufVxyXG4uZHYtcGFuZWwgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG5cdGZvbnQtc2l6ZTogMTBycHg7XHJcbn1cclxuLmR2LXBhbmVsIC5mb3JtLWl0ZW0tc3BhbntcclxuXHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XHJcbiAgICBjb2xvcjogIzJkOGNmMDtcclxuXHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG5cdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR3aWR0aDogY2FsYygxMDAlIC0gMTAwcHgpO1xyXG59XHJcblxyXG4uZHYtcGFuZWwtYnV0dG9ue1xyXG4gICAvKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0bWFyZ2luLXJpZ2h0OiAyMHJweDsgKi9cclxuXHR3aWR0aDogMTAwJTtcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdHBhZGRpbmctYm90dG9tOiAyMHJweDtcclxufVxyXG4uZHYtcGFuZWwtYnV0dG9uIGNoZWNrYm94LWdyb3VwIHsgXHJcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5kdi1wYW5lbC1idXR0b24gYnV0dG9uIHsgXHJcblx0dGV4dC1hbGlnbjogbGVmdDsgICBcclxuXHRsaW5lLWhlaWdodDogMS44O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0d2lkdGg6IDE4MHJweDsgICBcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbmJ1dHRvbi5idG5fY2FuY2VsIHtcclxuXHR3aWR0aDo0OS41JTtcclxuXHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRwYWRkaW5nOiAyMHJweDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5idXR0b24uYnRuX2FkZCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5sb2dvIHtcclxuXHRoZWlnaHQ6IDEwMHJweDtcclxuICAgIHdpZHRoOiA0NjBycHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luOiAzOCUgYXV0bztcclxufVxyXG4uZHYtYm9yZGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkIHJlZDtcclxufVxyXG4udmlldy1pbWFnZXRleHR7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIHdpZHRoOiA4OCU7XHJcbiAgcGFkZGluZzogMjBycHggNDBycHggMHB4IDQwcnB4O1xyXG4gIC8qIGJvcmRlcjoxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi52aWV3LWltYWdldGV4dCAudmlldy1pbWFnZXRleHQtdXBsb2FkbGlzdCB7XHJcbiAgcGFkZGluZzogMzBycHggMHB4IDEwcnB4IDBweDtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGxpbmUtaGVpZ2h0OiAxMDAlO1xyXG4gIGJvcmRlcjogMnJweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICBib3JkZXItcmFkaXVzOiA4cnB4O1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgYmFja2dyb3VuZDogI2ZmZjtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgLyogYm94LXNoYWRvdzogMCAycnB4IDJycHggcmdiYSgwLCAwLCAwLCAwLjIpO1xyXG4gIG1hcmdpbi1yaWdodDogOHJweDsgKi9cclxufVxyXG4udmlldy1pbWFnZXRleHQgLnR4dC10ZXh0e1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIG1hcmdpbjogMjBycHg7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnZpZXctZGV0YWxpc3QtY2VudGVue1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG4gIFxyXG4udmlldy1kZXRhbGlzdC1jZW50ZW4gLnR4dC1kZXRhbGlzdHtcclxuICBiYWNrZ3JvdW5kOiAjOTRENUVGO1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZvbnQtc2l6ZTogMzZycHg7XHJcbiAgbGluZS1oZWlnaHQ6IDgwcnB4O1xyXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbn1cclxuLnBhbmVsLWFjdGl2ZXtcclxuICBib3JkZXI6MnB4IHNvbGlkIHJlZDtcclxufVxyXG4uYmstYWN0aXZle1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNENkZDQjI7XHJcbn1cclxuI2R2X3NlbGVjdHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0d2lkdGg6IDY2JTsgXHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcblx0LyogcGFkZGluZzogMTBycHggOHJweCAxMnJweDsgKi9cclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDBycHg7XHJcblx0dmVydGljYWwtYWxpZ246IDIwcnB4O1xyXG59XHJcbiNkdl9zZWxlY3QgLnVuaS1zZWxlY3R7XHJcblx0Ym9yZGVyOiAycnB4IHNvbGlkICNjY2M7XHJcblx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdGNvbG9yOiAjMmQ4Y2YwO1x0XHJcbn1cclxuI2R2X3NlbGVjdCAudW5pLXNlbGVjdF9faW5wdXQtdGV4dHtcclxuXHRjb2xvcjogIzJkOGNmMDtcdFxyXG59XHJcbi5pbnB1dC1kaXNhYmxlZHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzICFpbXBvcnRhbnQ7XHJcbn1cclxuPC9zdHlsZT5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcblx0LmRlbW8tdW5pLXJvdyB7XHJcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XHJcblx0XHRkaXNwbGF5OiBibG9jaztcclxuXHR9XHJcblx0Ojp2LWRlZXAgLnVuaS1yb3cge1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xyXG5cdH1cclxuXHQudmlldy10YWJwYWdlIDo6di1kZWVwIC51bmktcm93ICB7XHJcblx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XHJcblx0fVxyXG5cdC5kZW1vLXVuaS1jb2wge1xyXG5cdFx0aGVpZ2h0OiAzNnB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdH1cclxuXHQuZGVtby11bmktcm93IC51bmktaW5wdXR7XHJcblx0XHR3aWR0aDogY2FsYygxMDAlIC0gMTIwcHgpO1xyXG5cdH1cclxuXHRcclxuPC9zdHlsZT5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHRcdDwhLS0g6KGo5aS05qC35byPIC0tPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2LWhlYWRTdHlsZVwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIGhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1wiID5cclxuXHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLmxhYmVsV2lkdGgrJ3B4J31cIj57e2l0ZW0ubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0PCEtLSDkuIvmi4nmoYYt5Y2V6YCJIGl0ZW0udXNlRGljdD9pdGVtLmRpY3Q6aXRlbS5zZWxlY3Rpb25zLS0+XHJcblx0XHRcdDx1bmktZGF0YS1zZWxlY3QgaWQ9XCJkdl9zZWxlY3RcIiB2LWlmPVwiaXRlbS5uYW1lPT0nU2VsZWN0J1wiXHJcblx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCJcclxuXHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiXHJcblx0XHRcdFx0OmxvY2FsZGF0YT1cIml0ZW0uZGljdFwiXHJcblx0XHRcdFx0QGNoYW5nZT1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdDpjbGVhcj1cImZhbHNlXCJcclxuXHRcdFx0PjwvdW5pLWRhdGEtc2VsZWN0PlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiB2LWlmPVwiaXRlbS5uYW1lPT0nSW5wdXQnIHx8IGl0ZW0ubmFtZT09J0lucHV0TnVtYmVyJ1wiPlxyXG5cdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcucHJlZml4XCIgXHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnByZWZpeF1cIlxyXG5cdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdDxpbnB1dFxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaW5wdXRcIlxyXG5cdFx0XHRcdFx0OmNsYXNzPVwiaXRlbS5kaXNhYmxlZD8naW5wdXQtZGlzYWJsZWQnOicnXCJcclxuXHRcdFx0XHRcdDp0eXBlPVwiaXRlbS5uYW1lPT0nSW5wdXQnPyd0ZXh0JzonbnVtYmVyJ1wiIFxyXG5cdFx0XHRcdFx0di1tb2RlbD1cIml0ZW0udmFsdWVcIlxyXG5cdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHQ6cGxhY2Vob2xkZXI9XCJpdGVtLnBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOml0ZW0uc2V0dGluZy5wcmVmaXggJiYgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nNzglJzppdGVtLnNldHRpbmcucHJlZml4IHx8IGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzg3JSc6Jzk2JSd9XCIgXHJcblx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c01hdGVyaWFcIlxyXG5cdFx0XHRcdFx0QGZvY3VzPVwib250YXAoaXRlbSlcIiBcclxuXHRcdFx0XHRcdEBrZXl1cC5lbnRlcj1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdFx0QGJsdXI9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCJcclxuXHRcdFx0XHQvPlxyXG5cdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcuc3VmZml4XCIgXHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnN1ZmZpeF1cIlxyXG5cdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0ICAgIDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwidmlldy1jb250ZW50XCI+XHJcblx0XHRcdDwhLS0g5Zu+5paHL+aWh+acrCAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWltYWdldGV4dFwiIHYtaWY9XCJwYXJhbS5TaG93X1dlbGNvbV9QYWdlPT10cnVlXCI+XHJcblx0XHRcdCAgPGRpdiBjbGFzcz1cInZpZXctaW1hZ2V0ZXh0LXVwbG9hZGxpc3RcIj5cclxuXHRcdFx0XHQ8aW1hZ2UgOnNyYz1cInBhcmFtLldlbGNvbWVfUGFnZS5JbWdcIiBcclxuXHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzpwYXJhbS5XZWxjb21lX1BhZ2UuV2lkdGgrJ3B4JywnaGVpZ2h0JzpwYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0KydweCd9XCI+PC9pbWFnZT5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dC10ZXh0XCIgXHJcblx0XHRcdFx0XHQ6c3R5bGU9XCJ7J2NvbG9yJzpwYXJhbS5XZWxjb21lX1BhZ2UuVHh0X0NvbG9yLCdmb250LXNpemUnOnBhcmFtLldlbGNvbWVfUGFnZS5Gb250X1NpemUrJ3B4JywnZm9udC1mYW1pbHknOnBhcmFtLldlbGNvbWVfUGFnZS5Gb250fVwiXHJcblx0XHRcdFx0Pnt7cGFyYW0uV2VsY29tZV9QYWdlLlRleHR9fTwvVGV4dD5cclxuXHRcdFx0ICA8L2Rpdj5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8IS0tIOeggeebmOeVjOmdoiAtLT5cclxuXHRcdFx0PHZpZXcgdi1pZj1cInBhcmFtLlNob3dfV2VsY29tX1BhZ2U9PWZhbHNlXCI+XHJcblx0XHRcdFx0PCEtLSDpobXnrb4gLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdi10YWJcIj5cclxuXHRcdFx0XHRcdDx1bmktc2VnbWVudGVkLWNvbnRyb2wgOmN1cnJlbnQ9XCJjdXJyZW50XCIgOnZhbHVlcz1cIml0ZW1zXCIgQGNsaWNrSXRlbT1cIm9uQ2xpY2tJdGVtXCJcclxuXHRcdFx0XHRcdFx0c3R5bGVUeXBlPVwiYnV0dG9uXCI+XHJcblx0XHRcdFx0XHQ8L3VuaS1zZWdtZW50ZWQtY29udHJvbD5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PCEtLSDnoIHnm5jnlYzpnaIgLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LXRhYnBhZ2VcIiBpZD1cInRhYnBhbmVsXCIgdi1pZj1cImN1cnJlbnQ9PTBcIj5cclxuXHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiB2LWlmPVwiZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg9PTBcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbW9ib3hfbG9nXzIwMHg0MC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdFx0PCEtLSA8ZGl2IGNsYXNzPVwiZHYtcGFuZWxcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiA+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIHN0eWxlPVwid2lkdGg6MTAwcHhcIj50ZXN077yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID4xMTExPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiA+MTExMTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIxMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPmZmYWFhPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIDpzcGFuPVwiMTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZSBkdi1mb3JtLWl0ZW0tY29sXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID5mZmFhYWZmYWFhZmZhYWFmZmFhYWZmYWFhPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1yb3c+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PGRpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIDpzcGFuPVwiMTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZSBkdi1mb3JtLWl0ZW0tY29sXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID5mc2ZlZ2ZzPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIDpzcGFuPVwiMTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZSBkdi1mb3JtLWl0ZW0tY29sXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cInVuaS1pbnB1dCBpbnB1dC1tYXJnaW50b3BcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XCIvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1yb3c+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCI+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxJdGVtKDApXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+IC0tPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDFTdHlsZURlZkxpc3RcIiBcclxuXHRcdFx0XHRcdFx0QHRhcD1cIm9uUGFuZWxDbGljayhpaSlcIlxyXG5cdFx0XHRcdFx0XHQ6aWQ9XCIndGFicGFuZWwnK3N0eWxlLmZvcm0uaHRtbG9iaklkXCJcclxuXHRcdFx0XHRcdFx0OmNsYXNzPVwic3R5bGUuZm9ybS5odG1sb2JqSWQ9PWFjdGl2ZV9pZD8nYmstYWN0aXZlJzphY3RpdmVsaXN0W2lpXS5hY3RpdmU9PXRydWU/J2JrLWFjdGl2ZSc6JydcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LWlucHV0XCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gc3R5bGUuZm9ybS5pdGVtc1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDmma7pgJrluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiaXRlbS5uYW1lIT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cIml0ZW0uZGlzYWJsZWRcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIhaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dE51bWJlcic/J251bWJlcic6J3RleHQnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnZhbHVlPVwiaXRlbS52YWx1ZVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDmoIXmoLzluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiIHYtaWY9XCJpdGVtLm5hbWU9PSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzcGFuPVwiMjQgLyBpdGVtLnNldHRpbmcuY29sXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2LWZvcj1cIihjb2xzLGtleSkgaW4gaXRlbS5zZXR0aW5nLmNvbExpc3RcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidW5pLWlucHV0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0di1pZj1cIiFjb2xzLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJjb2xzLm5hbWU9PSdJbnB1dE51bWJlcic/J251bWJlcic6J3RleHQnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp2YWx1ZT1cImNvbHMudmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cImNvbHMucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0IDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCI+XHJcblx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVswXS5TZWxlY3RfQnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJzdHlsZS5TZWxCdXRfQ2hlY2tlZFwiIDpjaGVja2VkPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIDx0ZXh0PjwvdGV4dD4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwic2F2YUl0ZW0oaWkpXCIgdi1pZj1cInBhcmFtLlN1Yl9QYWdlWzBdLk9LX0J1dHRvbj09dHJ1ZVwiPuS/neWtmDwvQnV0dG9uPiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJ3YXJuXCIgQHRhcD1cImRlbEl0ZW0oaWkpXCIgdi1pZj1cInBhcmFtLlN1Yl9QYWdlWzBdLkRlbF9CdXR0b249PXRydWVcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PCEtLSDlt7LnoIHnm5jnlYzpnaIgLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LXRhYnBhZ2UyXCIgdi1pZj1cImN1cnJlbnQ9PTFcIj5cclxuXHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiB2LWlmPVwiZGV0YWlsMlN0eWxlRGVmTGlzdC5sZW5ndGg9PTBcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbW9ib3hfbG9nXzIwMHg0MC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDJTdHlsZURlZkxpc3RcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBzdHlsZS5mb3JtLml0ZW1zXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOaZrumAmuW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJpdGVtLm5hbWUhPSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIiB2LWlmPVwiaXRlbS5uYW1lPT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2LWZvcj1cIihjb2xzLGtleSkgaW4gaXRlbS5zZXR0aW5nLmNvbExpc3RcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3Bhbj1cIml0ZW0uc2V0dGluZy5zcGFuTGlzdD9pdGVtLnNldHRpbmcuc3Bhbkxpc3Rba2V5XToyNCAvIGl0ZW0uc2V0dGluZy5jb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNvbHMhPW51bGxcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOmNvbHMubGFiZWxXaWR0aCsncHgnfVwiPnt7Y29scy5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiPlxyXG5cdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCB2LWlmPVwicGFyYW0uU3ViX1BhZ2VbMV0uU2VsZWN0X0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiA6Y2hlY2tlZD1cInN0eWxlLlNlbEJ1dF9DaGVja2VkXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSA8dGV4dD48L3RleHQ+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cInNhdmFEYXRhT2JqKHN0eWxlLGlpKVwiIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVsxXS5PS19CdXR0b249PXRydWVcIj7kv53lrZg8L0J1dHRvbj4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxEYXRhT2JqKHN0eWxlLGlpKVwiIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVsxXS5EZWxfQnV0dG9uPT10cnVlXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyB2LWlmPVwiY3VycmVudD09MCAmJiBwYXJhbS5TdWJfUGFnZVswXS5PS19CdXR0b249PXRydWVcIj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdCAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQHRhcD1cIm9rXCIgY2xhc3M9XCJidG5fYWRkXCI+56Gu5a6aPC9idXR0b24+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyB2LWlmPVwiY3VycmVudD09MSAmJiBwYXJhbS5TdWJfUGFnZVsxXS5PS19CdXR0b249PXRydWVcIj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdCAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQHRhcD1cIm9rMlwiIGNsYXNzPVwiYnRuX2FkZFwiPuehruWumjwvYnV0dG9uPlxyXG5cdFx0PC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtb2R1bGVzOntcclxuXHRCYXNlNjQsXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHQgIHRpdGxlOifnoIHnm5gnLFxyXG5cdCAgQ2xzSUQ6J0NHX0RldGFpbCcsXHJcbiAgICAgIHBhcmFtOiB7fSxcclxuXHQgIGZvY3VzTWF0ZXJpYTpmYWxzZSxcclxuXHQgIGhlYWRfc3R5bGVkZWY6e1xyXG5cdFx0Zm9ybTp7XHJcblx0XHRcdGl0ZW1zOltdXHJcblx0XHR9XHJcblx0ICB9LFxyXG4gICAgICBkZXRhaWwxX3N0eWxlZGVmOnt9LFxyXG4gICAgICBkZXRhaWwxU3R5bGVEZWZMaXN0OltdLFxyXG4gICAgICBkZXRhaWwyX3N0eWxlZGVmOnt9LFxyXG4gICAgICBkZXRhaWwyU3R5bGVEZWZMaXN0OltdLFxyXG5cdCAgLy8g5YiG5q615Zmo5pWw5o2uXHJcblx0ICBjdXJyZW50OiAwLFxyXG5cdCAgQmVmb3JlX09LX0V2ZW50Ont9LFxyXG4gICAgICBBZnRlcl9PS19FdmVudDp7fSxcclxuXHQgIGl0ZW1zOiBbXSxcclxuICAgICAgYWN0aXZlX2lkOicnLFxyXG5cdCAgYWN0aXZlbGlzdDpbXSxcclxuICAgIH07XHJcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG5cdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0dGhpcy4kZGF0YS50aXRsZSA9IG9wdGlvbnMudGl0bGVuYW1lO1xyXG5cdHRoaXMuJGRhdGEucGFyYW0gPSBKU09OLnBhcnNlKG9wdGlvbnMucGFyYW0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0pO1xyXG5cdCAvL+iOt+WPluaVsOaNruexu+eahOiHquWumuS5ieihqOWNleWPguaVsFxyXG5cdHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLiRkYXRhLkNsc0lELHRoaXMuJGRhdGEucGFyYW0uSW5wdXRfVUlfU3R5bGUuSUQpO1xyXG5cdFxyXG5cdC8v5Yqg6L295Yid5aeL55WM6Z2iXHJcblx0aWYodGhpcy4kZGF0YS5wYXJhbS5TaG93X1dlbGNvbV9QYWdlKXtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLkltZyA9IHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLkltZy5yZXBsYWNlKC8gL2csJysnKTtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLldpZHRoID0gcGFyc2VJbnQodGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuV2lkdGgpO1xyXG5cdCAgdGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0ID0gcGFyc2VJbnQodGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0KTtcclxuXHR9XHJcblx0Ly/liqDovb1UYWLpobXnrb5cclxuXHR0aGlzLiRkYXRhLml0ZW1zLnB1c2godGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKTtcclxuXHR0aGlzLiRkYXRhLml0ZW1zLnB1c2godGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVsxXS5OYW1lKTtcclxuXHR0aGlzLkRldGFpbDFfVUlzdHlsZUdldEluZm8odGhpcy5DbHNJRCx0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLlVJX1N0eWxlLklEKTtcclxuXHR0aGlzLkRldGFpbDJfVUlzdHlsZUdldEluZm8odGhpcy5DbHNJRCx0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLlVJX1N0eWxlLklEKTtcclxuXHRcclxuXHRjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnBhcmFtKTtcclxuXHQvL+mhtemdouWIneWni+WMluiOt+WPlueEpueCuVxyXG5cdC8vIHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IFxyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgYXN5bmMgSGVhZF9VSVN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdC8vIHRoaXMuZm9ybSA9IHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsaW5kZXgpID0+IHtcclxuXHRcdFx0XHQgICAgaWYoZWxlLnVzZURpY3Q9PXRydWUpeyAvL+WIpOaWrXVzZURpY3TmmK/lkKbkvb/nlKjlrZflhbhcclxuXHRcdFx0XHQgICAgICAgIGF3YWl0IHRoaXMuRGljdEdldEluZm8oZWxlLmJpbmQuZGljdCxpbmRleCwnbWFzdCcpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMVwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68xLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuICAgIGFzeW5jIERldGFpbDFfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmLlNlbEJ1dF9DaGVja2VkID0gdHJ1ZTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gdmFyIGFhID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goSlNPTi5wYXJzZShhYSkpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsaW5kZXgpID0+IHtcclxuXHRcdFx0XHQgICAgaWYoZWxlLnVzZURpY3Q9PXRydWUpeyAvL+WIpOaWrXVzZURpY3TmmK/lkKbkvb/nlKjlrZflhbhcclxuXHRcdFx0XHQgICAgICAgIGF3YWl0IHRoaXMuRGljdEdldEluZm8oZWxlLmJpbmQuZGljdCxpbmRleCwnc3ViJyk7XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzIuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgRGV0YWlsMl9VSXN0eWxlR2V0SW5mbyhjbGFzc19pZCxzdHlsZV9pZCl7ICAgLy/ojrflj5boh6rlrprkuYnooajljZXmoLflvI9cclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRjbGFzc19pZDpjbGFzc19pZCxcclxuXHRcdFx0dWlfc3R5bGVfaWQ6c3R5bGVfaWQsXHJcblx0XHR9O1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHN0eWxlZGVmPVwiXCI7XHJcblx0XHRcdFx0aWYocmV0LnJlc3VsdC5zdHlsZV9kZWYpe1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDLnmoRzdHlsZV9kZWbmmK9qc29u5a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZyxcIlwiKTtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0ICAgICBpZighcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZj8gSlNPTi5wYXJzZShzdHlsZWRlZik6IHt9O1xyXG5cdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYuU2VsQnV0X0NoZWNrZWQgPSB0cnVlO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMy4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuICAgICAgICBcclxuICAgIH0sXHJcblx0YXN5bmMgRGljdEdldEluZm8oZGljdCxpbmRleCx0eXBlKXsgLy9Nb2JveDPlvpfliLDlvpfliLDlrZflhbjkv6Hmga/lrZflhbjpobnliJfooahcclxuXHRcdHRoaXMuZGF0YT1bXTtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YUluZm8gPXtcclxuXHRcdFx0ZGljdF9pZDogZGljdC5pZCxcclxuXHRcdFx0ZGljdF9uYW1lOiBkaWN0Lm5hbWVcclxuXHRcdH07XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnRGljdEdldEluZm8nLGRhdGFJbmZvKS50aGVuKGFzeW5jIChzdWNjZXNzKT0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBsaXN0PVtdO1xyXG5cdFx0XHRcdHZhciBpdGVtTmFtZT0nJztcclxuXHRcdFx0XHRzdWNjZXNzLnJlc3VsdC5kaWN0X2l0ZW1fbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0ICAgIGlmKGl0ZW0uaXNfZGVmYXVsdD09JzEnKVxyXG5cdFx0XHRcdCAgICAgICAgaXRlbU5hbWUgPSBpdGVtLm5hbWU7XHJcblx0XHRcdFx0ICAgIGxpc3QucHVzaCh7XHJcblx0XHRcdFx0ICAgICAgICB0ZXh0Oml0ZW0udmFsdWUsXHJcblx0XHRcdFx0ICAgICAgICB2YWx1ZTppdGVtLm5hbWUsXHJcblx0XHRcdFx0ICAgIH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGlmKHR5cGU9PSdtYXN0Jyl7Ly/mnInpu5jorqTlgLzvvIzmmL7npLrpu5jorqTlgLxcclxuXHRcdFx0XHRcdGlmKGl0ZW1OYW1lKXtcclxuXHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS52YWx1ZT1pdGVtTmFtZTtcclxuXHRcdFx0XHRcdFx0dmFyIGF0dHIgPSAkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmZpZWxkSWQ7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5kaWN0PWxpc3Q7XHJcblx0XHRcdFx0XHR2YXIgaGVhZF9zdHlsZWRlZiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoJHRoaXMuaGVhZF9zdHlsZWRlZikpO1xyXG5cdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZj1bXTtcclxuXHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYgPSBoZWFkX3N0eWxlZGVmO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2V7XHJcblx0XHRcdFx0XHRpZihpdGVtTmFtZSl7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWU9aXRlbU5hbWU7XHJcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdD1saXN0O1xyXG5cdFx0XHRcdFx0dmFyIGRldGFpbDFfc3R5bGVkZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCR0aGlzLmRldGFpbDFfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWY9W107XHJcblx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmID0gZGV0YWlsMV9zdHlsZWRlZjtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zLjFcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzNcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0XHJcblx0b250YXAoaXRlbSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHQvLyB2YXIgJGVsZSA9IGU7XHJcblx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0Z2V0QXBwKCkub25TY2FuKChyZXN1bHQpPT57XHJcblx0XHRcdGNvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcclxuXHRcdFx0aXRlbS52YWx1ZSA9IHJlc3VsdC5kZWNvZGVkYXRhO1xyXG5cdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFxyXG5cdFx0XHQvLyBpZihpdGVtLnZhbHVlPT0nQjYxREY1MURENTA2NDVDRUI5RDE1MkRENzdEMjQ2NkEnKXtcclxuXHRcdFx0Ly8gXHR0aGlzLmFjdGl2ZV9pZCA9ICdCNjFERjUxREQ1MDY0NUNFQjlEMTUyREQ3N0QyNDY2QSc7XHJcblx0XHRcdC8vIFx0Ly8gdmFyIHRhcmdldCA9IHVuaS5jcmVhdGVTZWxlY3RvclF1ZXJ5KCkuc2VsZWN0KCcjQjYxREY1MURENTA2NDVDRUI5RDE1MkRENzdEMjQ2NkEnKTtcclxuXHRcdFx0Ly8gXHR1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdC8vIFx0ICAgIC5zZWxlY3QoXCIjdGFicGFuZWxcIikvL+WvueW6lOWkluWxguiKgueCuVxyXG5cdFx0XHQvLyBcdCAgICAuYm91bmRpbmdDbGllbnRSZWN0KChjb250YWluZXIpID0+IHtcclxuXHRcdFx0Ly8gXHQgICAgICAgIHVuaS5jcmVhdGVTZWxlY3RvclF1ZXJ5KClcclxuXHRcdFx0Ly8gXHQgICAgICAgIC5zZWxlY3QoXCIjQjYxREY1MURENTA2NDVDRUI5RDE1MkRENzdEMjQ2NkFcIikvL+ebruagh+iKgueCuVxyXG5cdFx0XHQvLyBcdCAgICAgICAgLmJvdW5kaW5nQ2xpZW50UmVjdCgodGFyZ2V0KSA9PiB7XHJcblx0XHRcdC8vIFx0ICAgICAgICAgICAgdW5pLnBhZ2VTY3JvbGxUbyh7XHJcblx0XHRcdC8vIFx0ICAgICAgICAgICAgc2Nyb2xsVG9wOiB0YXJnZXQudG9wIC0gY29udGFpbmVyLnRvcCwvL+a7muWKqOWIsOWunumZhei3neemu+aYr+WFg+e0oOi3neemu+mhtumDqOeahOi3neemu+WHj+WOu+acgOWkluWxguebkuWtkOeahOa7muWKqOi3neemu1xyXG5cdFx0XHQvLyBcdCAgICAgICAgICAgIH0pO1xyXG5cdFx0XHQvLyBcdCAgICAgICAgfSlcclxuXHRcdFx0Ly8gXHQgICAgICAgIC5leGVjKCk7XHJcblx0XHRcdC8vIFx0ICAgIH0pXHJcblx0XHRcdC8vIFx0ICAgIC5leGVjKCk7XHJcblx0XHRcdC8vIH1cclxuXHRcdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHRcdCAgICBpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0ICAgICAgJHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHRcdGlmKGl0ZW0udmFsdWUpeyAvL+esrOS4gOS4qui+k+WFpeahhuS4jeS4uuepulxyXG5cdFx0XHRcdFx0JHRoaXMuZm9jdXNNYXRlcmlhID0gdHJ1ZTsgLy/liJ3lp4vljJbvvIznrKzkuozkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0Ly8gXHQkdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgLy/nrKzkuozkuKrovpPlhaXmoYbojrflj5bnhKbngrlcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0fSwxMDAwKTtcclxuXHRcdFx0XHRcdC8vIH0sNTAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uRW50ZXJDaGFuZ2UoaXRlbSl7IC8v5Zue6L2m77yM54K55Ye75oyJ6ZKu77yM5Y+W5raI6IqC54K55LqL5Lu2XHJcblx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHJcblx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdCAgICAgIHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0ICAgIH1cclxuXHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGljayhvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGlja0NhbGxiYWNrKG9uU3VmZml4Q2xpY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly8g5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0YXN5bmMgb25DaGFuZ2UoZXZlbnQpIHtcclxuXHQgICAgdHJ5IHtcclxuXHQgICAgICAgIGlmIChldmVudC5pZCkge1xyXG5cdCAgICAgICAgICB2YXIgb2JqX2F0dHIgPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHQgICAgICAgICAgLy8gY29uc29sZS5sb2cob2JqX2F0dHIpO1xyXG5cdCAgICAgICAgICB2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdCAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxyXG5cdCAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHQgICAgICAgICAgICAgICAgYXR0cjogYSxcclxuXHQgICAgICAgICAgICAgICAgdmFsdWU6IG9ial9hdHRyW2FdIHx8IFwiXCIsXHJcblx0ICAgICAgICAgICAgICB9KSlcclxuXHQgICAgICAgICAgICApXHJcblx0ICAgICAgICAgICk7XHJcblx0XHRcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0ICB2YXIgZGF0YUluZm89e1xyXG5cdCAgICAgICAgICAgIGVkX3R5cGU6IDAsXHJcblx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0ICAgICAgICAgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLmNsc0lkLFxyXG5cdFx0XHRcdGNsYXNzX25hbWU6ICcnLFxyXG5cdCAgICAgICAgICAgIGV2ZW50X2lkOiBldmVudC5pZCxcclxuXHRcdFx0XHRldmVudF9uYW1lOiAnJyxcclxuXHRcdFx0XHRkYXRhX29ial9pZDogJycsXHJcblx0ICAgICAgICAgICAgb2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0XHRcdHByal9pZDogJycsXHJcblx0XHRcdFx0cmVmX2Nsc19pZDogJycsXHJcblx0XHRcdFx0cmVsX29ial9pZDogJycsXHJcblx0XHRcdFx0dXNlcl9sb2dpbjogJycsXHJcblx0XHRcdFx0ZGF0YV9qc29uOiAnJyxcclxuXHRcdFx0XHRjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0XHRcdGV4dF9pbmZvOiAnJyxcclxuXHRcdFx0XHRnbG9iYWxfYXR0cjogJycsXHJcblx0ICAgICAgICAgICAgaW5wdXRfcGFyYW06IGlucHV0X3BhcmFtLFxyXG5cdCAgICAgICAgICB9O1xyXG5cdFx0XHQgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdCAgXHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHQgIFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDsgXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0ICAgIGlmIChyZXN1bHQucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK3Jlc3VsdC5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6IHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIil7IC8v56CB55uY5LitXHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBhcmFtLlNob3dfV2VsY29tX1BhZ2U9ZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX2NvbnRlbnRcIil7ICAvL+W3sueggeebmFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wYXJhbS5TaG93X1dlbGNvbV9QYWdlPWZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWx1ZS5jbGVhciA9PSB0cnVlICYmICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoPjAgJiYgdmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpeyAvL+WIpOaWreaYr+WQpua4heepuumhteetvuWGheWuuSzmraPlnKjnoIHnm5jmmK/lkKbmnInmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfns7vnu5/mo4DmtYvliLDmnInmraPlnKjnoIHnm5jkuK3nmoTotKflk4HvvIznu6fnu63mk43kvZzkvJrmuIXnqbrvvIzmmK/lkKbnu6fnu63vvJ8nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy52aWV3QWNlaW9uQ29udGVudCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZih2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2VsZWN0X3N1YnRhYmxlX3BhZ2Vfcm93XCIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB2YWx1ZSA9IHtcInBhZ2VfbmFtZVwiOlwi56CB55uY5LitXCIsIFwicm93XCI6e1wiaWRcIjpcInh4XCJ9fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goZWxlPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuYWN0aXZlbGlzdFtpbmRleF0uYWN0aXZlID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgaWYoZWxlLmZvcm0ub2JqSWQgPT0gdmFsdWUucm93LmlkKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUuU2VsQnV0X0NoZWNrZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmFjdGl2ZV9pZCA9IGVsZS5mb3JtLmh0bWxvYmpJZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL+iHquWKqOa7muWKqOWIsOaMh+WumuWFg+e0oFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5jcmVhdGVTZWxlY3RvclF1ZXJ5KClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgLnNlbGVjdChcIiN0YWJwYW5lbFwiKS8v5a+55bqU5aSW5bGC6IqC54K5XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIC5ib3VuZGluZ0NsaWVudFJlY3QoKGNvbnRhaW5lcikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgdW5pLmNyZWF0ZVNlbGVjdG9yUXVlcnkoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgLnNlbGVjdChcIiN0YWJwYW5lbFwiK2VsZS5mb3JtLmh0bWxvYmpJZCkvL+ebruagh+iKgueCuVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgLmJvdW5kaW5nQ2xpZW50UmVjdCgodGFyZ2V0KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgdW5pLnBhZ2VTY3JvbGxUbyh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgc2Nyb2xsVG9wOiB0YXJnZXQudG9wIC0gY29udGFpbmVyLnRvcCwvL+a7muWKqOWIsOWunumZhei3neemu+aYr+WFg+e0oOi3neemu+mhtumDqOeahOi3neemu+WHj+WOu+acgOWkluWxguebkuWtkOeahOa7muWKqOi3neemu1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgfSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIC5leGVjKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIH0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZXhlYygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfZGxnX2F0dHJcIil7XHJcblx0XHRcdFx0XHRcdFx0XHQgIC8vIHZhbHVlID0ge1wiYXR0clwiOlwieHh4XCIsIFwidmFsdWVcIjpcInh4eFwifVxyXG5cdFx0XHRcdFx0XHRcdFx0ICB2YXIgZGF0YSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICBkYXRhLmZvckVhY2goYXN5bmMgKGVsZTIsaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIGlmKGVsZS5maWVsZElkID09IGVsZTIuYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICAgIGVsZS52YWx1ZSA9IGVsZTIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICB9XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0aWYocmVzdWx0LmluZm8pe1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjNcIixjb250ZW50OnJlc3VsdC5pbmZvLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHQgIFx0XHRcclxuXHRcdFx0ICBcdH1lbHNle1xyXG5cdFx0XHQgIFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzRcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHQgIFx0fVxyXG5cdFx0XHQgIH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdCAgXHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdCAgXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHQgIH0pO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICB9IGNhdGNoIChleCkge1xyXG5cdCAgICAgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuMlwiLGNvbnRlbnQ6XCLmiafooYzigJzlhoXlrrnlj5jljJblkI7igJ3kuovku7blpLHotKXvvJpcIiArIHRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHJcblx0ICAgIH1cclxuXHR9LFxyXG5cdC8v5Yqg6L295q2j5Zyo56CB55uY5YaF5a65XHJcblx0dmlld0FjZWlvblJvdyhkYXRhLHR5cGUpe1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YSk7XHJcblx0ICAgIGlmKEpTT04uc3RyaW5naWZ5KGRhdGEucm93KSA9PSd7fScpe1xyXG5cdFx0XHRyZXR1cm47XHJcblx0ICAgIH1cclxuXHQgICAgZGF0YS5yb3cuZm9yRWFjaChyb3c9PntcclxuXHQgICAgICB2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdCAgICAgIGlmKHR5cGUpeyAvL+ehruWumuWQjuiEmuacrOi/m+WFpeWKoOi9veW3suWIhuaLo+aVsOaNrlxyXG5cdCAgICAgICAgICBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0ICAgICAgfWVsc2V7XHJcblx0ICAgICAgXHRpZihkYXRhLnBhZ2VfbmFtZSA9PSB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W3suWIhuaLo1xyXG5cdCAgICAgIFx0ICBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7IC8v5b6F5YiG5oujXHJcblx0ICAgICAgXHR9XHJcblx0ICAgICAgfVxyXG5cdCAgICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdCAgICAgIGRldGFpbFN0eWxlLmZvcm0ub2JqSWQgPSByb3cuaWQ7XHJcblx0ICAgICAgZGV0YWlsU3R5bGUuZm9ybS5odG1sb2JqSWQgPSByb3cuaWQ/cm93LmlkLnJlcGxhY2UoLy0vZywnJykucmVwbGFjZSgneycsJycpLnJlcGxhY2UoJ30nLCcnKTonbnVsbCc7XHJcblx0ICAgICAgZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IHJvdy5hdHRycztcclxuXHQgICAgICByb3cuYXR0cnMuZm9yRWFjaChhdHRyPT57XHJcblx0ICAgICAgICAgIGRldGFpbFN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PntcclxuXHQgICAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICAgIGlmKGVsZS5maWVsZElkID09IGF0dHIuYXR0cikgZWxlLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0ICAgICAgICAgICAgICAgICAgaWYoY29sKXtcclxuXHQgICAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICB9KTtcclxuXHQgICAgICB9KTtcclxuXHQgICAgICBcclxuXHQgICAgICBpZih0eXBlKXsgLy/noa7lrprlkI7ohJrmnKzov5vlhaXliqDovb3lt7LliIbmi6PmlbDmja5cclxuXHQgICAgICAgICAgdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdCAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QpO1xyXG5cdCAgICAgIH1lbHNle1xyXG5cdCAgICAgIFx0aWYoZGF0YS5wYWdlX25hbWUgPT0gdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVsxXS5OYW1lKXsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lt7LliIbmi6NcclxuXHQgICAgICBcdCAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0ICAgICAgXHQgICAgLy8gY29uc29sZS5sb2codGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHQgICAgICBcdH1lbHNle1xyXG5cdCAgICAgIFx0XHR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0ICAgICAgXHRcdHRoaXMuYWN0aXZlbGlzdC5wdXNoKHthY3RpdmU6ZmFsc2V9KTtcclxuXHQgICAgICBcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHQgICAgICBcdH1cclxuXHQgICAgICB9XHJcblx0ICAgIH0pO1xyXG5cdH0sXHJcblx0Ly/liqDovb3lt7LnoIHnm5jlhoXlrrlcclxuXHR2aWV3QWNlaW9uQ29udGVudChkYXRhKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRpZihKU09OLnN0cmluZ2lmeShkYXRhLmNvbnRlbnQpID09J3t9Jyl7XHJcblx0XHQgIHJldHVybjtcclxuXHRcdH1cclxuXHQgICAgZGF0YS5jb250ZW50LmZvckVhY2goY29udD0+e1xyXG5cdCAgICAgICAgdmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHRcdGlmKGRhdGEucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+eggeebmOS4rVxyXG5cdFx0XHQgIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7IC8v56CB55uY5LitXHJcblx0XHRcdH1cclxuXHQgICAgICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdFx0XHRkZXRhaWxTdHlsZS5TZWxCdXRfQ2hlY2tlZCA9IGRhdGEuY2hlY2tib3g/P3RydWU7XHJcblx0XHRcdGRldGFpbFN0eWxlLmZvcm0ub2JqSWQgPSBjb250LmlkO1xyXG5cdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmh0bWxvYmpJZCA9IGNvbnQuaWQ/Y29udC5pZC5yZXBsYWNlKC8tL2csJycpLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyk6J251bGwnO1xyXG5cdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmF0dHJzID0gY29udC5hdHRycztcclxuXHQgICAgICAgIGNvbnQuYXR0cnMuZm9yRWFjaChhdHRyPT57XHJcblx0ICAgICAgICAgIGRldGFpbFN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PnsgXHJcblx0ICAgICAgICAgICAgaWYoZWxlLm5hbWUhPSdMYXlvdXQnKXtcclxuXHQgICAgICAgICAgICAgIGlmKGVsZS5maWVsZElkID09IGF0dHIuYXR0cikgZWxlLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICB9IGVsc2UgaWYoZWxlLm5hbWU9PSdMYXlvdXQnKXtcclxuXHQgICAgICAgICAgICAgIGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHQgICAgICAgICAgICAgICAgaWYoY29sKXtcclxuXHQgICAgICAgICAgICAgICAgICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGNvbC52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgfSk7XHJcblx0ICAgICAgICB9KTtcclxuXHRcdFx0aWYoZGF0YS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdCAgLy/lpoLmnpwgY2xlYXIgPSBmYWxzZSDliJnkuI3pnIDopoHmuIXpmaTvvIzmoLnmja5pZOWIpOaWreaYr+WQpuWtmOWcqO+8jOS4jeWtmOWcqOaPkuWFpeWIsOmhtemdou+8jOWmguaenOWtmOWcqOeUqOaWsOeahOWxnuaAp+imhuebllxyXG5cdFx0XHQgIGlmKGRhdGEuY2xlYXIgPT0gZmFsc2UpeyBcclxuXHRcdFx0ICAgIHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHQgICAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChzdHlsZSxpbmRleCk9PntcclxuXHRcdFx0ICAgICAgaWYoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxTdHlsZS5mb3JtLm9iaklkKXtcclxuXHRcdFx0ICAgICAgICBjb250LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdFx0XHQgICAgICAgICAgc3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+eyBcclxuXHRcdFx0ICAgICAgICAgICAgaWYoZWxlLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHQgICAgICAgICAgICAgIGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0XHRcdCAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgICAgICAgICB9KTtcclxuXHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHQgICAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdCAgICAgIH1cclxuXHRcdFx0ICAgIH0pO1xyXG5cdFx0XHQgICAgaWYoaXNmbGFnKSAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpOyAvL+W+heWIhuaLo1xyXG5cdFx0XHQgIH1lbHNle1xyXG5cdFx0XHQgICAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTsgLy/lvoXliIbmi6NcclxuXHRcdFx0ICB9XHJcblx0XHRcdCAgJHRoaXMuYWN0aXZlbGlzdC5wdXNoKHthY3RpdmU6ZmFsc2V9KTtcclxuXHRcdFx0ICAvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdCAgaWYoZGF0YS5jbGVhciA9PSBmYWxzZSl7XHJcblx0XHRcdCAgICAvL+WmguaenCBjbGVhciA9IGZhbHNlIOWImeS4jemcgOimgea4hemZpO+8jOagueaNrmlk5Yik5pat5piv5ZCm5a2Y5Zyo77yM5LiN5a2Y5Zyo5o+S5YWl5Yiw6aG16Z2i77yM5aaC5p6c5a2Y5Zyo55So5paw55qE5bGe5oCn6KaG55uWXHJcblx0XHRcdCAgICB2YXIgaXNmbGFnID0gdHJ1ZTtcclxuXHRcdFx0ICAgICR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3QuZm9yRWFjaCgoc3R5bGUsaW5kZXgpPT57XHJcblx0XHRcdCAgICAgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCl7XHJcblx0XHRcdCAgICAgICAgY29udC5hdHRycy5mb3JFYWNoKGF0dHI9PntcclxuXHRcdFx0ICAgICAgICAgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PnsgXHJcblx0XHRcdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdCAgICAgICAgICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYoZWxlLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdCAgICAgICAgICAgICAgICBpZihjb2wpe1xyXG5cdFx0XHQgICAgICAgICAgICAgICAgICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGNvbC52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdCAgICAgICAgICAgICAgICB9XHJcblx0XHRcdCAgICAgICAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgICAgIH0pO1xyXG5cdFx0XHQgICAgICAgIH0pO1xyXG5cdFx0XHQgICAgICAgIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHQgICAgICB9XHJcblx0XHRcdCAgICB9KTtcclxuXHRcdFx0ICAgIGlmKGlzZmxhZykgJHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTsgLy/lt7LliIbmi6NcclxuXHRcdFx0ICB9ZWxzZXtcclxuXHRcdFx0ICAgICR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7IC8v5bey5YiG5oujXHJcblx0XHRcdCAgfVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0fVxyXG5cdCAgICB9KTtcclxuXHR9LFxyXG5cdG9uQ2xpY2tJdGVtKGUpIHsgLy/pgInmi6npobXnrb5cclxuXHRcdC8vIGNvbnNvbGUubG9nKGUpO1xyXG5cdFx0dGhpcy5jdXJyZW50ID0gZS5jdXJyZW50SW5kZXhcclxuXHR9LFxyXG5cdG9uRGV0YWlsMUVudGVyQ2hhbmdlKGl0ZW0peyAgLy/noIHnm5jkuK3moLflvI/lm57ovabkuovku7ZcclxuXHQgICAgY29uc29sZS5sb2coaXRlbSk7XHJcblx0fSxcclxuXHRkZWxJdGVtKGluZGV4KXsgIC8v5Yig6Zmk56CB55uY5Lit5qC35byP6Z2i5p2/XHJcblx0ICAgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XHJcblx0fSxcclxuXHRkZWxEYXRhT2JqKHN0eWxlLGluZGV4KXsgIC8v5Yig6Zmk5bey56CB55uY5pWwXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHN0eWxlKTtcclxuXHQgIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0ICB1bmkuc2hvd01vZGFsKHtcclxuXHQgIFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdCAgXHRjb250ZW50OiAn56Gu5a6a5Yig6Zmk6K+l5bey56CB55uY5pWw5o2u77yBJyxcclxuXHQgIFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdCAgXHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdHZhciBvYmpJRD1zdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdGlmKCFzdHlsZS5mb3JtLm9iaklkLmluY2x1ZGVzKCd7JykpIG9iaklEID0gJ3snK3N0eWxlLmZvcm0ub2JqSWQrJ30nO1xyXG5cdFx0XHRcdCAgICAgICAgICBcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6c3R5bGUuZm9ybS5jbHNJZCxcclxuXHRcdFx0XHRcdGNsYXNzX25hbWU6JycsXHJcblx0XHRcdFx0XHRvYmpfaWQ6b2JqSURcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpEZWwnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5Yig6Zmk5oiQ5Yqf77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNVwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0fSk7XHJcblx0ICBcdFx0fSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblx0XHRcdFx0XHJcblx0ICBcdFx0fVxyXG5cdCAgXHR9XHJcblx0ICB9KTtcclxuICAgICAgXHJcbiAgICB9LFxyXG5cdG9uUGFuZWxDbGljayh2YWx1ZSl7XHJcblx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcblx0XHR0aGlzLmFjdGl2ZV9pZD0nJztcclxuXHQgICAgdGhpcy5hY3RpdmVsaXN0LmZvckVhY2goZWxlPT57XHJcblx0ICAgICAgICBlbGUuYWN0aXZlID0gZmFsc2U7XHJcblx0ICAgIH0pO1xyXG5cdCAgICB0aGlzLmFjdGl2ZWxpc3RbdmFsdWVdLmFjdGl2ZSA9IHRydWU7XHJcblx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmFjdGl2ZWxpc3QpO1xyXG5cdH0sXHJcblx0Ly/noa7lrppcclxuXHRvaygpe1xyXG4gICAgICAgIHRoaXMuQmVmb3JlX09LX0V2ZW50ID0gdGhpcy5wYXJhbS5TdWJfUGFnZVswXS5CZWZvcmVfb2s7XHJcbiAgICAgICAgdGhpcy5BZnRlcl9PS19FdmVudCA9IHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uQWZ0ZXJfb2s7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5CZWZvcmVfT0tfRXZlbnQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuQWZ0ZXJfT0tfRXZlbnQpO1xyXG5cdCAgICBpZih0aGlzLiRkYXRhLkJlZm9yZV9PS19FdmVudC5JRCkgLy/mmK/lkKbmnInnoa7lrprliY3kuovku7ZcclxuXHQgICAgICAgIHRoaXMuc2F2YSh0aGlzLiRkYXRhLkJlZm9yZV9PS19FdmVudCk7XHJcblx0ICAgIGVsc2UgaWYodGhpcy4kZGF0YS5BZnRlcl9PS19FdmVudC5JRCkgIC8v5piv5ZCm5pyJ56Gu5a6a5ZCO5LqL5Lu2XHJcblx0ICAgICAgICB0aGlzLnNhdmEodGhpcy4kZGF0YS5BZnRlcl9PS19FdmVudCk7XHJcblx0fSxcclxuXHRzYXZhKGV2ZW50KXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0ICAgIGlmKHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg9PTApe1xyXG5cdCAgICAgIHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuayoeacieato+WcqOeggeebmOeahOaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdCAgICAgIHJldHVybiBmYWxzZTtcclxuXHQgICAgfVxyXG5cdCAgICAvL+iOt+WPluihqOWktOWxnuaAp1xyXG5cdCAgICB2YXIgaGVhZF9hdHRyID0ge307XHJcblx0ICAgIHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0ICAgICAgaGVhZF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG5cdCAgICB9KTtcclxuXHQgICAgLy8gY29uc29sZS5sb2coaGVhZF9hdHRyKTtcclxuXHQgICAgLy/ojrflj5bmraPlnKjnoIHnm5jlsZ7mgKdcclxuXHQgICAgdmFyIGRldGFpbEF0dHJMaXN0ID0gW107XHJcblx0ICAgIHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKHN0eWxlPT57XHJcblx0ICAgICAgdmFyIGRldGFpbF9hdHRyPXt9O1xyXG5cdFx0ICBzdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0ICAgICAgICBpZihpdGVtLm5hbWUgPT0gXCJMYXlvdXRcIil7ICAvL+WIpOaWreaYr+WQpuaYr+agheagj+agvOW8j1xyXG5cdCAgICAgICAgICBpdGVtLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbHMgPT4ge1xyXG5cdCAgICAgICAgICAgIGlmKGNvbHMhPW51bGwpIGRldGFpbF9hdHRyW2NvbHMuZmllbGRJZF0gPSBjb2xzLnZhbHVlO1xyXG5cdCAgICAgICAgICB9KTtcclxuXHQgICAgICAgIH1lbHNlXHJcblx0ICAgICAgICAgIGRldGFpbF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG5cdCAgICAgIH0pO1xyXG5cdFx0ICBcclxuXHRcdCAgZGV0YWlsX2F0dHJbJ2lkJ10gPSBzdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0ICBpZigkdGhpcy5wYXJhbS5TdWJfUGFnZVswXS5TZWxlY3RfQnV0dG9uPT10cnVlKXsgLy/liKTmlq3pgInmi6nmjInpkq7mmK/lkKbkuLp0cnVlXHJcblx0XHQgICAgaWYoc3R5bGUuU2VsQnV0X0NoZWNrZWQ9PXRydWUpIFxyXG5cdFx0ICAgICAgZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0XHQgIH0gZWxzZSBcclxuXHRcdCAgICBkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHQgICAgfSk7XHJcblx0ICAgIC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuXHRcdC8v6I635Y+W5q2j5Zyo56CB55uY6YeM5rKh5pyJ5pi+56S655qE5a2X5q61XHJcblx0XHR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaChzdHlsZT0+e1xyXG5cdFx0ICBzdHlsZS5mb3JtLmF0dHJzLmZvckVhY2goYXR0ciA9PiB7XHJcblx0XHQgICAgZm9yKHZhciBrZXkgaW4gZGV0YWlsQXR0ckxpc3Qpe1xyXG4gICAgICAgICAgICAgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsQXR0ckxpc3Rba2V5XVsnaWQnXSl7XHJcblx0XHQgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGV0YWlsQXR0ckxpc3Rba2V5XSk7XHJcblx0XHQgICAgICAgIHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0ICAgICAgICBrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG5cdFx0ICAgICAgICAgIGlmKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0ICAgICAgICB9KTtcclxuXHRcdCAgICAgICAgaWYoaXNmbGFnKSB7XHJcblx0XHQgICAgICAgICAgZGV0YWlsQXR0ckxpc3RbYXR0ci5hdHRyXSA9IGF0dHIudmFsdWU7XHJcblx0XHQgICAgICAgIH1cclxuXHRcdFx0ICB9XHJcblx0XHQgICAgfSBcclxuXHRcdCAgfSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuXHQgLy8gICAgcmV0dXJuO1xyXG5cdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShcclxuXHRcdCAgICAgIE9iamVjdC5rZXlzKGhlYWRfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHQgICAgICB9KSlcclxuXHRcdCAgICApXHJcblx0XHQpO1xyXG5cdFx0IHZhciBqc29ubGlzdD1bXTtcclxuXHRcdGRldGFpbEF0dHJMaXN0LmZvckVhY2goYXR0cj0+e1xyXG5cdFx0ICAgIGpzb25saXN0LnB1c2goe1xyXG5cdFx0ICAgICAgaWQ6JycsXHJcblx0XHQgICAgICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0ICAgICAgICBhdHRyOiBhLFxyXG5cdFx0ICAgICAgICB2YWx1ZTogYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0ICAgICAgfSkpXHJcblx0XHQgICAgfSk7XHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGpzb25saXN0KTtcclxuXHRcdCR0aGlzLnJ1bkN1c3RvbUV2ZW50KGV2ZW50LGlucHV0X3BhcmFtLGpzb25saXN0LCcxJyk7XHJcblx0XHQvLyBqc29ubGlzdC5mb3JFYWNoKGFzeW5jIChqc29uLGtleSk9PntcclxuXHRcdC8vIFx0YXdhaXQgJHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbiwnMScpO1xyXG5cdFx0Ly8gfSk7XHJcblx0fSxcclxuICAgIG9rMigpe1xyXG4gICAgICAgIHRoaXMuQmVmb3JlX09LX0V2ZW50ID0gdGhpcy5wYXJhbS5TdWJfUGFnZVsxXS5CZWZvcmVfb2s7XHJcbiAgICAgICAgdGhpcy5BZnRlcl9PS19FdmVudCA9IHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uQWZ0ZXJfb2s7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5CZWZvcmVfT0tfRXZlbnQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuQWZ0ZXJfT0tfRXZlbnQpO1xyXG4gICAgICAgIGlmKHRoaXMuJGRhdGEuQmVmb3JlX09LX0V2ZW50LklEKSAvL+aYr+WQpuacieehruWumuWJjeS6i+S7tlxyXG4gICAgICAgICAgICB0aGlzLnNhdmEyKHRoaXMuJGRhdGEuQmVmb3JlX09LX0V2ZW50KTtcclxuICAgICAgICBlbHNlIGlmKHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQuSUQpICAvL+aYr+WQpuacieehruWumuWQjuS6i+S7tlxyXG4gICAgICAgICAgICB0aGlzLnNhdmEyKHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQpO1xyXG4gICAgfSxcclxuICAgIHNhdmEyKGV2ZW50KXtcclxuICAgIFx0dmFyICR0aGlzID0gdGhpcztcclxuICAgICAgICBpZih0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuayoeacieW3sueggeebmOeahOaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+iOt+WPluihqOWktOWxnuaAp1xyXG4gICAgICAgIHZhciBoZWFkX2F0dHIgPSB7fTtcclxuICAgICAgICB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaGVhZF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGhlYWRfYXR0cik7XHJcbiAgICAgICAgLy/ojrflj5bmraPlnKjnoIHnm5jlsZ7mgKdcclxuICAgICAgICB2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QuZm9yRWFjaChzdHlsZT0+e1xyXG4gICAgICAgICAgdmFyIGRldGFpbF9hdHRyPXt9O1xyXG4gICAgXHQgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYoaXRlbS5uYW1lID09IFwiTGF5b3V0XCIpeyAgLy/liKTmlq3mmK/lkKbmmK/moIXmoI/moLzlvI9cclxuICAgICAgICAgICAgICBpdGVtLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1lbHNlXHJcbiAgICAgICAgICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgIFx0ICBcclxuICAgIFx0ICBkZXRhaWxfYXR0clsnaWQnXSA9IHN0eWxlLmZvcm0ub2JqSWQ7XHJcbiAgICBcdCAgaWYoJHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uU2VsZWN0X0J1dHRvbj09dHJ1ZSl7IC8v5Yik5pat6YCJ5oup5oyJ6ZKu5piv5ZCm5Li6dHJ1ZVxyXG4gICAgXHQgICAgaWYoc3R5bGUuU2VsQnV0X0NoZWNrZWQ9PXRydWUpIFxyXG4gICAgXHQgICAgICBkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuICAgIFx0ICB9IGVsc2UgXHJcbiAgICBcdCAgICBkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcbiAgICBcdC8v6I635Y+W5q2j5Zyo56CB55uY6YeM5rKh5pyJ5pi+56S655qE5a2X5q61XHJcbiAgICBcdHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdC5mb3JFYWNoKHN0eWxlPT57XHJcbiAgICBcdCAgc3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG4gICAgXHQgICAgZm9yKHZhciBrZXkgaW4gZGV0YWlsQXR0ckxpc3Qpe1xyXG4gICAgICAgICAgICAgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsQXR0ckxpc3Rba2V5XVsnaWQnXSl7XHJcbiAgICBcdCAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkZXRhaWxBdHRyTGlzdFtrZXldKTtcclxuICAgIFx0ICAgICAgICB2YXIgaXNmbGFnID0gdHJ1ZTtcclxuICAgIFx0ICAgICAgICBrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG4gICAgXHQgICAgICAgICAgaWYoZWxlID09IGF0dHIuYXR0cikgaXNmbGFnID0gZmFsc2U7XHJcbiAgICBcdCAgICAgICAgfSk7XHJcbiAgICBcdCAgICAgICAgaWYoaXNmbGFnKSB7XHJcbiAgICBcdCAgICAgICAgICBkZXRhaWxBdHRyTGlzdFthdHRyLmF0dHJdID0gYXR0ci52YWx1ZTtcclxuICAgIFx0ICAgICAgICB9XHJcblx0XHRcdCAgfVxyXG4gICAgXHQgICAgfSBcclxuICAgIFx0ICB9KTtcclxuICAgIFx0fSk7XHJcbiAgICBcdC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuICAgICAvLyAgICByZXR1cm47XHJcbiAgICBcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcbiAgICBcdCAgICBKU09OLnN0cmluZ2lmeShcclxuICAgIFx0ICAgICAgT2JqZWN0LmtleXMoaGVhZF9hdHRyKS5tYXAoKGEpID0+ICh7XHJcbiAgICBcdCAgICAgICAgYXR0cjogYSxcclxuICAgIFx0ICAgICAgICB2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcbiAgICBcdCAgICAgIH0pKVxyXG4gICAgXHQgICAgKVxyXG4gICAgXHQpO1xyXG4gICAgXHQgdmFyIGpzb25saXN0PVtdO1xyXG4gICAgXHRkZXRhaWxBdHRyTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuICAgIFx0ICAgIGpzb25saXN0LnB1c2goe1xyXG4gICAgXHQgICAgICBpZDonJyxcclxuICAgIFx0ICAgICAgYXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuICAgIFx0ICAgICAgICBhdHRyOiBhLFxyXG4gICAgXHQgICAgICAgIHZhbHVlOiBhdHRyW2FdIHx8IFwiXCIsXHJcbiAgICBcdCAgICAgIH0pKVxyXG4gICAgXHQgICAgfSk7XHJcbiAgICBcdH0pO1xyXG4gICAgXHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHQkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29ubGlzdCwnMicpO1xyXG4gICAgXHQvLyBqc29ubGlzdC5mb3JFYWNoKGFzeW5jIChqc29uLGtleSk9PntcclxuICAgIFx0Ly8gXHRhd2FpdCAkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uLCcyJyk7XHJcbiAgICBcdC8vIH0pO1xyXG4gICAgfSxcclxuICAgIC8v5omn6KGM56Gu5a6a6ISa5pysXHJcbiAgICBhc3luYyBydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uLHR5cGUpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhX2pzb24gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0ICAgIEpTT04uc3RyaW5naWZ5KGpzb24pXHJcblx0XHQpO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdCAgZWRfdHlwZTogMCxcclxuICAgICAgICAgIHN0YXJ0X3RyYW5zYWN0aW9uOiB0cnVlLFxyXG5cdFx0ICBjbGFzc19pZDogdGhpcy4kZGF0YS5DbHNJRCxcclxuXHRcdCAgY2xhc3NfbmFtZTogJycsXHJcblx0XHQgIGV2ZW50X2lkOiBldmVudC5JRCxcclxuXHRcdCAgZXZlbnRfbmFtZTogJycsXHJcblx0XHQgIGRhdGFfb2JqX2lkOiAnJyxcclxuXHRcdCAgb2JqX2F0dHI6ICcnLFxyXG5cdFx0ICBwcmpfaWQ6ICcnLFxyXG5cdFx0ICByZWZfY2xzX2lkOiAnJyxcclxuXHRcdCAgcmVsX29ial9pZDogJycsXHJcblx0XHQgIHVzZXJfbG9naW46ICcnLFxyXG5cdFx0ICBkYXRhX2pzb246IGRhdGFfanNvbixcclxuXHRcdCAgY29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdCAgZXh0X2luZm86ICcnLFxyXG5cdFx0ICBnbG9iYWxfYXR0cjogJycsXHJcblx0XHQgIGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHRcdH07XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLGRhdGFJbmZvKS50aGVuKHJlcz0+e1xyXG5cdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRpZiAocmVzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgcmVzdWx0ID0gcmVzLnJlc3VsdDsgXHJcblx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgIT0gMCkge1xyXG5cdFx0XHRcdCAgICB2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0ICAgIGlmIChyZXN1bHQucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0ICAgIGVsc2UgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXArJyzmj5DnpLo6JytyZXN1bHQucmV0LHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5pbmZvID8gdHlwZW9mIHJlc3VsdC5pbmZvID09ICdzdHJpbmcnID8gcmVzdWx0LmluZm8gOiByZXN1bHQuaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmKHJlc3VsdC5yZXN1bHRfdHlwZSA9PSAwKXtcclxuXHRcdFx0XHRcdCAgaWYocmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtPT57XHJcblx0XHRcdFx0XHRcdCAgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImluc2VydF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgLy/noIHnm5jkuK1cclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdC8v5Yqg6L295bey57uP56CB55uY5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvblJvdyh2YWx1ZSwnYWRkJyk7XHJcblx0XHRcdFx0XHRcdFx0Ly/muIXnqbrmnaHnoIHlhoXlrrlcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaCgoaXRlbSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbS5maWVsZElkICE9IFwiU19DTlRSX0NPREVcIil7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGl0ZW0udmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgaXRlbS5vbGR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbaXRlbS5maWVsZElkXSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8v5riF6Zmk5q2j5Zyo56CB55uY5Lit5oiQ5Yqf55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChzdHlsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0XHQvLyAgIGlmKHN0eWxlLmZvcm0uaXRlbXNbMF0uZmllbGRJZCA9PSBqc29uLmF0dHJzWzBdLmF0dHIgJiYgc3R5bGUuZm9ybS5pdGVtc1swXS52YWx1ZSA9PSBqc29uLmF0dHJzWzBdLnZhbHVlKXsgXHJcblx0XHRcdFx0XHRcdFx0Ly8gXHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHQvLyAgIH1cclxuXHRcdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi56CB55uY5oiQ5YqfXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdCAvLyAgfSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJyZWZyZXNoXCIpeyAgLy/liLfmlrBcclxuXHRcdFx0XHRcdFx0IC8vICAgIHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0Ly8gLy/liLfmlrDlvZPliY3pobXpnaJcclxuXHRcdFx0XHRcdFx0XHQvLyAvLyBsb2NhdGlvbi5yZWxvYWQoKTtcclxuXHRcdFx0XHRcdFx0XHQvLyB1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHR1cmw6Jy4uL21vZGFsLzU2MDA/cGFyYW09JytKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrdGhpcy4kZGF0YS50aXRsZVxyXG5cdFx0XHRcdFx0XHRcdC8vIH0pO1xyXG5cdFx0XHRcdFx0XHQgLy8gIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicHJvbXB0XCIpeyAgLy/miZPlvIDns7vnu5/mj5DnpLrlvLnmoYZcclxuXHRcdFx0XHRcdFx0IC8vICAgIHZhciB2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdC8vIGl0ZW0udmFsdWUuZm9yRWFjaChlbGU9PntcclxuXHRcdFx0XHRcdFx0XHQvLyBcdGlmKHZhbHVlKSB2YWx1ZSs9J1xcbic7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHR2YWx1ZSs9ZWxlO1xyXG5cdFx0XHRcdFx0XHRcdC8vIH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi57O757uf5o+Q56S6XCIsY29udGVudDp2YWx1ZSxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5YWz6ZetXCJ9KTtcclxuXHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0ICB9ZWxzZXtcclxuXHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQuSUQgIT0gZXZlbnQuSUQpeyAvL+WIpOaWreW9k+WJjeS6i+S7tuaYr+WQpuaYr+ehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdGlmKHR5cGU9PScxJyl7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zYXZhKCR0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTsgLy/miafooYznoa7lrprlkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNhdmEyKCR0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTsgLy/miafooYznoa7lrprlkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6cmVzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHQgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5lcnJNc2c7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpcIuaJp+ihjOKAnOehruWumuWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHRjYW5jZWwoZSl7IC8v5Y+W5raIXHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcbiAgfSxcclxufTtcclxuPC9zY3JpcHQ+XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n"); |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n modules: {\n Base64: _base.default\n },\n data: function data() {\n return {\n title: '码盘',\n ClsID: 'CG_Detail',\n param: {},\n focusFieldId: \"\",\n head_styledef: {\n form: {\n items: []\n }\n },\n detail1_styledef: {},\n detail1StyleDefList: [],\n detail2_styledef: {},\n detail2StyleDefList: [],\n //分页数据\n detail1ExtData: {},\n detail2ExtData: {},\n //分页扩展数据\n // 分段器数据\n current: 0,\n Before_OK_Event: {},\n After_OK_Event: {},\n Before_Del_Event: {},\n After_Del_Event: {},\n items: [],\n active_id: '',\n activelist: []\n };\n },\n onLoad: function onLoad(options) {\n // console.log(options);\n uni.setNavigationBarTitle({\n title: options.titlename\n }); //设置顶部标题 \n this.$data.title = options.titlename;\n this.$data.param = JSON.parse(options.param);\n // console.log(this.$data.param);\n //获取数据类的自定义表单参数\n this.Head_UIStyleGetInfo(this.$data.ClsID, this.$data.param.Input_UI_Style.ID);\n\n //加载初始界面\n if (this.$data.param.Show_Welcom_Page) {\n this.$data.param.Welcome_Page.Img = this.$data.param.Welcome_Page.Img.replace(/ /g, '+');\n this.$data.param.Welcome_Page.Width = parseInt(this.$data.param.Welcome_Page.Width);\n this.$data.param.Welcome_Page.Height = parseInt(this.$data.param.Welcome_Page.Height);\n }\n //加载Tab页签\n this.$data.items.push(this.$data.param.Sub_Page[0].Name);\n this.$data.items.push(this.$data.param.Sub_Page[1].Name);\n this.Detail1_UIstyleGetInfo(this.ClsID, this.$data.param.Sub_Page[0].UI_Style.ID);\n this.Detail2_UIstyleGetInfo(this.ClsID, this.$data.param.Sub_Page[1].UI_Style.ID);\n __f__(\"log\", this.$data.param, \" at pages/modal/5600.vue:527\");\n },\n //页面初始化获取焦点\n methods: {\n setData: function setData(obj) {\n var that = this;\n var keys = [];\n var val, data;\n Object.keys(obj).forEach(function (key) {\n keys = key.split(\".\");\n val = obj[key];\n data = that.$data;\n keys.forEach(function (key2, index) {\n if (index + 1 == keys.length) {\n that.$set(data, key2, val);\n } else {\n if (!data[key2]) {\n that.$set(data, key2, {});\n }\n }\n data = data[key2];\n });\n });\n },\n Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n var _this = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n //获取自定义表单样式\n $this = _this;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n // this.form = this.head_styledef.form.model;\n // console.log($this.$data.head_styledef);\n $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context.next = 3;\n break;\n }\n _context.next = 3;\n return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n case 3:\n if ($this.focusFieldId == \"\") {\n if (ele.name == 'Input' || ele.name == 'InputNumber') {\n $this.setData({\n focusFieldId: ele.fieldId\n });\n }\n }\n case 4:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误1\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误1.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n var _this2 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n //获取自定义表单样式\n $this = _this2;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail1_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail1_styledef);\n // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n // var aa = JSON.stringify(this.detail1_styledef);\n // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n // console.log($this.$data.detail1StyleDefList);\n $this.detail1_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(ele, index) {\n return _regenerator.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context3.next = 3;\n break;\n }\n _context3.next = 3;\n return _this2.DictGetInfo(ele.bind.dict, index, 'sub');\n case 3:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误2\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误2.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4);\n }))();\n },\n Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n var _this3 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n //获取自定义表单样式\n $this = _this3;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this3.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail2_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail2_styledef);\n } else {\n uni.showModal({\n title: \"错误3\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误3.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5);\n }))();\n },\n DictGetInfo: function DictGetInfo(dict, index, type) {\n var _this4 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n //Mobox3得到得到字典信息字典项列表\n _this4.data = [];\n $this = _this4;\n dataInfo = {\n dict_id: dict.id,\n dict_name: dict.name\n }; // console.log(dataInfo);\n _this4.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(success) {\n var list, itemName, attr, head_styledef, detail1_styledef;\n return _regenerator.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n __f__(\"log\", success, \" at pages/modal/5600.vue:701\");\n if (success.err_code == 0) {\n list = [];\n itemName = '';\n success.result.dict_item_list.forEach(function (item) {\n if (item.is_default == '1') itemName = item.name;\n list.push({\n text: item.value,\n value: item.name\n });\n });\n if (type == 'mast') {\n //有默认值,显示默认值\n if (itemName) {\n $this.head_styledef.form.items[index].value = itemName;\n attr = $this.head_styledef.form.items[index].fieldId;\n $this.head_styledef.form.model[attr] = itemName;\n }\n $this.head_styledef.form.items[index].dict = list;\n head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n $this.head_styledef = [];\n $this.head_styledef = head_styledef;\n // console.log($this.head_styledef);\n } else {\n if (itemName) {\n $this.detail1_styledef.form.items[index].value = itemName;\n attr = $this.detail1_styledef.form.items[index].fieldId;\n $this.detail1_styledef.form.model[attr] = itemName;\n }\n $this.detail1_styledef.form.items[index].dict = list;\n detail1_styledef = JSON.parse(JSON.stringify($this.detail1_styledef));\n $this.detail1_styledef = [];\n $this.detail1_styledef = detail1_styledef;\n // console.log($this.$data.detail1_styledef);\n }\n } else {\n uni.showModal({\n title: \"错误3.1\",\n content: success.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 2:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }));\n return function (_x5) {\n return _ref3.apply(this, arguments);\n };\n }()).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误3\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7);\n }))();\n },\n ontap: function ontap(index, item) {\n var _this5 = this;\n //扫码功能\n // var $ele = e;\n //console.log(e.target)\n getApp().onScan(function (result) {\n __f__(\"log\", result.decodedata, \" at pages/modal/5600.vue:761\");\n item.value = result.decodedata;\n // uni.hideKeyboard();\n var $this = _this5;\n\n // if(item.value=='B61DF51DD50645CEB9D152DD77D2466A'){\n // \tthis.active_id = 'B61DF51DD50645CEB9D152DD77D2466A';\n // \t// var target = uni.createSelectorQuery().select('#B61DF51DD50645CEB9D152DD77D2466A');\n // \tuni.createSelectorQuery()\n // \t .select(\"#tabpanel\")//对应外层节点\n // \t .boundingClientRect((container) => {\n // \t uni.createSelectorQuery()\n // \t .select(\"#B61DF51DD50645CEB9D152DD77D2466A\")//目标节点\n // \t .boundingClientRect((target) => {\n // \t uni.pageScrollTo({\n // \t scrollTop: target.top - container.top,//滚动到实际距离是元素距离顶部的距离减去最外层盒子的滚动距离\n // \t });\n // \t })\n // \t .exec();\n // \t })\n // \t .exec();\n // }\n __f__(\"log\", item, \" at pages/modal/5600.vue:783\");\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n _this5.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n $this.onChange(onChangeEvent);\n }\n if (item.value) {\n //第一个输入框不为空\n //初始化,下个输入框focus属性\n var curIndex = $this.head_styledef.form.items.findIndex(function (ele, index2, arr) {\n return (ele.name == 'Input' || ele.name == 'InputNumber') && index2 > index;\n });\n if (curIndex > -1) {\n $this.setData({\n focusFieldId: $this.head_styledef.form.items[curIndex].fieldId\n });\n }\n // setTimeout(function() {\n // \tuni.hideKeyboard();\n // }, 1000);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n });\n },\n onEnterChange: function onEnterChange(item) {\n //回车,点击按钮,取消节点事件\n // console.log(item);\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n this.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n this.onChange(onChangeEvent);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n },\n getDetailAttrList: function getDetailAttrList(list, selectButton) {\n var detailAttrList = [];\n list.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if (selectButton == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取正在码盘里没有显示的字段\n list.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n return jsonlist;\n },\n // 内容变化后事件\n onChange: function onChange(event) {\n var _this6 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n var head_attr, obj_attr, input_param, $this, jsonList, itemlist1, itemlist2, data_json, dataInfo, tip;\n return _regenerator.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n try {\n if (event.id) {\n //获取表头属性\n head_attr = {};\n _this6.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n obj_attr = _this6.head_styledef.form.model; // console.log(obj_attr);\n input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n $this = _this6;\n jsonList = [];\n itemlist1 = $this.getDetailAttrList($this.detail1StyleDefList, $this.param.Sub_Page[0].Select_Button);\n itemlist2 = $this.getDetailAttrList($this.detail2StyleDefList, $this.param.Sub_Page[1].Select_Button);\n jsonList.push({\n page_name: $this.param.Sub_Page[0].Name,\n item_list: itemlist1,\n ext_data: $this.detail1ExtData\n });\n jsonList.push({\n page_name: $this.param.Sub_Page[1].Name,\n item_list: itemlist2,\n ext_data: $this.detail2ExtData\n });\n data_json = _base.default.encode(JSON.stringify(jsonList));\n dataInfo = {\n ed_type: 0,\n start_transaction: true,\n class_id: _this6.$data.head_styledef.form.clsId,\n class_name: '',\n event_id: event.id,\n event_name: '',\n data_obj_id: '',\n obj_attr: obj_attr,\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: data_json,\n compose_info: '',\n ext_info: '',\n global_attr: '',\n input_param: input_param\n };\n _this6.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var result = ret.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0 && result.action) {\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //码盘中\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n $this.viewAceionRow(value);\n } else if (item.action_type == \"set_subtable_page_content\") {\n //已码盘\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n if (value.clear == true && $this.$data.detail1StyleDefList.length > 0 && value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断是否清空页签内容,正在码盘是否有数据\n uni.showModal({\n title: '提示',\n content: '系统检测到有正在码盘中的货品,继续操作会清空,是否继续?',\n success: function success(res) {\n if (res.confirm) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n } else if (res.cancel) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n }\n }\n });\n } else {\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.$data.detail1StyleDefList = [];\n } else {\n $this.$data.detail2StyleDefList = [];\n }\n $this.viewAceionContent(value);\n }\n } else if (item.action_type == \"select_subtable_page_row\") {\n // value = {\"page_name\":\"码盘中\", \"row\":{\"id\":\"xx\"}}\n var value = item.value;\n $this.detail1StyleDefList.forEach(function (ele) {\n $this.activelist[index].active = false;\n if (ele.form.objId == value.row.id) {\n ele.SelBut_Checked = true;\n $this.active_id = ele.form.htmlobjId;\n //自动滚动到指定元素\n uni.createSelectorQuery().select(\"#tabpanel\") //对应外层节点\n .boundingClientRect(function (container) {\n uni.createSelectorQuery().select(\"#tabpanel\" + ele.form.htmlobjId) //目标节点\n .boundingClientRect(function (target) {\n uni.pageScrollTo({\n scrollTop: target.top - container.top //滚动到实际距离是元素距离顶部的距离减去最外层盒子的滚动距离\n });\n }).exec();\n }).exec();\n }\n });\n } else if (item.action_type == \"remove_subtable_page_row\") {\n //清除面板中指定id的数据\n var value = item.value;\n if (value.page_name == $this.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //清除面板中指定id的数据\n value.row.forEach(function (row) {\n $this.$data.detail1StyleDefList.forEach(function (ele, index) {\n if (ele.form.objId == row.id) {\n $this.$data.detail1StyleDefList.splice(index, 1);\n }\n });\n });\n }\n } else if (item.action_type == \"set_subtable_page_row\") {\n $this.viewActionSetRow(item.value);\n } else if (item.action_type == \"set_subtable_page_ext_data\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1ExtData: value.ext_data\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2ExtData: value.ext_data\n });\n }\n } else if (item.action_type == \"clear_subpage_rows\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1StyleDefList: [],\n detail1ExtData: {}\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2StyleDefList: [],\n detail2ExtData: {}\n });\n }\n } else if (item.action_type == \"set_dlg_current_edit_attr\") {\n if ($this.focusFieldId == item.value) $this.setData({\n focusFieldId: \"\"\n });\n $this.setData({\n focusFieldId: item.value\n });\n } else if (item.action_type == \"set_dlg_attr\") {\n // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n var data = item.value;\n $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(ele, index) {\n return _regenerator.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n data.forEach( /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(ele2, index) {\n return _regenerator.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (ele.fieldId == ele2.attr) {\n ele.value = ele2.value;\n }\n case 1:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8);\n }));\n return function (_x8, _x9) {\n return _ref5.apply(this, arguments);\n };\n }());\n case 1:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9);\n }));\n return function (_x6, _x7) {\n return _ref4.apply(this, arguments);\n };\n }());\n }\n });\n } else {\n // this.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"错误4.3\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误4\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误4.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n }\n } catch (ex) {\n tip = typeof ex == \"string\" ? ex : ex.message;\n uni.showModal({\n title: \"错误4.2\",\n content: \"执行“内容变化后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10);\n }))();\n },\n operationNumber: function operationNumber(value1, value2, operation) {\n var number1 = 0;\n var number2 = 0;\n if (value1) number1 = parseInt(value1);\n if (value2) number2 = parseInt(value2);\n if (operation == \"+\") {\n return number1 + number2;\n } else if (operation == \"-\") {\n return number1 - number2;\n } else if (operation == \"*\") {\n return number1 * number2;\n } else if (operation == \"/\") {\n if (number2) return number1 / number2;else return number1;\n } else return number2;\n },\n //更新分页签中的列表项内容\n viewActionSetRow: function viewActionSetRow(value) {\n var $this = this;\n var detailStyleDefList = [];\n if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n detailStyleDefList = $this.$data.detail2StyleDefList;\n } else if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n detailStyleDefList = $this.$data.detail1StyleDefList;\n }\n detailStyleDefList.forEach(function (ele) {\n value.row.forEach(function (rowData) {\n if (ele.form.objId == rowData.id) {\n rowData.attrs.forEach(function (attr) {\n ele.form.items.forEach(function (ele2) {\n if (ele2.name != 'Layout') {\n if (ele2.fieldId == attr.attr) {\n ele2.value = $this.operationNumber(ele2.value, attr.value, attr.operation);\n }\n } else if (ele2.name == 'Layout') {\n ele2.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) {\n col.value = $this.operationNumber(col.value, attr.value, attr.operation);\n }\n }\n });\n }\n });\n });\n }\n });\n });\n if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2StyleDefList: detailStyleDefList\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n $this.setData({\n detail1StyleDefList: detailStyleDefList\n });\n }\n },\n //加载正在码盘内容\n viewAceionRow: function viewAceionRow(data, type) {\n var _this7 = this;\n // console.log(data);\n if (JSON.stringify(data.row) == '{}') {\n return;\n }\n data.row.forEach(function (row) {\n var styleStr = JSON.stringify(_this7.$data.detail1_styledef);\n if (type) {\n //确定后脚本进入加载已分拣数据\n styleStr = JSON.stringify(_this7.$data.detail2_styledef);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n styleStr = JSON.stringify(_this7.$data.detail2_styledef); //待分拣\n }\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.form.objId = row.id;\n detailStyle.form.htmlobjId = row.id ? row.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = row.attrs;\n row.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (type) {\n //确定后脚本进入加载已分拣数据\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n _this7.$data.detail1StyleDefList.push(detailStyle);\n _this7.activelist.push({\n active: false\n });\n // console.log(this.$data.detail1StyleDefList);\n }\n }\n });\n },\n //加载已码盘内容\n viewAceionContent: function viewAceionContent(data) {\n var $this = this;\n if (data.page_name == $this.param.Sub_Page[0].Name) {\n $this.detail1ExtData = data.ext_data || {};\n } else if (data.page_name == $this.param.Sub_Page[1].Name) {\n $this.detail2ExtData = data.ext_data || {};\n }\n if (JSON.stringify(data.content) == '{}') {\n return;\n }\n data.content.forEach(function (cont) {\n var _data$checkbox;\n var styleStr = JSON.stringify($this.$data.detail2_styledef);\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是码盘中\n styleStr = JSON.stringify($this.$data.detail1_styledef); //码盘中\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.SelBut_Checked = (_data$checkbox = data.checkbox) !== null && _data$checkbox !== void 0 ? _data$checkbox : true;\n detailStyle.form.objId = cont.id;\n detailStyle.form.htmlobjId = cont.id ? cont.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = cont.attrs;\n cont.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n if (data.clear == false) {\n var isflag = true;\n $this.detail1StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail1StyleDefList.push(detailStyle); //待分拣\n } else {\n $this.detail1StyleDefList.push(detailStyle); //待分拣\n }\n\n $this.activelist.push({\n active: false\n });\n // console.log($this.$data.detail1StyleDefList);\n } else {\n if (data.clear == false) {\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n var isflag = true;\n $this.detail2StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail2StyleDefList.push(detailStyle); //已分拣\n } else {\n $this.detail2StyleDefList.push(detailStyle); //已分拣\n }\n // console.log($this.$data.detail2StyleDefList);\n }\n });\n },\n onClickItem: function onClickItem(e) {\n //选择页签\n // console.log(e);\n this.current = e.currentIndex;\n },\n onDetail1EnterChange: function onDetail1EnterChange(item) {\n //码盘中样式回车事件\n __f__(\"log\", item, \" at pages/modal/5600.vue:1375\");\n },\n delItem: function delItem(index) {\n var _this$Before_Del_Even, _this$After_Del_Event;\n //删除码盘中样式面板\n\n //删除码盘中样式面板\n this.Before_Del_Event = this.param.Sub_Page[0].Before_Delete;\n this.After_Del_Event = this.param.Sub_Page[0].After_Delete;\n var style = this.detail1StyleDefList[index];\n //删除码盘中样式面板\n this.detail1StyleDefList.splice(index, 1);\n if ((_this$Before_Del_Even = this.Before_Del_Event) !== null && _this$Before_Del_Even !== void 0 && _this$Before_Del_Even.ID)\n //是否有删除前事件\n this.del(style, this.Before_Del_Event);else if ((_this$After_Del_Event = this.After_Del_Event) !== null && _this$After_Del_Event !== void 0 && _this$After_Del_Event.ID)\n //是否有删除后事件\n this.del(style, this.After_Del_Event);\n },\n delDataObj: function delDataObj(style, index) {\n //删除已码盘数\n // console.log(style);\n\n $this.Before_Del_Event = $this.param.Sub_Page[0].Before_Delete;\n $this.After_Del_Event = $this.param.Sub_Page[0].After_Delete;\n var $this = this;\n uni.showModal({\n title: '提示',\n content: '确定删除该已码盘数据!',\n success: function success(res) {\n if (res.confirm) {\n var objID = style.form.objId;\n if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n var dataInfo = {\n class_id: style.form.clsId,\n class_name: '',\n obj_id: objID\n };\n // console.log(dataInfo);\n $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var _$this$Before_Del_Eve, _$this$After_Del_Even;\n var _style = $this.detail2StyleDefList[index];\n $this.detail2StyleDefList.splice(index, 1);\n if ((_$this$Before_Del_Eve = $this.Before_Del_Event) !== null && _$this$Before_Del_Eve !== void 0 && _$this$Before_Del_Eve.ID)\n //是否有删除前事件\n $this.del2(_style, $this.Before_Del_Event);else if ((_$this$After_Del_Even = $this.After_Del_Event) !== null && _$this$After_Del_Even !== void 0 && _$this$After_Del_Even.ID)\n //是否有删除后事件\n $this.del2(_style, $this.After_Del_Event);\n uni.showModal({\n title: \"提示\",\n content: \"删除成功!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n } else {\n uni.showModal({\n title: \"错误5\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误5.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n } else if (res.cancel) {}\n }\n });\n },\n del: function del(style, event) {\n var _this8 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n var head_attr, detailAttrList, detail_attr, input_param, jsonlist, list;\n return _regenerator.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n //获取表头属性\n head_attr = {};\n _this8.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在分拣属性\n detailAttrList = [];\n detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[0].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n\n // console.log(detailAttrList);\n //获取正在分拣里没有显示的字段\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n // console.log(jsonlist);\n list = [];\n list.push({\n page_name: $this.param.Sub_Page[0].Name,\n item_list: jsonlist,\n ext_data: $this.detail1ExtData\n });\n $this.runCustomEvent(event, input_param, list, '1');\n case 14:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11);\n }))();\n },\n del2: function del2(style, event) {\n var _this9 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {\n var head_attr, detailAttrList, detail_attr, input_param, jsonlist, list;\n return _regenerator.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n //获取表头属性\n head_attr = {};\n _this9.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取已分拣属性\n detailAttrList = [];\n detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[1].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n //获取已分拣里没有显示的字段\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n // console.log(detailAttrList);\n // return;\n input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n list = [];\n list.push({\n page_name: $this.param.Sub_Page[1].Name,\n item_list: jsonlist,\n ext_data: $this.detail2ExtData\n });\n\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, list, '2');\n case 14:\n case \"end\":\n return _context12.stop();\n }\n }\n }, _callee12);\n }))();\n },\n onPanelClick: function onPanelClick(value) {\n // console.log(value);\n this.active_id = '';\n this.activelist.forEach(function (ele) {\n ele.active = false;\n });\n this.activelist[value].active = true;\n // console.log(this.$data.activelist);\n },\n //确定\n ok: function ok() {\n this.Before_OK_Event = this.param.Sub_Page[0].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[0].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava(this.$data.After_OK_Event);\n },\n sava: function sava(event) {\n var $this = this;\n if (this.$data.detail1StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有正在码盘的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在码盘属性\n var detailAttrList = [];\n this.$data.detail1StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[0].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取正在码盘里没有显示的字段\n this.$data.detail1StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n })\n });\n });\n var list = [];\n list.push({\n page_name: $this.param.Sub_Page[0].Name,\n item_list: jsonlist,\n ext_data: $this.detail1ExtData\n });\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, list, '1');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'1');\n // });\n },\n ok2: function ok2() {\n this.Before_OK_Event = this.param.Sub_Page[1].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[1].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava2(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava2(this.$data.After_OK_Event);\n },\n sava2: function sava2(event) {\n var $this = this;\n if (this.$data.detail2StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有已码盘的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在码盘属性\n var detailAttrList = [];\n this.$data.detail2StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[1].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取正在码盘里没有显示的字段\n this.$data.detail2StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n })\n });\n });\n var list = [];\n list.push({\n page_name: $this.param.Sub_Page[1].Name,\n item_list: jsonlist,\n ext_data: $this.detail2ExtData\n });\n\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, list, '2');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'2');\n // });\n },\n //执行确定脚本\n runCustomEvent: function runCustomEvent(event, input_param, json, type) {\n var _this10 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n var $this, data_json, dataInfo;\n return _regenerator.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n $this = _this10;\n data_json = _base.default.encode(JSON.stringify(json));\n dataInfo = {\n ed_type: 0,\n start_transaction: true,\n class_id: _this10.$data.ClsID,\n class_name: '',\n event_id: event.ID,\n event_name: '',\n data_obj_id: '',\n obj_attr: '',\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: data_json,\n compose_info: '',\n ext_info: '',\n global_attr: '',\n input_param: input_param\n }; // console.log(dataInfo);\n _this10.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n __f__(\"log\", res, \" at pages/modal/5600.vue:1814\");\n if (res.err_code == 0) {\n var result = res.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0) {\n if (result.action) {\n //\tuni.showModal({title:\"提示\",content:JSON.stringify(result.action),showCancel:false,confirmText:\"取消\"});\n\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //码盘中\n var value = item.value;\n //加载已经码盘数据\n $this.viewAceionRow(value, 'add');\n //清空条码内容\n $this.$data.head_styledef.form.items.forEach(function (item, index) {\n if (item.fieldId != \"S_CNTR_CODE\") {\n item.value = '';\n item.oldvalue = '';\n $this.$data.head_styledef.form.model[item.fieldId] = '';\n }\n });\n //清除正在码盘中成功的数据\n // $this.$data.detail1StyleDefList.forEach((style,index)=>{\n // if(style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value){ \n // \t$this.$data.detail1StyleDefList.splice(index,1);\n // \treturn;\n // }\n // });\n // this.detail2StyleDefList=[];\n uni.showModal({\n title: \"提示\",\n content: \"码盘成功\",\n showCancel: false,\n confirmText: \"取消\"\n });\n // } else if(item.action_type == \"refresh\"){ //刷新\n // var value = item.value;\n // //刷新当前页面\n // // location.reload();\n // uni.redirectTo({\n // \turl:'../modal/5600?param='+JSON.stringify(this.$data.param)+\"&titlename=\"+this.$data.title\n // });\n // } else if(item.action_type == \"prompt\"){ //打开系统提示弹框\n // var value = '';\n // item.value.forEach(ele=>{\n // \tif(value) value+='\\n';\n // \tvalue+=ele;\n // });\n // uni.showModal({title:\"系统提示\",content:value,showCancel:false,confirmText:\"关闭\"});\n } else if (item.action_type == \"remove_subtable_page_row\") {\n //清除面板中指定id的数据\n var value = item.value;\n if (value.page_name == $this.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //清除面板中指定id的数据\n value.row.forEach(function (row) {\n $this.$data.detail1StyleDefList.forEach(function (ele, index) {\n if (ele.form.objId == row.id) {\n $this.$data.detail1StyleDefList.splice(index, 1);\n }\n });\n });\n }\n } else if (item.action_type == \"set_subtable_page_row\") {\n $this.viewActionSetRow(item.value);\n } else if (item.action_type == \"set_subtable_page_ext_data\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1ExtData: value.ext_data\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2ExtData: value.ext_data\n });\n }\n } else if (item.action_type == \"clear_subpage_rows\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1StyleDefList: [],\n detail1ExtData: {}\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2StyleDefList: [],\n detail2ExtData: {}\n });\n }\n } else if (item.action_type == \"set_dlg_current_edit_attr\") {\n if ($this.focusFieldId == item.value) $this.setData({\n focusFieldId: \"\"\n });\n $this.setData({\n focusFieldId: item.value\n });\n }\n });\n } else {\n if ($this.$data.After_OK_Event.ID != event.ID) {\n //判断当前事件是否是确定后事件\n if (type == '1') {\n $this.sava($this.$data.After_OK_Event); //执行确定后事件\n } else {\n $this.sava2($this.$data.After_OK_Event); //执行确定后事件\n }\n }\n }\n } else {\n // $this.$data.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"提示\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误8\",\n content: res.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n uni.showModal({\n title: \"错误8.1\",\n content: \"执行“确定后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context13.stop();\n }\n }\n }, _callee13);\n }))();\n },\n cancel: function cancel(e) {\n //取消\n uni.navigateBack({\n delta: 1 //返回层数,2则上上页\n });\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMC52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsIkNsc0lEIiwicGFyYW0iLCJmb2N1c0ZpZWxkSWQiLCJoZWFkX3N0eWxlZGVmIiwiZm9ybSIsIml0ZW1zIiwiZGV0YWlsMV9zdHlsZWRlZiIsImRldGFpbDFTdHlsZURlZkxpc3QiLCJkZXRhaWwyX3N0eWxlZGVmIiwiZGV0YWlsMlN0eWxlRGVmTGlzdCIsImRldGFpbDFFeHREYXRhIiwiZGV0YWlsMkV4dERhdGEiLCJjdXJyZW50IiwiQmVmb3JlX09LX0V2ZW50IiwiQWZ0ZXJfT0tfRXZlbnQiLCJCZWZvcmVfRGVsX0V2ZW50IiwiQWZ0ZXJfRGVsX0V2ZW50IiwiYWN0aXZlX2lkIiwiYWN0aXZlbGlzdCIsIm9uTG9hZCIsInVuaSIsIm1ldGhvZHMiLCJzZXREYXRhIiwiT2JqZWN0Iiwia2V5cyIsInZhbCIsInRoYXQiLCJIZWFkX1VJU3R5bGVHZXRJbmZvIiwiJHRoaXMiLCJkYXRhSW5mbyIsImNsYXNzX2lkIiwidWlfc3R5bGVfaWQiLCJzdHlsZWRlZiIsInN0eWxlX2RlZiIsImVsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJEZXRhaWwxX1VJc3R5bGVHZXRJbmZvIiwiRGV0YWlsMl9VSXN0eWxlR2V0SW5mbyIsIkRpY3RHZXRJbmZvIiwiZGljdF9pZCIsImRpY3RfbmFtZSIsImxpc3QiLCJpdGVtTmFtZSIsInN1Y2Nlc3MiLCJ0ZXh0IiwidmFsdWUiLCJhdHRyIiwib250YXAiLCJnZXRBcHAiLCJpdGVtIiwib25FbnRlckNoYW5nZSIsImdldERldGFpbEF0dHJMaXN0Iiwic3R5bGUiLCJkZXRhaWxfYXR0ciIsImRldGFpbEF0dHJMaXN0IiwianNvbmxpc3QiLCJpZCIsImF0dHJzIiwib25DaGFuZ2UiLCJoZWFkX2F0dHIiLCJvYmpfYXR0ciIsImlucHV0X3BhcmFtIiwiSlNPTiIsImpzb25MaXN0IiwiaXRlbWxpc3QxIiwiaXRlbWxpc3QyIiwicGFnZV9uYW1lIiwiaXRlbV9saXN0IiwiZXh0X2RhdGEiLCJkYXRhX2pzb24iLCJlZF90eXBlIiwic3RhcnRfdHJhbnNhY3Rpb24iLCJjbGFzc19uYW1lIiwiZXZlbnRfaWQiLCJldmVudF9uYW1lIiwiZGF0YV9vYmpfaWQiLCJwcmpfaWQiLCJyZWZfY2xzX2lkIiwicmVsX29ial9pZCIsInVzZXJfbG9naW4iLCJjb21wb3NlX2luZm8iLCJleHRfaW5mbyIsImdsb2JhbF9hdHRyIiwiZXJyX2luZm8iLCJyZXN1bHQiLCJzZWxlY3QiLCJib3VuZGluZ0NsaWVudFJlY3QiLCJjb250YWluZXIiLCJ0YXJnZXQiLCJzY3JvbGxUb3AiLCJ0b3AiLCJleGVjIiwidGlwIiwib3BlcmF0aW9uTnVtYmVyIiwibnVtYmVyMSIsIm51bWJlcjIiLCJ2aWV3QWN0aW9uU2V0Um93IiwiZGV0YWlsU3R5bGVEZWZMaXN0Iiwicm93RGF0YSIsImVsZTIiLCJjb2wiLCJ2aWV3QWNlaW9uUm93Iiwic3R5bGVTdHIiLCJkZXRhaWxTdHlsZSIsInJvdyIsImFjdGl2ZSIsInZpZXdBY2Vpb25Db250ZW50IiwiY29udCIsImlzZmxhZyIsIm9uQ2xpY2tJdGVtIiwib25EZXRhaWwxRW50ZXJDaGFuZ2UiLCJkZWxJdGVtIiwiZGVsRGF0YU9iaiIsIm9ial9pZCIsImRlbCIsImRlbDIiLCJvblBhbmVsQ2xpY2siLCJvayIsInNhdmEiLCJvazIiLCJzYXZhMiIsInJ1bkN1c3RvbUV2ZW50Iiwiam9pbiIsImluZGV4IiwiZmllbGRJZCIsImNhbmNlbCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFzZEE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBQ0E7RUFDQUE7SUFDQUM7RUFDQTtFQUNBQztJQUNBO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO1FBQ0FDO1VBQ0FDO1FBQ0E7TUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUFBO01BQ0FDO01BQ0FDO01BQUE7TUFDQTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBWDtNQUNBWTtNQUNBQztJQUNBO0VBQ0E7RUFDQUM7SUFDQTtJQUNBQztNQUNBckI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0lBRUE7SUFDQTtNQUNBO01BQ0E7TUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUVBO0VBQ0E7RUFDQTtFQUNBc0I7SUFDQUM7TUFDQTtNQUNBO01BQ0E7TUFFQUM7UUFDQUM7UUFDQUM7UUFDQTNCO1FBQ0EwQjtVQUNBO1lBQ0FFO1VBQ0E7WUFDQTtjQUNBQTtZQUNBO1VBQ0E7VUFDQTVCO1FBQ0E7TUFDQTtJQUNBO0lBQ0E2QjtNQUFBO01BQUE7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBO2dCQUNBQztnQkFDQUM7a0JBQ0FDO2tCQUNBQztnQkFDQTtnQkFDQTtrQkFDQTtrQkFDQTtvQkFDQTtvQkFDQTtzQkFDQTtzQkFDQUM7c0JBQ0E7c0JBQ0Esb0ZB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QUFBMUI7OEJBQUE7NEJBQ0E7MEJBQ0E7d0JBQ0E7MEJBQ0E7NEJBQUE7NEJBQ0E7OEJBQ0EwQjs0QkFDQTs4QkFDQUE7NEJBQ0E7MEJBQ0E7d0JBQ0E7c0JBQ0E7d0JBQ0E7d0JBQ0E7MEJBQ0FSOzRCQUNBckI7NEJBQ0FvQzs0QkFDQUM7NEJBQ0FDOzBCQUNBO3dCQUNBO3NCQUNBO29CQUNBO2tCQUNBO29CQUNBakI7c0JBQ0FyQjtzQkFDQW9DO3NCQUNBQztzQkFDQUM7b0JBQ0E7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0FqQjtvQkFDQXJCO29CQUNBb0M7b0JBQ0FDO29CQUNBQztrQkFDQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBRUEwRjtNQUFBO01BQ0EzRztRQUNBNEc7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuXHQudi1oZWFkU3R5bGU6Zmlyc3QtY2hpbGQge1xyXG5cdFx0bWFyZ2luLXRvcDogMTVycHg7XHJcblx0fVxyXG5cclxuXHQudi1oZWFkU3R5bGUgLnR4dF90aXRsZSB7XHJcblx0XHRmb250LXNpemU6IDM0cnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogMTJweDtcclxuXHR9XHJcblxyXG5cdC52LWhlYWRTdHlsZSBpbnB1dCB7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHQvKiBib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1OyAqL1xyXG5cdFx0Lyogd2lkdGg6IDY1JTsgKi9cclxuXHRcdHdpZHRoOiA4NSU7XHJcblx0XHRoZWlnaHQ6IDUycnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDM0cnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcclxuXHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRcdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0XHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRcdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHRcdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0XHRtYXJnaW4tdG9wOiA0cnB4O1xyXG5cdH1cclxuXHJcblx0LnYtaGVhZFN0eWxlIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRcdGZvbnQtc2l6ZTogMTJycHg7XHJcblx0fVxyXG5cclxuXHQuaW5wdXQtd3JhcHBlciB7XHJcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0d2lkdGg6IDY1JTtcclxuXHRcdGxpbmUtaGVpZ2h0OiAyMnJweDtcclxuXHR9XHJcblxyXG5cdFtudnVlXSB1bmktdmlldyB7XHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRib3JkZXI6IDAgc29saWQgIzAwMDtcclxuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0fVxyXG5cclxuXHQudW5pLWlucHV0IHtcclxuXHRcdC8qIGJvcmRlcjogbm9uZTsgKi9cclxuXHR9XHJcblxyXG5cdC51bmktaWNvbiB7XHJcblx0XHQvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXHJcblx0XHR3aWR0aDogOCU7XHJcblx0XHRmb250LWZhbWlseTogdW5paWNvbnM7XHJcblx0XHRmb250LXNpemU6IDQwcnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IDQwMDtcclxuXHRcdGZvbnQtc3R5bGU6IG5vcm1hbDtcclxuXHRcdC8qIHdpZHRoOiA0OHJweDsgKi9cclxuXHRcdGhlaWdodDogNDhycHg7XHJcblx0XHRsaW5lLWhlaWdodDogNDhycHg7XHJcblx0XHRjb2xvcjogIzJkOGNmMDtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdHZlcnRpY2FsLWFsaWduOiAxOHJweDtcclxuXHR9XHJcblxyXG5cdC52aWV3LWNvbnRlbnQge1xyXG5cdFx0bWluLWhlaWdodDogNzUwcnB4O1xyXG5cdFx0LyogYm9yZGVyOjFweCBzb2xpZCByZWQ7ICovXHJcblx0fVxyXG5cclxuXHQuZHYtcGFuZWwge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcclxuXHRcdHBhZGRpbmc6IDIwcnB4IDIwcnB4IDRycHggMHB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMTJycHg7XHJcblx0XHRtYXJnaW46IDEwcnB4IDAgMjBycHggMDtcclxuXHRcdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdFx0LyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG5cdH1cclxuXHJcblx0LmR2LXBhbmVsLWlucHV0IHtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcclxuXHR9XHJcblxyXG5cdC5kdi1wYW5lbC1pbnB1dCAuZHYtaW5wdXQge1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMnJweDtcclxuXHR9XHJcblxyXG5cdC5kdi1wYW5lbCAudHh0X3RpdGxlIHtcclxuXHRcdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR9XHJcblxyXG5cdC5kdi1wYW5lbCBpbnB1dCB7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTtcclxuXHRcdHdpZHRoOiA2OCU7XHJcblx0XHRoZWlnaHQ6IDUycnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDM0cnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDdweCAhaW1wb3J0YW50O1xyXG5cdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHRwYWRkaW5nOiA2cnB4IDhycHggOHJweDtcclxuXHRcdGZvbnQtc2l6ZTogMzJycHg7XHJcblx0XHRmb250LWZhbWlseTogaW5oZXJpdDtcclxuXHRcdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHRcdHRyYW5zaXRpb24tZHVyYXRpb246IDAuMXM7XHJcblx0XHRtYXJnaW4tdG9wOiAwcnB4O1xyXG5cdH1cclxuXHJcblx0LmR2LXBhbmVsIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRcdGZvbnQtc2l6ZTogMTBycHg7XHJcblx0fVxyXG5cclxuXHQuZHYtcGFuZWwgLmZvcm0taXRlbS1zcGFuIHtcclxuXHRcdHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcclxuXHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdFx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuXHRcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAxMDBweCk7XHJcblx0fVxyXG5cclxuXHQuZHYtcGFuZWwtYnV0dG9uIHtcclxuXHRcdC8qIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRtYXJnaW4tcmlnaHQ6IDIwcnB4OyAqL1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdFx0cGFkZGluZy1ib3R0b206IDIwcnB4O1xyXG5cdH1cclxuXHJcblx0LmR2LXBhbmVsLWJ1dHRvbiBjaGVja2JveC1ncm91cCB7XHJcblx0XHRwYWRkaW5nLWxlZnQ6IDIwcHg7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0fVxyXG5cclxuXHQuZHYtcGFuZWwtYnV0dG9uIGJ1dHRvbiB7XHJcblx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuODtcclxuXHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0XHR3aWR0aDogMTgwcnB4O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdH1cclxuXHJcblx0YnV0dG9uLmJ0bl9jYW5jZWwge1xyXG5cdFx0d2lkdGg6IDQ5LjUlO1xyXG5cdFx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRmb250LXNpemU6IDM4cnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR9XHJcblxyXG5cdGJ1dHRvbi5idG5fYWRkIHtcclxuXHRcdHdpZHRoOiA0OS41JTtcclxuXHRcdG1hcmdpbi10b3A6IDUwcnB4O1xyXG5cdFx0cGFkZGluZzogMjBycHg7XHJcblx0XHRsaW5lLWhlaWdodDogMS41O1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdH1cclxuXHJcblx0LmxvZ28ge1xyXG5cdFx0aGVpZ2h0OiAxMDBycHg7XHJcblx0XHR3aWR0aDogNDYwcnB4O1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdG1hcmdpbjogMzglIGF1dG87XHJcblx0fVxyXG5cclxuXHQuZHYtYm9yZGVyIHtcclxuXHRcdGJvcmRlcjogMXB4IHNvbGlkIHJlZDtcclxuXHR9XHJcblxyXG5cdC52aWV3LWltYWdldGV4dCB7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHR3aWR0aDogODglO1xyXG5cdFx0cGFkZGluZzogMjBycHggNDBycHggMHB4IDQwcnB4O1xyXG5cdFx0LyogYm9yZGVyOjFweCBzb2xpZCByZWQ7ICovXHJcblx0fVxyXG5cclxuXHQudmlldy1pbWFnZXRleHQgLnZpZXctaW1hZ2V0ZXh0LXVwbG9hZGxpc3Qge1xyXG5cdFx0cGFkZGluZzogMzBycHggMHB4IDEwcnB4IDBweDtcclxuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdGhlaWdodDogMTAwJTtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxMDAlO1xyXG5cdFx0Ym9yZGVyOiAycnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogOHJweDtcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0LyogYm94LXNoYWRvdzogMCAycnB4IDJycHggcmdiYSgwLCAwLCAwLCAwLjIpO1xyXG4gIG1hcmdpbi1yaWdodDogOHJweDsgKi9cclxuXHR9XHJcblxyXG5cdC52aWV3LWltYWdldGV4dCAudHh0LXRleHQge1xyXG5cdFx0ZGlzcGxheTogYmxvY2s7XHJcblx0XHRtYXJnaW46IDIwcnB4O1xyXG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0fVxyXG5cclxuXHQudmlldy1kZXRhbGlzdC1jZW50ZW4ge1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0fVxyXG5cclxuXHQudmlldy1kZXRhbGlzdC1jZW50ZW4gLnR4dC1kZXRhbGlzdCB7XHJcblx0XHRiYWNrZ3JvdW5kOiAjOTRENUVGO1xyXG5cdFx0ZGlzcGxheTogYmxvY2s7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdGZvbnQtc2l6ZTogMzZycHg7XHJcblx0XHRsaW5lLWhlaWdodDogODBycHg7XHJcblx0XHRmb250LXdlaWdodDogNTAwO1xyXG5cdH1cclxuXHJcblx0LnBhbmVsLWFjdGl2ZSB7XHJcblx0XHRib3JkZXI6IDJweCBzb2xpZCByZWQ7XHJcblx0fVxyXG5cclxuXHQuYmstYWN0aXZlIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNENkZDQjI7XHJcblx0fVxyXG5cclxuXHQjZHZfc2VsZWN0IHtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRcdHdpZHRoOiA2NiU7XHJcblx0XHRiYWNrZ3JvdW5kOiAjRkZGO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0XHQvKiBwYWRkaW5nOiAxMHJweCA4cnB4IDEycnB4OyAqL1xyXG5cdFx0Zm9udC1zaXplOiAzNHJweDtcclxuXHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdFx0Ym94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xcztcclxuXHRcdG1hcmdpbi10b3A6IDBycHg7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogMjBycHg7XHJcblx0fVxyXG5cclxuXHQjZHZfc2VsZWN0IC51bmktc2VsZWN0IHtcclxuXHRcdGJvcmRlcjogMnJweCBzb2xpZCAjY2NjO1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xyXG5cdFx0Y29sb3I6ICMyZDhjZjA7XHJcblx0fVxyXG5cclxuXHQjZHZfc2VsZWN0IC51bmktc2VsZWN0X19pbnB1dC10ZXh0IHtcclxuXHRcdGNvbG9yOiAjMmQ4Y2YwO1xyXG5cdH1cclxuXHJcblx0LmlucHV0LWRpc2FibGVkIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjMgIWltcG9ydGFudDtcclxuXHR9XHJcbjwvc3R5bGU+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxyXG5cdC5kZW1vLXVuaS1yb3cge1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xyXG5cdFx0ZGlzcGxheTogYmxvY2s7XHJcblx0fVxyXG5cclxuXHQ6OnYtZGVlcCAudW5pLXJvdyB7XHJcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XHJcblx0fVxyXG5cclxuXHQudmlldy10YWJwYWdlIDo6di1kZWVwIC51bmktcm93IHtcclxuXHRcdG1hcmdpbi1ib3R0b206IDVweDtcclxuXHR9XHJcblxyXG5cdC5kZW1vLXVuaS1jb2wge1xyXG5cdFx0aGVpZ2h0OiAzNnB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdH1cclxuXHJcblx0LmRlbW8tdW5pLXJvdyAudW5pLWlucHV0IHtcclxuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAxMjBweCk7XHJcblx0fVxyXG48L3N0eWxlPlxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0PCEtLSDooajlpLTmoLflvI8gLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cInYtaGVhZFN0eWxlXCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zXCI+XHJcblx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdDwhLS0g5LiL5ouJ5qGGLeWNlemAiSBpdGVtLnVzZURpY3Q/aXRlbS5kaWN0Oml0ZW0uc2VsZWN0aW9ucy0tPlxyXG5cdFx0XHQ8dW5pLWRhdGEtc2VsZWN0IGlkPVwiZHZfc2VsZWN0XCIgdi1pZj1cIml0ZW0ubmFtZT09J1NlbGVjdCdcIiA6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCIgOmxvY2FsZGF0YT1cIml0ZW0uZGljdFwiIEBjaGFuZ2U9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCIgOmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0OmNsZWFyPVwiZmFsc2VcIj48L3VuaS1kYXRhLXNlbGVjdD5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgdi1pZj1cIml0ZW0ubmFtZT09J0lucHV0JyB8fCBpdGVtLm5hbWU9PSdJbnB1dE51bWJlcidcIj5cclxuXHRcdFx0XHQ8dGV4dCB2LWlmPVwiaXRlbS5zZXR0aW5nLnByZWZpeFwiIGNsYXNzPVwidW5pLWljb25cIiA6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnByZWZpeF1cIlxyXG5cdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0XHRcdDxpbnB1dCBjbGFzcz1cInVuaS1pbnB1dFwiIDpjbGFzcz1cIml0ZW0uZGlzYWJsZWQ/J2lucHV0LWRpc2FibGVkJzonJ1wiXHJcblx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0Jz8ndGV4dCc6J251bWJlcidcIiB2LW1vZGVsPVwiaXRlbS52YWx1ZVwiIDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzppdGVtLnNldHRpbmcucHJlZml4ICYmIGl0ZW0uc2V0dGluZy5zdWZmaXg/Jzc4JSc6aXRlbS5zZXR0aW5nLnByZWZpeCB8fCBpdGVtLnNldHRpbmcuc3VmZml4Pyc4NyUnOic5NiUnfVwiXHJcblx0XHRcdFx0XHQ6Zm9jdXM9XCJmb2N1c0ZpZWxkSWQgPT0gaXRlbS5maWVsZElkXCIgQGZvY3VzPVwib250YXAoaW5kZXgsaXRlbSlcIiBAa2V5dXAuZW50ZXI9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCJcclxuXHRcdFx0XHRcdEBibHVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiIC8+XHJcblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBjbGFzcz1cInVuaS1pY29uXCIgOmNsYXNzPVwiW2l0ZW0uc2V0dGluZy5zdWZmaXhdXCJcclxuXHRcdFx0XHRcdEBjbGljaz1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIj4mI3hlNTY4OzwvdGV4dD5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWNvbnRlbnRcIj5cclxuXHRcdFx0PCEtLSDlm77mlocv5paH5pysIC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctaW1hZ2V0ZXh0XCIgdi1pZj1cInBhcmFtLlNob3dfV2VsY29tX1BhZ2U9PXRydWVcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidmlldy1pbWFnZXRleHQtdXBsb2FkbGlzdFwiPlxyXG5cdFx0XHRcdFx0PGltYWdlIDpzcmM9XCJwYXJhbS5XZWxjb21lX1BhZ2UuSW1nXCJcclxuXHRcdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6cGFyYW0uV2VsY29tZV9QYWdlLldpZHRoKydweCcsJ2hlaWdodCc6cGFyYW0uV2VsY29tZV9QYWdlLkhlaWdodCsncHgnfVwiPlxyXG5cdFx0XHRcdFx0PC9pbWFnZT5cclxuXHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0LXRleHRcIlxyXG5cdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J2NvbG9yJzpwYXJhbS5XZWxjb21lX1BhZ2UuVHh0X0NvbG9yLCdmb250LXNpemUnOnBhcmFtLldlbGNvbWVfUGFnZS5Gb250X1NpemUrJ3B4JywnZm9udC1mYW1pbHknOnBhcmFtLldlbGNvbWVfUGFnZS5Gb250fVwiPnt7cGFyYW0uV2VsY29tZV9QYWdlLlRleHR9fTwvVGV4dD5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8IS0tIOeggeebmOeVjOmdoiAtLT5cclxuXHRcdFx0PHZpZXcgdi1pZj1cInBhcmFtLlNob3dfV2VsY29tX1BhZ2U9PWZhbHNlXCI+XHJcblx0XHRcdFx0PCEtLSDpobXnrb4gLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdi10YWJcIj5cclxuXHRcdFx0XHRcdDx1bmktc2VnbWVudGVkLWNvbnRyb2wgOmN1cnJlbnQ9XCJjdXJyZW50XCIgOnZhbHVlcz1cIml0ZW1zXCIgQGNsaWNrSXRlbT1cIm9uQ2xpY2tJdGVtXCJcclxuXHRcdFx0XHRcdFx0c3R5bGVUeXBlPVwiYnV0dG9uXCI+XHJcblx0XHRcdFx0XHQ8L3VuaS1zZWdtZW50ZWQtY29udHJvbD5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PCEtLSDnoIHnm5jnlYzpnaIgLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LXRhYnBhZ2VcIiBpZD1cInRhYnBhbmVsXCIgdi1pZj1cImN1cnJlbnQ9PTBcIj5cclxuXHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiB2LWlmPVwiZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg9PTBcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbW9ib3hfbG9nXzIwMHg0MC5wbmdcIj5cclxuXHRcdFx0XHRcdDwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8IS0tIDxkaXYgY2xhc3M9XCJkdi1wYW5lbFwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtaW5wdXRcIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2ID5cclxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgc3R5bGU9XCJ3aWR0aDoxMDBweFwiPnRlc3TvvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPjExMTE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiA+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIHN0eWxlPVwid2lkdGg6MTAwcHhcIj50ZXN077yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiID4xMTExPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxkaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCA6c3Bhbj1cIjEyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGUgZHYtZm9ybS1pdGVtLWNvbFwiIHN0eWxlPVwid2lkdGg6MTAwcHhcIj50ZXN077yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiA+ZmZhYWE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIxMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPmZmYWFhZmZhYWFmZmFhYWZmYWFhZmZhYWE8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIxMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgPmZzZmVnZnM8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIxMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlIGR2LWZvcm0taXRlbS1jb2xcIiBzdHlsZT1cIndpZHRoOjEwMHB4XCI+dGVzdO+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwidW5pLWlucHV0IGlucHV0LW1hcmdpbnRvcFwiIHN0eWxlPVwid2lkdGg6IGNhbGMoMTAwJSAtIDEyMHB4KTtcIi8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJ3YXJuXCIgQHRhcD1cImRlbEl0ZW0oMClcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj4gLS0+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWxcIiB2LWZvcj1cIihzdHlsZSxpaSkgaW4gZGV0YWlsMVN0eWxlRGVmTGlzdFwiIEB0YXA9XCJvblBhbmVsQ2xpY2soaWkpXCJcclxuXHRcdFx0XHRcdFx0OmlkPVwiJ3RhYnBhbmVsJytzdHlsZS5mb3JtLmh0bWxvYmpJZFwiXHJcblx0XHRcdFx0XHRcdDpjbGFzcz1cInN0eWxlLmZvcm0uaHRtbG9iaklkPT1hY3RpdmVfaWQ/J2JrLWFjdGl2ZSc6YWN0aXZlbGlzdFtpaV0uYWN0aXZlPT10cnVlPydiay1hY3RpdmUnOicnXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1pbnB1dFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1pbnB1dFwiIHYtZm9yPVwiKGl0ZW0saW5kZXgpIGluIHN0eWxlLmZvcm0uaXRlbXNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5pmu6YCa5biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cIml0ZW0ubmFtZSE9J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cIml0ZW0uZGlzYWJsZWRcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwidW5pLWlucHV0XCIgdi1pZj1cIiFpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiA6dmFsdWU9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCIgOnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOagheagvOW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCIgdi1pZj1cIml0ZW0ubmFtZT09J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgOnNwYW49XCIyNCAvIGl0ZW0uc2V0dGluZy5jb2xcIiB2LWZvcj1cIihjb2xzLGtleSkgaW4gaXRlbS5zZXR0aW5nLmNvbExpc3RcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY29scyE9bnVsbFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwidW5pLWlucHV0XCIgdi1pZj1cIiFjb2xzLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJjb2xzLm5hbWU9PSdJbnB1dE51bWJlcic/J251bWJlcic6J3RleHQnXCIgOnZhbHVlPVwiY29scy52YWx1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIiA6cGxhY2Vob2xkZXI9XCJjb2xzLnBsYWNlaG9sZGVyXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1idXR0b25cIj5cclxuXHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3gtZ3JvdXAgdi1pZj1cInBhcmFtLlN1Yl9QYWdlWzBdLlNlbGVjdF9CdXR0b249PXRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGNoZWNrYm94IDp2YWx1ZT1cInN0eWxlLlNlbEJ1dF9DaGVja2VkXCIgOmNoZWNrZWQ9XCJzdHlsZS5TZWxCdXRfQ2hlY2tlZFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gPHRleHQ+PC90ZXh0PiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAY2xpY2s9XCJzYXZhSXRlbShpaSlcIiB2LWlmPVwicGFyYW0uU3ViX1BhZ2VbMF0uT0tfQnV0dG9uPT10cnVlXCI+5L+d5a2YPC9CdXR0b24+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cIndhcm5cIiBAdGFwPVwiZGVsSXRlbShpaSlcIiB2LWlmPVwicGFyYW0uU3ViX1BhZ2VbMF0uRGVsX0J1dHRvbj09dHJ1ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8IS0tIOW3sueggeebmOeVjOmdoiAtLT5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctdGFicGFnZTJcIiB2LWlmPVwiY3VycmVudD09MVwiPlxyXG5cdFx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb1wiIHYtaWY9XCJkZXRhaWwyU3R5bGVEZWZMaXN0Lmxlbmd0aD09MFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9tb2JveF9sb2dfMjAweDQwLnBuZ1wiPlxyXG5cdFx0XHRcdFx0PC9pbWFnZT5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbFwiIHYtZm9yPVwiKHN0eWxlLGlpKSBpbiBkZXRhaWwyU3R5bGVEZWZMaXN0XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1pbnB1dFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gc3R5bGUuZm9ybS5pdGVtc1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDmma7pgJrluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiaXRlbS5uYW1lIT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIiB2LWlmPVwiaXRlbS5uYW1lPT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCB2LWZvcj1cIihjb2xzLGtleSkgaW4gaXRlbS5zZXR0aW5nLmNvbExpc3RcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzcGFuPVwiaXRlbS5zZXR0aW5nLnNwYW5MaXN0P2l0ZW0uc2V0dGluZy5zcGFuTGlzdFtrZXldOjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOmNvbHMubGFiZWxXaWR0aCsncHgnfVwiPnt7Y29scy5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiPlxyXG5cdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCB2LWlmPVwicGFyYW0uU3ViX1BhZ2VbMV0uU2VsZWN0X0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiA6Y2hlY2tlZD1cInN0eWxlLlNlbEJ1dF9DaGVja2VkXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSA8dGV4dD48L3RleHQ+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cInNhdmFEYXRhT2JqKHN0eWxlLGlpKVwiIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVsxXS5PS19CdXR0b249PXRydWVcIj7kv53lrZg8L0J1dHRvbj4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxEYXRhT2JqKHN0eWxlLGlpKVwiXHJcblx0XHRcdFx0XHRcdFx0XHR2LWlmPVwicGFyYW0uU3ViX1BhZ2VbMV0uRGVsX0J1dHRvbj09dHJ1ZVwiPuWIoOmZpDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PHZpZXcgdi1pZj1cImN1cnJlbnQ9PTAgJiYgcGFyYW0uU3ViX1BhZ2VbMF0uT0tfQnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdDxidXR0b24gdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwiY2FuY2VsXCIgY2xhc3M9XCJidG5fY2FuY2VsXCI+5Y+W5raIPC9idXR0b24+XHJcblx0XHRcdDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAdGFwPVwib2tcIiBjbGFzcz1cImJ0bl9hZGRcIj7noa7lrpo8L2J1dHRvbj5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50PT0xICYmIHBhcmFtLlN1Yl9QYWdlWzFdLk9LX0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQHRhcD1cImNhbmNlbFwiIGNsYXNzPVwiYnRuX2NhbmNlbFwiPuWPlua2iDwvYnV0dG9uPlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQHRhcD1cIm9rMlwiIGNsYXNzPVwiYnRuX2FkZFwiPuehruWumjwvYnV0dG9uPlxyXG5cdFx0PC92aWV3PlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCBCYXNlNjQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9qcy1iYXNlNjQvYmFzZTY0LmpzJ1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblx0bW9kdWxlczoge1xyXG5cdFx0QmFzZTY0LFxyXG5cdH0sXHJcblx0ZGF0YSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHRpdGxlOiAn56CB55uYJyxcclxuXHRcdFx0Q2xzSUQ6ICdDR19EZXRhaWwnLFxyXG5cdFx0XHRwYXJhbToge30sXHJcblx0XHRcdGZvY3VzRmllbGRJZDogXCJcIixcclxuXHRcdFx0aGVhZF9zdHlsZWRlZjoge1xyXG5cdFx0XHRcdGZvcm06IHtcclxuXHRcdFx0XHRcdGl0ZW1zOiBbXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZGV0YWlsMV9zdHlsZWRlZjoge30sXHJcblx0XHRcdGRldGFpbDFTdHlsZURlZkxpc3Q6IFtdLFxyXG5cdFx0XHRkZXRhaWwyX3N0eWxlZGVmOiB7fSxcclxuXHRcdFx0ZGV0YWlsMlN0eWxlRGVmTGlzdDogW10sIC8v5YiG6aG15pWw5o2uXHJcblx0XHRcdGRldGFpbDFFeHREYXRhOiB7fSxcclxuXHRcdFx0ZGV0YWlsMkV4dERhdGE6IHt9LCAvL+WIhumhteaJqeWxleaVsOaNrlxyXG5cdFx0XHQvLyDliIbmrrXlmajmlbDmja5cclxuXHRcdFx0Y3VycmVudDogMCxcclxuXHRcdFx0QmVmb3JlX09LX0V2ZW50OiB7fSxcclxuXHRcdFx0QWZ0ZXJfT0tfRXZlbnQ6IHt9LFxyXG5cdFx0XHRCZWZvcmVfRGVsX0V2ZW50OiB7fSxcclxuXHRcdFx0QWZ0ZXJfRGVsX0V2ZW50OiB7fSxcclxuXHRcdFx0aXRlbXM6IFtdLFxyXG5cdFx0XHRhY3RpdmVfaWQ6ICcnLFxyXG5cdFx0XHRhY3RpdmVsaXN0OiBbXSxcclxuXHRcdH07XHJcblx0fSxcclxuXHRvbkxvYWQob3B0aW9ucykge1xyXG5cdFx0Ly8gY29uc29sZS5sb2cob3B0aW9ucyk7XHJcblx0XHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHtcclxuXHRcdFx0dGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lXHJcblx0XHR9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0XHR0aGlzLiRkYXRhLnRpdGxlID0gb3B0aW9ucy50aXRsZW5hbWU7XHJcblx0XHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0pO1xyXG5cdFx0Ly/ojrflj5bmlbDmja7nsbvnmoToh6rlrprkuYnooajljZXlj4LmlbBcclxuXHRcdHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLiRkYXRhLkNsc0lELCB0aGlzLiRkYXRhLnBhcmFtLklucHV0X1VJX1N0eWxlLklEKTtcclxuXHJcblx0XHQvL+WKoOi9veWIneWni+eVjOmdolxyXG5cdFx0aWYgKHRoaXMuJGRhdGEucGFyYW0uU2hvd19XZWxjb21fUGFnZSkge1xyXG5cdFx0XHR0aGlzLiRkYXRhLnBhcmFtLldlbGNvbWVfUGFnZS5JbWcgPSB0aGlzLiRkYXRhLnBhcmFtLldlbGNvbWVfUGFnZS5JbWcucmVwbGFjZSgvIC9nLCAnKycpO1xyXG5cdFx0XHR0aGlzLiRkYXRhLnBhcmFtLldlbGNvbWVfUGFnZS5XaWR0aCA9IHBhcnNlSW50KHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLldpZHRoKTtcclxuXHRcdFx0dGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0ID0gcGFyc2VJbnQodGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0KTtcclxuXHRcdH1cclxuXHRcdC8v5Yqg6L29VGFi6aG1562+XHJcblx0XHR0aGlzLiRkYXRhLml0ZW1zLnB1c2godGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKTtcclxuXHRcdHRoaXMuJGRhdGEuaXRlbXMucHVzaCh0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpO1xyXG5cdFx0dGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKHRoaXMuQ2xzSUQsIHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uVUlfU3R5bGUuSUQpO1xyXG5cdFx0dGhpcy5EZXRhaWwyX1VJc3R5bGVHZXRJbmZvKHRoaXMuQ2xzSUQsIHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uVUlfU3R5bGUuSUQpO1xyXG5cclxuXHRcdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0pO1xyXG5cdH0sXHJcblx0XHQvL+mhtemdouWIneWni+WMluiOt+WPlueEpueCuVxyXG5cdG1ldGhvZHM6IHtcclxuXHRcdHNldERhdGE6IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0XHRsZXQgdGhhdCA9IHRoaXM7XHJcblx0XHRcdGxldCBrZXlzID0gW107XHJcblx0XHRcdGxldCB2YWwsIGRhdGE7XHJcblxyXG5cdFx0XHRPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcblx0XHRcdFx0a2V5cyA9IGtleS5zcGxpdChcIi5cIik7XHJcblx0XHRcdFx0dmFsID0gb2JqW2tleV07XHJcblx0XHRcdFx0ZGF0YSA9IHRoYXQuJGRhdGE7XHJcblx0XHRcdFx0a2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleTIsIGluZGV4KSB7XHJcblx0XHRcdFx0XHRpZiAoaW5kZXggKyAxID09IGtleXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdHRoYXQuJHNldChkYXRhLCBrZXkyLCB2YWwpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKCFkYXRhW2tleTJdKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhhdC4kc2V0KGRhdGEsIGtleTIsIHt9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZGF0YSA9IGRhdGFba2V5Ml07XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdGFzeW5jIEhlYWRfVUlTdHlsZUdldEluZm8oY2xhc3NfaWQsIHN0eWxlX2lkKSB7IC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRjbGFzc19pZDogY2xhc3NfaWQsXHJcblx0XHRcdFx0dWlfc3R5bGVfaWQ6IHN0eWxlX2lkLFxyXG5cdFx0XHR9O1xyXG5cdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHR2YXIgc3R5bGVkZWYgPSBcIlwiO1xyXG5cdFx0XHRcdFx0aWYgKHJldC5yZXN1bHQuc3R5bGVfZGVmKSB7XHJcblx0XHRcdFx0XHRcdC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRzdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmLnJlcGxhY2UoL1xcXFwvZywgXCJcIik7XHJcblx0XHRcdFx0XHRcdC8vbW9ib3gz55qEc3R5bGVfZGVm5pivYmFzZTY05a2X56ym5LiyXHJcblx0XHRcdFx0XHRcdGlmICghcmV0LnJlc3VsdC5zdHlsZV9kZWYuaW5jbHVkZXMoJ1wiJykpIHN0eWxlZGVmID0gQmFzZTY0LmRlY29kZShyZXQucmVzdWx0XHJcblx0XHRcdFx0XHRcdFx0LnN0eWxlX2RlZik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYgPyBKU09OLnBhcnNlKHN0eWxlZGVmKSA6IHt9O1xyXG5cdFx0XHRcdFx0Ly8gdGhpcy5mb3JtID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdCR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGFzeW5jIChlbGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChlbGUudXNlRGljdCA9PSB0cnVlKSB7IC8v5Yik5patdXNlRGljdOaYr+WQpuS9v+eUqOWtl+WFuFxyXG5cdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuRGljdEdldEluZm8oZWxlLmJpbmQuZGljdCwgaW5kZXgsICdtYXN0Jyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYoJHRoaXMuZm9jdXNGaWVsZElkID09IFwiXCIpXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRpZihlbGUubmFtZT09J0lucHV0JyB8fCBlbGUubmFtZT09J0lucHV0TnVtYmVyJylcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtmb2N1c0ZpZWxkSWQ6ZWxlLmZpZWxkSWR9KVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzFcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vMS4xXCIsXHJcblx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdH0sXHJcblx0XHRhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLCBzdHlsZV9pZCkgeyAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0Y2xhc3NfaWQ6IGNsYXNzX2lkLFxyXG5cdFx0XHRcdHVpX3N0eWxlX2lkOiBzdHlsZV9pZCxcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJywgZGF0YUluZm8pLnRoZW4ocmV0ID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gXCJcIjtcclxuXHRcdFx0XHRcdGlmIChyZXQucmVzdWx0LnN0eWxlX2RlZikge1xyXG5cdFx0XHRcdFx0XHQvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0c3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHQvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRpZiAoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmID8gSlNPTi5wYXJzZShzdHlsZWRlZikgOiB7fTtcclxuXHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYuU2VsQnV0X0NoZWNrZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0XHQvLyB2YXIgYWEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdFx0JHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGVsZS51c2VEaWN0ID09IHRydWUpIHsgLy/liKTmlq11c2VEaWN05piv5ZCm5L2/55So5a2X5YW4XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5EaWN0R2V0SW5mbyhlbGUuYmluZC5kaWN0LCBpbmRleCwgJ3N1YicpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzJcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vMi4xXCIsXHJcblx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdH0sXHJcblx0XHRhc3luYyBEZXRhaWwyX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLCBzdHlsZV9pZCkgeyAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0Y2xhc3NfaWQ6IGNsYXNzX2lkLFxyXG5cdFx0XHRcdHVpX3N0eWxlX2lkOiBzdHlsZV9pZCxcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ1VJU3R5bGVHZXRJbmZvJywgZGF0YUluZm8pLnRoZW4ocmV0ID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0dmFyIHN0eWxlZGVmID0gXCJcIjtcclxuXHRcdFx0XHRcdGlmIChyZXQucmVzdWx0LnN0eWxlX2RlZikge1xyXG5cdFx0XHRcdFx0XHQvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHRcdFx0c3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHQvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdFx0XHRpZiAoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmID8gSlNPTi5wYXJzZShzdHlsZWRlZikgOiB7fTtcclxuXHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYuU2VsQnV0X0NoZWNrZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vM1wiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiByZXQuZXJyX21zZyxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHR0aXRsZTogXCLplJnor68zLjFcIixcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0fSxcclxuXHRcdGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsIGluZGV4LCB0eXBlKSB7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHRcdHRoaXMuZGF0YSA9IFtdO1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHR2YXIgZGF0YUluZm8gPSB7XHJcblx0XHRcdFx0ZGljdF9pZDogZGljdC5pZCxcclxuXHRcdFx0XHRkaWN0X25hbWU6IGRpY3QubmFtZVxyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdEaWN0R2V0SW5mbycsIGRhdGFJbmZvKS50aGVuKGFzeW5jIChzdWNjZXNzKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0aWYgKHN1Y2Nlc3MuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0dmFyIGxpc3QgPSBbXTtcclxuXHRcdFx0XHRcdHZhciBpdGVtTmFtZSA9ICcnO1xyXG5cdFx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZGljdF9pdGVtX2xpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoaXRlbS5pc19kZWZhdWx0ID09ICcxJylcclxuXHRcdFx0XHRcdFx0XHRpdGVtTmFtZSA9IGl0ZW0ubmFtZTtcclxuXHRcdFx0XHRcdFx0bGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHR0ZXh0OiBpdGVtLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBpdGVtLm5hbWUsXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHR5cGUgPT0gJ21hc3QnKSB7IC8v5pyJ6buY6K6k5YC877yM5pi+56S66buY6K6k5YC8XHJcblx0XHRcdFx0XHRcdGlmIChpdGVtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWUgPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3QgPSBsaXN0O1xyXG5cdFx0XHRcdFx0XHR2YXIgaGVhZF9zdHlsZWRlZiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoJHRoaXMuaGVhZF9zdHlsZWRlZikpO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmID0gW107XHJcblx0XHRcdFx0XHRcdCR0aGlzLmhlYWRfc3R5bGVkZWYgPSBoZWFkX3N0eWxlZGVmO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy5oZWFkX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmIChpdGVtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWUgPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3QgPSBsaXN0O1xyXG5cdFx0XHRcdFx0XHR2YXIgZGV0YWlsMV9zdHlsZWRlZiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoJHRoaXMuZGV0YWlsMV9zdHlsZWRlZikpO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmID0gW107XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYgPSBkZXRhaWwxX3N0eWxlZGVmO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor68zLjFcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5lcnJfbXNnLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkuY2F0Y2goZXggPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzNcIixcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdG9udGFwKGluZGV4LGl0ZW0pIHsgLy/miavnoIHlip/og71cclxuXHRcdFx0Ly8gdmFyICRlbGUgPSBlO1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGUudGFyZ2V0KVxyXG5cdFx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKHJlc3VsdC5kZWNvZGVkYXRhKTtcclxuXHRcdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdFx0Ly8gdW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblxyXG5cdFx0XHRcdC8vIGlmKGl0ZW0udmFsdWU9PSdCNjFERjUxREQ1MDY0NUNFQjlEMTUyREQ3N0QyNDY2QScpe1xyXG5cdFx0XHRcdC8vIFx0dGhpcy5hY3RpdmVfaWQgPSAnQjYxREY1MURENTA2NDVDRUI5RDE1MkRENzdEMjQ2NkEnO1xyXG5cdFx0XHRcdC8vIFx0Ly8gdmFyIHRhcmdldCA9IHVuaS5jcmVhdGVTZWxlY3RvclF1ZXJ5KCkuc2VsZWN0KCcjQjYxREY1MURENTA2NDVDRUI5RDE1MkRENzdEMjQ2NkEnKTtcclxuXHRcdFx0XHQvLyBcdHVuaS5jcmVhdGVTZWxlY3RvclF1ZXJ5KClcclxuXHRcdFx0XHQvLyBcdCAgICAuc2VsZWN0KFwiI3RhYnBhbmVsXCIpLy/lr7nlupTlpJblsYLoioLngrlcclxuXHRcdFx0XHQvLyBcdCAgICAuYm91bmRpbmdDbGllbnRSZWN0KChjb250YWluZXIpID0+IHtcclxuXHRcdFx0XHQvLyBcdCAgICAgICAgdW5pLmNyZWF0ZVNlbGVjdG9yUXVlcnkoKVxyXG5cdFx0XHRcdC8vIFx0ICAgICAgICAuc2VsZWN0KFwiI0I2MURGNTFERDUwNjQ1Q0VCOUQxNTJERDc3RDI0NjZBXCIpLy/nm67moIfoioLngrlcclxuXHRcdFx0XHQvLyBcdCAgICAgICAgLmJvdW5kaW5nQ2xpZW50UmVjdCgodGFyZ2V0KSA9PiB7XHJcblx0XHRcdFx0Ly8gXHQgICAgICAgICAgICB1bmkucGFnZVNjcm9sbFRvKHtcclxuXHRcdFx0XHQvLyBcdCAgICAgICAgICAgIHNjcm9sbFRvcDogdGFyZ2V0LnRvcCAtIGNvbnRhaW5lci50b3AsLy/mu5rliqjliLDlrp7pmYXot53nprvmmK/lhYPntKDot53nprvpobbpg6jnmoTot53nprvlh4/ljrvmnIDlpJblsYLnm5LlrZDnmoTmu5rliqjot53nprtcclxuXHRcdFx0XHQvLyBcdCAgICAgICAgICAgIH0pO1xyXG5cdFx0XHRcdC8vIFx0ICAgICAgICB9KVxyXG5cdFx0XHRcdC8vIFx0ICAgICAgICAuZXhlYygpO1xyXG5cdFx0XHRcdC8vIFx0ICAgIH0pXHJcblx0XHRcdFx0Ly8gXHQgICAgLmV4ZWMoKTtcclxuXHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdFx0aWYgKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSkge1xyXG5cdFx0XHRcdFx0aXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHRcdHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7IC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7IC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRpZiAob25DaGFuZ2VFdmVudC5pZCkgeyAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0XHQkdGhpcy5vbkNoYW5nZShvbkNoYW5nZUV2ZW50KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChpdGVtLnZhbHVlKSB7IC8v56ys5LiA5Liq6L6T5YWl5qGG5LiN5Li656m6XHJcblx0XHRcdFx0XHQgLy/liJ3lp4vljJbvvIzkuIvkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjdXJJbmRleCA9ICAkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZmluZEluZGV4KChlbGUsIGluZGV4MiwgYXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdCAgcmV0dXJuIChlbGUubmFtZT09J0lucHV0JyB8fCBlbGUubmFtZT09J0lucHV0TnVtYmVyJykgICYmIGluZGV4MiA+IGluZGV4O1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRpZihjdXJJbmRleCA+IC0xKXtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtmb2N1c0ZpZWxkSWQ6ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjdXJJbmRleF0uZmllbGRJZH0pXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHRcdC8vIH0sIDEwMDApO1xyXG5cdFx0XHRcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIGlmKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdFx0Ly8gICB0aGlzLm9uU3VmZml4Q2xpY2sob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQpO1xyXG5cdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0Ly8gaWYob25TdWZmaXhDbGlja0V2ZW50LmlkKXsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdFx0Ly8gICB0aGlzLm9uU3VmZml4Q2xpY2tDYWxsYmFjayhvblN1ZmZpeENsaWNrRXZlbnQpO1xyXG5cdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRvbkVudGVyQ2hhbmdlKGl0ZW0pIHsgLy/lm57ovabvvIzngrnlh7vmjInpkq7vvIzlj5bmtojoioLngrnkuovku7ZcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdGlmIChpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpIHtcclxuXHRcdFx0XHRpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7IC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrRXZlbnQ7IC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRpZiAob25DaGFuZ2VFdmVudC5pZCkgeyAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0dGhpcy5vbkNoYW5nZShvbkNoYW5nZUV2ZW50KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gaWYob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdFx0Ly8gICB0aGlzLm9uU3VmZml4Q2xpY2sob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQpO1xyXG5cdFx0XHRcdC8vIH1cclxuXHRcdFx0XHQvLyBpZihvblN1ZmZpeENsaWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0Ly8gICB0aGlzLm9uU3VmZml4Q2xpY2tDYWxsYmFjayhvblN1ZmZpeENsaWNrRXZlbnQpO1xyXG5cdFx0XHRcdC8vIH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGdldERldGFpbEF0dHJMaXN0KGxpc3QsIHNlbGVjdEJ1dHRvbikge1xyXG5cdFx0XHRjb25zdCBkZXRhaWxBdHRyTGlzdCA9IFtdO1xyXG5cdFx0XHRsaXN0LmZvckVhY2goc3R5bGUgPT4ge1xyXG5cdFx0XHRcdHZhciBkZXRhaWxfYXR0ciA9IHt9O1xyXG5cdFx0XHRcdHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRcdGlmIChpdGVtLm5hbWUgPT0gXCJMYXlvdXRcIikgeyAvL+WIpOaWreaYr+WQpuaYr+agheagj+agvOW8j1xyXG5cdFx0XHRcdFx0XHRpdGVtLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbHMgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChjb2xzICE9IG51bGwpIGRldGFpbF9hdHRyW2NvbHMuZmllbGRJZF0gPSBjb2xzLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdFx0XHRkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0ZGV0YWlsX2F0dHJbJ2lkJ10gPSBzdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdGlmIChzZWxlY3RCdXR0b24gPT0gdHJ1ZSkgeyAvL+WIpOaWremAieaLqeaMiemSruaYr+WQpuS4unRydWVcclxuXHRcdFx0XHRcdGlmIChzdHlsZS5TZWxCdXRfQ2hlY2tlZCA9PSB0cnVlKVxyXG5cdFx0XHRcdFx0XHRkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG5cdFx0XHQvL+iOt+WPluato+WcqOeggeebmOmHjOayoeacieaYvuekuueahOWtl+autVxyXG5cdFx0XHRsaXN0LmZvckVhY2goc3R5bGUgPT4ge1xyXG5cdFx0XHRcdHN0eWxlLmZvcm0uYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBkZXRhaWxBdHRyTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxBdHRyTGlzdFtrZXldWydpZCddKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhkZXRhaWxBdHRyTGlzdFtrZXldKTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgaXNmbGFnID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRldGFpbEF0dHJMaXN0W2F0dHIuYXR0cl0gPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGNvbnN0IGpzb25saXN0ID0gW107XHJcblx0XHRcdGRldGFpbEF0dHJMaXN0LmZvckVhY2goYXR0ciA9PiB7XHJcblx0XHRcdFx0anNvbmxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRpZDogYXR0cltcImlkXCJdfHwgXCJcIixcclxuXHRcdFx0XHRcdGF0dHJzOiBPYmplY3Qua2V5cyhhdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBhdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSkuZmlsdGVyKChhKT0+e3JldHVybiBhLmF0dHIgIT0gXCJpZFwifSlcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHJldHVybiBqc29ubGlzdDtcclxuXHRcdH0sXHJcblx0XHQvLyDlhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdGFzeW5jIG9uQ2hhbmdlKGV2ZW50KSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0aWYgKGV2ZW50LmlkKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly/ojrflj5booajlpLTlsZ7mgKdcclxuXHRcdFx0XHRcdHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHRcdFx0XHRcdHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRcdGhlYWRfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0dmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhvYmpfYXR0cik7XHJcblx0XHRcdFx0XHR2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShcclxuXHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhoZWFkX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0fSkpXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdFx0Y29uc3QganNvbkxpc3QgPSBbXVxyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbWxpc3QxPSAkdGhpcy5nZXREZXRhaWxBdHRyTGlzdCgkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LCR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLlNlbGVjdF9CdXR0b24pXHJcblx0XHRcdFx0XHRjb25zdCBpdGVtbGlzdDI9ICR0aGlzLmdldERldGFpbEF0dHJMaXN0KCR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3QsJHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uU2VsZWN0X0J1dHRvbilcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0anNvbkxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUsaXRlbV9saXN0Oml0ZW1saXN0MSxleHRfZGF0YTokdGhpcy5kZXRhaWwxRXh0RGF0YX0pXHJcblx0XHRcdFx0XHRqc29uTGlzdC5wdXNoKHtwYWdlX25hbWU6JHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSxpdGVtX2xpc3Q6aXRlbWxpc3QyLGV4dF9kYXRhOiR0aGlzLmRldGFpbDJFeHREYXRhfSlcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGFfanNvbiA9IEJhc2U2NC5lbmNvZGUoXHJcblx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KGpzb25MaXN0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0ZWRfdHlwZTogMCxcclxuXHRcdFx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHRcdFx0XHRcdGNsYXNzX2lkOiB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5jbHNJZCxcclxuXHRcdFx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXHJcblx0XHRcdFx0XHRcdGV2ZW50X2lkOiBldmVudC5pZCxcclxuXHRcdFx0XHRcdFx0ZXZlbnRfbmFtZTogJycsXHJcblx0XHRcdFx0XHRcdGRhdGFfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0b2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0XHRcdFx0XHRwcmpfaWQ6ICcnLFxyXG5cdFx0XHRcdFx0XHRyZWZfY2xzX2lkOiAnJyxcclxuXHRcdFx0XHRcdFx0cmVsX29ial9pZDogJycsXHJcblx0XHRcdFx0XHRcdHVzZXJfbG9naW46ICcnLFxyXG5cdFx0XHRcdFx0XHRkYXRhX2pzb246IGRhdGFfanNvbixcclxuXHRcdFx0XHRcdFx0Y29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHRcdFx0ZXh0X2luZm86ICcnLFxyXG5cdFx0XHRcdFx0XHRnbG9iYWxfYXR0cjogJycsXHJcblx0XHRcdFx0XHRcdGlucHV0X3BhcmFtOiBpbnB1dF9wYXJhbSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB0aXAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCArICcs5o+Q56S6OicgKyByZXN1bHQucmV0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aXApIHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIikgeyAvL+eggeebmOS4rVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucGFyYW0uU2hvd19XZWxjb21fUGFnZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJzZXRfc3VidGFibGVfcGFnZV9jb250ZW50XCIpIHsgLy/lt7LnoIHnm5hcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBhcmFtLlNob3dfV2VsY29tX1BhZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUuY2xlYXIgPT0gdHJ1ZSAmJiAkdGhpcy4kZGF0YVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGggPiAwICYmIHZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHsgLy/liKTmlq3mmK/lkKbmuIXnqbrpobXnrb7lhoXlrrks5q2j5Zyo56CB55uY5piv5ZCm5pyJ5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiAn57O757uf5qOA5rWL5Yiw5pyJ5q2j5Zyo56CB55uY5Lit55qE6LSn5ZOB77yM57un57ut5pON5L2c5Lya5riF56m677yM5piv5ZCm57un57ut77yfJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Db250ZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Db250ZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDBdLk5hbWUpIHsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0ID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdCA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwic2VsZWN0X3N1YnRhYmxlX3BhZ2Vfcm93XCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhbHVlID0ge1wicGFnZV9uYW1lXCI6XCLnoIHnm5jkuK1cIiwgXCJyb3dcIjp7XCJpZFwiOlwieHhcIn19XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKGVsZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmFjdGl2ZWxpc3RbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlLmZvcm0ub2JqSWQgPT0gdmFsdWUucm93LmlkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlLlNlbEJ1dF9DaGVja2VkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5hY3RpdmVfaWQgPSBlbGUuZm9ybS5odG1sb2JqSWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/oh6rliqjmu5rliqjliLDmjIflrprlhYPntKBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuc2VsZWN0KFwiI3RhYnBhbmVsXCIpIC8v5a+55bqU5aSW5bGC6IqC54K5XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuYm91bmRpbmdDbGllbnRSZWN0KChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRhaW5lcikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnNlbGVjdChcIiN0YWJwYW5lbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS5mb3JtLmh0bWxvYmpJZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSAvL+ebruagh+iKgueCuVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5ib3VuZGluZ0NsaWVudFJlY3QoKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkucGFnZVNjcm9sbFRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2Nyb2xsVG9wOiB0YXJnZXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudG9wIC1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250YWluZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudG9wLCAvL+a7muWKqOWIsOWunumZhei3neemu+aYr+WFg+e0oOi3neemu+mhtumDqOeahOi3neemu+WHj+WOu+acgOWkluWxguebkuWtkOeahOa7muWKqOi3neemu1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZXhlYygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5leGVjKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gIGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInJlbW92ZV9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgIC8v5riF6Zmk6Z2i5p2/5Lit5oyH5a6aaWTnmoTmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZih2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8v5riF6Zmk6Z2i5p2/5Lit5oyH5a6aaWTnmoTmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUucm93LmZvckVhY2gocm93PT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChlbGUsaW5kZXgpPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihlbGUuZm9ybS5vYmpJZCA9PSByb3cuaWQpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKSB7IFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjdGlvblNldFJvdyggaXRlbS52YWx1ZSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX2V4dF9kYXRhXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpIHsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2V0RGF0YSh7ZGV0YWlsMUV4dERhdGE6dmFsdWUuZXh0X2RhdGF9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwyRXh0RGF0YTp2YWx1ZS5leHRfZGF0YX0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJjbGVhcl9zdWJwYWdlX3Jvd3NcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSkgeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W+heWIhuaLo1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwxU3R5bGVEZWZMaXN0OltdLGRldGFpbDFFeHREYXRhOnt9fSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2V0RGF0YSh7ZGV0YWlsMlN0eWxlRGVmTGlzdDpbXSxkZXRhaWwyRXh0RGF0YTp7fX0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfZGxnX2N1cnJlbnRfZWRpdF9hdHRyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLmZvY3VzRmllbGRJZCA9PSBpdGVtLnZhbHVlKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtmb2N1c0ZpZWxkSWQ6IFwiXCJ9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2V0RGF0YSh7Zm9jdXNGaWVsZElkOml0ZW0udmFsdWV9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X2RsZ19hdHRyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhbHVlID0ge1wiYXR0clwiOlwieHh4XCIsIFwidmFsdWVcIjpcInh4eFwifVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRhdGEgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEuZm9yRWFjaChhc3luYyAoZWxlMiwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlLmZpZWxkSWQgPT0gZWxlMlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS52YWx1ZSA9IGVsZTJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LmluZm8pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzQuM1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmVzdWx0LmluZm8sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vNFwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor680LjFcIixcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKGV4KSB7XHJcblx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5tZXNzYWdlO1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vNC4yXCIsXHJcblx0XHRcdFx0XHRjb250ZW50OiBcIuaJp+ihjOKAnOWGheWuueWPmOWMluWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLFxyXG5cdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG9wZXJhdGlvbk51bWJlcih2YWx1ZTEsIHZhbHVlMixvcGVyYXRpb24pe1xyXG5cdFx0XHR2YXIgbnVtYmVyMSA9IDBcclxuXHRcdFx0dmFyIG51bWJlcjIgPTBcclxuXHRcdFx0aWYodmFsdWUxKVxyXG5cdFx0XHRcdG51bWJlcjEgPSAgcGFyc2VJbnQodmFsdWUxKVxyXG5cdFx0XHRpZih2YWx1ZTIpXHRcclxuXHRcdFx0XHRudW1iZXIyID0gIHBhcnNlSW50KHZhbHVlMilcclxuXHRcdFx0aWYob3BlcmF0aW9uID09IFwiK1wiKVxyXG5cdFx0XHR7XHJcblx0XHRcdFx0cmV0dXJuIG51bWJlcjEgKyBudW1iZXIyXHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZihvcGVyYXRpb24gPT0gXCItXCIpXHJcblx0XHRcdHtcclxuXHRcdFx0XHRyZXR1cm4gbnVtYmVyMSAtIG51bWJlcjJcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmKG9wZXJhdGlvbiA9PSBcIipcIilcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHJldHVybiBudW1iZXIxICogbnVtYmVyMlxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYob3BlcmF0aW9uID09IFwiL1wiKVxyXG5cdFx0XHR7XHJcblx0XHRcdFx0aWYobnVtYmVyMilcclxuXHRcdFx0XHRcdHJldHVybiBudW1iZXIxIC8gbnVtYmVyMlxyXG5cdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdHJldHVybiBudW1iZXIxIFxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgcmV0dXJuIG51bWJlcjIgXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvL+abtOaWsOWIhumhteetvuS4reeahOWIl+ihqOmhueWGheWuuVxyXG5cdFx0dmlld0FjdGlvblNldFJvdyh2YWx1ZSkge1xyXG5cdFx0XHRjb25zdCAkdGhpcyA9IHRoaXNcclxuXHRcdFx0dmFyIGRldGFpbFN0eWxlRGVmTGlzdCA9IFtdXHJcblx0XHRcdGlmKHZhbHVlLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVsxXS5OYW1lKVxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZGV0YWlsU3R5bGVEZWZMaXN0ID0gJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdFxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpXHJcblx0XHRcdHtcclxuXHRcdFx0XHRkZXRhaWxTdHlsZURlZkxpc3QgPSR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3RcclxuXHRcdFx0fVxyXG5cdFx0XHRkZXRhaWxTdHlsZURlZkxpc3QuZm9yRWFjaChlbGU9PntcclxuXHRcdFx0XHR2YWx1ZS5yb3cuZm9yRWFjaCgocm93RGF0YSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYoZWxlLmZvcm0ub2JqSWQgPT0gcm93RGF0YS5pZCl7XHJcblx0XHRcdFx0XHRcdHJvd0RhdGEuYXR0cnMuZm9yRWFjaChhdHRyPT57XHJcblx0XHRcdFx0XHRcdFx0ZWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGUyPT57XHJcblx0XHRcdFx0XHRcdFx0XHRpZihlbGUyLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgaWYoZWxlMi5maWVsZElkID09IGF0dHIuYXR0cil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlMi52YWx1ZSA9JHRoaXMub3BlcmF0aW9uTnVtYmVyKGVsZTIudmFsdWUsYXR0ci52YWx1ZSxhdHRyLm9wZXJhdGlvbilcclxuXHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGVsZTIubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBlbGUyLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjb2wpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLmF0dHIpIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wudmFsdWUgPSR0aGlzLm9wZXJhdGlvbk51bWJlcihjb2wudmFsdWUsYXR0ci52YWx1ZSxhdHRyLm9wZXJhdGlvbilcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdCAgfSlcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcdFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0aWYodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpXHJcblx0XHRcdHtcclxuXHRcdFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwyU3R5bGVEZWZMaXN0OmRldGFpbFN0eWxlRGVmTGlzdH0pXHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZih2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSlcclxuXHRcdFx0e1xyXG5cdFx0XHRcdCAkdGhpcy5zZXREYXRhKHtkZXRhaWwxU3R5bGVEZWZMaXN0OmRldGFpbFN0eWxlRGVmTGlzdH0pXHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHR9LFxyXG5cdFx0Ly/liqDovb3mraPlnKjnoIHnm5jlhoXlrrlcclxuXHRcdHZpZXdBY2Vpb25Sb3coZGF0YSwgdHlwZSkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHRcdFx0aWYgKEpTT04uc3RyaW5naWZ5KGRhdGEucm93KSA9PSAne30nKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGRhdGEucm93LmZvckVhY2gocm93ID0+IHtcclxuXHRcdFx0XHR2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdGlmICh0eXBlKSB7IC8v56Gu5a6a5ZCO6ISa5pys6L+b5YWl5Yqg6L295bey5YiG5ouj5pWw5o2uXHJcblx0XHRcdFx0XHRzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChkYXRhLnBhZ2VfbmFtZSA9PSB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpIHsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lt7LliIbmi6NcclxuXHRcdFx0XHRcdFx0c3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYpOyAvL+W+heWIhuaLo1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgZGV0YWlsU3R5bGUgPSBKU09OLnBhcnNlKHN0eWxlU3RyKTtcclxuXHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLm9iaklkID0gcm93LmlkO1xyXG5cdFx0XHRcdGRldGFpbFN0eWxlLmZvcm0uaHRtbG9iaklkID0gcm93LmlkID8gcm93LmlkLnJlcGxhY2UoLy0vZywgJycpLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsXHJcblx0XHRcdFx0XHQnJykgOiAnbnVsbCc7XHJcblx0XHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IHJvdy5hdHRycztcclxuXHRcdFx0XHRyb3cuYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRcdGRldGFpbFN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGUgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWxlLm5hbWUgIT0gJ0xheW91dCcpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsZS5uYW1lID09ICdMYXlvdXQnKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29sKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2wuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGNvbC52YWx1ZSA9IGF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAodHlwZSkgeyAvL+ehruWumuWQjuiEmuacrOi/m+WFpeWKoOi9veW3suWIhuaLo+aVsOaNrlxyXG5cdFx0XHRcdFx0dGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEucGFnZV9uYW1lID09IHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSkgeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W3suWIhuaLo1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuYWN0aXZlbGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRhY3RpdmU6IGZhbHNlXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdFx0Ly/liqDovb3lt7LnoIHnm5jlhoXlrrlcclxuXHRcdHZpZXdBY2Vpb25Db250ZW50KGRhdGEpIHtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0aWYgKGRhdGEucGFnZV9uYW1lID09ICR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpIHtcclxuXHRcdFx0XHQkdGhpcy5kZXRhaWwxRXh0RGF0YSA9IGRhdGEuZXh0X2RhdGEgfHx7fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGRhdGEucGFnZV9uYW1lID09ICR0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpIHtcclxuXHRcdFx0XHQkdGhpcy5kZXRhaWwyRXh0RGF0YSA9IGRhdGEuZXh0X2RhdGF8fHt9XHJcblx0XHRcdH0gXHJcblx0XHRcdGlmIChKU09OLnN0cmluZ2lmeShkYXRhLmNvbnRlbnQpID09ICd7fScpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0ZGF0YS5jb250ZW50LmZvckVhY2goY29udCA9PiB7XHJcblx0XHRcdFx0dmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7XHJcblx0XHRcdFx0aWYgKGRhdGEucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpIHsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/noIHnm5jkuK1cclxuXHRcdFx0XHRcdHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7IC8v56CB55uY5LitXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdFx0XHRcdGRldGFpbFN0eWxlLlNlbEJ1dF9DaGVja2VkID0gZGF0YS5jaGVja2JveCA/PyB0cnVlO1xyXG5cdFx0XHRcdGRldGFpbFN0eWxlLmZvcm0ub2JqSWQgPSBjb250LmlkO1xyXG5cdFx0XHRcdGRldGFpbFN0eWxlLmZvcm0uaHRtbG9iaklkID0gY29udC5pZCA/IGNvbnQuaWQucmVwbGFjZSgvLS9nLCAnJykucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JyxcclxuXHRcdFx0XHRcdCcnKSA6ICdudWxsJztcclxuXHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmF0dHJzID0gY29udC5hdHRycztcclxuXHRcdFx0XHRjb250LmF0dHJzLmZvckVhY2goYXR0ciA9PiB7XHJcblx0XHRcdFx0XHRkZXRhaWxTdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGVsZS5uYW1lICE9ICdMYXlvdXQnKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGVsZS5maWVsZElkID09IGF0dHIuYXR0cikgZWxlLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGUubmFtZSA9PSAnTGF5b3V0Jykge1xyXG5cdFx0XHRcdFx0XHRcdGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2wgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZiAoZGF0YS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSkgeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W+heWIhuaLo1xyXG5cdFx0XHRcdFx0Ly/lpoLmnpwgY2xlYXIgPSBmYWxzZSDliJnkuI3pnIDopoHmuIXpmaTvvIzmoLnmja5pZOWIpOaWreaYr+WQpuWtmOWcqO+8jOS4jeWtmOWcqOaPkuWFpeWIsOmhtemdou+8jOWmguaenOWtmOWcqOeUqOaWsOeahOWxnuaAp+imhuebllxyXG5cdFx0XHRcdFx0aWYgKGRhdGEuY2xlYXIgPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGlzZmxhZyA9IHRydWU7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoc3R5bGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29udC5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlLm5hbWUgIT0gJ0xheW91dCcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGUubmFtZSA9PSAnTGF5b3V0Jykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2wpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29sLmZpZWxkSWQgPT0gYXR0clxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIpIGNvbC52YWx1ZSA9IGF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0aXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0aWYgKGlzZmxhZykgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTsgLy/lvoXliIbmi6NcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7IC8v5b6F5YiG5oujXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5hY3RpdmVsaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRhY3RpdmU6IGZhbHNlXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5jbGVhciA9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHQvL+WmguaenCBjbGVhciA9IGZhbHNlIOWImeS4jemcgOimgea4hemZpO+8jOagueaNrmlk5Yik5pat5piv5ZCm5a2Y5Zyo77yM5LiN5a2Y5Zyo5o+S5YWl5Yiw6aG16Z2i77yM5aaC5p6c5a2Y5Zyo55So5paw55qE5bGe5oCn6KaG55uWXHJcblx0XHRcdFx0XHRcdHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0LmZvckVhY2goKHN0eWxlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChzdHlsZS5mb3JtLm9iaklkID09IGRldGFpbFN0eWxlLmZvcm0ub2JqSWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnQuYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZS5uYW1lICE9ICdMYXlvdXQnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWxlLm5hbWUgPT0gJ0xheW91dCcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2wgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29sKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNvbC5maWVsZElkID09IGF0dHJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5hdHRyKSBjb2wudmFsdWUgPSBhdHRyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdGlmIChpc2ZsYWcpICR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7IC8v5bey5YiG5oujXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpOyAvL+W3suWIhuaLo1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFxyXG5cdFx0XHJcblxyXG5cdFx0fSxcclxuXHRcdG9uQ2xpY2tJdGVtKGUpIHsgLy/pgInmi6npobXnrb5cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZSk7XHJcblx0XHRcdHRoaXMuY3VycmVudCA9IGUuY3VycmVudEluZGV4XHJcblx0XHR9LFxyXG5cdFx0b25EZXRhaWwxRW50ZXJDaGFuZ2UoaXRlbSkgeyAvL+eggeebmOS4reagt+W8j+Wbnui9puS6i+S7tlxyXG5cdFx0XHRjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdH0sXHJcblx0XHRkZWxJdGVtKGluZGV4KSB7IC8v5Yig6Zmk56CB55uY5Lit5qC35byP6Z2i5p2/XHJcblx0XHRcclxuXHRcdCAgIC8v5Yig6Zmk56CB55uY5Lit5qC35byP6Z2i5p2/XHJcblx0XHQgIHRoaXMuQmVmb3JlX0RlbF9FdmVudCA9IHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uQmVmb3JlX0RlbGV0ZTtcclxuXHRcdCAgdGhpcy5BZnRlcl9EZWxfRXZlbnQgPSB0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkFmdGVyX0RlbGV0ZTtcclxuXHRcdCAgY29uc3Qgc3R5bGUgPSB0aGlzLmRldGFpbDFTdHlsZURlZkxpc3RbaW5kZXhdO1xyXG5cdFx0ICAvL+WIoOmZpOeggeebmOS4reagt+W8j+mdouadv1xyXG5cdFx0ICB0aGlzLmRldGFpbDFTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdCAgaWYgKHRoaXMuQmVmb3JlX0RlbF9FdmVudD8uSUQpXHJcblx0XHRcdC8v5piv5ZCm5pyJ5Yig6Zmk5YmN5LqL5Lu2XHJcblx0XHRcdHRoaXMuZGVsKHN0eWxlLCB0aGlzLkJlZm9yZV9EZWxfRXZlbnQpO1xyXG5cdFx0ICBlbHNlIGlmICh0aGlzLkFmdGVyX0RlbF9FdmVudD8uSUQpXHJcblx0XHRcdC8v5piv5ZCm5pyJ5Yig6Zmk5ZCO5LqL5Lu2XHJcblx0XHRcdHRoaXMuZGVsKHN0eWxlLCB0aGlzLkFmdGVyX0RlbF9FdmVudCk7XHJcblx0XHR9LFxyXG5cdFx0ZGVsRGF0YU9iaihzdHlsZSwgaW5kZXgpIHsgLy/liKDpmaTlt7LnoIHnm5jmlbBcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coc3R5bGUpO1xyXG5cdFx0XHRcclxuXHRcdFx0JHRoaXMuQmVmb3JlX0RlbF9FdmVudCA9ICR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkJlZm9yZV9EZWxldGU7XHJcblx0XHRcdCR0aGlzLkFmdGVyX0RlbF9FdmVudCA9ICR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkFmdGVyX0RlbGV0ZTtcclxuXHRcdFx0XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdFx0XHRjb250ZW50OiAn56Gu5a6a5Yig6Zmk6K+l5bey56CB55uY5pWw5o2u77yBJyxcclxuXHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHtcclxuXHRcdFx0XHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgb2JqSUQgPSBzdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdFx0XHRpZiAoIXN0eWxlLmZvcm0ub2JqSWQuaW5jbHVkZXMoJ3snKSkgb2JqSUQgPSAneycgKyBzdHlsZS5mb3JtLm9iaklkICsgJ30nO1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNsYXNzX2lkOiBzdHlsZS5mb3JtLmNsc0lkLFxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0XHRcdFx0XHRcdG9ial9pZDogb2JqSURcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpEZWwnLCBkYXRhSW5mbykudGhlbihyZXQgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGUgPSAkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0W2luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwgMSk7IFxyXG5cdFx0XHRcdFx0XHRcdGlmICgkdGhpcy5CZWZvcmVfRGVsX0V2ZW50Py5JRClcclxuXHRcdFx0XHRcdFx0XHQvL+aYr+WQpuacieWIoOmZpOWJjeS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGVsMihzdHlsZSwgJHRoaXMuQmVmb3JlX0RlbF9FdmVudCk7XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoJHRoaXMuQWZ0ZXJfRGVsX0V2ZW50Py5JRClcclxuXHRcdFx0XHRcdFx0XHQvL+aYr+WQpuacieWIoOmZpOWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuZGVsMihzdHlsZSwgJHRoaXMuQWZ0ZXJfRGVsX0V2ZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogXCLliKDpmaTmiJDlip/vvIFcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFxyXG5cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzVcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogcmV0LmVycl9tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vNS4xXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0fSxcclxuXHRcdGFzeW5jIGRlbChzdHlsZSwgZXZlbnQpIHtcclxuXHQgIC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0XHRcdHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHRcdFx0dGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0ICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdFx0XHQvL+iOt+WPluato+WcqOWIhuaLo+WxnuaAp1xyXG5cdFx0ICB2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHRcdCAgdmFyIGRldGFpbF9hdHRyPXt9O1xyXG5cdFx0ICBzdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRcdGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0XHRcdCAgaXRlbS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2xzID0+IHtcclxuXHRcdFx0XHRpZihjb2xzIT1udWxsKSBkZXRhaWxfYXR0cltjb2xzLmZpZWxkSWRdID0gY29scy52YWx1ZTtcclxuXHRcdFx0ICB9KTtcclxuXHRcdFx0fWVsc2VcclxuXHRcdFx0ICBkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdCAgfSk7XHJcblx0XHQgIFxyXG5cdFx0IGRldGFpbF9hdHRyWydpZCddID0gc3R5bGUuZm9ybS5vYmpJZDtcclxuXHRcdCAgaWYoJHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uU2VsZWN0X0J1dHRvbj09dHJ1ZSl7IC8v5Yik5pat6YCJ5oup5oyJ6ZKu5piv5ZCm5Li6dHJ1ZVxyXG5cdFx0XHRpZihzdHlsZS5TZWxCdXRfQ2hlY2tlZD09dHJ1ZSkgXHJcblx0XHRcdCAgZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0XHQgIH0gZWxzZSBcclxuXHRcdFx0ZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0XHRcdC8v6I635Y+W5q2j5Zyo5YiG5ouj6YeM5rKh5pyJ5pi+56S655qE5a2X5q61XHJcblx0XHQgIHN0eWxlLmZvcm0uYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGV0YWlsQXR0ckxpc3Qpe1xyXG5cdFx0XHQgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsQXR0ckxpc3Rba2V5XVsnaWQnXSl7XHJcblx0XHRcdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhkZXRhaWxBdHRyTGlzdFtrZXldKTtcclxuXHRcdFx0XHR2YXIgaXNmbGFnID0gdHJ1ZTtcclxuXHRcdFx0XHRrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYoZWxlID09IGF0dHIuYXR0cikgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0aWYoaXNmbGFnKSB7XHJcblx0XHRcdFx0XHRkZXRhaWxBdHRyTGlzdFthdHRyLmF0dHJdID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgfVxyXG5cdFx0XHR9XHJcblx0XHQgIH0pO1xyXG5cdFx0XHR2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KFxyXG5cdFx0XHRcdCAgT2JqZWN0LmtleXMoaGVhZF9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdFx0dmFsdWU6IGhlYWRfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdCAgfSkpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHQgdmFyIGpzb25saXN0PVtdO1xyXG5cdFx0XHRkZXRhaWxBdHRyTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuXHRcdFx0XHRqc29ubGlzdC5wdXNoKHtcclxuXHRcdFx0XHQgIGlkOmF0dHJbXCJpZFwiXXx8IFwiXCIsXHJcblx0XHRcdFx0ICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHRcdHZhbHVlOiBhdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0ICB9KSkuZmlsdGVyKChhKT0+e3JldHVybiBhLmF0dHIgIT0gXCJpZFwifSlcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGpzb25saXN0KTtcclxuXHRcdFx0Y29uc3QgbGlzdCA9IFtdXHJcblx0XHRcdGxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUsaXRlbV9saXN0Ompzb25saXN0LGV4dF9kYXRhOiR0aGlzLmRldGFpbDFFeHREYXRhfSlcclxuXHRcdFx0JHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sbGlzdCwnMScpO1xyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0YXN5bmMgZGVsMihzdHlsZSwgZXZlbnQpIHtcclxuXHRcdFx0IC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0XHRcdHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHRcdFx0dGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0ICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdFx0XHQvL+iOt+WPluW3suWIhuaLo+WxnuaAp1xyXG5cdFx0XHR2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHRcdFx0dmFyIGRldGFpbF9hdHRyPXt9O1xyXG5cdFx0XHRzdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRcdGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0XHRcdFx0aXRlbS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2xzID0+IHtcclxuXHRcdFx0XHRpZihjb2xzIT1udWxsKSBkZXRhaWxfYXR0cltjb2xzLmZpZWxkSWRdID0gY29scy52YWx1ZTtcclxuXHRcdFx0ICB9KTtcclxuXHRcdFx0fWVsc2VcclxuXHRcdFx0XHRkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdCAgXHJcblx0XHRcdGRldGFpbF9hdHRyWydpZCddID0gc3R5bGUuZm9ybS5vYmpJZDtcclxuXHRcdFx0aWYoJHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uU2VsZWN0X0J1dHRvbj09dHJ1ZSl7IC8v5Yik5pat6YCJ5oup5oyJ6ZKu5piv5ZCm5Li6dHJ1ZVxyXG5cdFx0XHRcdGlmKHN0eWxlLlNlbEJ1dF9DaGVja2VkPT10cnVlKSBcclxuXHRcdFx0XHRcdGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG5cdFx0XHR9IGVsc2UgXHJcblx0XHRcdFx0ZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0XHRcdC8v6I635Y+W5bey5YiG5ouj6YeM5rKh5pyJ5pi+56S655qE5a2X5q61XHJcblx0XHRcdHN0eWxlLmZvcm0uYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRmb3IodmFyIGtleSBpbiBkZXRhaWxBdHRyTGlzdCl7XHJcblx0XHRcdFx0XHRpZihzdHlsZS5mb3JtLm9iaklkID09IGRldGFpbEF0dHJMaXN0W2tleV1bJ2lkJ10pe1xyXG5cdFx0XHRcdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhkZXRhaWxBdHRyTGlzdFtrZXldKTtcclxuXHRcdFx0XHRcdHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0a2V5cy5mb3JFYWNoKChlbGUpID0+IHtcclxuXHRcdFx0XHRcdCAgaWYoZWxlID09IGF0dHIuYXR0cikgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGlmKGlzZmxhZykge1xyXG5cdFx0XHRcdFx0ICBkZXRhaWxBdHRyTGlzdFthdHRyLmF0dHJdID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQgIH1cclxuXHRcdFx0XHR9IFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG5cdCAvLyAgICByZXR1cm47XHJcblx0XHRcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkoXHJcblx0XHRcdFx0ICBPYmplY3Qua2V5cyhoZWFkX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHR2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0ICB9KSlcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdHZhciBqc29ubGlzdD1bXTtcclxuXHRcdFx0ZGV0YWlsQXR0ckxpc3QuZm9yRWFjaChhdHRyPT57XHJcblx0XHRcdFx0anNvbmxpc3QucHVzaCh7XHJcblx0XHRcdFx0ICBpZDphdHRyW1wiaWRcIl18fCBcIlwiLFxyXG5cdFx0XHRcdCAgYXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0XHR2YWx1ZTogYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdCAgfSkpLmZpbHRlcigoYSk9PntyZXR1cm4gYS5hdHRyICE9IFwiaWRcIn0pXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb25zdCBsaXN0ID0gW11cclxuXHRcdFx0bGlzdC5wdXNoKHtwYWdlX25hbWU6JHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSxpdGVtX2xpc3Q6anNvbmxpc3QsZXh0X2RhdGE6JHRoaXMuZGV0YWlsMkV4dERhdGF9KVxyXG5cdFx0XHRcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coanNvbmxpc3QpO1xyXG5cdFx0XHQkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxsaXN0LCcyJyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdG9uUGFuZWxDbGljayh2YWx1ZSkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcblx0XHRcdHRoaXMuYWN0aXZlX2lkID0gJyc7XHJcblx0XHRcdHRoaXMuYWN0aXZlbGlzdC5mb3JFYWNoKGVsZSA9PiB7XHJcblx0XHRcdFx0ZWxlLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5hY3RpdmVsaXN0W3ZhbHVlXS5hY3RpdmUgPSB0cnVlO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmFjdGl2ZWxpc3QpO1xyXG5cdFx0fSxcclxuXHRcdC8v56Gu5a6aXHJcblx0XHRvaygpIHtcclxuXHRcdFx0dGhpcy5CZWZvcmVfT0tfRXZlbnQgPSB0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkJlZm9yZV9vaztcclxuXHRcdFx0dGhpcy5BZnRlcl9PS19FdmVudCA9IHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uQWZ0ZXJfb2s7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuQmVmb3JlX09LX0V2ZW50KTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy5BZnRlcl9PS19FdmVudCk7XHJcblx0XHRcdGlmICh0aGlzLiRkYXRhLkJlZm9yZV9PS19FdmVudC5JRCkgLy/mmK/lkKbmnInnoa7lrprliY3kuovku7ZcclxuXHRcdFx0XHR0aGlzLnNhdmEodGhpcy4kZGF0YS5CZWZvcmVfT0tfRXZlbnQpO1xyXG5cdFx0XHRlbHNlIGlmICh0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50LklEKSAvL+aYr+WQpuacieehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdHRoaXMuc2F2YSh0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTtcclxuXHRcdH0sXHJcblx0XHRzYXZhKGV2ZW50KSB7XHJcblx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdGlmICh0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0Y29udGVudDogXCLmsqHmnInmraPlnKjnoIHnm5jnmoTmlbDmja7vvIFcIixcclxuXHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly/ojrflj5booajlpLTlsZ7mgKdcclxuXHRcdFx0dmFyIGhlYWRfYXR0ciA9IHt9O1xyXG5cdFx0XHR0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdGhlYWRfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGhlYWRfYXR0cik7XHJcblx0XHRcdC8v6I635Y+W5q2j5Zyo56CB55uY5bGe5oCnXHJcblx0XHRcdHZhciBkZXRhaWxBdHRyTGlzdCA9IFtdO1xyXG5cdFx0XHR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaChzdHlsZSA9PiB7XHJcblx0XHRcdFx0dmFyIGRldGFpbF9hdHRyID0ge307XHJcblx0XHRcdFx0c3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKSB7IC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0XHRcdFx0XHRcdGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGNvbHMgIT0gbnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHRcdGRldGFpbF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRkZXRhaWxfYXR0clsnaWQnXSA9IHN0eWxlLmZvcm0ub2JqSWQ7XHJcblx0XHRcdFx0aWYgKCR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLlNlbGVjdF9CdXR0b24gPT0gdHJ1ZSkgeyAvL+WIpOaWremAieaLqeaMiemSruaYr+WQpuS4unRydWVcclxuXHRcdFx0XHRcdGlmIChzdHlsZS5TZWxCdXRfQ2hlY2tlZCA9PSB0cnVlKVxyXG5cdFx0XHRcdFx0XHRkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG5cdFx0XHQvL+iOt+WPluato+WcqOeggeebmOmHjOayoeacieaYvuekuueahOWtl+autVxyXG5cdFx0XHR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaChzdHlsZSA9PiB7XHJcblx0XHRcdFx0c3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGRldGFpbEF0dHJMaXN0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChzdHlsZS5mb3JtLm9iaklkID09IGRldGFpbEF0dHJMaXN0W2tleV1bJ2lkJ10pIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRldGFpbEF0dHJMaXN0W2tleV0pO1xyXG5cdFx0XHRcdFx0XHRcdHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdGtleXMuZm9yRWFjaCgoZWxlKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlID09IGF0dHIuYXR0cikgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGlzZmxhZykge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGV0YWlsQXR0ckxpc3RbYXR0ci5hdHRyXSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0XHRcdC8vICAgIHJldHVybjtcclxuXHRcdFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShcclxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGhlYWRfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdFx0XHR9KSlcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdHZhciBqc29ubGlzdCA9IFtdO1xyXG5cdFx0XHRkZXRhaWxBdHRyTGlzdC5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0XHRcdGpzb25saXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0IGlkOmF0dHJbXCJpZFwiXXx8IFwiXCIsXHJcblx0XHRcdFx0XHRhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0fSkpXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb25zdCBsaXN0ID0gW11cclxuXHRcdFx0bGlzdC5wdXNoKHtwYWdlX25hbWU6JHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSxpdGVtX2xpc3Q6anNvbmxpc3QsZXh0X2RhdGE6JHRoaXMuZGV0YWlsMUV4dERhdGF9KVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHRcdCR0aGlzLnJ1bkN1c3RvbUV2ZW50KGV2ZW50LCBpbnB1dF9wYXJhbSwgbGlzdCwgJzEnKTtcclxuXHRcdFx0Ly8ganNvbmxpc3QuZm9yRWFjaChhc3luYyAoanNvbixrZXkpPT57XHJcblx0XHRcdC8vIFx0YXdhaXQgJHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbiwnMScpO1xyXG5cdFx0XHQvLyB9KTtcclxuXHRcdH0sXHJcblx0XHRvazIoKSB7XHJcblx0XHRcdHRoaXMuQmVmb3JlX09LX0V2ZW50ID0gdGhpcy5wYXJhbS5TdWJfUGFnZVsxXS5CZWZvcmVfb2s7XHJcblx0XHRcdHRoaXMuQWZ0ZXJfT0tfRXZlbnQgPSB0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLkFmdGVyX29rO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLkJlZm9yZV9PS19FdmVudCk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuQWZ0ZXJfT0tfRXZlbnQpO1xyXG5cdFx0XHRpZiAodGhpcy4kZGF0YS5CZWZvcmVfT0tfRXZlbnQuSUQpIC8v5piv5ZCm5pyJ56Gu5a6a5YmN5LqL5Lu2XHJcblx0XHRcdFx0dGhpcy5zYXZhMih0aGlzLiRkYXRhLkJlZm9yZV9PS19FdmVudCk7XHJcblx0XHRcdGVsc2UgaWYgKHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQuSUQpIC8v5piv5ZCm5pyJ56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0dGhpcy5zYXZhMih0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTtcclxuXHRcdH0sXHJcblx0XHRzYXZhMihldmVudCkge1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRpZiAodGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0Lmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IFwi5rKh5pyJ5bey56CB55uY55qE5pWw5o2u77yBXCIsXHJcblx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0XHRcdHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHRcdFx0dGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdFx0XHQvL+iOt+WPluato+WcqOeggeebmOWxnuaAp1xyXG5cdFx0XHR2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGUgPT4ge1xyXG5cdFx0XHRcdHZhciBkZXRhaWxfYXR0ciA9IHt9O1xyXG5cdFx0XHRcdHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRcdGlmIChpdGVtLm5hbWUgPT0gXCJMYXlvdXRcIikgeyAvL+WIpOaWreaYr+WQpuaYr+agheagj+agvOW8j1xyXG5cdFx0XHRcdFx0XHRpdGVtLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbHMgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChjb2xzICE9IG51bGwpIGRldGFpbF9hdHRyW2NvbHMuZmllbGRJZF0gPSBjb2xzLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdFx0XHRkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0ZGV0YWlsX2F0dHJbJ2lkJ10gPSBzdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdGlmICgkdGhpcy5wYXJhbS5TdWJfUGFnZVsxXS5TZWxlY3RfQnV0dG9uID09IHRydWUpIHsgLy/liKTmlq3pgInmi6nmjInpkq7mmK/lkKbkuLp0cnVlXHJcblx0XHRcdFx0XHRpZiAoc3R5bGUuU2VsQnV0X0NoZWNrZWQgPT0gdHJ1ZSlcclxuXHRcdFx0XHRcdFx0ZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHRkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuXHRcdFx0Ly/ojrflj5bmraPlnKjnoIHnm5jph4zmsqHmnInmmL7npLrnmoTlrZfmrrVcclxuXHRcdFx0dGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGUgPT4ge1xyXG5cdFx0XHRcdHN0eWxlLmZvcm0uYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBkZXRhaWxBdHRyTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxBdHRyTGlzdFtrZXldWydpZCddKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhkZXRhaWxBdHRyTGlzdFtrZXldKTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgaXNmbGFnID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpc2ZsYWcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRldGFpbEF0dHJMaXN0W2F0dHIuYXR0cl0gPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG5cdFx0XHQvLyAgICByZXR1cm47XHJcblx0XHRcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkoXHJcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhoZWFkX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IGhlYWRfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHRcdFx0fSkpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHR2YXIganNvbmxpc3QgPSBbXTtcclxuXHRcdFx0ZGV0YWlsQXR0ckxpc3QuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdFx0XHRqc29ubGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdCBpZDphdHRyW1wiaWRcIl18fCBcIlwiLFxyXG5cdFx0XHRcdFx0YXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRcdFx0YXR0cjogYSxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuXHRcdFx0XHRcdH0pKVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc3QgbGlzdCA9IFtdXHJcblx0XHRcdGxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUsaXRlbV9saXN0Ompzb25saXN0LGV4dF9kYXRhOiR0aGlzLmRldGFpbDJFeHREYXRhfSlcclxuXHRcdFx0XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGpzb25saXN0KTtcclxuXHRcdFx0JHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsIGlucHV0X3BhcmFtLCBsaXN0LCAnMicpO1xyXG5cdFx0XHQvLyBqc29ubGlzdC5mb3JFYWNoKGFzeW5jIChqc29uLGtleSk9PntcclxuXHRcdFx0Ly8gXHRhd2FpdCAkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uLCcyJyk7XHJcblx0XHRcdC8vIH0pO1xyXG5cdFx0fSxcclxuXHRcdC8v5omn6KGM56Gu5a6a6ISa5pysXHJcblx0XHRhc3luYyBydW5DdXN0b21FdmVudChldmVudCwgaW5wdXRfcGFyYW0sIGpzb24sIHR5cGUpIHtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0dmFyIGRhdGFfanNvbiA9IEJhc2U2NC5lbmNvZGUoXHJcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkoanNvbilcclxuXHRcdFx0KTtcclxuXHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdGVkX3R5cGU6IDAsXHJcblx0XHRcdFx0c3RhcnRfdHJhbnNhY3Rpb246IHRydWUsXHJcblx0XHRcdFx0Y2xhc3NfaWQ6IHRoaXMuJGRhdGEuQ2xzSUQsXHJcblx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXHJcblx0XHRcdFx0ZXZlbnRfaWQ6IGV2ZW50LklELFxyXG5cdFx0XHRcdGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0XHRcdGRhdGFfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHRvYmpfYXR0cjogJycsXHJcblx0XHRcdFx0cHJqX2lkOiAnJyxcclxuXHRcdFx0XHRyZWZfY2xzX2lkOiAnJyxcclxuXHRcdFx0XHRyZWxfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHR1c2VyX2xvZ2luOiAnJyxcclxuXHRcdFx0XHRkYXRhX2pzb246IGRhdGFfanNvbixcclxuXHRcdFx0XHRjb21wb3NlX2luZm86ICcnLFxyXG5cdFx0XHRcdGV4dF9pbmZvOiAnJyxcclxuXHRcdFx0XHRnbG9iYWxfYXR0cjogJycsXHJcblx0XHRcdFx0aW5wdXRfcGFyYW06IGlucHV0X3BhcmFtLFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgncnVuQ3VzdG9tRXZlbnQnLCBkYXRhSW5mbykudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0aWYgKHJlcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmVzLnJlc3VsdDtcclxuXHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOlxyXG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRpcCxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0ZWxzZSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwICsgJyzmj5DnpLo6JyArIHJlc3VsdC5yZXQsXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5pbmZvIDogcmVzdWx0LmluZm9cclxuXHRcdFx0XHRcdFx0XHQuam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogdGlwLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0LnJlc3VsdF90eXBlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LmFjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdC8vXHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6SlNPTi5zdHJpbmdpZnkocmVzdWx0LmFjdGlvbiksc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5hY3Rpb24uZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIikgeyAvL+eggeebmOS4rVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/liqDovb3lt7Lnu4/noIHnm5jmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy52aWV3QWNlaW9uUm93KHZhbHVlLCAnYWRkJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/muIXnqbrmnaHnoIHlhoXlrrlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaCgoaXRlbSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpdGVtLmZpZWxkSWQgIT0gXCJTX0NOVFJfQ09ERVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbS52YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbaXRlbVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmZpZWxkSWRdID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8v5riF6Zmk5q2j5Zyo56CB55uY5Lit5oiQ5Yqf55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChzdHlsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAgIGlmKHN0eWxlLmZvcm0uaXRlbXNbMF0uZmllbGRJZCA9PSBqc29uLmF0dHJzWzBdLmF0dHIgJiYgc3R5bGUuZm9ybS5pdGVtc1swXS52YWx1ZSA9PSBqc29uLmF0dHJzWzBdLnZhbHVlKXsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gXHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi56CB55uY5oiQ5YqfXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicmVmcmVzaFwiKXsgIC8v5Yi35pawXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gICAgdmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAvL+WIt+aWsOW9k+WJjemhtemdolxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC8vIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBcdHVybDonLi4vbW9kYWwvNTYwMD9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicHJvbXB0XCIpeyAgLy/miZPlvIDns7vnu5/mj5DnpLrlvLnmoYZcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAgICB2YXIgdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBpdGVtLnZhbHVlLmZvckVhY2goZWxlPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gXHRpZih2YWx1ZSkgdmFsdWUrPSdcXG4nO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFx0dmFsdWUrPWVsZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuezu+e7n+aPkOekulwiLGNvbnRlbnQ6dmFsdWUsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWFs+mXrVwifSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicmVtb3ZlX3N1YnRhYmxlX3BhZ2Vfcm93XCIpeyAgLy/muIXpmaTpnaLmnb/kuK3mjIflrpppZOeahOaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W+heWIhuaLo1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/muIXpmaTpnaLmnb/kuK3mjIflrpppZOeahOaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUucm93LmZvckVhY2gocm93PT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoZWxlLGluZGV4KT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGVsZS5mb3JtLm9iaklkID09IHJvdy5pZCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjdGlvblNldFJvdyggaXRlbS52YWx1ZSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3N1YnRhYmxlX3BhZ2VfZXh0X2RhdGFcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKSB7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwxRXh0RGF0YTp2YWx1ZS5leHRfZGF0YX0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2V0RGF0YSh7ZGV0YWlsMkV4dERhdGE6dmFsdWUuZXh0X2RhdGF9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwiY2xlYXJfc3VicGFnZV9yb3dzXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSkgeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W+heWIhuaLo1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2V0RGF0YSh7ZGV0YWlsMVN0eWxlRGVmTGlzdDpbXSxkZXRhaWwxRXh0RGF0YTp7fX0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2V0RGF0YSh7ZGV0YWlsMlN0eWxlRGVmTGlzdDpbXSxkZXRhaWwyRXh0RGF0YTp7fX0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZXRfZGxnX2N1cnJlbnRfZWRpdF9hdHRyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZigkdGhpcy5mb2N1c0ZpZWxkSWQgPT0gaXRlbS52YWx1ZSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNldERhdGEoe2ZvY3VzRmllbGRJZDogXCJcIn0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2V0RGF0YSh7Zm9jdXNGaWVsZElkOml0ZW0udmFsdWV9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCR0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50LklEICE9IGV2ZW50LklEKSB7IC8v5Yik5pat5b2T5YmN5LqL5Lu25piv5ZCm5piv56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0eXBlID09ICcxJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNhdmEoJHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQpOyAvL+aJp+ihjOehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNhdmEyKCR0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTsgLy/miafooYznoa7lrprlkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQuaW5mbykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiByZXN1bHQuaW5mbyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivrzhcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogcmVzLmVycl9tc2csXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0dmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5lcnJNc2c7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHR0aXRsZTogXCLplJnor684LjFcIixcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IFwi5omn6KGM4oCc56Gu5a6a5ZCO4oCd5LqL5Lu25aSx6LSl77yaXCIgKyB0aXAsXHJcblx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjYW5jZWwoZSkgeyAvL+WPlua2iFxyXG5cdFx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0XHRkZWx0YTogMSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdH0sXHJcbn07XHJcbjwvc2NyaXB0PiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n"); |
| | | |
| | | /***/ }), |
| | | /* 192 */ |
| | |
| | | focus: _vm._$s( |
| | | "6-" + $30, |
| | | "a-focus", |
| | | _vm.focusMateria |
| | | _vm.focusFieldId == item.fieldId |
| | | ), |
| | | _i: "6-" + $30, |
| | | }, |
| | |
| | | }, |
| | | on: { |
| | | focus: function ($event) { |
| | | return _vm.ontap(item) |
| | | return _vm.ontap(index, item) |
| | | }, |
| | | keyup: function ($event) { |
| | | if ( |
| | |
| | | /***/ (function(module, exports, __webpack_require__) { |
| | | |
| | | "use strict"; |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n modules: {\n Base64: _base.default\n },\n data: function data() {\n return {\n title: '分拣',\n ClsID: \"Sorting_Detail\",\n ClsID2: \"Sorting_Result\",\n param: {},\n focusMateria: false,\n head_styledef: {\n form: {\n items: []\n }\n },\n detail1_styledef: {},\n detail1StyleDefList: [],\n detail2_styledef: {},\n detail2StyleDefList: [],\n // 分段器数据\n current: 0,\n Before_OK_Event: {},\n After_OK_Event: {},\n items: [],\n active_id: '',\n activelist: []\n };\n },\n onLoad: function onLoad(options) {\n // console.log(options);\n uni.setNavigationBarTitle({\n title: options.titlename\n }); //设置顶部标题 \n this.$data.title = options.titlename;\n this.$data.param = JSON.parse(options.param);\n // console.log(this.$data.param);\n //获取数据类的自定义表单参数\n this.Head_UIStyleGetInfo(this.$data.ClsID, this.$data.param.Input_UI_Style.ID);\n\n //加载初始界面\n if (this.$data.param.Show_Welcom_Page) {\n this.$data.param.Welcome_Page.Img = this.$data.param.Welcome_Page.Img.replace(/ /g, '+');\n this.$data.param.Welcome_Page.Width = parseInt(this.$data.param.Welcome_Page.Width);\n this.$data.param.Welcome_Page.Height = parseInt(this.$data.param.Welcome_Page.Height);\n }\n //加载Tab页签\n this.$data.items.push(this.$data.param.Sub_Page[0].Name);\n this.$data.items.push(this.$data.param.Sub_Page[1].Name);\n this.Detail1_UIstyleGetInfo(this.ClsID, this.$data.param.Sub_Page[0].UI_Style.ID);\n this.Detail2_UIstyleGetInfo(this.ClsID2, this.$data.param.Sub_Page[1].UI_Style.ID);\n __f__(\"log\", this.$data.param, \" at pages/modal/5602.vue:452\");\n //页面初始化获取焦点\n // this.focusMateria=true; \n },\n\n methods: {\n Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n var _this = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n //获取自定义表单样式\n $this = _this;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n // this.form = this.head_styledef.form.model;\n // console.log($this.$data.head_styledef);\n $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context.next = 3;\n break;\n }\n _context.next = 3;\n return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误1\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误1.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n var _this2 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n //获取自定义表单样式\n $this = _this2;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail1_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail1_styledef);\n // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n // var aa = JSON.stringify(this.detail1_styledef);\n // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n // console.log($this.$data.detail1StyleDefList);\n $this.detail1_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(ele, index) {\n return _regenerator.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context3.next = 3;\n break;\n }\n _context3.next = 3;\n return _this2.DictGetInfo(ele.bind.dict, index, 'sub');\n case 3:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误2\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误2.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4);\n }))();\n },\n Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n var _this3 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n //获取自定义表单样式\n $this = _this3;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this3.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail2_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail2_styledef);\n } else {\n uni.showModal({\n title: \"错误3\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误3.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5);\n }))();\n },\n DictGetInfo: function DictGetInfo(dict, index, type) {\n var _this4 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n //Mobox3得到得到字典信息字典项列表\n _this4.data = [];\n $this = _this4;\n dataInfo = {\n dict_id: dict.id,\n dict_name: dict.name\n }; // console.log(dataInfo);\n _this4.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(success) {\n var list, itemName, attr, head_styledef, detail1_styledef;\n return _regenerator.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n // console.log(success);\n if (success.err_code == 0) {\n list = [];\n itemName = '';\n success.result.dict_item_list.forEach(function (item) {\n if (item.is_default == '1') itemName = item.name;\n list.push({\n text: item.value,\n value: item.name\n });\n });\n if (type == 'mast') {\n //有默认值,显示默认值\n if (itemName) {\n $this.head_styledef.form.items[index].value = itemName;\n attr = $this.head_styledef.form.items[index].fieldId;\n $this.head_styledef.form.model[attr] = itemName;\n }\n $this.head_styledef.form.items[index].dict = list;\n head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n $this.head_styledef = [];\n $this.head_styledef = head_styledef;\n // console.log($this.$data.detail1StyleDefList);\n } else {\n if (itemName) {\n $this.detail1_styledef.form.items[index].value = itemName;\n attr = $this.detail1_styledef.form.items[index].fieldId;\n $this.detail1_styledef.form.model[attr] = itemName;\n }\n $this.detail1_styledef.form.items[index].dict = list;\n detail1_styledef = JSON.parse(JSON.stringify($this.detail1_styledef));\n $this.detail1_styledef = [];\n $this.detail1_styledef = detail1_styledef;\n // console.log($this.$data.detail1_styledef);\n }\n } else {\n uni.showModal({\n title: \"错误9.1\",\n content: success.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 1:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }));\n return function (_x5) {\n return _ref3.apply(this, arguments);\n };\n }()).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误9\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7);\n }))();\n },\n ontap: function ontap(item) {\n var _this5 = this;\n //扫码功能\n // var $ele = e;\n getApp().onScan(function (result) {\n __f__(\"log\", result.decodedata, \" at pages/modal/5602.vue:615\");\n item.value = result.decodedata;\n uni.hideKeyboard();\n var $this = _this5;\n __f__(\"log\", item, \" at pages/modal/5602.vue:620\");\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n _this5.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n $this.onChange(onChangeEvent);\n }\n if (item.value) {\n //第一个输入框不为空\n $this.focusMateria = true; //初始化,第二个输入框focus属性\n // setTimeout(function(){\n // \t$this.focusMateria=true; //第二个输入框获取焦点\n setTimeout(function () {\n uni.hideKeyboard();\n }, 1000);\n // },500);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n });\n },\n onEnterChange: function onEnterChange(item) {\n //回车,点击按钮,取消节点事件\n // console.log(item);\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n this.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n this.onChange(onChangeEvent);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n },\n // 内容变化后事件\n onChange: function onChange(event) {\n var _this6 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n var obj_attr, input_param, $this, dataInfo, tip;\n return _regenerator.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n try {\n if (event.id) {\n obj_attr = _this6.head_styledef.form.model; // console.log(obj_attr);\n input_param = _base.default.encode(JSON.stringify(Object.keys(obj_attr).map(function (a) {\n return {\n attr: a,\n value: obj_attr[a] || \"\"\n };\n })));\n $this = _this6;\n dataInfo = {\n ed_type: 0,\n start_transaction: '',\n class_id: _this6.$data.head_styledef.form.clsId,\n class_name: '',\n event_id: event.id,\n event_name: '',\n data_obj_id: '',\n obj_attr: obj_attr,\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: '',\n compose_info: '',\n ext_info: '',\n global_attr: '',\n input_param: input_param\n };\n _this6.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var result = ret.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0 && result.action) {\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //分拣中\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n $this.viewAceionRow(value);\n } else if (item.action_type == \"set_subtable_page_content\") {\n //已分拣\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n if (value.clear == true && $this.$data.detail1StyleDefList.length > 0 && value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断是否清空页签内容,正在分拣是否有数据\n uni.showModal({\n title: '提示',\n content: '系统检测到有待分拣中的数据,继续操作会清空,是否继续?',\n success: function success(res) {\n if (res.confirm) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n } else if (res.cancel) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n }\n }\n });\n } else {\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.$data.detail1StyleDefList = [];\n } else {\n $this.$data.detail2StyleDefList = [];\n }\n $this.viewAceionContent(value);\n }\n } else if (item.action_type == \"select_subtable_page_row\") {\n // value = {\"page_name\":\"码盘中\", \"row\":{\"id\":\"xx\"}}\n var value = item.value;\n $this.detail1StyleDefList.forEach(function (ele, index) {\n $this.activelist[index].active = false;\n if (ele.form.objId == value.row.id) {\n ele.SelBut_Checked = true;\n $this.active_id = ele.form.htmlobjId;\n //自动滚动到指定元素\n uni.createSelectorQuery().select(\"#tabpanel\") //对应外层节点\n .boundingClientRect(function (container) {\n uni.createSelectorQuery().select(\"#tabpanel\" + ele.form.htmlobjId) //目标节点\n .boundingClientRect(function (target) {\n uni.pageScrollTo({\n scrollTop: target.top - container.top //滚动到实际距离是元素距离顶部的距离减去最外层盒子的滚动距离\n });\n }).exec();\n }).exec();\n }\n });\n } else if (item.action_type == \"set_dlg_attr\") {\n // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n var data = item.value;\n $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(ele, index) {\n return _regenerator.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n data.forEach( /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(ele2, index) {\n return _regenerator.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (ele.fieldId == ele2.attr) {\n ele.value = ele2.value;\n }\n case 1:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8);\n }));\n return function (_x8, _x9) {\n return _ref5.apply(this, arguments);\n };\n }());\n case 1:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9);\n }));\n return function (_x6, _x7) {\n return _ref4.apply(this, arguments);\n };\n }());\n }\n });\n } else {\n // this.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"错误4.3\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误4\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误4.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n }\n } catch (ex) {\n tip = typeof ex == \"string\" ? ex : ex.message;\n uni.showModal({\n title: \"错误4.2\",\n content: \"执行“内容变化后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10);\n }))();\n },\n //加载正在分拣内容\n viewAceionRow: function viewAceionRow(data, type) {\n var _this7 = this;\n // console.log(data);\n if (JSON.stringify(data.row) == '{}') {\n return;\n }\n data.row.forEach(function (row) {\n var styleStr = JSON.stringify(_this7.$data.detail1_styledef);\n if (type) {\n //确定后脚本进入加载已分拣数据\n styleStr = JSON.stringify(_this7.$data.detail2_styledef);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n styleStr = JSON.stringify(_this7.$data.detail2_styledef); //待分拣\n }\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.form.objId = row.id;\n detailStyle.form.htmlobjId = row.id ? row.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = row.attrs;\n row.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (type) {\n //确定后脚本进入加载已分拣数据\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n _this7.$data.detail1StyleDefList.push(detailStyle);\n _this7.activelist.push({\n active: false\n });\n // console.log(this.$data.detail1StyleDefList);\n }\n }\n });\n },\n //加载已分拣内容\n viewAceionContent: function viewAceionContent(data) {\n var $this = this;\n if (JSON.stringify(data.content) == '{}') {\n return;\n }\n data.content.forEach(function (cont) {\n var _data$checkbox;\n var styleStr = JSON.stringify($this.$data.detail2_styledef); //已分拣\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n styleStr = JSON.stringify($this.$data.detail1_styledef); //待分拣\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.SelBut_Checked = (_data$checkbox = data.checkbox) !== null && _data$checkbox !== void 0 ? _data$checkbox : true;\n detailStyle.form.objId = cont.id;\n detailStyle.form.htmlobjId = cont.id ? cont.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = cont.attrs;\n cont.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n if (data.clear == false) {\n var isflag = true;\n $this.detail1StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail1StyleDefList.push(detailStyle); //待分拣\n } else {\n $this.detail1StyleDefList.push(detailStyle); //待分拣\n }\n\n $this.activelist.push({\n active: false\n });\n // console.log($this.$data.detail1StyleDefList);\n } else {\n if (data.clear == false) {\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n var isflag = true;\n $this.detail2StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail2StyleDefList.push(detailStyle); //已分拣\n } else {\n $this.detail2StyleDefList.push(detailStyle); //已分拣\n }\n // console.log($this.$data.detail2StyleDefList);\n }\n });\n },\n onClickItem: function onClickItem(e) {\n //选择页签\n // console.log(e);\n this.current = e.currentIndex;\n },\n onDetail1EnterChange: function onDetail1EnterChange(item) {\n //分拣中样式回车事件\n __f__(\"log\", item, \" at pages/modal/5602.vue:953\");\n },\n delItem: function delItem(index) {\n //删除分拣中样式面板\n this.detail1StyleDefList.splice(index, 1);\n },\n delDataObj: function delDataObj(style, index) {\n //删除已分拣数\n // console.log(style);\n var $this = this;\n uni.showModal({\n title: '提示',\n content: '确定删除该已分拣数据!',\n success: function success(res) {\n if (res.confirm) {\n var objID = style.form.objId;\n if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n var dataInfo = {\n class_id: style.form.clsId,\n class_name: '',\n obj_id: objID\n };\n // console.log(dataInfo);\n $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n $this.detail2StyleDefList.splice(index, 1);\n uni.showModal({\n title: \"提示\",\n content: \"删除成功!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n } else {\n uni.showModal({\n title: \"错误5\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误5.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n } else if (res.cancel) {}\n }\n });\n },\n onPanelClick: function onPanelClick(value) {\n //点击面板高亮显示\n // console.log(value);\n this.active_id = '';\n this.activelist.forEach(function (ele) {\n ele.active = false;\n });\n this.activelist[value].active = true;\n // console.log(this.$data.activelist);\n },\n //确定\n ok: function ok() {\n this.Before_OK_Event = this.param.Sub_Page[0].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[0].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava(this.$data.After_OK_Event);\n },\n sava: function sava(event) {\n var $this = this;\n if (this.$data.detail1StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有待分拣的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在分拣属性\n var detailAttrList = [];\n this.$data.detail1StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[0].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取正在分拣里没有显示的字段\n this.$data.detail1StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: '',\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n })\n });\n });\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, jsonlist, '1');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'1');\n // });\n },\n //确定\n ok2: function ok2() {\n this.Before_OK_Event = this.param.Sub_Page[1].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[1].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava2(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava2(this.$data.After_OK_Event);\n },\n sava2: function sava2(event) {\n var $this = this;\n if (this.$data.detail1StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有待分拣的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取已分拣属性\n var detailAttrList = [];\n this.$data.detail1StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[1].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取已分拣里没有显示的字段\n this.$data.detail1StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: '',\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n })\n });\n });\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, jsonlist, '2');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'2');\n // });\n },\n //执行确定脚本\n runCustomEvent: function runCustomEvent(event, input_param, json, type) {\n var _this8 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n var $this, data_json, dataInfo;\n return _regenerator.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n $this = _this8;\n data_json = _base.default.encode(JSON.stringify(json));\n dataInfo = {\n ed_type: 0,\n start_transaction: true,\n class_id: _this8.$data.ClsID,\n class_name: '',\n event_id: event.ID,\n event_name: '',\n data_obj_id: '',\n obj_attr: '',\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: data_json,\n compose_info: '',\n ext_info: '',\n global_attr: '',\n input_param: input_param\n }; // console.log(dataInfo);\n _this8.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n __f__(\"log\", res, \" at pages/modal/5602.vue:1206\");\n if (res.err_code == 0) {\n var result = res.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0) {\n if (result.action) {\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //分拣中\n var value = item.value;\n //加载待分拣数据\n $this.viewAceionRow(value, '');\n // $this.viewAceionRow(value,'add');\n //清空条码内容\n $this.$data.head_styledef.form.items.forEach(function (item, index) {\n if (item.fieldId != \"S_CNTR_CODE\") {\n item.value = '';\n item.oldvalue = '';\n $this.$data.head_styledef.form.model[item.fieldId] = '';\n }\n });\n //清除待分拣中成功的数据\n $this.$data.detail1StyleDefList.forEach(function (style, index) {\n if (style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value) {\n $this.$data.detail1StyleDefList.splice(index, 1);\n return;\n }\n });\n // this.detail2StyleDefList=[];\n uni.showModal({\n title: \"提示\",\n content: \"分拣成功\",\n showCancel: false,\n confirmText: \"取消\"\n });\n } else if (item.action_type == \"set_subtable_page_content\") {\n //加载多条数据\n $this.param.Show_Welcom_Page = false;\n var value = item.value;\n if (value.clear == true && $this.detail1StyleDefList.length > 0) {\n //判断是否清空页签内容,待分拣是否有数据\n uni.showModal({\n title: '提示',\n content: '系统检测到有待分拣中的数据,继续操作会清空,是否继续?',\n success: function success(res) {\n if (res.confirm) {\n $this.$data.detail1StyleDefList = [];\n $this.$data.detail2StyleDefList = [];\n $this.viewAceionContent(value);\n } else if (res.cancel) {\n $this.viewAceionContent(value);\n }\n }\n });\n } else {\n $this.viewAceionContent(value);\n }\n } else if (item.action_type == \"remove_subtable_page_row\") {\n //清除面板中指定id的数据\n var value = item.value;\n if (value.page_name == $this.page.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //清除面板中指定id的数据\n value.row.forEach(function (row) {\n $this.detail1StyleDefList.forEach(function (ele, index) {\n if (ele.form.objId == row.id) {\n $this.detail1StyleDefList.splice(index, 1);\n }\n });\n });\n }\n } else if (item.action_type == \"refresh\") {\n //刷新\n var value = item.value;\n //清除待分拣成功的数据\n // value.forEach((val_id,key)=>{\n // this.detail1StyleDefList.forEach((style,index)=>{\n // if(style.form.objId == val_id){ \n // this.detail1StyleDefList.splice(index,1);\n // return;\n // }\n // });\n // });\n //刷新当前页面\n uni.redirectTo({\n url: '../modal/5602?param=' + JSON.stringify(_this8.$data.param) + \"&titlename=\" + _this8.$data.title\n });\n } else if (item.action_type == \"prompt\") {\n //打开系统提示弹框\n var value = '';\n item.value.forEach(function (ele) {\n if (value) value += '\\n';\n value += ele;\n });\n uni.showModal({\n title: \"系统提示\",\n content: value,\n showCancel: false,\n confirmText: \"关闭\"\n });\n }\n });\n } else {\n if ($this.$data.After_OK_Event.ID != event.ID) {\n //判断当前事件是否是确定后事件\n if (type == '1') {\n $this.sava($this.$data.After_OK_Event); //执行确定后事件\n } else {\n $this.sava2($this.$data.After_OK_Event); //执行确定后事件\n }\n }\n }\n } else {\n // $this.$data.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"提示\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误8\",\n content: res.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n uni.showModal({\n title: \"错误8.1\",\n content: \"执行“确定后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11);\n }))();\n },\n cancel: function cancel(e) {\n //取消\n uni.navigateBack({\n delta: 1 //返回层数,2则上上页\n });\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMi52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsIkNsc0lEIiwiQ2xzSUQyIiwicGFyYW0iLCJmb2N1c01hdGVyaWEiLCJoZWFkX3N0eWxlZGVmIiwiZm9ybSIsIml0ZW1zIiwiZGV0YWlsMV9zdHlsZWRlZiIsImRldGFpbDFTdHlsZURlZkxpc3QiLCJkZXRhaWwyX3N0eWxlZGVmIiwiZGV0YWlsMlN0eWxlRGVmTGlzdCIsImN1cnJlbnQiLCJCZWZvcmVfT0tfRXZlbnQiLCJBZnRlcl9PS19FdmVudCIsImFjdGl2ZV9pZCIsImFjdGl2ZWxpc3QiLCJvbkxvYWQiLCJ1bmkiLCJtZXRob2RzIiwiSGVhZF9VSVN0eWxlR2V0SW5mbyIsIiR0aGlzIiwiZGF0YUluZm8iLCJjbGFzc19pZCIsInVpX3N0eWxlX2lkIiwic3R5bGVkZWYiLCJlbGUiLCJjb250ZW50Iiwic2hvd0NhbmNlbCIsImNvbmZpcm1UZXh0IiwiRGV0YWlsMV9VSXN0eWxlR2V0SW5mbyIsIkRldGFpbDJfVUlzdHlsZUdldEluZm8iLCJEaWN0R2V0SW5mbyIsImRpY3RfaWQiLCJkaWN0X25hbWUiLCJsaXN0IiwiaXRlbU5hbWUiLCJzdWNjZXNzIiwidGV4dCIsInZhbHVlIiwiYXR0ciIsIm9udGFwIiwiZ2V0QXBwIiwiaXRlbSIsInNldFRpbWVvdXQiLCJvbkVudGVyQ2hhbmdlIiwib25DaGFuZ2UiLCJvYmpfYXR0ciIsImlucHV0X3BhcmFtIiwiSlNPTiIsIk9iamVjdCIsImVkX3R5cGUiLCJzdGFydF90cmFuc2FjdGlvbiIsImNsYXNzX25hbWUiLCJldmVudF9pZCIsImV2ZW50X25hbWUiLCJkYXRhX29ial9pZCIsInByal9pZCIsInJlZl9jbHNfaWQiLCJyZWxfb2JqX2lkIiwidXNlcl9sb2dpbiIsImRhdGFfanNvbiIsImNvbXBvc2VfaW5mbyIsImV4dF9pbmZvIiwiZ2xvYmFsX2F0dHIiLCJyZXN1bHQiLCJzZWxlY3QiLCJib3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb3AiLCJleGVjIiwidGlwIiwidmlld0FjZWlvblJvdyIsInN0eWxlU3RyIiwiZGV0YWlsU3R5bGUiLCJyb3ciLCJhY3RpdmUiLCJ2aWV3QWNlaW9uQ29udGVudCIsImNvbnQiLCJzdHlsZSIsImlzZmxhZyIsIm9uQ2xpY2tJdGVtIiwib25EZXRhaWwxRW50ZXJDaGFuZ2UiLCJkZWxJdGVtIiwiZGVsRGF0YU9iaiIsIm9ial9pZCIsIm9uUGFuZWxDbGljayIsIm9rIiwic2F2YSIsImhlYWRfYXR0ciIsImRldGFpbF9hdHRyIiwiZGV0YWlsQXR0ckxpc3QiLCJrZXlzIiwianNvbmxpc3QiLCJpZCIsImF0dHJzIiwib2syIiwic2F2YTIiLCJydW5DdXN0b21FdmVudCIsInVybCIsImNhbmNlbCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFnWkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFDQTtFQUNBQTtJQUNBQztFQUNBO0VBQ0FDO0lBQ0E7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7UUFDQUM7VUFDQUM7UUFDQTtNQUNBO01B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Z0NBQUFsQjtnQ0FBQTJCO2dDQUFBQztnQ0FBQUM7OEJBQUE7NEJBQ0E7MEJBQ0E7d0JBQ0E7MEJBQ0E7NEJBQUE7NEJBQ0E7OEJBQ0FSOzRCQUNBOzhCQUNBQTs0QkFDQTswQkFDQTt3QkFDQTtzQkFDQTt3QkFDQTt3QkFDQTswQkFDQUg7NEJBQUFsQjs0QkFBQTJCOzRCQUFBQzs0QkFBQUM7MEJBQUE7d0JBQ0E7c0JBQ0E7b0JBQ0E7a0JBQ0E7b0JBQ0FYO3NCQUFBbEI7c0JBQUEyQjtzQkFBQUM7c0JBQUFDO29CQUFBO2tCQUNBO2dCQUNBO2tCQUNBO2tCQUNBWDtvQkFBQWxCO29CQUFBMkI7b0JBQUFDO29CQUFBQztrQkFBQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBRUFzRTtNQUFBO01BQ0FqRjtRQUNBa0Y7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjE5Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuLnYtaGVhZFN0eWxlOmZpcnN0LWNoaWxke1xyXG5cdG1hcmdpbi10b3A6IDE1cnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSAudHh0X3RpdGxle1xyXG4gIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHZlcnRpY2FsLWFsaWduOiAxMnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHQvKiB3aWR0aDogNjUlOyAqL1xyXG5cdHdpZHRoOiA4NSU7ICAgIFxyXG5cdGhlaWdodDogNTJycHg7XHJcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcblx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDRycHg7XHJcbn1cclxuLnYtaGVhZFN0eWxlIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEycnB4O1xyXG59XHJcbi5pbnB1dC13cmFwcGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB3aWR0aDogNjUlOyAgICBcclxuXHRsaW5lLWhlaWdodDogMjJycHg7XHJcbn1cclxuW252dWVdIHVuaS12aWV3IHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJvcmRlcjogMCBzb2xpZCAjMDAwO1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxufVxyXG4udW5pLWlucHV0IHtcclxuXHQvKiBib3JkZXI6IG5vbmU7ICovXHJcbn1cclxuLnVuaS1pY29ue1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgKi9cclxuXHR3aWR0aDogOCU7XHJcbiAgICBmb250LWZhbWlseTogdW5paWNvbnM7XHJcbiAgICBmb250LXNpemU6IDQwcnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxuICAgIC8qIHdpZHRoOiA0OHJweDsgKi9cclxuICAgIGhlaWdodDogNDhycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNDhycHg7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dmVydGljYWwtYWxpZ246IDE4cnB4O1xyXG59XHJcbi52aWV3LWNvbnRlbnR7XHJcblx0bWluLWhlaWdodDogNzAwcnB4O1xyXG5cdC8qIGJvcmRlcjoxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi5kdi1wYW5lbHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6I2VmZWZlZjtcclxuICAgIHBhZGRpbmc6IDIwcnB4IDIwcnB4IDRycHggMHB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTJycHg7XHJcbiAgICBtYXJnaW46IDEwcnB4IDAgMjBycHggMDtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4uZHYtcGFuZWwtaW5wdXR7XHJcblx0d2lkdGg6IDEwMCU7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dGV4dC1hbGlnbjogbGVmdDtcclxufVxyXG4uZHYtcGFuZWwtaW5wdXQgLmR2LWlucHV0e1xyXG5cdG1hcmdpbi1ib3R0b206IDJycHg7XHJcbn1cclxuLmR2LXBhbmVsIC50eHRfdGl0bGV7XHJcbiAgZm9udC1zaXplOiAzNHJweDtcclxuICB0ZXh0LWFsaWduOiByaWdodDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuXHJcbi5kdi1wYW5lbCBpbnB1dHtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xyXG5cdHdpZHRoOiA2OCU7IFxyXG5cdGhlaWdodDogNTJycHg7XHJcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiA3cHggIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzJkOGNmMDtcclxuXHRwYWRkaW5nOiA2cnB4IDhycHggOHJweDtcclxuXHRmb250LXNpemU6IDMycnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDBycHg7XHJcbn1cclxuLmR2LXBhbmVsIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEwcnB4O1xyXG59XHJcbi5kdi1wYW5lbCAuZm9ybS1pdGVtLXNwYW57XHJcblx0dmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xyXG4gICAgY29sb3I6ICMyZDhjZjA7XHJcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0d2lkdGg6IGNhbGMoMTAwJSAtIDEwMHB4KTtcclxufVxyXG5cclxuLmR2LXBhbmVsLWJ1dHRvbntcclxuICAgIC8qIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRtYXJnaW4tcmlnaHQ6IDIwcnB4OyAqL1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0cGFkZGluZy1ib3R0b206IDIwcnB4O1xyXG59XHJcbi5kdi1wYW5lbC1idXR0b24gY2hlY2tib3gtZ3JvdXAgeyAgIFxyXG4gICAgLyogZmxvYXQ6IGxlZnQ7ICovXHJcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5kdi1wYW5lbC1idXR0b24gYnV0dG9uIHsgXHJcblx0dGV4dC1hbGlnbjogbGVmdDsgICBcclxuXHRsaW5lLWhlaWdodDogMS44O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0d2lkdGg6IDE4MHJweDsgICBcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbmJ1dHRvbi5idG5fY2FuY2VsIHtcclxuXHR3aWR0aDo0OS41JTtcclxuXHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRwYWRkaW5nOiAyMHJweDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5idXR0b24uYnRuX2FkZCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5sb2dvIHtcclxuXHRoZWlnaHQ6IDEwMHJweDtcclxuICAgIHdpZHRoOiA0NjBycHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luOiAzOCUgYXV0bztcclxufVxyXG4uZHYtYm9yZGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkIHJlZDtcclxufVxyXG4udmlldy1pbWFnZXRleHR7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIHdpZHRoOiA4OCU7XHJcbiAgcGFkZGluZzogMjBycHggNDBycHggMHB4IDQwcnB4O1xyXG4gIC8qIGJvcmRlcjoxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi52aWV3LWltYWdldGV4dCAudmlldy1pbWFnZXRleHQtdXBsb2FkbGlzdCB7XHJcbiAgcGFkZGluZzogMzBycHggMHB4IDEwcnB4IDBweDtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGxpbmUtaGVpZ2h0OiAxMDAlO1xyXG4gIGJvcmRlcjogMnJweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICBib3JkZXItcmFkaXVzOiA4cnB4O1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgYmFja2dyb3VuZDogI2ZmZjtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgLyogYm94LXNoYWRvdzogMCAycnB4IDJycHggcmdiYSgwLCAwLCAwLCAwLjIpO1xyXG4gIG1hcmdpbi1yaWdodDogOHJweDsgKi9cclxufVxyXG4udmlldy1pbWFnZXRleHQgLnR4dC10ZXh0e1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIG1hcmdpbjogMjBycHg7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnZpZXctZGV0YWxpc3QtY2VudGVue1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG4gIFxyXG4udmlldy1kZXRhbGlzdC1jZW50ZW4gLnR4dC1kZXRhbGlzdHtcclxuICBiYWNrZ3JvdW5kOiAjOTRENUVGO1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZvbnQtc2l6ZTogMzZycHg7XHJcbiAgbGluZS1oZWlnaHQ6IDgwcnB4O1xyXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbn1cclxuLnBhbmVsLWFjdGl2ZXtcclxuICBib3JkZXI6MnB4IHNvbGlkIHJlZDtcclxufVxyXG4uYmstYWN0aXZle1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNENkZDQjI7XHJcbn1cclxuPC9zdHlsZT5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcblx0LmRlbW8tdW5pLXJvdyB7XHJcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XHJcblx0XHRkaXNwbGF5OiBibG9jaztcclxuXHR9XHJcblx0Ojp2LWRlZXAgLnVuaS1yb3cge1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xyXG5cdH1cclxuXHQudmlldy10YWJwYWdlIDo6di1kZWVwIC51bmktcm93ICB7XHJcblx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XHJcblx0fVxyXG5cdC5kZW1vLXVuaS1jb2wge1xyXG5cdFx0aGVpZ2h0OiAzNnB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdH1cclxuXHQuZGVtby11bmktcm93IC51bmktaW5wdXR7XHJcblx0XHR3aWR0aDogY2FsYygxMDAlIC0gMTIwcHgpO1xyXG5cdH1cclxuXHRcclxuPC9zdHlsZT5cclxuXHJcblxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0PCEtLSDooajlpLTmoLflvI8gLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cInYtaGVhZFN0eWxlXCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zXCIgPlxyXG5cdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHQ8IS0tIOS4i+aLieahhi3ljZXpgIkgaXRlbS51c2VEaWN0P2l0ZW0uZGljdDppdGVtLnNlbGVjdGlvbnMtLT5cclxuXHRcdFx0PHVuaS1kYXRhLXNlbGVjdCBpZD1cImR2X3NlbGVjdFwiIHYtaWY9XCJpdGVtLm5hbWU9PSdTZWxlY3QnXCJcclxuXHRcdFx0XHQ6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHQ6bG9jYWxkYXRhPVwiaXRlbS5kaWN0XCJcclxuXHRcdFx0XHRAY2hhbmdlPVwib25FbnRlckNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0OmNsZWFyPVwiZmFsc2VcIlxyXG5cdFx0XHQ+PC91bmktZGF0YS1zZWxlY3Q+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIHYtaWY9XCJpdGVtLm5hbWU9PSdJbnB1dCcgfHwgaXRlbS5uYW1lPT0nSW5wdXROdW1iZXInXCI+XHJcblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5wcmVmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcucHJlZml4XVwiXHJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOidudW1iZXInXCIgXHJcblx0XHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiXHJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6aXRlbS5zZXR0aW5nLnByZWZpeCAmJiBpdGVtLnNldHRpbmcuc3VmZml4Pyc3OCUnOml0ZW0uc2V0dGluZy5wcmVmaXggfHwgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdFx0XHRcdDpmb2N1cz1cImZvY3VzTWF0ZXJpYVwiXHJcblx0XHRcdFx0XHRAZm9jdXM9XCJvbnRhcChpdGVtKVwiIFxyXG5cdFx0XHRcdFx0QGtleXVwLmVudGVyPVwib25FbnRlckNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0XHRAYmx1cj1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdC8+XHJcblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5zdWZmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcuc3VmZml4XVwiXHJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHQgICAgPC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWNvbnRlbnRcIj5cclxuXHRcdFx0PCEtLSDlm77mlocv5paH5pysIC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctaW1hZ2V0ZXh0XCIgdi1pZj1cInBhcmFtLlNob3dfV2VsY29tX1BhZ2U9PXRydWVcIj5cclxuXHRcdFx0ICA8ZGl2IGNsYXNzPVwidmlldy1pbWFnZXRleHQtdXBsb2FkbGlzdFwiPlxyXG5cdFx0XHRcdDxpbWFnZSA6c3JjPVwicGFyYW0uV2VsY29tZV9QYWdlLkltZ1wiIFxyXG5cdFx0XHRcdDpzdHlsZT1cInsnd2lkdGgnOnBhcmFtLldlbGNvbWVfUGFnZS5XaWR0aCsncHgnLCdoZWlnaHQnOnBhcmFtLldlbGNvbWVfUGFnZS5IZWlnaHQrJ3B4J31cIj48L2ltYWdlPlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0LXRleHRcIiBcclxuXHRcdFx0XHRcdDpzdHlsZT1cInsnY29sb3InOnBhcmFtLldlbGNvbWVfUGFnZS5UeHRfQ29sb3IsJ2ZvbnQtc2l6ZSc6cGFyYW0uV2VsY29tZV9QYWdlLkZvbnRfU2l6ZSsncHgnLCdmb250LWZhbWlseSc6cGFyYW0uV2VsY29tZV9QYWdlLkZvbnR9XCJcclxuXHRcdFx0XHQ+e3twYXJhbS5XZWxjb21lX1BhZ2UuVGV4dH19PC9UZXh0PlxyXG5cdFx0XHQgIDwvZGl2PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwhLS0g5YiG5ouj55WM6Z2iIC0tPlxyXG5cdFx0XHQ8dmlldyB2LWlmPVwicGFyYW0uU2hvd19XZWxjb21fUGFnZT09ZmFsc2VcIj5cclxuXHRcdFx0XHQ8IS0tIOmhteetviAtLT5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cImR2LXRhYlwiPlxyXG5cdFx0XHRcdFx0PHVuaS1zZWdtZW50ZWQtY29udHJvbCA6Y3VycmVudD1cImN1cnJlbnRcIiA6dmFsdWVzPVwiaXRlbXNcIiBAY2xpY2tJdGVtPVwib25DbGlja0l0ZW1cIlxyXG5cdFx0XHRcdFx0XHRzdHl2YXJ5cGU9XCJidXR0b25cIj5cclxuXHRcdFx0XHRcdDwvdW5pLXNlZ21lbnRlZC1jb250cm9sPlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8IS0tIOW+heWIhuaLo+eVjOmdoiAtLT5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInZpZXctdGFicGFnZVwiIGlkPVwidGFicGFuZWxcIiB2LWlmPVwiY3VycmVudD09MFwiPlxyXG5cdFx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb1wiIHYtaWY9XCJkZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD09MFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9tb2JveF9sb2dfMjAweDQwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWxcIiB2LWZvcj1cIihzdHlsZSxpaSkgaW4gZGV0YWlsMVN0eWxlRGVmTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRAdGFwPVwib25QYW5lbENsaWNrKGlpKVwiXHJcblx0XHRcdFx0XHRcdDppZD1cIid0YWJwYW5lbCcrc3R5bGUuZm9ybS5odG1sb2JqSWRcIlxyXG5cdFx0XHRcdFx0XHQ6Y2xhc3M9XCJzdHlsZS5mb3JtLmh0bWxvYmpJZD09YWN0aXZlX2lkPydiay1hY3RpdmUnOmFjdGl2ZWxpc3RbaWldLmFjdGl2ZT09dHJ1ZT8nYmstYWN0aXZlJzonJ1wiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtaW5wdXRcIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtaW5wdXRcIiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBzdHlsZS5mb3JtLml0ZW1zXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOaZrumAmuW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJpdGVtLm5hbWUhPSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiaXRlbS5kaXNhYmxlZFwiPnt7aXRlbS52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0di1pZj1cIiFpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6dHlwZT1cIml0ZW0ubmFtZT09J0lucHV0TnVtYmVyJz8nbnVtYmVyJzondGV4dCdcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6dmFsdWU9XCJpdGVtLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwiaXRlbS5wbGFjZWhvbGRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOagheagvOW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCIgdi1pZj1cIml0ZW0ubmFtZT09J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0di1mb3I9XCIoY29scyxrZXkpIGluIGl0ZW0uc2V0dGluZy5jb2xMaXN0XCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnNwYW49XCJpdGVtLnNldHRpbmcuc3Bhbkxpc3Q/aXRlbS5zZXR0aW5nLnNwYW5MaXN0W2tleV06MjQgLyBpdGVtLnNldHRpbmcuY29sXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJjb2xzIT1udWxsXCIgPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJ0eHRfdGl0bGVcIiA6c3R5bGU9XCJ7J3dpZHRoJzpjb2xzLmxhYmVsV2lkdGgrJ3B4J31cIj57e2NvbHMubGFiZWx9fe+8mjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIiB2LWlmPVwiY29scy5kaXNhYmxlZFwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidW5pLWlucHV0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0di1pZj1cIiFjb2xzLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJjb2xzLm5hbWU9PSdJbnB1dE51bWJlcic/J251bWJlcic6J3RleHQnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp2YWx1ZT1cImNvbHMudmFsdWVcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPVwiY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cImNvbHMucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvdW5pLWNvbD5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdW5pLXJvdz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0IDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCI+XHJcblx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVswXS5TZWxlY3RfQnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJzdHlsZS5TZWxCdXRfQ2hlY2tlZFwiIDpjaGVja2VkPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIDx0ZXh0PjwvdGV4dD4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwic2F2YUl0ZW0oaWkpXCIgdi1pZj1cInBhcmFtLlN1Yl9QYWdlWzBdLk9LX0J1dHRvbj09dHJ1ZVwiPuS/neWtmDwvQnV0dG9uPiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJ3YXJuXCIgQHRhcD1cImRlbEl0ZW0oaWkpXCIgdi1pZj1cInBhcmFtLlN1Yl9QYWdlWzBdLkRlbF9CdXR0b249PXRydWVcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PCEtLSDlt7LliIbmi6PnlYzpnaIgLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LXRhYnBhZ2UyXCIgdi1pZj1cImN1cnJlbnQ9PTFcIj5cclxuXHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiB2LWlmPVwiZGV0YWlsMlN0eWxlRGVmTGlzdC5sZW5ndGg9PTBcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbW9ib3hfbG9nXzIwMHg0MC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDJTdHlsZURlZkxpc3RcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBzdHlsZS5mb3JtLml0ZW1zXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOaZrumAmuW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx2aWV3IHYtaWY9XCJpdGVtLm5hbWUhPSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6aXRlbS5sYWJlbFdpZHRoKydweCd9XCI+e3tpdGVtLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9ybS1pdGVtLXNwYW5cIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdDwhLS0g5qCF5qC85biD5bGAIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVuaS1yb3cgY2xhc3M9XCJkZW1vLXVuaS1yb3dcIiB2LWlmPVwiaXRlbS5uYW1lPT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dW5pLWNvbCBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6c3Bhbj1cIjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0di1mb3I9XCIoY29scyxrZXkpIGluIGl0ZW0uc2V0dGluZy5jb2xMaXN0XCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY29scyE9bnVsbFwiID5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6Y29scy5sYWJlbFdpZHRoKydweCd9XCI+e3tjb2xzLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCI+e3tjb2xzLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1yb3c+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHYtcGFuZWwtYnV0dG9uXCI+XHJcblx0XHRcdFx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVsxXS5TZWxlY3RfQnV0dG9uPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxjaGVja2JveCA6dmFsdWU9XCJzdHlsZS5TZWxCdXRfQ2hlY2tlZFwiIDpjaGVja2VkPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIDx0ZXh0PjwvdGV4dD4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDwvY2hlY2tib3gtZ3JvdXA+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwic2F2YURhdGFPYmooc3R5bGUsaWkpXCIgdi1pZj1cInBhcmFtLlN1Yl9QYWdlWzFdLk9LX0J1dHRvbj09dHJ1ZVwiPuS/neWtmDwvQnV0dG9uPiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJ3YXJuXCIgQHRhcD1cImRlbERhdGFPYmooc3R5bGUsaWkpXCIgdi1pZj1cInBhcmFtLlN1Yl9QYWdlWzFdLkRlbF9CdXR0b249PXRydWVcIj7liKDpmaQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50PT0wICYmIHBhcmFtLlN1Yl9QYWdlWzBdLk9LX0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQHRhcD1cImNhbmNlbFwiIGNsYXNzPVwiYnRuX2NhbmNlbFwiPuWPlua2iDwvYnV0dG9uPlxyXG5cdFx0ICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAdGFwPVwib2tcIiBjbGFzcz1cImJ0bl9hZGRcIj7noa7lrpo8L2J1dHRvbj5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IHYtaWY9XCJjdXJyZW50PT0xICYmIHBhcmFtLlN1Yl9QYWdlWzFdLk9LX0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJkZWZhdWx0XCIgQHRhcD1cImNhbmNlbFwiIGNsYXNzPVwiYnRuX2NhbmNlbFwiPuWPlua2iDwvYnV0dG9uPlxyXG5cdFx0ICAgIDxidXR0b24gdHlwZT1cInByaW1hcnlcIiBAdGFwPVwib2syXCIgY2xhc3M9XCJidG5fYWRkXCI+56Gu5a6aPC9idXR0b24+XHJcblx0XHQ8L3ZpZXc+XHJcbiAgICA8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5pbXBvcnQgQmFzZTY0IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvanMtYmFzZTY0L2Jhc2U2NC5qcydcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG1vZHVsZXM6e1xyXG5cdEJhc2U2NCxcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cdCAgdGl0bGU6J+WIhuaLoycsXHJcbiAgICAgIENsc0lEOiBcIlNvcnRpbmdfRGV0YWlsXCIsXHJcbiAgICAgIENsc0lEMjogXCJTb3J0aW5nX1Jlc3VsdFwiLFxyXG4gICAgICBwYXJhbToge30sXHJcblx0ICBmb2N1c01hdGVyaWE6ZmFsc2UsXHJcblx0ICBoZWFkX3N0eWxlZGVmOntcclxuXHRcdGZvcm06e1xyXG5cdFx0XHRpdGVtczpbXVxyXG5cdFx0fVxyXG5cdCAgfSxcclxuICAgICAgZGV0YWlsMV9zdHlsZWRlZjp7fSxcclxuICAgICAgZGV0YWlsMVN0eWxlRGVmTGlzdDpbXSxcclxuICAgICAgZGV0YWlsMl9zdHlsZWRlZjp7fSxcclxuICAgICAgZGV0YWlsMlN0eWxlRGVmTGlzdDpbXSxcclxuXHQgIC8vIOWIhuauteWZqOaVsOaNrlxyXG5cdCAgY3VycmVudDogMCxcclxuXHQgIEJlZm9yZV9PS19FdmVudDp7fSxcclxuICAgICAgQWZ0ZXJfT0tfRXZlbnQ6e30sXHJcblx0ICBpdGVtczogW10sXHJcbiAgICAgIGFjdGl2ZV9pZDonJyxcclxuXHQgIGFjdGl2ZWxpc3Q6W10sXHJcbiAgICB9O1xyXG4gIH0sXHJcbiAgb25Mb2FkKG9wdGlvbnMpIHtcclxuXHQvLyBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuXHR1bmkuc2V0TmF2aWdhdGlvbkJhclRpdGxlKHsgdGl0bGU6IG9wdGlvbnMudGl0bGVuYW1lfSk7IC8v6K6+572u6aG26YOo5qCH6aKYIFxyXG5cdHRoaXMuJGRhdGEudGl0bGUgPSBvcHRpb25zLnRpdGxlbmFtZTtcclxuXHR0aGlzLiRkYXRhLnBhcmFtID0gSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtKTtcclxuXHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLnBhcmFtKTtcclxuXHQgLy/ojrflj5bmlbDmja7nsbvnmoToh6rlrprkuYnooajljZXlj4LmlbBcclxuXHR0aGlzLkhlYWRfVUlTdHlsZUdldEluZm8odGhpcy4kZGF0YS5DbHNJRCx0aGlzLiRkYXRhLnBhcmFtLklucHV0X1VJX1N0eWxlLklEKTtcclxuXHRcclxuXHQvL+WKoOi9veWIneWni+eVjOmdolxyXG5cdGlmKHRoaXMuJGRhdGEucGFyYW0uU2hvd19XZWxjb21fUGFnZSl7XHJcblx0ICB0aGlzLiRkYXRhLnBhcmFtLldlbGNvbWVfUGFnZS5JbWcgPSB0aGlzLiRkYXRhLnBhcmFtLldlbGNvbWVfUGFnZS5JbWcucmVwbGFjZSgvIC9nLCcrJyk7XHJcblx0ICB0aGlzLiRkYXRhLnBhcmFtLldlbGNvbWVfUGFnZS5XaWR0aCA9IHBhcnNlSW50KHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLldpZHRoKTtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLkhlaWdodCA9IHBhcnNlSW50KHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLkhlaWdodCk7XHJcblx0fVxyXG5cdC8v5Yqg6L29VGFi6aG1562+XHJcblx0dGhpcy4kZGF0YS5pdGVtcy5wdXNoKHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSk7XHJcblx0dGhpcy4kZGF0YS5pdGVtcy5wdXNoKHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSk7XHJcblx0dGhpcy5EZXRhaWwxX1VJc3R5bGVHZXRJbmZvKHRoaXMuQ2xzSUQsdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5VSV9TdHlsZS5JRCk7XHJcblx0dGhpcy5EZXRhaWwyX1VJc3R5bGVHZXRJbmZvKHRoaXMuQ2xzSUQyLHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uVUlfU3R5bGUuSUQpO1xyXG5cdFxyXG5cdGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0pO1xyXG5cdC8v6aG16Z2i5Yid5aeL5YyW6I635Y+W54Sm54K5XHJcblx0Ly8gdGhpcy5mb2N1c01hdGVyaWE9dHJ1ZTsgXHJcbiAgfSxcdFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGFzeW5jIEhlYWRfVUlTdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQvLyB0aGlzLmZvcm0gPSB0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbDtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmKTtcclxuXHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0ICAgIGlmKGVsZS51c2VEaWN0PT10cnVlKXsgLy/liKTmlq11c2VEaWN05piv5ZCm5L2/55So5a2X5YW4XHJcblx0XHRcdFx0ICAgICAgICBhd2FpdCB0aGlzLkRpY3RHZXRJbmZvKGVsZS5iaW5kLmRpY3QsaW5kZXgsJ21hc3QnKTtcclxuXHRcdFx0XHQgICAgfVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuICAgICAgICBcclxuICAgIH0sXHJcbiAgICBhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZi5TZWxCdXRfQ2hlY2tlZCA9IHRydWU7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vIHZhciBhYSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0ICAgIGlmKGVsZS51c2VEaWN0PT10cnVlKXsgLy/liKTmlq11c2VEaWN05piv5ZCm5L2/55So5a2X5YW4XHJcblx0XHRcdFx0ICAgICAgICBhd2FpdCB0aGlzLkRpY3RHZXRJbmZvKGVsZS5iaW5kLmRpY3QsaW5kZXgsJ3N1YicpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuICAgIGFzeW5jIERldGFpbDJfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmLlNlbEJ1dF9DaGVja2VkID0gdHJ1ZTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cdGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHR0aGlzLmRhdGE9W107XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvID17XHJcblx0XHRcdGRpY3RfaWQ6IGRpY3QuaWQsXHJcblx0XHRcdGRpY3RfbmFtZTogZGljdC5uYW1lXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RHZXRJbmZvJyxkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgbGlzdD1bXTtcclxuXHRcdFx0XHR2YXIgaXRlbU5hbWU9Jyc7XHJcblx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZGljdF9pdGVtX2xpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdCAgICBpZihpdGVtLmlzX2RlZmF1bHQ9PScxJylcclxuXHRcdFx0XHQgICAgICAgIGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xyXG5cdFx0XHRcdCAgICBsaXN0LnB1c2goe1xyXG5cdFx0XHRcdCAgICAgICAgdGV4dDppdGVtLnZhbHVlLFxyXG5cdFx0XHRcdCAgICAgICAgdmFsdWU6aXRlbS5uYW1lLFxyXG5cdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHRcdFx0aWYodHlwZT09J21hc3QnKXsvL+aciem7mOiupOWAvO+8jOaYvuekuum7mOiupOWAvFxyXG5cdFx0XHRcdFx0aWYoaXRlbU5hbWUpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlPWl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3Q9bGlzdDtcclxuXHRcdFx0XHRcdHZhciBoZWFkX3N0eWxlZGVmID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgkdGhpcy5oZWFkX3N0eWxlZGVmKSk7XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmPVtdO1xyXG5cdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZiA9IGhlYWRfc3R5bGVkZWY7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2V7XHJcblx0XHRcdFx0XHRpZihpdGVtTmFtZSl7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWU9aXRlbU5hbWU7XHJcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdD1saXN0O1xyXG5cdFx0XHRcdFx0dmFyIGRldGFpbDFfc3R5bGVkZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCR0aGlzLmRldGFpbDFfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWY9W107XHJcblx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmID0gZGV0YWlsMV9zdHlsZWRlZjtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor685LjFcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzlcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0XHJcblx0b250YXAoaXRlbSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHQvLyB2YXIgJGVsZSA9IGU7XHJcblx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0XHJcblx0XHRcdGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cdFx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIGF0dHIgPSBpdGVtLmZpZWxkSWQ7XHJcblx0XHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQ7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdCAgICAgICR0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0XHRpZihpdGVtLnZhbHVlKXsgLy/nrKzkuIDkuKrovpPlhaXmoYbkuI3kuLrnqbpcclxuXHRcdFx0XHRcdCR0aGlzLmZvY3VzTWF0ZXJpYSA9IHRydWU7IC8v5Yid5aeL5YyW77yM56ys5LqM5Liq6L6T5YWl5qGGZm9jdXPlsZ7mgKdcclxuXHRcdFx0XHRcdC8vIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdC8vIFx0JHRoaXMuZm9jdXNNYXRlcmlhPXRydWU7IC8v56ys5LqM5Liq6L6T5YWl5qGG6I635Y+W54Sm54K5XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdFx0XHR1bmkuaGlkZUtleWJvYXJkKCk7XHJcblx0XHRcdFx0XHRcdH0sMTAwMCk7XHJcblx0XHRcdFx0XHQvLyB9LDUwMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGljayhvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCk7XHJcblx0XHRcdCAgICAvLyB9XHJcblx0XHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGlja0NhbGxiYWNrKG9uU3VmZml4Q2xpY2tFdmVudCk7XHJcblx0XHRcdCAgICAvLyB9XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fSxcclxuXHRvbkVudGVyQ2hhbmdlKGl0ZW0peyAvL+Wbnui9pu+8jOeCueWHu+aMiemSru+8jOWPlua2iOiKgueCueS6i+S7tlxyXG5cdFx0Ly8gY29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRpZihpdGVtLm9sZHZhbHVlICE9IGl0ZW0udmFsdWUpe1xyXG5cdFx0ICAgIGl0ZW0ub2xkdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHR2YXIgb25DaGFuZ2VFdmVudCA9IGl0ZW0uYmluZC5vbkNoYW5nZUV2ZW50OyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHR2YXIgb25TdWZmaXhDbGlja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+Wbnuiwg1xyXG5cdFx0XHR2YXIgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdFxyXG5cdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHQgICAgICB0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdCAgICB9XHJcblx0XHQgICAgLy8gaWYob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2sob25TdWZmaXhDbGlja0NhbGxiYWNrRXZlbnQpO1xyXG5cdFx0ICAgIC8vIH1cclxuXHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrRXZlbnQuaWQpeyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHQgICAgLy8gICB0aGlzLm9uU3VmZml4Q2xpY2tDYWxsYmFjayhvblN1ZmZpeENsaWNrRXZlbnQpO1xyXG5cdFx0ICAgIC8vIH1cclxuXHRcdH1cclxuXHR9LFxyXG5cdC8vIOWGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdGFzeW5jIG9uQ2hhbmdlKGV2ZW50KSB7XHJcblx0ICAgIHRyeSB7XHJcblx0ICAgICAgICBpZiAoZXZlbnQuaWQpIHtcclxuXHQgICAgICAgICAgdmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0ICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHQgICAgICAgICAgdmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHQgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShcclxuXHQgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9ial9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0ICAgICAgICAgICAgICAgIGF0dHI6IGEsXHJcblx0ICAgICAgICAgICAgICAgIHZhbHVlOiBvYmpfYXR0clthXSB8fCBcIlwiLFxyXG5cdCAgICAgICAgICAgICAgfSkpXHJcblx0ICAgICAgICAgICAgKVxyXG5cdCAgICAgICAgICApO1xyXG5cdFx0XHQgIHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdCAgdmFyIGRhdGFJbmZvPXtcclxuXHQgICAgICAgICAgICBlZF90eXBlOiAwLFxyXG5cdFx0XHRcdHN0YXJ0X3RyYW5zYWN0aW9uOiAnJyxcclxuXHQgICAgICAgICAgICBjbGFzc19pZDogdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uY2xzSWQsXHJcblx0XHRcdFx0Y2xhc3NfbmFtZTogJycsXHJcblx0ICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmlkLFxyXG5cdFx0XHRcdGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0XHRcdGRhdGFfb2JqX2lkOiAnJyxcclxuXHQgICAgICAgICAgICBvYmpfYXR0cjogb2JqX2F0dHIsXHJcblx0XHRcdFx0cHJqX2lkOiAnJyxcclxuXHRcdFx0XHRyZWZfY2xzX2lkOiAnJyxcclxuXHRcdFx0XHRyZWxfb2JqX2lkOiAnJyxcclxuXHRcdFx0XHR1c2VyX2xvZ2luOiAnJyxcclxuXHRcdFx0XHRkYXRhX2pzb246ICcnLFxyXG5cdFx0XHRcdGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHRcdFx0ZXh0X2luZm86ICcnLFxyXG5cdFx0XHRcdGdsb2JhbF9hdHRyOiAnJyxcclxuXHQgICAgICAgICAgICBpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0ICAgICAgICAgIH07XHJcblx0XHRcdCAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0ICBcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdCAgXHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSByZXQucmVzdWx0OyBcclxuXHRcdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHRcdCAgICB2YXIgdGlwID0gcmVzdWx0LmVycl9pbmZvID8gdHlwZW9mIHJlc3VsdC5lcnJfaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5lcnJfaW5mbyA6IHJlc3VsdC5lcnJfaW5mby5qb2luKCc8YnIvPicpIDogJyc7XHJcblx0XHRcdFx0XHQgICAgaWYgKHJlc3VsdC5yZXQgPT0gODAxKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrcmVzdWx0LnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5pbmZvIDogcmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0XHRpZiAodGlwKSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRpZihyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCAmJiByZXN1bHQuYWN0aW9uKXtcclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImluc2VydF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgLy/liIbmi6PkuK1cclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEucGFyYW0uU2hvd19XZWxjb21fUGFnZT1mYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvblJvdyh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3N1YnRhYmxlX3BhZ2VfY29udGVudFwiKXsgIC8v5bey5YiG5oujXHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBhcmFtLlNob3dfV2VsY29tX1BhZ2U9ZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbHVlLmNsZWFyID09IHRydWUgJiYgJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg+MCAmJiB2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat5piv5ZCm5riF56m66aG1562+5YaF5a65LOato+WcqOWIhuaLo+aYr+WQpuacieaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogJ+ezu+e7n+ajgOa1i+WIsOacieW+heWIhuaLo+S4reeahOaVsOaNru+8jOe7p+e7reaTjeS9nOS8mua4heepuu+8jOaYr+WQpue7p+e7re+8nycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbHVlLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKXsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy52aWV3QWNlaW9uQ29udGVudCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gXHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJzZWxlY3Rfc3VidGFibGVfcGFnZV9yb3dcIil7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHZhbHVlID0ge1wicGFnZV9uYW1lXCI6XCLnoIHnm5jkuK1cIiwgXCJyb3dcIjp7XCJpZFwiOlwieHhcIn19XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoZWxlLGluZGV4KT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLmFjdGl2ZWxpc3RbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIGlmKGVsZS5mb3JtLm9iaklkID09IHZhbHVlLnJvdy5pZCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlLlNlbEJ1dF9DaGVja2VkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5hY3RpdmVfaWQgPSBlbGUuZm9ybS5odG1sb2JqSWQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/oh6rliqjmu5rliqjliLDmjIflrprlhYPntKBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgIC5zZWxlY3QoXCIjdGFicGFuZWxcIikvL+WvueW6lOWkluWxguiKgueCuVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAuYm91bmRpbmdDbGllbnRSZWN0KChjb250YWluZXIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIHVuaS5jcmVhdGVTZWxlY3RvclF1ZXJ5KClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIC5zZWxlY3QoXCIjdGFicGFuZWxcIitlbGUuZm9ybS5odG1sb2JqSWQpLy/nm67moIfoioLngrlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIC5ib3VuZGluZ0NsaWVudFJlY3QoKHRhcmdldCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHVuaS5wYWdlU2Nyb2xsVG8oe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgICAgIHNjcm9sbFRvcDogdGFyZ2V0LnRvcCAtIGNvbnRhaW5lci50b3AsLy/mu5rliqjliLDlrp7pmYXot53nprvmmK/lhYPntKDot53nprvpobbpg6jnmoTot53nprvlh4/ljrvmnIDlpJblsYLnm5LlrZDnmoTmu5rliqjot53nprtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgIH0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAuZXhlYygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICB9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmV4ZWMoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X2RsZ19hdHRyXCIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAvLyB2YWx1ZSA9IHtcImF0dHJcIjpcInh4eFwiLCBcInZhbHVlXCI6XCJ4eHhcIn1cclxuXHRcdFx0XHRcdFx0XHRcdCAgdmFyIGRhdGEgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgZGF0YS5mb3JFYWNoKGFzeW5jIChlbGUyLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgICBpZihlbGUuZmllbGRJZCA9PSBlbGUyLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgICBlbGUudmFsdWUgPSBlbGUyLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0ICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4zXCIsY29udGVudDpyZXN1bHQuaW5mbyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0ICBcdFx0XHJcblx0XHRcdCAgXHR9ZWxzZXtcclxuXHRcdFx0ICBcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0ICBcdH1cclxuXHRcdFx0ICB9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQgIFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHQgIFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0ICB9KTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgfSBjYXRjaCAoZXgpIHtcclxuXHQgICAgICAgIHZhciB0aXAgPSB0eXBlb2YgZXggPT0gXCJzdHJpbmdcIiA/IGV4IDogZXgubWVzc2FnZTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor680LjJcIixjb250ZW50Olwi5omn6KGM4oCc5YaF5a655Y+Y5YyW5ZCO4oCd5LqL5Lu25aSx6LSl77yaXCIgKyB0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFxyXG5cdCAgICB9XHJcblx0fSxcclxuXHQvL+WKoOi9veato+WcqOWIhuaLo+WGheWuuVxyXG5cdHZpZXdBY2Vpb25Sb3coZGF0YSx0eXBlKXtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGRhdGEpO1xyXG5cdCAgaWYoSlNPTi5zdHJpbmdpZnkoZGF0YS5yb3cpID09J3t9Jyl7XHJcblx0XHRyZXR1cm47XHJcblx0ICB9XHJcblx0ICBkYXRhLnJvdy5mb3JFYWNoKHJvdz0+e1xyXG5cdCAgICB2YXIgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0aWYodHlwZSl7IC8v56Gu5a6a5ZCO6ISa5pys6L+b5YWl5Yqg6L295bey5YiG5ouj5pWw5o2uXHJcblx0XHQgICAgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYpO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGlmKGRhdGEucGFnZV9uYW1lID09IHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5bey5YiG5oujXHJcblx0XHRcdCAgc3R5bGVTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYpOyAvL+W+heWIhuaLo1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0ICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdFx0ZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCA9IHJvdy5pZDtcclxuXHRcdGRldGFpbFN0eWxlLmZvcm0uaHRtbG9iaklkID0gcm93LmlkP3Jvdy5pZC5yZXBsYWNlKC8tL2csJycpLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyk6J251bGwnO1xyXG5cdFx0ZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IHJvdy5hdHRycztcclxuXHQgICAgcm93LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdCAgICAgICAgZGV0YWlsU3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+e1xyXG5cdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgfSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0ICAgICAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICB9KTtcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICB9KTtcclxuXHQgICAgfSk7XHJcblx0XHRcclxuXHRcdGlmKHR5cGUpeyAvL+ehruWumuWQjuiEmuacrOi/m+WFpeWKoOi9veW3suWIhuaLo+aVsOaNrlxyXG5cdFx0ICAgIHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTtcclxuXHRcdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QpO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGlmKGRhdGEucGFnZV9uYW1lID09IHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5bey5YiG5oujXHJcblx0XHRcdCAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHRcdCAgICAvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHRcdFx0dGhpcy5hY3RpdmVsaXN0LnB1c2goe2FjdGl2ZTpmYWxzZX0pO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHQgIH0pO1xyXG5cdH0sXHJcblx0Ly/liqDovb3lt7LliIbmi6PlhoXlrrlcclxuXHR2aWV3QWNlaW9uQ29udGVudChkYXRhKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRpZihKU09OLnN0cmluZ2lmeShkYXRhLmNvbnRlbnQpID09J3t9Jyl7XHJcblx0XHQgIHJldHVybjtcclxuXHRcdH1cclxuXHQgICAgZGF0YS5jb250ZW50LmZvckVhY2goY29udD0+e1xyXG5cdCAgICAgICAgdmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZGV0YWlsMl9zdHlsZWRlZik7IC8v5bey5YiG5oujXHJcblx0XHRcdGlmKGRhdGEucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W+heWIhuaLo1xyXG5cdFx0XHQgIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkoJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7IC8v5b6F5YiG5oujXHJcblx0XHRcdH1cclxuXHQgICAgICAgIHZhciBkZXRhaWxTdHlsZSA9IEpTT04ucGFyc2Uoc3R5bGVTdHIpO1xyXG5cdFx0XHRkZXRhaWxTdHlsZS5TZWxCdXRfQ2hlY2tlZCA9IGRhdGEuY2hlY2tib3g/P3RydWU7XHJcblx0XHRcdGRldGFpbFN0eWxlLmZvcm0ub2JqSWQgPSBjb250LmlkO1xyXG5cdFx0XHRkZXRhaWxTdHlsZS5mb3JtLmh0bWxvYmpJZCA9IGNvbnQuaWQ/Y29udC5pZC5yZXBsYWNlKC8tL2csJycpLnJlcGxhY2UoJ3snLCcnKS5yZXBsYWNlKCd9JywnJyk6J251bGwnO1xyXG5cdCAgICAgICAgZGV0YWlsU3R5bGUuZm9ybS5hdHRycyA9IGNvbnQuYXR0cnM7XHJcblx0ICAgICAgICBjb250LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdCAgICAgICAgICBkZXRhaWxTdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlPT57IFxyXG5cdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0ICAgICAgICAgICAgfSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0ICAgICAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgICAgICB9KTtcclxuXHQgICAgICAgICAgICB9XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfSk7XHJcblx0XHRcdFxyXG5cdFx0XHRpZihkYXRhLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKXsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0ICAvL+WmguaenCBjbGVhciA9IGZhbHNlIOWImeS4jemcgOimgea4hemZpO+8jOagueaNrmlk5Yik5pat5piv5ZCm5a2Y5Zyo77yM5LiN5a2Y5Zyo5o+S5YWl5Yiw6aG16Z2i77yM5aaC5p6c5a2Y5Zyo55So5paw55qE5bGe5oCn6KaG55uWXHJcblx0XHRcdCAgaWYoZGF0YS5jbGVhciA9PSBmYWxzZSl7IFxyXG5cdFx0XHQgICAgdmFyIGlzZmxhZyA9IHRydWU7XHJcblx0XHRcdCAgICAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKHN0eWxlLGluZGV4KT0+e1xyXG5cdFx0XHQgICAgICBpZihzdHlsZS5mb3JtLm9iaklkID09IGRldGFpbFN0eWxlLmZvcm0ub2JqSWQpe1xyXG5cdFx0XHQgICAgICAgIGNvbnQuYXR0cnMuZm9yRWFjaChhdHRyPT57XHJcblx0XHRcdCAgICAgICAgICBzdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goZWxlPT57IFxyXG5cdFx0XHQgICAgICAgICAgICBpZihlbGUubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHQgICAgICAgICAgICAgIGlmKGVsZS5maWVsZElkID09IGF0dHIuYXR0cikgZWxlLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0ICAgICAgICAgICAgfSBlbHNlIGlmKGVsZS5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdCAgICAgICAgICAgICAgZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdFx0XHQgICAgICAgICAgICAgICAgaWYoY29sKXtcclxuXHRcdFx0ICAgICAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBjb2wudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHQgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHQgICAgICAgICAgICAgIH0pO1xyXG5cdFx0XHQgICAgICAgICAgICB9XHJcblx0XHRcdCAgICAgICAgICB9KTtcclxuXHRcdFx0ICAgICAgICB9KTtcclxuXHRcdFx0ICAgICAgICBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0ICAgICAgfVxyXG5cdFx0XHQgICAgfSk7XHJcblx0XHRcdCAgICBpZihpc2ZsYWcpICR0aGlzLmRldGFpbDFTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7IC8v5b6F5YiG5oujXHJcblx0XHRcdCAgfWVsc2V7XHJcblx0XHRcdCAgICAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpOyAvL+W+heWIhuaLo1xyXG5cdFx0XHQgIH1cclxuXHRcdFx0ICAkdGhpcy5hY3RpdmVsaXN0LnB1c2goe2FjdGl2ZTpmYWxzZX0pO1xyXG5cdFx0XHQgIC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0ICBpZihkYXRhLmNsZWFyID09IGZhbHNlKXtcclxuXHRcdFx0ICAgIC8v5aaC5p6cIGNsZWFyID0gZmFsc2Ug5YiZ5LiN6ZyA6KaB5riF6Zmk77yM5qC55o2uaWTliKTmlq3mmK/lkKblrZjlnKjvvIzkuI3lrZjlnKjmj5LlhaXliLDpobXpnaLvvIzlpoLmnpzlrZjlnKjnlKjmlrDnmoTlsZ7mgKfopobnm5ZcclxuXHRcdFx0ICAgIHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHQgICAgJHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdC5mb3JFYWNoKChzdHlsZSxpbmRleCk9PntcclxuXHRcdFx0ICAgICAgaWYoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxTdHlsZS5mb3JtLm9iaklkKXtcclxuXHRcdFx0ICAgICAgICBjb250LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdFx0XHQgICAgICAgICAgc3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+eyBcclxuXHRcdFx0ICAgICAgICAgICAgaWYoZWxlLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHQgICAgICAgICAgICAgIGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0XHRcdCAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgICAgICAgICB9KTtcclxuXHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHQgICAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdCAgICAgIH1cclxuXHRcdFx0ICAgIH0pO1xyXG5cdFx0XHQgICAgaWYoaXNmbGFnKSAkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpOyAvL+W3suWIhuaLo1xyXG5cdFx0XHQgIH1lbHNle1xyXG5cdFx0XHQgICAgJHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTsgLy/lt7LliIbmi6NcclxuXHRcdFx0ICB9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHR9XHJcblx0ICAgIH0pO1xyXG5cdH0sXHJcblx0b25DbGlja0l0ZW0oZSkgeyAvL+mAieaLqemhteetvlxyXG5cdFx0Ly8gY29uc29sZS5sb2coZSk7XHJcblx0XHR0aGlzLmN1cnJlbnQgPSBlLmN1cnJlbnRJbmRleFxyXG5cdH0sXHJcblx0b25EZXRhaWwxRW50ZXJDaGFuZ2UoaXRlbSl7ICAvL+WIhuaLo+S4reagt+W8j+Wbnui9puS6i+S7tlxyXG5cdCAgICBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHR9LFxyXG5cdGRlbEl0ZW0oaW5kZXgpeyAgLy/liKDpmaTliIbmi6PkuK3moLflvI/pnaLmnb9cclxuXHQgICAgdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTtcclxuXHR9LFxyXG4gICAgZGVsRGF0YU9iaihzdHlsZSxpbmRleCl7ICAvL+WIoOmZpOW3suWIhuaLo+aVsFxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhzdHlsZSk7XHJcblx0ICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdCAgdW5pLnNob3dNb2RhbCh7XHJcblx0ICBcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHQgIFx0Y29udGVudDogJ+ehruWumuWIoOmZpOivpeW3suWIhuaLo+aVsOaNru+8gScsXHJcblx0ICBcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHQgIFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHR2YXIgb2JqSUQ9c3R5bGUuZm9ybS5vYmpJZDtcclxuXHRcdFx0XHRpZighc3R5bGUuZm9ybS5vYmpJZC5pbmNsdWRlcygneycpKSBvYmpJRCA9ICd7JytzdHlsZS5mb3JtLm9iaklkKyd9JztcclxuXHRcdFx0XHQgICAgICAgICAgXHJcblx0XHRcdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0XHRcdGNsYXNzX2lkOnN0eWxlLmZvcm0uY2xzSWQsXHJcblx0XHRcdFx0XHRjbGFzc19uYW1lOicnLFxyXG5cdFx0XHRcdFx0b2JqX2lkOm9iaklEXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhkYXRhSW5mbyk7XHJcblx0XHRcdFx0JHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdkYXRhT2JqRGVsJyxkYXRhSW5mbykudGhlbihyZXQ9PntcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0JHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuWIoOmZpOaIkOWKn++8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzVcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzUuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdCAgXHRcdH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG5cdFx0XHRcdFxyXG5cdCAgXHRcdH1cclxuXHQgIFx0fVxyXG5cdCAgfSk7XHJcbiAgICAgIFxyXG4gICAgfSxcclxuXHRvblBhbmVsQ2xpY2sodmFsdWUpeyAvL+eCueWHu+mdouadv+mrmOS6ruaYvuekulxyXG5cdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xyXG5cdFx0dGhpcy5hY3RpdmVfaWQ9Jyc7XHJcblx0ICAgIHRoaXMuYWN0aXZlbGlzdC5mb3JFYWNoKGVsZT0+e1xyXG5cdCAgICAgICAgZWxlLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdCAgICB9KTtcclxuXHQgICAgdGhpcy5hY3RpdmVsaXN0W3ZhbHVlXS5hY3RpdmUgPSB0cnVlO1xyXG5cdFx0Ly8gY29uc29sZS5sb2codGhpcy4kZGF0YS5hY3RpdmVsaXN0KTtcclxuXHR9LFxyXG5cdFxyXG5cdC8v56Gu5a6aXHJcblx0b2soKXtcclxuICAgICAgICB0aGlzLkJlZm9yZV9PS19FdmVudCA9IHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uQmVmb3JlX29rO1xyXG4gICAgICAgIHRoaXMuQWZ0ZXJfT0tfRXZlbnQgPSB0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkFmdGVyX29rO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuQmVmb3JlX09LX0V2ZW50KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLkFmdGVyX09LX0V2ZW50KTtcclxuXHQgICAgaWYodGhpcy4kZGF0YS5CZWZvcmVfT0tfRXZlbnQuSUQpIC8v5piv5ZCm5pyJ56Gu5a6a5YmN5LqL5Lu2XHJcblx0ICAgICAgICB0aGlzLnNhdmEodGhpcy4kZGF0YS5CZWZvcmVfT0tfRXZlbnQpO1xyXG5cdCAgICBlbHNlIGlmKHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQuSUQpICAvL+aYr+WQpuacieehruWumuWQjuS6i+S7tlxyXG5cdCAgICAgICAgdGhpcy5zYXZhKHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQpO1xyXG5cdH0sXHJcblx0c2F2YShldmVudCl7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdCAgICBpZih0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoPT0wKXtcclxuXHQgICAgICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6XCLmsqHmnInlvoXliIbmi6PnmoTmlbDmja7vvIFcIixzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHQgICAgICByZXR1cm4gZmFsc2U7XHJcblx0ICAgIH1cclxuXHQgICAgLy/ojrflj5booajlpLTlsZ7mgKdcclxuXHQgICAgdmFyIGhlYWRfYXR0ciA9IHt9O1xyXG5cdCAgICB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdCAgICAgIGhlYWRfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHQgICAgfSk7XHJcblx0ICAgIC8vIGNvbnNvbGUubG9nKGhlYWRfYXR0cik7XHJcblx0ICAgIC8v6I635Y+W5q2j5Zyo5YiG5ouj5bGe5oCnXHJcblx0ICAgIHZhciBkZXRhaWxBdHRyTGlzdCA9IFtdO1xyXG5cdCAgICB0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaChzdHlsZT0+e1xyXG5cdCAgICAgIHZhciBkZXRhaWxfYXR0cj17fTtcclxuXHRcdCAgc3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdCAgICAgICAgaWYoaXRlbS5uYW1lID09IFwiTGF5b3V0XCIpeyAgLy/liKTmlq3mmK/lkKbmmK/moIXmoI/moLzlvI9cclxuXHQgICAgICAgICAgaXRlbS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2xzID0+IHtcclxuXHQgICAgICAgICAgICBpZihjb2xzIT1udWxsKSBkZXRhaWxfYXR0cltjb2xzLmZpZWxkSWRdID0gY29scy52YWx1ZTtcclxuXHQgICAgICAgICAgfSk7XHJcblx0ICAgICAgICB9ZWxzZVxyXG5cdCAgICAgICAgICBkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHQgICAgICB9KTtcclxuXHRcdCAgXHJcbiAgICAgICAgIGRldGFpbF9hdHRyWydpZCddID0gc3R5bGUuZm9ybS5vYmpJZDtcclxuXHRcdCAgaWYoJHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uU2VsZWN0X0J1dHRvbj09dHJ1ZSl7IC8v5Yik5pat6YCJ5oup5oyJ6ZKu5piv5ZCm5Li6dHJ1ZVxyXG5cdFx0ICAgIGlmKHN0eWxlLlNlbEJ1dF9DaGVja2VkPT10cnVlKSBcclxuXHRcdCAgICAgIGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG5cdFx0ICB9IGVsc2UgXHJcblx0XHQgICAgZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0XHQvL+iOt+WPluato+WcqOWIhuaLo+mHjOayoeacieaYvuekuueahOWtl+autVxyXG5cdFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHRcdCAgc3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0ICAgIGZvcih2YXIga2V5IGluIGRldGFpbEF0dHJMaXN0KXtcclxuICAgICAgICAgICAgICBpZihzdHlsZS5mb3JtLm9iaklkID09IGRldGFpbEF0dHJMaXN0W2tleV1bJ2lkJ10pe1xyXG5cdFx0XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGV0YWlsQXR0ckxpc3Rba2V5XSk7XHJcblx0XHRcdFx0dmFyIGlzZmxhZyA9IHRydWU7XHJcblx0XHRcdFx0a2V5cy5mb3JFYWNoKChlbGUpID0+IHtcclxuXHRcdFx0XHRcdGlmKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGlmKGlzZmxhZykge1xyXG5cdFx0XHRcdFx0ZGV0YWlsQXR0ckxpc3RbYXR0ci5hdHRyXSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0ICAgICAgfVxyXG5cdFx0XHR9XHJcblx0XHQgIH0pO1xyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0IC8vICAgIHJldHVybjtcclxuXHRcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0XHQgICAgSlNPTi5zdHJpbmdpZnkoXHJcblx0XHQgICAgICBPYmplY3Qua2V5cyhoZWFkX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgYXR0cjogYSxcclxuXHRcdCAgICAgICAgdmFsdWU6IGhlYWRfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0ICAgICAgfSkpXHJcblx0XHQgICAgKVxyXG5cdFx0KTtcclxuXHRcdCB2YXIganNvbmxpc3Q9W107XHJcblx0XHRkZXRhaWxBdHRyTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuXHRcdCAgICBqc29ubGlzdC5wdXNoKHtcclxuXHRcdCAgICAgIGlkOicnLFxyXG5cdFx0ICAgICAgYXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgYXR0cjogYSxcclxuXHRcdCAgICAgICAgdmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgIH0pKVxyXG5cdFx0ICAgIH0pO1xyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHQkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29ubGlzdCwnMScpO1xyXG5cdFx0Ly8ganNvbmxpc3QuZm9yRWFjaChhc3luYyAoanNvbixrZXkpPT57XHJcblx0XHQvLyBcdGF3YWl0ICR0aGlzLnJ1bkN1c3RvbUV2ZW50KGV2ZW50LGlucHV0X3BhcmFtLGpzb24sJzEnKTtcclxuXHRcdC8vIH0pO1xyXG5cdH0sXHJcbiAgICAvL+ehruWumlxyXG4gICAgb2syKCl7XHJcbiAgICAgICAgdGhpcy5CZWZvcmVfT0tfRXZlbnQgPSB0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLkJlZm9yZV9vaztcclxuICAgICAgICB0aGlzLkFmdGVyX09LX0V2ZW50ID0gdGhpcy5wYXJhbS5TdWJfUGFnZVsxXS5BZnRlcl9vaztcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLkJlZm9yZV9PS19FdmVudCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5BZnRlcl9PS19FdmVudCk7XHJcbiAgICAgICAgaWYodGhpcy4kZGF0YS5CZWZvcmVfT0tfRXZlbnQuSUQpIC8v5piv5ZCm5pyJ56Gu5a6a5YmN5LqL5Lu2XHJcbiAgICAgICAgICAgIHRoaXMuc2F2YTIodGhpcy4kZGF0YS5CZWZvcmVfT0tfRXZlbnQpO1xyXG4gICAgICAgIGVsc2UgaWYodGhpcy4kZGF0YS5BZnRlcl9PS19FdmVudC5JRCkgIC8v5piv5ZCm5pyJ56Gu5a6a5ZCO5LqL5Lu2XHJcbiAgICAgICAgICAgIHRoaXMuc2F2YTIodGhpcy4kZGF0YS5BZnRlcl9PS19FdmVudCk7XHJcbiAgICB9LFxyXG4gICAgc2F2YTIoZXZlbnQpe1xyXG4gICAgXHR2YXIgJHRoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmKHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgdW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5rKh5pyJ5b6F5YiG5ouj55qE5pWw5o2u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v6I635Y+W6KGo5aS05bGe5oCnXHJcbiAgICAgICAgdmFyIGhlYWRfYXR0ciA9IHt9O1xyXG4gICAgICAgIHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coaGVhZF9hdHRyKTtcclxuICAgICAgICAvL+iOt+WPluW3suWIhuaLo+WxnuaAp1xyXG4gICAgICAgIHZhciBkZXRhaWxBdHRyTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKHN0eWxlPT57XHJcbiAgICAgICAgICB2YXIgZGV0YWlsX2F0dHI9e307XHJcbiAgICBcdCAgc3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZihpdGVtLm5hbWUgPT0gXCJMYXlvdXRcIil7ICAvL+WIpOaWreaYr+WQpuaYr+agheagj+agvOW8j1xyXG4gICAgICAgICAgICAgIGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihjb2xzIT1udWxsKSBkZXRhaWxfYXR0cltjb2xzLmZpZWxkSWRdID0gY29scy52YWx1ZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfWVsc2VcclxuICAgICAgICAgICAgICBkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgXHQgIFxyXG4gICAgXHQgIGRldGFpbF9hdHRyWydpZCddID0gc3R5bGUuZm9ybS5vYmpJZDtcclxuICAgIFx0ICBpZigkdGhpcy5wYXJhbS5TdWJfUGFnZVsxXS5TZWxlY3RfQnV0dG9uPT10cnVlKXsgLy/liKTmlq3pgInmi6nmjInpkq7mmK/lkKbkuLp0cnVlXHJcbiAgICBcdCAgICBpZihzdHlsZS5TZWxCdXRfQ2hlY2tlZD09dHJ1ZSkgXHJcbiAgICBcdCAgICAgIGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG4gICAgXHQgIH0gZWxzZSBcclxuICAgIFx0ICAgIGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuICAgIFx0Ly/ojrflj5blt7LliIbmi6Pph4zmsqHmnInmmL7npLrnmoTlrZfmrrVcclxuICAgIFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuICAgIFx0ICBzdHlsZS5mb3JtLmF0dHJzLmZvckVhY2goYXR0ciA9PiB7XHJcbiAgICBcdCAgICBmb3IodmFyIGtleSBpbiBkZXRhaWxBdHRyTGlzdCl7XHJcbiAgICAgICAgICAgICAgaWYoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxBdHRyTGlzdFtrZXldWydpZCddKXtcclxuICAgIFx0ICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRldGFpbEF0dHJMaXN0W2tleV0pO1xyXG4gICAgXHQgICAgICAgIHZhciBpc2ZsYWcgPSB0cnVlO1xyXG4gICAgXHQgICAgICAgIGtleXMuZm9yRWFjaCgoZWxlKSA9PiB7XHJcbiAgICBcdCAgICAgICAgICBpZihlbGUgPT0gYXR0ci5hdHRyKSBpc2ZsYWcgPSBmYWxzZTtcclxuICAgIFx0ICAgICAgICB9KTtcclxuICAgIFx0ICAgICAgICBpZihpc2ZsYWcpIHtcclxuICAgIFx0ICAgICAgICAgIGRldGFpbEF0dHJMaXN0W2F0dHIuYXR0cl0gPSBhdHRyLnZhbHVlO1xyXG4gICAgXHQgICAgICAgIH1cclxuXHRcdFx0ICB9XHJcbiAgICBcdCAgICB9IFxyXG4gICAgXHQgIH0pO1xyXG4gICAgXHR9KTtcclxuICAgIFx0Ly8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG4gICAgIC8vICAgIHJldHVybjtcclxuICAgIFx0dmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuICAgIFx0ICAgIEpTT04uc3RyaW5naWZ5KFxyXG4gICAgXHQgICAgICBPYmplY3Qua2V5cyhoZWFkX2F0dHIpLm1hcCgoYSkgPT4gKHtcclxuICAgIFx0ICAgICAgICBhdHRyOiBhLFxyXG4gICAgXHQgICAgICAgIHZhbHVlOiBoZWFkX2F0dHJbYV0gfHwgXCJcIixcclxuICAgIFx0ICAgICAgfSkpXHJcbiAgICBcdCAgICApXHJcbiAgICBcdCk7XHJcbiAgICBcdCB2YXIganNvbmxpc3Q9W107XHJcbiAgICBcdGRldGFpbEF0dHJMaXN0LmZvckVhY2goYXR0cj0+e1xyXG4gICAgXHQgICAganNvbmxpc3QucHVzaCh7XHJcbiAgICBcdCAgICAgIGlkOicnLFxyXG4gICAgXHQgICAgICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG4gICAgXHQgICAgICAgIGF0dHI6IGEsXHJcbiAgICBcdCAgICAgICAgdmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuICAgIFx0ICAgICAgfSkpXHJcbiAgICBcdCAgICB9KTtcclxuICAgIFx0fSk7XHJcbiAgICBcdC8vIGNvbnNvbGUubG9nKGpzb25saXN0KTtcclxuICAgIFx0JHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbmxpc3QsJzInKTtcclxuICAgIFx0Ly8ganNvbmxpc3QuZm9yRWFjaChhc3luYyAoanNvbixrZXkpPT57XHJcbiAgICBcdC8vIFx0YXdhaXQgJHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbiwnMicpO1xyXG4gICAgXHQvLyB9KTtcclxuICAgIH0sXHJcbiAgICAvL+aJp+ihjOehruWumuiEmuacrFxyXG4gICAgYXN5bmMgcnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbix0eXBlKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YV9qc29uID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShqc29uKVxyXG5cdFx0KTtcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IDAsXHJcbiAgICAgICAgICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuQ2xzSUQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogZXZlbnQuSUQsXHJcblx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICBkYXRhX29ial9pZDogJycsXHJcblx0XHQgIG9ial9hdHRyOiAnJyxcclxuXHRcdCAgcHJqX2lkOiAnJyxcclxuXHRcdCAgcmVmX2Nsc19pZDogJycsXHJcblx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiAnJyxcclxuXHRcdCAgZGF0YV9qc29uOiBkYXRhX2pzb24sXHJcblx0XHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHQgIGV4dF9pbmZvOiAnJyxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6ICcnLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXM9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0aWYgKHJlcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IHJlcy5yZXN1bHQ7IFxyXG5cdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrcmVzdWx0LnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5pbmZvIDogcmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZihyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCl7XHJcblx0XHRcdFx0XHQgIGlmKHJlc3VsdC5hY3Rpb24pe1xyXG5cdFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRcdFx0XHQgIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIil7IC8v5YiG5ouj5LitXHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHQvL+WKoOi9veW+heWIhuaLo+aVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUsJycpO1xyXG5cdFx0XHRcdFx0XHRcdC8vICR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUsJ2FkZCcpO1xyXG5cdFx0XHRcdFx0XHRcdC8v5riF56m65p2h56CB5YaF5a65XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goKGl0ZW0saW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW0uZmllbGRJZCAhPSBcIlNfQ05UUl9DT0RFXCIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBpdGVtLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGl0ZW0ub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2l0ZW0uZmllbGRJZF0gPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvL+a4hemZpOW+heWIhuaLo+S4reaIkOWKn+eahOaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoc3R5bGUsaW5kZXgpPT57XHJcblx0XHRcdFx0XHRcdFx0ICBpZihzdHlsZS5mb3JtLml0ZW1zWzBdLmZpZWxkSWQgPT0ganNvbi5hdHRyc1swXS5hdHRyICYmIHN0eWxlLmZvcm0uaXRlbXNbMF0udmFsdWUgPT0ganNvbi5hdHRyc1swXS52YWx1ZSl7IFxyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuWIhuaLo+aIkOWKn1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHQgIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3N1YnRhYmxlX3BhZ2VfY29udGVudFwiKXsgIC8v5Yqg6L295aSa5p2h5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0JHRoaXMucGFyYW0uU2hvd19XZWxjb21fUGFnZT1mYWxzZTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHZhbHVlLmNsZWFyID09IHRydWUgJiYgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg+MCl7IC8v5Yik5pat5piv5ZCm5riF56m66aG1562+5YaF5a65LOW+heWIhuaLo+aYr+WQpuacieaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogJ+ezu+e7n+ajgOa1i+WIsOacieW+heWIhuaLo+S4reeahOaVsOaNru+8jOe7p+e7reaTjeS9nOS8mua4heepuu+8jOaYr+WQpue7p+e7re+8nycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCAgfSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJyZW1vdmVfc3VidGFibGVfcGFnZV9yb3dcIil7ICAvL+a4hemZpOmdouadv+S4reaMh+Wummlk55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTsgXHJcblx0XHRcdFx0XHRcdFx0aWYodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLnBhZ2UuU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdFx0XHRcdFx0XHQvL+a4hemZpOmdouadv+S4reaMh+Wummlk55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZS5yb3cuZm9yRWFjaChyb3c9PntcclxuXHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChlbGUsaW5kZXgpPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVsZS5mb3JtLm9iaklkID09IHJvdy5pZCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7IFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQgIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQgIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicmVmcmVzaFwiKXsgIC8v5Yi35pawXHJcblx0XHRcdFx0XHRcdCAgICB2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdC8v5riF6Zmk5b6F5YiG5ouj5oiQ5Yqf55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0Ly8gdmFsdWUuZm9yRWFjaCgodmFsX2lkLGtleSk9PntcclxuXHRcdFx0XHRcdFx0XHQvLyAgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChzdHlsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0XHQvLyAgICAgaWYoc3R5bGUuZm9ybS5vYmpJZCA9PSB2YWxfaWQpeyBcclxuXHRcdFx0XHRcdFx0XHQvLyAgICAgICB0aGlzLmRldGFpbDFTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LDEpO1xyXG5cdFx0XHRcdFx0XHRcdC8vICAgICAgIHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHQvLyAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdC8vICAgfSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdFx0Ly/liLfmlrDlvZPliY3pobXpnaJcclxuXHRcdFx0XHRcdFx0XHR1bmkucmVkaXJlY3RUbyh7XHJcblx0XHRcdFx0XHRcdFx0XHR1cmw6Jy4uL21vZGFsLzU2MDI/cGFyYW09JytKU09OLnN0cmluZ2lmeSh0aGlzLiRkYXRhLnBhcmFtKStcIiZ0aXRsZW5hbWU9XCIrdGhpcy4kZGF0YS50aXRsZVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHQgIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwicHJvbXB0XCIpeyAgLy/miZPlvIDns7vnu5/mj5DnpLrlvLnmoYZcclxuXHRcdFx0XHRcdFx0ICAgIHZhciB2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW0udmFsdWUuZm9yRWFjaChlbGU9PntcclxuXHRcdFx0XHRcdFx0XHRcdGlmKHZhbHVlKSB2YWx1ZSs9J1xcbic7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSs9ZWxlO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi57O757uf5o+Q56S6XCIsY29udGVudDp2YWx1ZSxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5YWz6ZetXCJ9KTtcclxuXHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0ICB9ZWxzZXtcclxuXHRcdFx0XHRcdFx0aWYoJHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQuSUQgIT0gZXZlbnQuSUQpeyAvL+WIpOaWreW9k+WJjeS6i+S7tuaYr+WQpuaYr+ehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdGlmKHR5cGU9PScxJyl7XHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zYXZhKCR0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTsgLy/miafooYznoa7lrprlkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNhdmEyKCR0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTsgLy/miafooYznoa7lrprlkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3Q9W107XHJcblx0XHRcdFx0XHRcdGlmKHJlc3VsdC5pbmZvKXtcclxuXHRcdFx0XHRcdFx0ICB1bmkuc2hvd01vZGFsKHt0aXRsZTpcIuaPkOekulwiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOFwiLGNvbnRlbnQ6cmVzLmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHQgICAgdmFyIHRpcCA9IHR5cGVvZiBleCA9PSBcInN0cmluZ1wiID8gZXggOiBleC5lcnJNc2c7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vOC4xXCIsY29udGVudDpcIuaJp+ihjOKAnOehruWumuWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRcclxuXHRjYW5jZWwoZSl7IC8v5Y+W5raIXHJcblx0XHR1bmkubmF2aWdhdGVCYWNrKHtcclxuXHRcdFx0ZGVsdGE6MSAvL+i/lOWbnuWxguaVsO+8jDLliJnkuIrkuIrpobVcclxuXHRcdH0pO1xyXG5cdH0sXHJcbiAgfSxcclxufTtcclxuPC9zY3JpcHQ+XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///196\n"); |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../../components/js-base64/base64.js */ 65));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n modules: {\n Base64: _base.default\n },\n data: function data() {\n return {\n title: '分拣',\n ClsID: \"Sorting_Detail\",\n ClsID2: \"Sorting_Result\",\n param: {},\n focusFieldId: \"\",\n head_styledef: {\n form: {\n items: []\n }\n },\n detail1_styledef: {},\n detail1StyleDefList: [],\n detail2_styledef: {},\n detail2StyleDefList: [],\n //分页数据\n detail1ExtData: {},\n detail2ExtData: {},\n //分页扩展数据\n // 分段器数据\n current: 0,\n Before_OK_Event: {},\n After_OK_Event: {},\n Before_Del_Event: {},\n After_Del_Event: {},\n items: [],\n active_id: '',\n activelist: []\n };\n },\n onLoad: function onLoad(options) {\n // console.log(options);\n uni.setNavigationBarTitle({\n title: options.titlename\n }); //设置顶部标题 \n this.$data.title = options.titlename;\n this.$data.param = JSON.parse(options.param);\n // console.log(this.$data.param);\n //获取数据类的自定义表单参数\n this.Head_UIStyleGetInfo(this.$data.ClsID, this.$data.param.Input_UI_Style.ID);\n\n //加载初始界面\n if (this.$data.param.Show_Welcom_Page) {\n this.$data.param.Welcome_Page.Img = this.$data.param.Welcome_Page.Img.replace(/ /g, '+');\n this.$data.param.Welcome_Page.Width = parseInt(this.$data.param.Welcome_Page.Width);\n this.$data.param.Welcome_Page.Height = parseInt(this.$data.param.Welcome_Page.Height);\n }\n //加载Tab页签\n this.$data.items.push(this.$data.param.Sub_Page[0].Name);\n this.$data.items.push(this.$data.param.Sub_Page[1].Name);\n this.Detail1_UIstyleGetInfo(this.ClsID, this.$data.param.Sub_Page[0].UI_Style.ID);\n this.Detail2_UIstyleGetInfo(this.ClsID2, this.$data.param.Sub_Page[1].UI_Style.ID);\n __f__(\"log\", this.$data.param, \" at pages/modal/5602.vue:456\");\n },\n methods: {\n setData: function setData(obj) {\n var that = this;\n var keys = [];\n var val, data;\n Object.keys(obj).forEach(function (key) {\n keys = key.split(\".\");\n val = obj[key];\n data = that.$data;\n keys.forEach(function (key2, index) {\n if (index + 1 == keys.length) {\n that.$set(data, key2, val);\n } else {\n if (!data[key2]) {\n that.$set(data, key2, {});\n }\n }\n data = data[key2];\n });\n });\n },\n Head_UIStyleGetInfo: function Head_UIStyleGetInfo(class_id, style_id) {\n var _this = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n //获取自定义表单样式\n $this = _this;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.head_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n // this.form = this.head_styledef.form.model;\n // console.log($this.$data.head_styledef);\n $this.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ele, index) {\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context.next = 3;\n break;\n }\n _context.next = 3;\n return _this.DictGetInfo(ele.bind.dict, index, 'mast');\n case 3:\n if ($this.focusFieldId == \"\") {\n if (ele.name == 'Input' || ele.name == 'InputNumber') {\n $this.setData({\n focusFieldId: ele.fieldId\n });\n }\n }\n case 4:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误1\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误1.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n Detail1_UIstyleGetInfo: function Detail1_UIstyleGetInfo(class_id, style_id) {\n var _this2 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n //获取自定义表单样式\n $this = _this2;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this2.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail1_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail1_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail1_styledef);\n // $this.$data.detail1StyleDefList.push($this.$data.detail1_styledef);\n // var aa = JSON.stringify(this.detail1_styledef);\n // $this.$data.detail1StyleDefList.push(JSON.parse(aa));\n // console.log($this.$data.detail1StyleDefList);\n $this.detail1_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(ele, index) {\n return _regenerator.default.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(ele.useDict == true)) {\n _context3.next = 3;\n break;\n }\n _context3.next = 3;\n return _this2.DictGetInfo(ele.bind.dict, index, 'sub');\n case 3:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n }());\n } else {\n uni.showModal({\n title: \"错误2\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误2.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4);\n }))();\n },\n Detail2_UIstyleGetInfo: function Detail2_UIstyleGetInfo(class_id, style_id) {\n var _this3 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n //获取自定义表单样式\n $this = _this3;\n dataInfo = {\n class_id: class_id,\n ui_style_id: style_id\n };\n _this3.$store.dispatch('UIStyleGetInfo', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var styledef = \"\";\n if (ret.result.style_def) {\n //mobox2的style_def是json字符串\n styledef = ret.result.style_def.replace(/\\\\/g, \"\");\n //mobox3的style_def是base64字符串\n if (!ret.result.style_def.includes('\"')) styledef = _base.default.decode(ret.result.style_def);\n }\n $this.$data.detail2_styledef = ret.result.style_def ? JSON.parse(styledef) : {};\n $this.$data.detail2_styledef.SelBut_Checked = true;\n // console.log($this.$data.detail2_styledef);\n } else {\n uni.showModal({\n title: \"错误3\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误3.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 3:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5);\n }))();\n },\n DictGetInfo: function DictGetInfo(dict, index, type) {\n var _this4 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {\n var $this, dataInfo;\n return _regenerator.default.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n //Mobox3得到得到字典信息字典项列表\n _this4.data = [];\n $this = _this4;\n dataInfo = {\n dict_id: dict.id,\n dict_name: dict.name\n }; // console.log(dataInfo);\n _this4.$store.dispatch('DictGetInfo', dataInfo).then( /*#__PURE__*/function () {\n var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(success) {\n var list, itemName, attr, head_styledef, detail1_styledef;\n return _regenerator.default.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n // console.log(success);\n if (success.err_code == 0) {\n list = [];\n itemName = '';\n success.result.dict_item_list.forEach(function (item) {\n if (item.is_default == '1') itemName = item.name;\n list.push({\n text: item.value,\n value: item.name\n });\n });\n if (type == 'mast') {\n //有默认值,显示默认值\n if (itemName) {\n $this.head_styledef.form.items[index].value = itemName;\n attr = $this.head_styledef.form.items[index].fieldId;\n $this.head_styledef.form.model[attr] = itemName;\n }\n $this.head_styledef.form.items[index].dict = list;\n head_styledef = JSON.parse(JSON.stringify($this.head_styledef));\n $this.head_styledef = [];\n $this.head_styledef = head_styledef;\n // console.log($this.$data.detail1StyleDefList);\n } else {\n if (itemName) {\n $this.detail1_styledef.form.items[index].value = itemName;\n attr = $this.detail1_styledef.form.items[index].fieldId;\n $this.detail1_styledef.form.model[attr] = itemName;\n }\n $this.detail1_styledef.form.items[index].dict = list;\n detail1_styledef = JSON.parse(JSON.stringify($this.detail1_styledef));\n $this.detail1_styledef = [];\n $this.detail1_styledef = detail1_styledef;\n // console.log($this.$data.detail1_styledef);\n }\n } else {\n uni.showModal({\n title: \"错误9.1\",\n content: success.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 1:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }));\n return function (_x5) {\n return _ref3.apply(this, arguments);\n };\n }()).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误9\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7);\n }))();\n },\n ontap: function ontap(index, item) {\n var _this5 = this;\n //扫码功能\n // var $ele = e;\n getApp().onScan(function (result) {\n __f__(\"log\", result.decodedata, \" at pages/modal/5602.vue:646\");\n item.value = result.decodedata;\n //uni.hideKeyboard();\n var $this = _this5;\n __f__(\"log\", item, \" at pages/modal/5602.vue:651\");\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n _this5.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n $this.onChange(onChangeEvent);\n }\n if (item.value) {\n //输入框不为空\n //初始化,下个输入框focus属性\n var curIndex = $this.head_styledef.form.items.findIndex(function (ele, index2, arr) {\n return (ele.name == 'Input' || ele.name == 'InputNumber') && index2 > index;\n });\n if (curIndex > -1) {\n $this.setData({\n focusFieldId: $this.head_styledef.form.items[curIndex].fieldId\n });\n }\n // setTimeout(function(){\n // \tuni.hideKeyboard();\n // },1000);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n });\n },\n onEnterChange: function onEnterChange(item) {\n //回车,点击按钮,取消节点事件\n // console.log(item);\n if (item.oldvalue != item.value) {\n item.oldvalue = item.value;\n var attr = item.fieldId;\n this.head_styledef.form.model[attr] = item.value;\n var onChangeEvent = item.bind.onChangeEvent; //内容变化后事件\n var onSuffixClickCallbackEvent = item.bind.onSuffixClickCallbackEvent; //后图标点击事件\n var onSuffixClickEvent = item.bind.onSuffixClickEvent; //后图标点击回调\n var isflag = false;\n if (onChangeEvent.id) {\n //内容变化后事件\n this.onChange(onChangeEvent);\n }\n // if(onSuffixClickCallbackEvent.id){ //后图标点击事件\n // this.onSuffixClick(onSuffixClickCallbackEvent);\n // }\n // if(onSuffixClickEvent.id){ //后图标点击回调\n // this.onSuffixClickCallback(onSuffixClickEvent);\n // }\n }\n },\n getDetailAttrList: function getDetailAttrList(list, selectButton) {\n var detailAttrList = [];\n list.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if (selectButton == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n list.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n return jsonlist;\n },\n // 内容变化后事件\n onChange: function onChange(event) {\n var _this6 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {\n var head_attr, obj_attr, input_param, $this, jsonList, itemlist1, itemlist2, data_json, dataInfo, tip;\n return _regenerator.default.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n try {\n if (event.id) {\n //获取表头属性\n head_attr = {};\n _this6.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n obj_attr = _this6.head_styledef.form.model; // console.log(obj_attr);\n input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n $this = _this6;\n jsonList = [];\n itemlist1 = $this.getDetailAttrList($this.detail1StyleDefList, $this.param.Sub_Page[0].Select_Button);\n itemlist2 = $this.getDetailAttrList($this.detail2StyleDefList, $this.param.Sub_Page[1].Select_Button);\n jsonList.push({\n page_name: $this.param.Sub_Page[0].Name,\n item_list: itemlist1,\n ext_data: $this.detail1ExtData\n });\n jsonList.push({\n page_name: $this.param.Sub_Page[1].Name,\n item_list: itemlist2,\n ext_data: $this.detail2ExtData\n });\n data_json = _base.default.encode(JSON.stringify(jsonList));\n dataInfo = {\n ed_type: 0,\n start_transaction: '',\n class_id: _this6.$data.head_styledef.form.clsId,\n class_name: '',\n event_id: event.id,\n event_name: '',\n data_obj_id: '',\n obj_attr: obj_attr,\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: data_json,\n compose_info: '',\n ext_info: \"\",\n global_attr: '',\n input_param: input_param\n };\n _this6.$store.dispatch('runCustomEvent', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var result = ret.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0 && result.action) {\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //分拣中\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n $this.viewAceionRow(value);\n } else if (item.action_type == \"set_subtable_page_content\") {\n //已分拣\n $this.$data.param.Show_Welcom_Page = false;\n var value = item.value;\n if (value.clear == true && $this.$data.detail1StyleDefList.length > 0 && value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断是否清空页签内容,正在分拣是否有数据\n uni.showModal({\n title: '提示',\n content: '系统检测到有待分拣中的数据,继续操作会清空,是否继续?',\n success: function success(res) {\n if (res.confirm) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n } else if (res.cancel) {\n $this.$data.detail1StyleDefList = [];\n $this.viewAceionContent(value);\n }\n }\n });\n } else {\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.$data.detail1StyleDefList = [];\n } else {\n $this.$data.detail2StyleDefList = [];\n }\n $this.viewAceionContent(value);\n }\n } else if (item.action_type == \"select_subtable_page_row\") {\n // value = {\"page_name\":\"码盘中\", \"row\":{\"id\":\"xx\"}}\n var value = item.value;\n $this.detail1StyleDefList.forEach(function (ele, index) {\n $this.activelist[index].active = false;\n if (ele.form.objId == value.row.id) {\n ele.SelBut_Checked = true;\n $this.active_id = ele.form.htmlobjId;\n //自动滚动到指定元素\n uni.createSelectorQuery().select(\"#tabpanel\") //对应外层节点\n .boundingClientRect(function (container) {\n uni.createSelectorQuery().select(\"#tabpanel\" + ele.form.htmlobjId) //目标节点\n .boundingClientRect(function (target) {\n uni.pageScrollTo({\n scrollTop: target.top - container.top //滚动到实际距离是元素距离顶部的距离减去最外层盒子的滚动距离\n });\n }).exec();\n }).exec();\n }\n });\n } else if (item.action_type == \"remove_subtable_page_row\") {\n //清除面板中指定id的数据\n var value = item.value;\n if (value.page_name == $this.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //清除面板中指定id的数据\n value.row.forEach(function (row) {\n $this.$data.detail1StyleDefList.forEach(function (ele, index) {\n if (ele.form.objId == row.id) {\n $this.$data.detail1StyleDefList.splice(index, 1);\n }\n });\n });\n }\n } else if (item.action_type == \"set_subtable_page_row\") {\n $this.viewActionSetRow(item.value);\n } else if (item.action_type == \"set_subtable_page_ext_data\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1ExtData: value.ext_data\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2ExtData: value.ext_data\n });\n }\n } else if (item.action_type == \"clear_subpage_rows\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1StyleDefList: [],\n detail1ExtData: {}\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2StyleDefList: [],\n detail2ExtData: {}\n });\n }\n } else if (item.action_type == \"set_dlg_current_edit_attr\") {\n if ($this.focusFieldId == item.value) $this.setData({\n focusFieldId: \"\"\n });\n $this.setData({\n focusFieldId: item.value\n });\n } else if (item.action_type == \"set_dlg_attr\") {\n // value = {\"attr\":\"xxx\", \"value\":\"xxx\"}\n var data = item.value;\n $this.$data.head_styledef.form.items.forEach( /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(ele, index) {\n return _regenerator.default.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n data.forEach( /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(ele2, index) {\n return _regenerator.default.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (ele.fieldId == ele2.attr) {\n ele.value = ele2.value;\n }\n case 1:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8);\n }));\n return function (_x8, _x9) {\n return _ref5.apply(this, arguments);\n };\n }());\n case 1:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9);\n }));\n return function (_x6, _x7) {\n return _ref4.apply(this, arguments);\n };\n }());\n }\n });\n } else {\n // this.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"错误4.3\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误4\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误4.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n }\n } catch (ex) {\n tip = typeof ex == \"string\" ? ex : ex.message;\n uni.showModal({\n title: \"错误4.2\",\n content: \"执行“内容变化后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n case 1:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10);\n }))();\n },\n operationNumber: function operationNumber(value1, value2, operation) {\n var number1 = 0;\n var number2 = 0;\n if (value1) number1 = parseInt(value1);\n if (value2) number2 = parseInt(value2);\n if (operation == \"+\") {\n return number1 + number2;\n } else if (operation == \"-\") {\n return number1 - number2;\n } else if (operation == \"*\") {\n return number1 * number2;\n } else if (operation == \"/\") {\n if (number2) return number1 / number2;else return number1;\n } else return number2;\n },\n //更新分页签中的列表项内容\n viewActionSetRow: function viewActionSetRow(value) {\n var $this = this;\n var detailStyleDefList = [];\n if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n detailStyleDefList = $this.$data.detail2StyleDefList;\n } else if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n detailStyleDefList = $this.$data.detail1StyleDefList;\n }\n detailStyleDefList.forEach(function (ele) {\n value.row.forEach(function (rowData) {\n if (ele.form.objId == rowData.id) {\n rowData.attrs.forEach(function (attr) {\n ele.form.items.forEach(function (ele2) {\n if (ele2.name != 'Layout') {\n if (ele2.fieldId == attr.attr) {\n ele2.value = $this.operationNumber(ele2.value, attr.value, attr.operation);\n }\n } else if (ele2.name == 'Layout') {\n ele2.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) {\n col.value = $this.operationNumber(col.value, attr.value, attr.operation);\n }\n }\n });\n }\n });\n });\n }\n });\n });\n if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2StyleDefList: detailStyleDefList\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n $this.setData({\n detail1StyleDefList: detailStyleDefList\n });\n }\n },\n //加载正在分拣内容\n viewAceionRow: function viewAceionRow(data, type) {\n var _this7 = this;\n // console.log(data);\n if (JSON.stringify(data.row) == '{}') {\n return;\n }\n data.row.forEach(function (row) {\n var styleStr = JSON.stringify(_this7.$data.detail1_styledef);\n if (type) {\n //确定后脚本进入加载已分拣数据\n styleStr = JSON.stringify(_this7.$data.detail2_styledef);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n styleStr = JSON.stringify(_this7.$data.detail2_styledef); //待分拣\n }\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.form.objId = row.id;\n detailStyle.form.htmlobjId = row.id ? row.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = row.attrs;\n row.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (type) {\n //确定后脚本进入加载已分拣数据\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n if (data.page_name == _this7.$data.param.Sub_Page[1].Name) {\n //判断返回的action的page_name是否是已分拣\n _this7.$data.detail2StyleDefList.push(detailStyle);\n // console.log(this.$data.detail2StyleDefList);\n } else {\n _this7.$data.detail1StyleDefList.push(detailStyle);\n _this7.activelist.push({\n active: false\n });\n // console.log(this.$data.detail1StyleDefList);\n }\n }\n });\n },\n //加载已分拣内容\n viewAceionContent: function viewAceionContent(data) {\n var $this = this;\n if (data.page_name == $this.param.Sub_Page[0].Name) {\n $this.detail1ExtData = data.ext_data || {};\n } else if (data.page_name == $this.param.Sub_Page[1].Name) {\n $this.detail2ExtData = data.ext_data || {};\n }\n if (JSON.stringify(data.content) == '{}') {\n return;\n }\n data.content.forEach(function (cont) {\n var _data$checkbox;\n var styleStr = JSON.stringify($this.$data.detail2_styledef); //已分拣\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n styleStr = JSON.stringify($this.$data.detail1_styledef); //待分拣\n }\n\n var detailStyle = JSON.parse(styleStr);\n detailStyle.SelBut_Checked = (_data$checkbox = data.checkbox) !== null && _data$checkbox !== void 0 ? _data$checkbox : true;\n detailStyle.form.objId = cont.id;\n detailStyle.form.htmlobjId = cont.id ? cont.id.replace(/-/g, '').replace('{', '').replace('}', '') : 'null';\n detailStyle.form.attrs = cont.attrs;\n cont.attrs.forEach(function (attr) {\n detailStyle.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n if (data.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n if (data.clear == false) {\n var isflag = true;\n $this.detail1StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail1StyleDefList.push(detailStyle); //待分拣\n } else {\n $this.detail1StyleDefList.push(detailStyle); //待分拣\n }\n\n $this.activelist.push({\n active: false\n });\n // console.log($this.$data.detail1StyleDefList);\n } else {\n if (data.clear == false) {\n //如果 clear = false 则不需要清除,根据id判断是否存在,不存在插入到页面,如果存在用新的属性覆盖\n var isflag = true;\n $this.detail2StyleDefList.forEach(function (style, index) {\n if (style.form.objId == detailStyle.form.objId) {\n cont.attrs.forEach(function (attr) {\n style.form.items.forEach(function (ele) {\n if (ele.name != 'Layout') {\n if (ele.fieldId == attr.attr) ele.value = attr.value;\n } else if (ele.name == 'Layout') {\n ele.setting.colList.forEach(function (col) {\n if (col) {\n if (col.fieldId == attr.attr) col.value = attr.value;\n }\n });\n }\n });\n });\n isflag = false;\n }\n });\n if (isflag) $this.detail2StyleDefList.push(detailStyle); //已分拣\n } else {\n $this.detail2StyleDefList.push(detailStyle); //已分拣\n }\n // console.log($this.$data.detail2StyleDefList);\n }\n });\n },\n onClickItem: function onClickItem(e) {\n //选择页签\n // console.log(e);\n this.current = e.currentIndex;\n },\n onDetail1EnterChange: function onDetail1EnterChange(item) {\n //分拣中样式回车事件\n __f__(\"log\", item, \" at pages/modal/5602.vue:1175\");\n },\n delItem: function delItem(index) {\n var _this$Before_Del_Even, _this$After_Del_Event;\n //删除分拣中样式面板\n //删除码盘中样式面板\n this.Before_Del_Event = this.param.Sub_Page[0].Before_Delete;\n this.After_Del_Event = this.param.Sub_Page[0].After_Delete;\n var style = this.detail1StyleDefList[index];\n //删除码盘中样式面板\n this.detail1StyleDefList.splice(index, 1);\n if ((_this$Before_Del_Even = this.Before_Del_Event) !== null && _this$Before_Del_Even !== void 0 && _this$Before_Del_Even.ID)\n //是否有删除前事件\n this.del(style, this.Before_Del_Event);else if ((_this$After_Del_Event = this.After_Del_Event) !== null && _this$After_Del_Event !== void 0 && _this$After_Del_Event.ID)\n //是否有删除后事件\n this.del(style, this.After_Del_Event);\n },\n delDataObj: function delDataObj(style, index) {\n //删除已分拣数\n // console.log(style);\n var $this = this;\n $this.Before_Del_Event = $this.param.Sub_Page[0].Before_Delete;\n $this.After_Del_Event = $this.param.Sub_Page[0].After_Delete;\n uni.showModal({\n title: '提示',\n content: '确定删除该已分拣数据!',\n success: function success(res) {\n if (res.confirm) {\n var objID = style.form.objId;\n if (!style.form.objId.includes('{')) objID = '{' + style.form.objId + '}';\n var dataInfo = {\n class_id: style.form.clsId,\n class_name: '',\n obj_id: objID\n };\n // console.log(dataInfo);\n $this.$store.dispatch('dataObjDel', dataInfo).then(function (ret) {\n // console.log(ret);\n if (ret.err_code == 0) {\n var _$this$Before_Del_Eve, _$this$After_Del_Even;\n var _style = $this.detail2StyleDefList[index];\n $this.detail2StyleDefList.splice(index, 1);\n if ((_$this$Before_Del_Eve = $this.Before_Del_Event) !== null && _$this$Before_Del_Eve !== void 0 && _$this$Before_Del_Eve.ID)\n //是否有删除前事件\n $this.del2(_style, $this.Before_Del_Event);else if ((_$this$After_Del_Even = $this.After_Del_Event) !== null && _$this$After_Del_Even !== void 0 && _$this$After_Del_Even.ID)\n //是否有删除后事件\n $this.del2(_style, $this.After_Del_Event);\n uni.showModal({\n title: \"提示\",\n content: \"删除成功!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n } else {\n uni.showModal({\n title: \"错误5\",\n content: ret.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n // console.log(ex);\n uni.showModal({\n title: \"错误5.1\",\n content: ex.errMsg,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n } else if (res.cancel) {}\n }\n });\n },\n del: function del(style, event) {\n var _this8 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {\n var head_attr, detailAttrList, detail_attr, input_param, jsonlist, list;\n return _regenerator.default.wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n //获取表头属性\n head_attr = {};\n _this8.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在分拣属性\n detailAttrList = [];\n detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[0].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n\n // console.log(detailAttrList);\n //获取正在分拣里没有显示的字段\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n // console.log(jsonlist);\n list = [];\n list.push({\n page_name: $this.param.Sub_Page[0].Name,\n item_list: jsonlist,\n ext_data: $this.detail1ExtData\n });\n $this.runCustomEvent(event, input_param, list, '1');\n case 14:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11);\n }))();\n },\n del2: function del2(style, event) {\n var _this9 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {\n var head_attr, detailAttrList, detail_attr, input_param, jsonlist, list;\n return _regenerator.default.wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n //获取表头属性\n head_attr = {};\n _this9.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取已分拣属性\n detailAttrList = [];\n detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[1].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n //获取已分拣里没有显示的字段\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n // console.log(detailAttrList);\n // return;\n input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n list = [];\n list.push({\n page_name: $this.param.Sub_Page[1].Name,\n item_list: jsonlist,\n ext_data: $this.detail2ExtData\n });\n\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, list, '2');\n case 14:\n case \"end\":\n return _context12.stop();\n }\n }\n }, _callee12);\n }))();\n },\n onPanelClick: function onPanelClick(value) {\n //点击面板高亮显示\n // console.log(value);\n this.active_id = '';\n this.activelist.forEach(function (ele) {\n ele.active = false;\n });\n this.activelist[value].active = true;\n // console.log(this.$data.activelist);\n },\n //确定\n ok: function ok() {\n this.Before_OK_Event = this.param.Sub_Page[0].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[0].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava(this.$data.After_OK_Event);\n },\n sava: function sava(event) {\n var $this = this;\n if (this.$data.detail1StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有待分拣的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取正在分拣属性\n var detailAttrList = [];\n this.$data.detail1StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[0].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取正在分拣里没有显示的字段\n this.$data.detail1StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n // console.log(jsonlist);\n var list = [];\n list.push({\n page_name: $this.param.Sub_Page[0].Name,\n item_list: jsonlist,\n ext_data: $this.detail1ExtData\n });\n $this.runCustomEvent(event, input_param, list, '1');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'1');\n // });\n },\n //确定\n ok2: function ok2() {\n this.Before_OK_Event = this.param.Sub_Page[1].Before_ok;\n this.After_OK_Event = this.param.Sub_Page[1].After_ok;\n // console.log(this.Before_OK_Event);\n // console.log(this.After_OK_Event);\n if (this.$data.Before_OK_Event.ID)\n //是否有确定前事件\n this.sava2(this.$data.Before_OK_Event);else if (this.$data.After_OK_Event.ID)\n //是否有确定后事件\n this.sava2(this.$data.After_OK_Event);\n },\n sava2: function sava2(event) {\n var $this = this;\n if (this.$data.detail1StyleDefList.length == 0) {\n uni.showModal({\n title: \"提示\",\n content: \"没有待分拣的数据!\",\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n }\n //获取表头属性\n var head_attr = {};\n this.$data.head_styledef.form.items.forEach(function (item) {\n head_attr[item.fieldId] = item.value;\n });\n // console.log(head_attr);\n //获取已分拣属性\n var detailAttrList = [];\n this.$data.detail1StyleDefList.forEach(function (style) {\n var detail_attr = {};\n style.form.items.forEach(function (item) {\n if (item.name == \"Layout\") {\n //判断是否是栅栏格式\n item.setting.colList.forEach(function (cols) {\n if (cols != null) detail_attr[cols.fieldId] = cols.value;\n });\n } else detail_attr[item.fieldId] = item.value;\n });\n detail_attr['id'] = style.form.objId;\n if ($this.param.Sub_Page[1].Select_Button == true) {\n //判断选择按钮是否为true\n if (style.SelBut_Checked == true) detailAttrList.push(detail_attr);\n } else detailAttrList.push(detail_attr);\n });\n // console.log(detailAttrList);\n //获取已分拣里没有显示的字段\n this.$data.detail1StyleDefList.forEach(function (style) {\n style.form.attrs.forEach(function (attr) {\n for (var key in detailAttrList) {\n if (style.form.objId == detailAttrList[key]['id']) {\n var keys = Object.keys(detailAttrList[key]);\n var isflag = true;\n keys.forEach(function (ele) {\n if (ele == attr.attr) isflag = false;\n });\n if (isflag) {\n detailAttrList[attr.attr] = attr.value;\n }\n }\n }\n });\n });\n // console.log(detailAttrList);\n // return;\n var input_param = _base.default.encode(JSON.stringify(Object.keys(head_attr).map(function (a) {\n return {\n attr: a,\n value: head_attr[a] || \"\"\n };\n })));\n var jsonlist = [];\n detailAttrList.forEach(function (attr) {\n jsonlist.push({\n id: attr[\"id\"] || \"\",\n attrs: Object.keys(attr).map(function (a) {\n return {\n attr: a,\n value: attr[a] || \"\"\n };\n }).filter(function (a) {\n return a.attr != \"id\";\n })\n });\n });\n var list = [];\n list.push({\n page_name: $this.param.Sub_Page[1].Name,\n item_list: jsonlist,\n ext_data: $this.detail2ExtData\n });\n\n // console.log(jsonlist);\n $this.runCustomEvent(event, input_param, list, '2');\n // jsonlist.forEach(async (json,key)=>{\n // \tawait $this.runCustomEvent(event,input_param,json,'2');\n // });\n },\n //执行确定脚本\n runCustomEvent: function runCustomEvent(event, input_param, json, type) {\n var _this10 = this;\n return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {\n var $this, data_json, dataInfo;\n return _regenerator.default.wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n $this = _this10;\n data_json = _base.default.encode(JSON.stringify(json));\n dataInfo = {\n ed_type: 0,\n start_transaction: true,\n class_id: _this10.$data.ClsID,\n class_name: '',\n event_id: event.ID,\n event_name: '',\n data_obj_id: '',\n obj_attr: '',\n prj_id: '',\n ref_cls_id: '',\n rel_obj_id: '',\n user_login: '',\n data_json: data_json,\n compose_info: '',\n ext_info: '',\n global_attr: '',\n input_param: input_param\n }; // console.log(dataInfo);\n _this10.$store.dispatch('runCustomEvent', dataInfo).then(function (res) {\n __f__(\"log\", res, \" at pages/modal/5602.vue:1586\");\n if (res.err_code == 0) {\n var result = res.result;\n if (result.ret != 0) {\n var tip = result.err_info ? typeof result.err_info == 'string' ? result.err_info : result.err_info.join('<br/>') : '';\n if (result.ret == 801) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });else uni.showModal({\n title: '提示',\n content: tip + ',提示:' + result.ret,\n showCancel: false,\n confirmText: \"取消\"\n });\n return false;\n } else {\n var tip = result.info ? typeof result.info == 'string' ? result.info : result.info.join('<br/>') : '';\n if (tip) uni.showModal({\n title: '提示',\n content: tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n if (result.result_type == 0) {\n if (result.action) {\n result.action.forEach(function (item) {\n if (item.action_type == \"insert_subtable_page_row\") {\n //分拣中\n var value = item.value;\n //加载待分拣数据\n $this.viewAceionRow(value, '');\n // $this.viewAceionRow(value,'add');\n //清空条码内容\n $this.$data.head_styledef.form.items.forEach(function (item, index) {\n if (item.fieldId != \"S_CNTR_CODE\") {\n item.value = '';\n item.oldvalue = '';\n $this.$data.head_styledef.form.model[item.fieldId] = '';\n }\n });\n //清除待分拣中成功的数据\n // $this.$data.detail1StyleDefList.forEach((style,index)=>{\n // if(style.form.items[0].fieldId == json.attrs[0].attr && style.form.items[0].value == json.attrs[0].value){ \n // \t$this.$data.detail1StyleDefList.splice(index,1);\n // \treturn;\n // }\n // });\n // this.detail2StyleDefList=[];\n uni.showModal({\n title: \"提示\",\n content: \"分拣成功\",\n showCancel: false,\n confirmText: \"取消\"\n });\n } else if (item.action_type == \"set_subtable_page_content\") {\n //加载多条数据\n $this.param.Show_Welcom_Page = false;\n var value = item.value;\n if (value.clear == true && $this.detail1StyleDefList.length > 0) {\n //判断是否清空页签内容,待分拣是否有数据\n uni.showModal({\n title: '提示',\n content: '系统检测到有待分拣中的数据,继续操作会清空,是否继续?',\n success: function success(res) {\n if (res.confirm) {\n $this.setData({\n detail1StyleDefList: [],\n detail2StyleDefList: []\n });\n $this.viewAceionContent(value);\n } else if (res.cancel) {\n $this.viewAceionContent(value);\n }\n }\n });\n } else {\n $this.viewAceionContent(value);\n }\n } else if (item.action_type == \"remove_subtable_page_row\") {\n //清除面板中指定id的数据\n var value = item.value;\n if (value.page_name == $this.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n //清除面板中指定id的数据\n value.row.forEach(function (row) {\n $this.$data.detail1StyleDefList.forEach(function (ele, index) {\n if (ele.form.objId == row.id) {\n $this.$data.detail1StyleDefList.splice(index, 1);\n }\n });\n });\n }\n } else if (item.action_type == \"set_subtable_page_row\") {\n $this.viewActionSetRow(item.value);\n } else if (item.action_type == \"set_subtable_page_ext_data\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1ExtData: value.ext_data\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2ExtData: value.ext_data\n });\n }\n } else if (item.action_type == \"clear_subpage_rows\") {\n var value = item.value;\n if (value.page_name == $this.$data.param.Sub_Page[0].Name) {\n //判断返回的action的page_name是否是待分拣\n $this.setData({\n detail1StyleDefList: [],\n detail1ExtData: {}\n });\n } else if (value.page_name == $this.$data.param.Sub_Page[1].Name) {\n $this.setData({\n detail2StyleDefList: [],\n detail2ExtData: {}\n });\n }\n } else if (item.action_type == \"set_dlg_current_edit_attr\") {\n if ($this.focusFieldId == item.value) $this.setData({\n focusFieldId: \"\"\n });\n $this.setData({\n focusFieldId: item.value\n });\n } else if (item.action_type == \"refresh\") {\n //刷新\n var value = item.value;\n //清除待分拣成功的数据\n // value.forEach((val_id,key)=>{\n // this.detail1StyleDefList.forEach((style,index)=>{\n // if(style.form.objId == val_id){ \n // this.detail1StyleDefList.splice(index,1);\n // return;\n // }\n // });\n // });\n //刷新当前页面\n uni.redirectTo({\n url: '../modal/5602?param=' + JSON.stringify(_this10.$data.param) + \"&titlename=\" + _this10.$data.title\n });\n } else if (item.action_type == \"prompt\") {\n //打开系统提示弹框\n var value = '';\n item.value.forEach(function (ele) {\n if (value) value += '\\n';\n value += ele;\n });\n uni.showModal({\n title: \"系统提示\",\n content: value,\n showCancel: false,\n confirmText: \"关闭\"\n });\n }\n });\n } else {\n if ($this.$data.After_OK_Event.ID != event.ID) {\n //判断当前事件是否是确定后事件\n if (type == '1') {\n $this.sava($this.$data.After_OK_Event); //执行确定后事件\n } else {\n $this.sava2($this.$data.After_OK_Event); //执行确定后事件\n }\n }\n }\n } else {\n // $this.$data.detail2StyleDefList=[];\n if (result.info) {\n uni.showModal({\n title: \"提示\",\n content: result.info,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }\n }\n } else {\n uni.showModal({\n title: \"错误8\",\n content: res.err_msg,\n showCancel: false,\n confirmText: \"取消\"\n });\n }\n }).catch(function (ex) {\n var tip = typeof ex == \"string\" ? ex : ex.errMsg;\n uni.showModal({\n title: \"错误8.1\",\n content: \"执行“确定后”事件失败:\" + tip,\n showCancel: false,\n confirmText: \"取消\"\n });\n });\n case 4:\n case \"end\":\n return _context13.stop();\n }\n }\n }, _callee13);\n }))();\n },\n cancel: function cancel(e) {\n //取消\n uni.navigateBack({\n delta: 1 //返回层数,2则上上页\n });\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbW9kYWwvNTYwMi52dWUiXSwibmFtZXMiOlsibW9kdWxlcyIsIkJhc2U2NCIsImRhdGEiLCJ0aXRsZSIsIkNsc0lEIiwiQ2xzSUQyIiwicGFyYW0iLCJmb2N1c0ZpZWxkSWQiLCJoZWFkX3N0eWxlZGVmIiwiZm9ybSIsIml0ZW1zIiwiZGV0YWlsMV9zdHlsZWRlZiIsImRldGFpbDFTdHlsZURlZkxpc3QiLCJkZXRhaWwyX3N0eWxlZGVmIiwiZGV0YWlsMlN0eWxlRGVmTGlzdCIsImRldGFpbDFFeHREYXRhIiwiZGV0YWlsMkV4dERhdGEiLCJjdXJyZW50IiwiQmVmb3JlX09LX0V2ZW50IiwiQWZ0ZXJfT0tfRXZlbnQiLCJCZWZvcmVfRGVsX0V2ZW50IiwiQWZ0ZXJfRGVsX0V2ZW50IiwiYWN0aXZlX2lkIiwiYWN0aXZlbGlzdCIsIm9uTG9hZCIsInVuaSIsIm1ldGhvZHMiLCJzZXREYXRhIiwiT2JqZWN0Iiwia2V5cyIsInZhbCIsInRoYXQiLCJIZWFkX1VJU3R5bGVHZXRJbmZvIiwiJHRoaXMiLCJkYXRhSW5mbyIsImNsYXNzX2lkIiwidWlfc3R5bGVfaWQiLCJzdHlsZWRlZiIsImVsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJEZXRhaWwxX1VJc3R5bGVHZXRJbmZvIiwiRGV0YWlsMl9VSXN0eWxlR2V0SW5mbyIsIkRpY3RHZXRJbmZvIiwiZGljdF9pZCIsImRpY3RfbmFtZSIsImxpc3QiLCJpdGVtTmFtZSIsInN1Y2Nlc3MiLCJ0ZXh0IiwidmFsdWUiLCJhdHRyIiwib250YXAiLCJnZXRBcHAiLCJpdGVtIiwib25FbnRlckNoYW5nZSIsImdldERldGFpbEF0dHJMaXN0Iiwic3R5bGUiLCJkZXRhaWxfYXR0ciIsImRldGFpbEF0dHJMaXN0IiwianNvbmxpc3QiLCJpZCIsImF0dHJzIiwib25DaGFuZ2UiLCJoZWFkX2F0dHIiLCJvYmpfYXR0ciIsImlucHV0X3BhcmFtIiwiSlNPTiIsImpzb25MaXN0IiwiaXRlbWxpc3QxIiwiaXRlbWxpc3QyIiwicGFnZV9uYW1lIiwiaXRlbV9saXN0IiwiZXh0X2RhdGEiLCJkYXRhX2pzb24iLCJlZF90eXBlIiwic3RhcnRfdHJhbnNhY3Rpb24iLCJjbGFzc19uYW1lIiwiZXZlbnRfaWQiLCJldmVudF9uYW1lIiwiZGF0YV9vYmpfaWQiLCJwcmpfaWQiLCJyZWZfY2xzX2lkIiwicmVsX29ial9pZCIsInVzZXJfbG9naW4iLCJjb21wb3NlX2luZm8iLCJleHRfaW5mbyIsImdsb2JhbF9hdHRyIiwicmVzdWx0Iiwic2VsZWN0IiwiYm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsVG9wIiwiZXhlYyIsInRpcCIsIm9wZXJhdGlvbk51bWJlciIsIm51bWJlcjEiLCJudW1iZXIyIiwidmlld0FjdGlvblNldFJvdyIsImRldGFpbFN0eWxlRGVmTGlzdCIsInJvd0RhdGEiLCJlbGUyIiwiY29sIiwidmlld0FjZWlvblJvdyIsInN0eWxlU3RyIiwiZGV0YWlsU3R5bGUiLCJyb3ciLCJhY3RpdmUiLCJ2aWV3QWNlaW9uQ29udGVudCIsImNvbnQiLCJpc2ZsYWciLCJvbkNsaWNrSXRlbSIsIm9uRGV0YWlsMUVudGVyQ2hhbmdlIiwiZGVsSXRlbSIsImRlbERhdGFPYmoiLCJvYmpfaWQiLCJkZWwiLCJkZWwyIiwib25QYW5lbENsaWNrIiwib2siLCJzYXZhIiwib2syIiwic2F2YTIiLCJydW5DdXN0b21FdmVudCIsInVybCIsImNhbmNlbCIsImRlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFnWkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QkFBQW9DO3NCQUFBQztzQkFBQUM7b0JBQUE7a0JBQ0E7Z0JBQ0E7a0JBQ0E7a0JBQ0FoQjtvQkFBQXRCO29CQUFBb0M7b0JBQUFDO29CQUFBQztrQkFBQTtnQkFDQTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQTtJQUNBO0lBRUFvRjtNQUFBO01BQ0FwRztRQUNBcUc7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjE5Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuLnYtaGVhZFN0eWxlOmZpcnN0LWNoaWxke1xyXG5cdG1hcmdpbi10b3A6IDE1cnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSAudHh0X3RpdGxle1xyXG4gIGZvbnQtc2l6ZTogMzRycHg7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHZlcnRpY2FsLWFsaWduOiAxMnB4O1xyXG59XHJcbi52LWhlYWRTdHlsZSBpbnB1dHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0LyogYm9yZGVyOiAxcHggc29saWQgI2Q1ZDVkNTsgKi9cclxuXHQvKiB3aWR0aDogNjUlOyAqL1xyXG5cdHdpZHRoOiA4NSU7ICAgIFxyXG5cdGhlaWdodDogNTJycHg7XHJcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcblx0cGFkZGluZzogMTBycHggOHJweCAxMnJweDtcclxuXHRmb250LXNpemU6IDM0cnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDRycHg7XHJcbn1cclxuLnYtaGVhZFN0eWxlIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEycnB4O1xyXG59XHJcbi5pbnB1dC13cmFwcGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkNWQ1ZDU7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB3aWR0aDogNjUlOyAgICBcclxuXHRsaW5lLWhlaWdodDogMjJycHg7XHJcbn1cclxuW252dWVdIHVuaS12aWV3IHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJvcmRlcjogMCBzb2xpZCAjMDAwO1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxufVxyXG4udW5pLWlucHV0IHtcclxuXHQvKiBib3JkZXI6IG5vbmU7ICovXHJcbn1cclxuLnVuaS1pY29ue1xyXG5cdC8qIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgKi9cclxuXHR3aWR0aDogOCU7XHJcbiAgICBmb250LWZhbWlseTogdW5paWNvbnM7XHJcbiAgICBmb250LXNpemU6IDQwcnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxuICAgIC8qIHdpZHRoOiA0OHJweDsgKi9cclxuICAgIGhlaWdodDogNDhycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNDhycHg7XHJcblx0Y29sb3I6ICMyZDhjZjA7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dmVydGljYWwtYWxpZ246IDE4cnB4O1xyXG59XHJcbi52aWV3LWNvbnRlbnR7XHJcblx0bWluLWhlaWdodDogNzAwcnB4O1xyXG5cdC8qIGJvcmRlcjoxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi5kdi1wYW5lbHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6I2VmZWZlZjtcclxuICAgIHBhZGRpbmc6IDIwcnB4IDIwcnB4IDRycHggMHB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTJycHg7XHJcbiAgICBtYXJnaW46IDEwcnB4IDAgMjBycHggMDtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4uZHYtcGFuZWwtaW5wdXR7XHJcblx0d2lkdGg6IDEwMCU7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0dGV4dC1hbGlnbjogbGVmdDtcclxufVxyXG4uZHYtcGFuZWwtaW5wdXQgLmR2LWlucHV0e1xyXG5cdG1hcmdpbi1ib3R0b206IDJycHg7XHJcbn1cclxuLmR2LXBhbmVsIC50eHRfdGl0bGV7XHJcbiAgZm9udC1zaXplOiAzNHJweDtcclxuICB0ZXh0LWFsaWduOiByaWdodDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuXHJcbi5kdi1wYW5lbCBpbnB1dHtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZDVkNWQ1O1xyXG5cdHdpZHRoOiA2OCU7IFxyXG5cdGhlaWdodDogNTJycHg7XHJcbiAgICBsaW5lLWhlaWdodDogMzRycHg7XHJcblx0YmFja2dyb3VuZDogI0ZGRjtcclxuXHRib3JkZXItcmFkaXVzOiA3cHggIWltcG9ydGFudDtcclxuXHRjb2xvcjogIzJkOGNmMDtcclxuXHRwYWRkaW5nOiA2cnB4IDhycHggOHJweDtcclxuXHRmb250LXNpemU6IDMycnB4O1xyXG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuXHR0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjFzO1xyXG5cdG1hcmdpbi10b3A6IDBycHg7XHJcbn1cclxuLmR2LXBhbmVsIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRmb250LXNpemU6IDEwcnB4O1xyXG59XHJcbi5kdi1wYW5lbCAuZm9ybS1pdGVtLXNwYW57XHJcblx0dmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xyXG4gICAgY29sb3I6ICMyZDhjZjA7XHJcblx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0d2lkdGg6IGNhbGMoMTAwJSAtIDEwMHB4KTtcclxufVxyXG5cclxuLmR2LXBhbmVsLWJ1dHRvbntcclxuICAgIC8qIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRtYXJnaW4tcmlnaHQ6IDIwcnB4OyAqL1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0cGFkZGluZy1ib3R0b206IDIwcnB4O1xyXG59XHJcbi5kdi1wYW5lbC1idXR0b24gY2hlY2tib3gtZ3JvdXAgeyAgIFxyXG4gICAgLyogZmxvYXQ6IGxlZnQ7ICovXHJcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5kdi1wYW5lbC1idXR0b24gYnV0dG9uIHsgXHJcblx0dGV4dC1hbGlnbjogbGVmdDsgICBcclxuXHRsaW5lLWhlaWdodDogMS44O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMzRycHg7XHJcblx0d2lkdGg6IDE4MHJweDsgICBcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbmJ1dHRvbi5idG5fY2FuY2VsIHtcclxuXHR3aWR0aDo0OS41JTtcclxuXHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRwYWRkaW5nOiAyMHJweDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRmb250LXNpemU6IDM4cnB4O1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxufVxyXG5idXR0b24uYnRuX2FkZCB7XHJcblx0d2lkdGg6NDkuNSU7XHJcblx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0cGFkZGluZzogMjBycHg7XHJcblx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC1zaXplOiAzOHJweDtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcbi5sb2dvIHtcclxuXHRoZWlnaHQ6IDEwMHJweDtcclxuICAgIHdpZHRoOiA0NjBycHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luOiAzOCUgYXV0bztcclxufVxyXG4uZHYtYm9yZGVye1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkIHJlZDtcclxufVxyXG4udmlldy1pbWFnZXRleHR7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIHdpZHRoOiA4OCU7XHJcbiAgcGFkZGluZzogMjBycHggNDBycHggMHB4IDQwcnB4O1xyXG4gIC8qIGJvcmRlcjoxcHggc29saWQgcmVkOyAqL1xyXG59XHJcbi52aWV3LWltYWdldGV4dCAudmlldy1pbWFnZXRleHQtdXBsb2FkbGlzdCB7XHJcbiAgcGFkZGluZzogMzBycHggMHB4IDEwcnB4IDBweDtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGxpbmUtaGVpZ2h0OiAxMDAlO1xyXG4gIGJvcmRlcjogMnJweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICBib3JkZXItcmFkaXVzOiA4cnB4O1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgYmFja2dyb3VuZDogI2ZmZjtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgLyogYm94LXNoYWRvdzogMCAycnB4IDJycHggcmdiYSgwLCAwLCAwLCAwLjIpO1xyXG4gIG1hcmdpbi1yaWdodDogOHJweDsgKi9cclxufVxyXG4udmlldy1pbWFnZXRleHQgLnR4dC10ZXh0e1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIG1hcmdpbjogMjBycHg7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnZpZXctZGV0YWxpc3QtY2VudGVue1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG4gIFxyXG4udmlldy1kZXRhbGlzdC1jZW50ZW4gLnR4dC1kZXRhbGlzdHtcclxuICBiYWNrZ3JvdW5kOiAjOTRENUVGO1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZvbnQtc2l6ZTogMzZycHg7XHJcbiAgbGluZS1oZWlnaHQ6IDgwcnB4O1xyXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbn1cclxuLnBhbmVsLWFjdGl2ZXtcclxuICBib3JkZXI6MnB4IHNvbGlkIHJlZDtcclxufVxyXG4uYmstYWN0aXZle1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNENkZDQjI7XHJcbn1cclxuPC9zdHlsZT5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XHJcblx0LmRlbW8tdW5pLXJvdyB7XHJcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XHJcblx0XHRkaXNwbGF5OiBibG9jaztcclxuXHR9XHJcblx0Ojp2LWRlZXAgLnVuaS1yb3cge1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMHB4O1xyXG5cdH1cclxuXHQudmlldy10YWJwYWdlIDo6di1kZWVwIC51bmktcm93ICB7XHJcblx0XHRtYXJnaW4tYm90dG9tOiA1cHg7XHJcblx0fVxyXG5cdC5kZW1vLXVuaS1jb2wge1xyXG5cdFx0aGVpZ2h0OiAzNnB4O1xyXG5cdFx0Ym9yZGVyLXJhZGl1czogNXB4O1xyXG5cdH1cclxuXHQuZGVtby11bmktcm93IC51bmktaW5wdXR7XHJcblx0XHR3aWR0aDogY2FsYygxMDAlIC0gMTIwcHgpO1xyXG5cdH1cclxuXHRcclxuPC9zdHlsZT5cclxuXHJcblxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiY29udGVudFwiPlxyXG5cdFx0PCEtLSDooajlpLTmoLflvI8gLS0+XHJcblx0XHQ8dmlldyBjbGFzcz1cInYtaGVhZFN0eWxlXCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zXCIgPlxyXG5cdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHQ8IS0tIOS4i+aLieahhi3ljZXpgIkgaXRlbS51c2VEaWN0P2l0ZW0uZGljdDppdGVtLnNlbGVjdGlvbnMtLT5cclxuXHRcdFx0PHVuaS1kYXRhLXNlbGVjdCBpZD1cImR2X3NlbGVjdFwiIHYtaWY9XCJpdGVtLm5hbWU9PSdTZWxlY3QnXCJcclxuXHRcdFx0XHQ6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdHYtbW9kZWw9XCJpdGVtLnZhbHVlXCJcclxuXHRcdFx0XHQ6bG9jYWxkYXRhPVwiaXRlbS5kaWN0XCJcclxuXHRcdFx0XHRAY2hhbmdlPVwib25FbnRlckNoYW5nZShpdGVtKVwiXHJcblx0XHRcdFx0OmRpc2FibGVkPVwiaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0OmNsZWFyPVwiZmFsc2VcIlxyXG5cdFx0XHQ+PC91bmktZGF0YS1zZWxlY3Q+XHJcblx0XHRcdDx2aWV3IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIHYtaWY9XCJpdGVtLm5hbWU9PSdJbnB1dCcgfHwgaXRlbS5uYW1lPT0nSW5wdXROdW1iZXInXCI+XHJcblx0XHRcdFx0PHRleHQgdi1pZj1cIml0ZW0uc2V0dGluZy5wcmVmaXhcIiBcclxuXHRcdFx0XHRcdGNsYXNzPVwidW5pLWljb25cIiBcclxuXHRcdFx0XHRcdDpjbGFzcz1cIltpdGVtLnNldHRpbmcucHJlZml4XVwiXHJcblx0XHRcdFx0XHRAY2xpY2s9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCI+JiN4ZTU2ODs8L3RleHQ+XHJcblx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJpdGVtLmRpc2FibGVkPydpbnB1dC1kaXNhYmxlZCc6JydcIlxyXG5cdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dCc/J3RleHQnOidudW1iZXInXCIgXHJcblx0XHRcdFx0XHR2LW1vZGVsPVwiaXRlbS52YWx1ZVwiXHJcblx0XHRcdFx0XHQ6ZGlzYWJsZWQ9XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0OnN0eWxlPVwieyd3aWR0aCc6aXRlbS5zZXR0aW5nLnByZWZpeCAmJiBpdGVtLnNldHRpbmcuc3VmZml4Pyc3OCUnOml0ZW0uc2V0dGluZy5wcmVmaXggfHwgaXRlbS5zZXR0aW5nLnN1ZmZpeD8nODclJzonOTYlJ31cIiBcclxuXHRcdFx0XHRcdDpmb2N1cz1cImZvY3VzRmllbGRJZCA9PSBpdGVtLmZpZWxkSWRcIlxyXG5cdFx0XHRcdFx0QGZvY3VzPVwib250YXAoaW5kZXgsaXRlbSlcIiBcclxuXHRcdFx0XHRcdEBrZXl1cC5lbnRlcj1cIm9uRW50ZXJDaGFuZ2UoaXRlbSlcIlxyXG5cdFx0XHRcdFx0QGJsdXI9XCJvbkVudGVyQ2hhbmdlKGl0ZW0pXCJcclxuXHRcdFx0XHQvPlxyXG5cdFx0XHRcdDx0ZXh0IHYtaWY9XCJpdGVtLnNldHRpbmcuc3VmZml4XCIgXHJcblx0XHRcdFx0XHRjbGFzcz1cInVuaS1pY29uXCIgXHJcblx0XHRcdFx0XHQ6Y2xhc3M9XCJbaXRlbS5zZXR0aW5nLnN1ZmZpeF1cIlxyXG5cdFx0XHRcdFx0QGNsaWNrPVwib25FbnRlckNoYW5nZShpdGVtKVwiPiYjeGU1Njg7PC90ZXh0PlxyXG5cdFx0ICAgIDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHRcdDx2aWV3IGNsYXNzPVwidmlldy1jb250ZW50XCI+XHJcblx0XHRcdDwhLS0g5Zu+5paHL+aWh+acrCAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LWltYWdldGV4dFwiIHYtaWY9XCJwYXJhbS5TaG93X1dlbGNvbV9QYWdlPT10cnVlXCI+XHJcblx0XHRcdCAgPGRpdiBjbGFzcz1cInZpZXctaW1hZ2V0ZXh0LXVwbG9hZGxpc3RcIj5cclxuXHRcdFx0XHQ8aW1hZ2UgOnNyYz1cInBhcmFtLldlbGNvbWVfUGFnZS5JbWdcIiBcclxuXHRcdFx0XHQ6c3R5bGU9XCJ7J3dpZHRoJzpwYXJhbS5XZWxjb21lX1BhZ2UuV2lkdGgrJ3B4JywnaGVpZ2h0JzpwYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0KydweCd9XCI+PC9pbWFnZT5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dC10ZXh0XCIgXHJcblx0XHRcdFx0XHQ6c3R5bGU9XCJ7J2NvbG9yJzpwYXJhbS5XZWxjb21lX1BhZ2UuVHh0X0NvbG9yLCdmb250LXNpemUnOnBhcmFtLldlbGNvbWVfUGFnZS5Gb250X1NpemUrJ3B4JywnZm9udC1mYW1pbHknOnBhcmFtLldlbGNvbWVfUGFnZS5Gb250fVwiXHJcblx0XHRcdFx0Pnt7cGFyYW0uV2VsY29tZV9QYWdlLlRleHR9fTwvVGV4dD5cclxuXHRcdFx0ICA8L2Rpdj5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8IS0tIOWIhuaLo+eVjOmdoiAtLT5cclxuXHRcdFx0PHZpZXcgdi1pZj1cInBhcmFtLlNob3dfV2VsY29tX1BhZ2U9PWZhbHNlXCI+XHJcblx0XHRcdFx0PCEtLSDpobXnrb4gLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJkdi10YWJcIj5cclxuXHRcdFx0XHRcdDx1bmktc2VnbWVudGVkLWNvbnRyb2wgOmN1cnJlbnQ9XCJjdXJyZW50XCIgOnZhbHVlcz1cIml0ZW1zXCIgQGNsaWNrSXRlbT1cIm9uQ2xpY2tJdGVtXCJcclxuXHRcdFx0XHRcdFx0c3R5dmFyeXBlPVwiYnV0dG9uXCI+XHJcblx0XHRcdFx0XHQ8L3VuaS1zZWdtZW50ZWQtY29udHJvbD5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PCEtLSDlvoXliIbmi6PnlYzpnaIgLS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJ2aWV3LXRhYnBhZ2VcIiBpZD1cInRhYnBhbmVsXCIgdi1pZj1cImN1cnJlbnQ9PTBcIj5cclxuXHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiB2LWlmPVwiZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg9PTBcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbW9ib3hfbG9nXzIwMHg0MC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsXCIgdi1mb3I9XCIoc3R5bGUsaWkpIGluIGRldGFpbDFTdHlsZURlZkxpc3RcIiBcclxuXHRcdFx0XHRcdFx0QHRhcD1cIm9uUGFuZWxDbGljayhpaSlcIlxyXG5cdFx0XHRcdFx0XHQ6aWQ9XCIndGFicGFuZWwnK3N0eWxlLmZvcm0uaHRtbG9iaklkXCJcclxuXHRcdFx0XHRcdFx0OmNsYXNzPVwic3R5bGUuZm9ybS5odG1sb2JqSWQ9PWFjdGl2ZV9pZD8nYmstYWN0aXZlJzphY3RpdmVsaXN0W2lpXS5hY3RpdmU9PXRydWU/J2JrLWFjdGl2ZSc6JydcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWlucHV0XCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LWlucHV0XCIgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gc3R5bGUuZm9ybS5pdGVtc1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDmma7pgJrluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiaXRlbS5uYW1lIT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cIml0ZW0uZGlzYWJsZWRcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1bmktaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIhaXRlbS5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnR5cGU9XCJpdGVtLm5hbWU9PSdJbnB1dE51bWJlcic/J251bWJlcic6J3RleHQnXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnZhbHVlPVwiaXRlbS52YWx1ZVwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cIml0ZW0uZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpwbGFjZWhvbGRlcj1cIml0ZW0ucGxhY2Vob2xkZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDmoIXmoLzluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dW5pLXJvdyBjbGFzcz1cImRlbW8tdW5pLXJvd1wiIHYtaWY9XCJpdGVtLm5hbWU9PSdMYXlvdXQnXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1bmktY29sIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDpzcGFuPVwiaXRlbS5zZXR0aW5nLnNwYW5MaXN0P2l0ZW0uc2V0dGluZy5zcGFuTGlzdFtrZXldOjI0IC8gaXRlbS5zZXR0aW5nLmNvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiY29scyE9bnVsbFwiID5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwidHh0X3RpdGxlXCIgOnN0eWxlPVwieyd3aWR0aCc6Y29scy5sYWJlbFdpZHRoKydweCd9XCI+e3tjb2xzLmxhYmVsfX3vvJo8L3RleHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCIgdi1pZj1cImNvbHMuZGlzYWJsZWRcIj57e2NvbHMudmFsdWV9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVuaS1pbnB1dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtaWY9XCIhY29scy5kaXNhYmxlZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDp0eXBlPVwiY29scy5uYW1lPT0nSW5wdXROdW1iZXInPydudW1iZXInOid0ZXh0J1wiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6dmFsdWU9XCJjb2xzLnZhbHVlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD1cImNvbHMuZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6cGxhY2Vob2xkZXI9XCJjb2xzLnBsYWNlaG9sZGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1jb2w+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VuaS1yb3c+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdCA8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiPlxyXG5cdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCB2LWlmPVwicGFyYW0uU3ViX1BhZ2VbMF0uU2VsZWN0X0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiA6Y2hlY2tlZD1cInN0eWxlLlNlbEJ1dF9DaGVja2VkXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSA8dGV4dD48L3RleHQ+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cInNhdmFJdGVtKGlpKVwiIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVswXS5PS19CdXR0b249PXRydWVcIj7kv53lrZg8L0J1dHRvbj4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxJdGVtKGlpKVwiIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVswXS5EZWxfQnV0dG9uPT10cnVlXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwhLS0g5bey5YiG5ouj55WM6Z2iIC0tPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwidmlldy10YWJwYWdlMlwiIHYtaWY9XCJjdXJyZW50PT0xXCI+XHJcblx0XHRcdFx0XHQ8aW1hZ2UgY2xhc3M9XCJsb2dvXCIgdi1pZj1cImRldGFpbDJTdHlsZURlZkxpc3QubGVuZ3RoPT0wXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL21vYm94X2xvZ18yMDB4NDAucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbFwiIHYtZm9yPVwiKHN0eWxlLGlpKSBpbiBkZXRhaWwyU3R5bGVEZWZMaXN0XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkdi1wYW5lbC1pbnB1dFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gc3R5bGUuZm9ybS5pdGVtc1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PCEtLSDmma7pgJrluIPlsYAgLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dmlldyB2LWlmPVwiaXRlbS5uYW1lIT0nTGF5b3V0J1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOml0ZW0ubGFiZWxXaWR0aCsncHgnfVwiPnt7aXRlbS5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvcm0taXRlbS1zcGFuXCI+e3tpdGVtLnZhbHVlfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIOagheagvOW4g+WxgCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdDx1bmktcm93IGNsYXNzPVwiZGVtby11bmktcm93XCIgdi1pZj1cIml0ZW0ubmFtZT09J0xheW91dCdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHVuaS1jb2wgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OnNwYW49XCIyNCAvIGl0ZW0uc2V0dGluZy5jb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHYtZm9yPVwiKGNvbHMsa2V5KSBpbiBpdGVtLnNldHRpbmcuY29sTGlzdFwiIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHZpZXcgdi1pZj1cImNvbHMhPW51bGxcIiA+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cInR4dF90aXRsZVwiIDpzdHlsZT1cInsnd2lkdGgnOmNvbHMubGFiZWxXaWR0aCsncHgnfVwiPnt7Y29scy5sYWJlbH1977yaPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb3JtLWl0ZW0tc3BhblwiPnt7Y29scy52YWx1ZX19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC91bmktY29sPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bmktcm93PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImR2LXBhbmVsLWJ1dHRvblwiPlxyXG5cdFx0XHRcdFx0XHRcdDxjaGVja2JveC1ncm91cCB2LWlmPVwicGFyYW0uU3ViX1BhZ2VbMV0uU2VsZWN0X0J1dHRvbj09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y2hlY2tib3ggOnZhbHVlPVwic3R5bGUuU2VsQnV0X0NoZWNrZWRcIiA6Y2hlY2tlZD1cInN0eWxlLlNlbEJ1dF9DaGVja2VkXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSA8dGV4dD48L3RleHQ+IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPGJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIEBjbGljaz1cInNhdmFEYXRhT2JqKHN0eWxlLGlpKVwiIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVsxXS5PS19CdXR0b249PXRydWVcIj7kv53lrZg8L0J1dHRvbj4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwid2FyblwiIEB0YXA9XCJkZWxEYXRhT2JqKHN0eWxlLGlpKVwiIHYtaWY9XCJwYXJhbS5TdWJfUGFnZVsxXS5EZWxfQnV0dG9uPT10cnVlXCI+5Yig6ZmkPC9idXR0b24+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyB2LWlmPVwiY3VycmVudD09MCAmJiBwYXJhbS5TdWJfUGFnZVswXS5PS19CdXR0b249PXRydWVcIj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdCAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQHRhcD1cIm9rXCIgY2xhc3M9XCJidG5fYWRkXCI+56Gu5a6aPC9idXR0b24+XHJcblx0XHQ8L3ZpZXc+XHJcblx0XHQ8dmlldyB2LWlmPVwiY3VycmVudD09MSAmJiBwYXJhbS5TdWJfUGFnZVsxXS5PS19CdXR0b249PXRydWVcIj5cclxuXHRcdFx0PGJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJjYW5jZWxcIiBjbGFzcz1cImJ0bl9jYW5jZWxcIj7lj5bmtog8L2J1dHRvbj5cclxuXHRcdCAgICA8YnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgQHRhcD1cIm9rMlwiIGNsYXNzPVwiYnRuX2FkZFwiPuehruWumjwvYnV0dG9uPlxyXG5cdFx0PC92aWV3PlxyXG4gICAgPC92aWV3PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi8uLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtb2R1bGVzOntcclxuXHRCYXNlNjQsXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHQgIHRpdGxlOifliIbmi6MnLFxyXG4gICAgICBDbHNJRDogXCJTb3J0aW5nX0RldGFpbFwiLFxyXG4gICAgICBDbHNJRDI6IFwiU29ydGluZ19SZXN1bHRcIixcclxuICAgICAgcGFyYW06IHt9LFxyXG5cdCAgZm9jdXNGaWVsZElkOlwiXCIsXHJcblx0ICBoZWFkX3N0eWxlZGVmOntcclxuXHRcdGZvcm06e1xyXG5cdFx0XHRpdGVtczpbXVxyXG5cdFx0fVxyXG5cdCAgfSxcclxuICAgICAgZGV0YWlsMV9zdHlsZWRlZjp7fSxcclxuICAgICAgZGV0YWlsMVN0eWxlRGVmTGlzdDpbXSxcclxuICAgICAgZGV0YWlsMl9zdHlsZWRlZjp7fSxcclxuICAgICAgZGV0YWlsMlN0eWxlRGVmTGlzdDpbXSwvL+WIhumhteaVsOaNrlxyXG5cdCAgZGV0YWlsMUV4dERhdGE6IHt9LFxyXG5cdCAgZGV0YWlsMkV4dERhdGE6IHt9LCAvL+WIhumhteaJqeWxleaVsOaNrlxyXG5cdCAgLy8g5YiG5q615Zmo5pWw5o2uXHJcblx0ICBjdXJyZW50OiAwLFxyXG5cdCAgQmVmb3JlX09LX0V2ZW50Ont9LFxyXG4gICAgICBBZnRlcl9PS19FdmVudDp7fSxcclxuXHQgIEJlZm9yZV9EZWxfRXZlbnQ6IHt9LFxyXG5cdCAgQWZ0ZXJfRGVsX0V2ZW50OiB7fSxcclxuXHQgIGl0ZW1zOiBbXSxcclxuICAgICAgYWN0aXZlX2lkOicnLFxyXG5cdCAgYWN0aXZlbGlzdDpbXSxcclxuICAgIH07XHJcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG5cdC8vIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xyXG5cdHVuaS5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoeyB0aXRsZTogb3B0aW9ucy50aXRsZW5hbWV9KTsgLy/orr7nva7pobbpg6jmoIfpopggXHJcblx0dGhpcy4kZGF0YS50aXRsZSA9IG9wdGlvbnMudGl0bGVuYW1lO1xyXG5cdHRoaXMuJGRhdGEucGFyYW0gPSBKU09OLnBhcnNlKG9wdGlvbnMucGFyYW0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEucGFyYW0pO1xyXG5cdCAvL+iOt+WPluaVsOaNruexu+eahOiHquWumuS5ieihqOWNleWPguaVsFxyXG5cdHRoaXMuSGVhZF9VSVN0eWxlR2V0SW5mbyh0aGlzLiRkYXRhLkNsc0lELHRoaXMuJGRhdGEucGFyYW0uSW5wdXRfVUlfU3R5bGUuSUQpO1xyXG5cdFxyXG5cdC8v5Yqg6L295Yid5aeL55WM6Z2iXHJcblx0aWYodGhpcy4kZGF0YS5wYXJhbS5TaG93X1dlbGNvbV9QYWdlKXtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLkltZyA9IHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLkltZy5yZXBsYWNlKC8gL2csJysnKTtcclxuXHQgIHRoaXMuJGRhdGEucGFyYW0uV2VsY29tZV9QYWdlLldpZHRoID0gcGFyc2VJbnQodGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuV2lkdGgpO1xyXG5cdCAgdGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0ID0gcGFyc2VJbnQodGhpcy4kZGF0YS5wYXJhbS5XZWxjb21lX1BhZ2UuSGVpZ2h0KTtcclxuXHR9XHJcblx0Ly/liqDovb1UYWLpobXnrb5cclxuXHR0aGlzLiRkYXRhLml0ZW1zLnB1c2godGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKTtcclxuXHR0aGlzLiRkYXRhLml0ZW1zLnB1c2godGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVsxXS5OYW1lKTtcclxuXHR0aGlzLkRldGFpbDFfVUlzdHlsZUdldEluZm8odGhpcy5DbHNJRCx0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLlVJX1N0eWxlLklEKTtcclxuXHR0aGlzLkRldGFpbDJfVUlzdHlsZUdldEluZm8odGhpcy5DbHNJRDIsdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVsxXS5VSV9TdHlsZS5JRCk7XHJcblx0XHJcblx0Y29uc29sZS5sb2codGhpcy4kZGF0YS5wYXJhbSk7XHJcbiAgfSxcdFxyXG4gIG1ldGhvZHM6IHtcclxuXHQgIHNldERhdGE6IGZ1bmN0aW9uKG9iaikge1xyXG5cdCAgXHRsZXQgdGhhdCA9IHRoaXM7XHJcblx0ICBcdGxldCBrZXlzID0gW107XHJcblx0ICBcdGxldCB2YWwsIGRhdGE7XHJcblx0ICBcclxuXHQgIFx0T2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG5cdCAgXHRcdGtleXMgPSBrZXkuc3BsaXQoXCIuXCIpO1xyXG5cdCAgXHRcdHZhbCA9IG9ialtrZXldO1xyXG5cdCAgXHRcdGRhdGEgPSB0aGF0LiRkYXRhO1xyXG5cdCAgXHRcdGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkyLCBpbmRleCkge1xyXG5cdCAgXHRcdFx0aWYgKGluZGV4ICsgMSA9PSBrZXlzLmxlbmd0aCkge1xyXG5cdCAgXHRcdFx0XHR0aGF0LiRzZXQoZGF0YSwga2V5MiwgdmFsKTtcclxuXHQgIFx0XHRcdH0gZWxzZSB7XHJcblx0ICBcdFx0XHRcdGlmICghZGF0YVtrZXkyXSkge1xyXG5cdCAgXHRcdFx0XHR0aGF0LiRzZXQoZGF0YSwga2V5Miwge30pO1xyXG5cdCAgXHRcdFx0XHR9XHJcblx0ICBcdFx0XHR9XHJcblx0ICBcdFx0ICBkYXRhID0gZGF0YVtrZXkyXTtcclxuXHQgIFx0XHR9KTtcclxuXHQgIFx0fSk7XHJcblx0ICB9LFxyXG5cdCAgXHJcbiAgICBhc3luYyBIZWFkX1VJU3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0Ly8gdGhpcy5mb3JtID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZik7XHJcblx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdCAgICBpZihlbGUudXNlRGljdD09dHJ1ZSl7IC8v5Yik5patdXNlRGljdOaYr+WQpuS9v+eUqOWtl+WFuFxyXG5cdFx0XHRcdCAgICAgICAgYXdhaXQgdGhpcy5EaWN0R2V0SW5mbyhlbGUuYmluZC5kaWN0LGluZGV4LCdtYXN0Jyk7XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHRcdGlmKCR0aGlzLmZvY3VzRmllbGRJZCA9PSBcIlwiKVxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpZihlbGUubmFtZT09J0lucHV0JyB8fCBlbGUubmFtZT09J0lucHV0TnVtYmVyJylcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdCAgJHRoaXMuc2V0RGF0YSh7Zm9jdXNGaWVsZElkOmVsZS5maWVsZElkfSlcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzFcIixjb250ZW50OnJldC5lcnJfbXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMS4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuICAgICAgICBcclxuICAgIH0sXHJcbiAgICBhc3luYyBEZXRhaWwxX1VJc3R5bGVHZXRJbmZvKGNsYXNzX2lkLHN0eWxlX2lkKXsgICAvL+iOt+WPluiHquWumuS5ieihqOWNleagt+W8j1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHRcdGNsYXNzX2lkOmNsYXNzX2lkLFxyXG5cdFx0XHR1aV9zdHlsZV9pZDpzdHlsZV9pZCxcclxuXHRcdH07XHJcblx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnVUlTdHlsZUdldEluZm8nLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgc3R5bGVkZWY9XCJcIjtcclxuXHRcdFx0XHRpZihyZXQucmVzdWx0LnN0eWxlX2RlZil7XHJcblx0XHRcdFx0ICAgICAvL21vYm94MueahHN0eWxlX2RlZuaYr2pzb27lrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIHN0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWYucmVwbGFjZSgvXFxcXC9nLFwiXCIpO1xyXG5cdFx0XHRcdCAgICAgLy9tb2JveDPnmoRzdHlsZV9kZWbmmK9iYXNlNjTlrZfnrKbkuLJcclxuXHRcdFx0XHQgICAgIGlmKCFyZXQucmVzdWx0LnN0eWxlX2RlZi5pbmNsdWRlcygnXCInKSkgc3R5bGVkZWYgPSBCYXNlNjQuZGVjb2RlKHJldC5yZXN1bHQuc3R5bGVfZGVmKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZiA9IHJldC5yZXN1bHQuc3R5bGVfZGVmPyBKU09OLnBhcnNlKHN0eWxlZGVmKToge307XHJcblx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZi5TZWxCdXRfQ2hlY2tlZCA9IHRydWU7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdC8vIHZhciBhYSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGV0YWlsMV9zdHlsZWRlZik7XHJcblx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKEpTT04ucGFyc2UoYWEpKTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChhc3luYyAoZWxlLGluZGV4KSA9PiB7XHJcblx0XHRcdFx0ICAgIGlmKGVsZS51c2VEaWN0PT10cnVlKXsgLy/liKTmlq11c2VEaWN05piv5ZCm5L2/55So5a2X5YW4XHJcblx0XHRcdFx0ICAgICAgICBhd2FpdCB0aGlzLkRpY3RHZXRJbmZvKGVsZS5iaW5kLmRpY3QsaW5kZXgsJ3N1YicpO1xyXG5cdFx0XHRcdCAgICB9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vMlwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmNhdGNoKGV4PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68yLjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuICAgIGFzeW5jIERldGFpbDJfVUlzdHlsZUdldEluZm8oY2xhc3NfaWQsc3R5bGVfaWQpeyAgIC8v6I635Y+W6Ieq5a6a5LmJ6KGo5Y2V5qC35byPXHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvPXtcclxuXHRcdFx0Y2xhc3NfaWQ6Y2xhc3NfaWQsXHJcblx0XHRcdHVpX3N0eWxlX2lkOnN0eWxlX2lkLFxyXG5cdFx0fTtcclxuXHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdVSVN0eWxlR2V0SW5mbycsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHJldCk7XHJcblx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdHZhciBzdHlsZWRlZj1cIlwiO1xyXG5cdFx0XHRcdGlmKHJldC5yZXN1bHQuc3R5bGVfZGVmKXtcclxuXHRcdFx0XHQgICAgIC8vbW9ib3gy55qEc3R5bGVfZGVm5pivanNvbuWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgc3R5bGVkZWYgPSByZXQucmVzdWx0LnN0eWxlX2RlZi5yZXBsYWNlKC9cXFxcL2csXCJcIik7XHJcblx0XHRcdFx0ICAgICAvL21vYm94M+eahHN0eWxlX2RlZuaYr2Jhc2U2NOWtl+espuS4slxyXG5cdFx0XHRcdCAgICAgaWYoIXJldC5yZXN1bHQuc3R5bGVfZGVmLmluY2x1ZGVzKCdcIicpKSBzdHlsZWRlZiA9IEJhc2U2NC5kZWNvZGUocmV0LnJlc3VsdC5zdHlsZV9kZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmID0gcmV0LnJlc3VsdC5zdHlsZV9kZWY/IEpTT04ucGFyc2Uoc3R5bGVkZWYpOiB7fTtcclxuXHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmLlNlbEJ1dF9DaGVja2VkID0gdHJ1ZTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor68zXCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzMuMVwiLGNvbnRlbnQ6ZXguZXJyTXNnLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0fSk7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG5cdGFzeW5jIERpY3RHZXRJbmZvKGRpY3QsaW5kZXgsdHlwZSl7IC8vTW9ib3gz5b6X5Yiw5b6X5Yiw5a2X5YW45L+h5oGv5a2X5YW46aG55YiX6KGoXHJcblx0XHR0aGlzLmRhdGE9W107XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0dmFyIGRhdGFJbmZvID17XHJcblx0XHRcdGRpY3RfaWQ6IGRpY3QuaWQsXHJcblx0XHRcdGRpY3RfbmFtZTogZGljdC5uYW1lXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ0RpY3RHZXRJbmZvJyxkYXRhSW5mbykudGhlbihhc3luYyAoc3VjY2Vzcyk9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdGlmIChzdWNjZXNzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHR2YXIgbGlzdD1bXTtcclxuXHRcdFx0XHR2YXIgaXRlbU5hbWU9Jyc7XHJcblx0XHRcdFx0c3VjY2Vzcy5yZXN1bHQuZGljdF9pdGVtX2xpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdCAgICBpZihpdGVtLmlzX2RlZmF1bHQ9PScxJylcclxuXHRcdFx0XHQgICAgICAgIGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xyXG5cdFx0XHRcdCAgICBsaXN0LnB1c2goe1xyXG5cdFx0XHRcdCAgICAgICAgdGV4dDppdGVtLnZhbHVlLFxyXG5cdFx0XHRcdCAgICAgICAgdmFsdWU6aXRlbS5uYW1lLFxyXG5cdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHRcdFx0aWYodHlwZT09J21hc3QnKXsvL+aciem7mOiupOWAvO+8jOaYvuekuum7mOiupOWAvFxyXG5cdFx0XHRcdFx0aWYoaXRlbU5hbWUpe1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLnZhbHVlPWl0ZW1OYW1lO1xyXG5cdFx0XHRcdFx0XHR2YXIgYXR0ciA9ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZmllbGRJZDtcclxuXHRcdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2F0dHJdID0gaXRlbU5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXNbaW5kZXhdLmRpY3Q9bGlzdDtcclxuXHRcdFx0XHRcdHZhciBoZWFkX3N0eWxlZGVmID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgkdGhpcy5oZWFkX3N0eWxlZGVmKSk7XHJcblx0XHRcdFx0XHQkdGhpcy5oZWFkX3N0eWxlZGVmPVtdO1xyXG5cdFx0XHRcdFx0JHRoaXMuaGVhZF9zdHlsZWRlZiA9IGhlYWRfc3R5bGVkZWY7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2V7XHJcblx0XHRcdFx0XHRpZihpdGVtTmFtZSl7XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0udmFsdWU9aXRlbU5hbWU7XHJcblx0XHRcdFx0XHRcdHZhciBhdHRyID0gJHRoaXMuZGV0YWlsMV9zdHlsZWRlZi5mb3JtLml0ZW1zW2luZGV4XS5maWVsZElkO1xyXG5cdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmLmZvcm0ubW9kZWxbYXR0cl0gPSBpdGVtTmFtZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWYuZm9ybS5pdGVtc1tpbmRleF0uZGljdD1saXN0O1xyXG5cdFx0XHRcdFx0dmFyIGRldGFpbDFfc3R5bGVkZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCR0aGlzLmRldGFpbDFfc3R5bGVkZWYpKTtcclxuXHRcdFx0XHRcdCR0aGlzLmRldGFpbDFfc3R5bGVkZWY9W107XHJcblx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxX3N0eWxlZGVmID0gZGV0YWlsMV9zdHlsZWRlZjtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor685LjFcIixjb250ZW50OnN1Y2Nlc3MuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzlcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0XHJcblx0b250YXAoaW5kZXgsaXRlbSl7IC8v5omr56CB5Yqf6IO9XHJcblx0XHQvLyB2YXIgJGVsZSA9IGU7XHJcblx0XHRnZXRBcHAoKS5vblNjYW4oKHJlc3VsdCk9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzdWx0LmRlY29kZWRhdGEpO1xyXG5cdFx0XHRpdGVtLnZhbHVlID0gcmVzdWx0LmRlY29kZWRhdGE7XHJcblx0XHRcdC8vdW5pLmhpZGVLZXlib2FyZCgpO1xyXG5cdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcclxuXHRcdFx0Y29uc29sZS5sb2coaXRlbSk7XHJcblx0XHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHRcdCAgICBpdGVtLm9sZHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR2YXIgYXR0ciA9IGl0ZW0uZmllbGRJZDtcclxuXHRcdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0dmFyIG9uQ2hhbmdlRXZlbnQgPSBpdGVtLmJpbmQub25DaGFuZ2VFdmVudDsgICAvL+WGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCA9IGl0ZW0uYmluZC5vblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudDsgICAvL+WQjuWbvuagh+eCueWHu+S6i+S7tlxyXG5cdFx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdFx0dmFyIGlzZmxhZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0ICAgIGlmKG9uQ2hhbmdlRXZlbnQuaWQpeyAgIC8v5YaF5a655Y+Y5YyW5ZCO5LqL5Lu2XHJcblx0XHRcdCAgICAgICR0aGlzLm9uQ2hhbmdlKG9uQ2hhbmdlRXZlbnQpOyBcclxuXHRcdFx0ICAgIH1cclxuXHRcdFx0XHRpZihpdGVtLnZhbHVlKXsgLy/ovpPlhaXmoYbkuI3kuLrnqbpcclxuXHRcdFx0XHRcdCAgLy/liJ3lp4vljJbvvIzkuIvkuKrovpPlhaXmoYZmb2N1c+WxnuaAp1xyXG5cdFx0XHRcdFx0ICBjb25zdCBjdXJJbmRleCA9ICAkdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZmluZEluZGV4KChlbGUsIGluZGV4MiwgYXJyKSA9PiB7XHJcblx0XHRcdFx0XHQgICAgcmV0dXJuIChlbGUubmFtZT09J0lucHV0JyB8fCBlbGUubmFtZT09J0lucHV0TnVtYmVyJykgICYmIGluZGV4MiA+IGluZGV4O1xyXG5cdFx0XHRcdFx0ICB9KVxyXG5cdFx0XHRcdFx0ICBpZihjdXJJbmRleCA+IC0xKXtcclxuXHRcdFx0XHRcdCAgXHQkdGhpcy5zZXREYXRhKHtmb2N1c0ZpZWxkSWQ6ICR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtc1tjdXJJbmRleF0uZmllbGRJZH0pXHJcblx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0Ly8gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5oaWRlS2V5Ym9hcmQoKTtcclxuXHRcdFx0XHRcdFx0Ly8gfSwxMDAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrKG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdFx0ICAgIC8vICAgdGhpcy5vblN1ZmZpeENsaWNrQ2FsbGJhY2sob25TdWZmaXhDbGlja0V2ZW50KTtcclxuXHRcdFx0ICAgIC8vIH1cclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9LFxyXG5cdG9uRW50ZXJDaGFuZ2UoaXRlbSl7IC8v5Zue6L2m77yM54K55Ye75oyJ6ZKu77yM5Y+W5raI6IqC54K55LqL5Lu2XHJcblx0XHQvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuXHRcdGlmKGl0ZW0ub2xkdmFsdWUgIT0gaXRlbS52YWx1ZSl7XHJcblx0XHQgICAgaXRlbS5vbGR2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBhdHRyID0gaXRlbS5maWVsZElkO1xyXG5cdFx0XHR0aGlzLmhlYWRfc3R5bGVkZWYuZm9ybS5tb2RlbFthdHRyXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdHZhciBvbkNoYW5nZUV2ZW50ID0gaXRlbS5iaW5kLm9uQ2hhbmdlRXZlbnQ7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdFx0dmFyIG9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50ID0gaXRlbS5iaW5kLm9uU3VmZml4Q2xpY2tDYWxsYmFja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75LqL5Lu2XHJcblx0XHRcdHZhciBvblN1ZmZpeENsaWNrRXZlbnQgPSBpdGVtLmJpbmQub25TdWZmaXhDbGlja0V2ZW50OyAgIC8v5ZCO5Zu+5qCH54K55Ye75Zue6LCDXHJcblx0XHRcdHZhciBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHJcblx0XHQgICAgaWYob25DaGFuZ2VFdmVudC5pZCl7ICAgLy/lhoXlrrnlj5jljJblkI7kuovku7ZcclxuXHRcdCAgICAgIHRoaXMub25DaGFuZ2Uob25DaGFuZ2VFdmVudCk7IFxyXG5cdFx0ICAgIH1cclxuXHRcdCAgICAvLyBpZihvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vkuovku7ZcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGljayhvblN1ZmZpeENsaWNrQ2FsbGJhY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0ICAgIC8vIGlmKG9uU3VmZml4Q2xpY2tFdmVudC5pZCl7ICAgLy/lkI7lm77moIfngrnlh7vlm57osINcclxuXHRcdCAgICAvLyAgIHRoaXMub25TdWZmaXhDbGlja0NhbGxiYWNrKG9uU3VmZml4Q2xpY2tFdmVudCk7XHJcblx0XHQgICAgLy8gfVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0Z2V0RGV0YWlsQXR0ckxpc3QobGlzdCxzZWxlY3RCdXR0b24pXHJcblx0e1xyXG5cdFx0Y29uc3QgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHRcdGxpc3QuZm9yRWFjaChzdHlsZT0+e1xyXG5cdFx0ICB2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0XHQgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdCAgICBpZihpdGVtLm5hbWUgPT0gXCJMYXlvdXRcIil7ICAvL+WIpOaWreaYr+WQpuaYr+agheagj+agvOW8j1xyXG5cdFx0ICAgICAgaXRlbS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2xzID0+IHtcclxuXHRcdCAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0XHQgICAgICB9KTtcclxuXHRcdCAgICB9ZWxzZVxyXG5cdFx0ICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0XHQgIH0pO1xyXG5cdFx0ICBcclxuXHRcdCAgZGV0YWlsX2F0dHJbJ2lkJ10gPSBzdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0ICBpZihzZWxlY3RCdXR0b249PXRydWUpeyAvL+WIpOaWremAieaLqeaMiemSruaYr+WQpuS4unRydWVcclxuXHRcdCAgICBpZihzdHlsZS5TZWxCdXRfQ2hlY2tlZD09dHJ1ZSkgXHJcblx0XHQgICAgICBkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHRcdCAgfSBlbHNlIFxyXG5cdFx0ICAgIGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcblx0XHRsaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHRcdCAgc3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0ICAgIGZvcih2YXIga2V5IGluIGRldGFpbEF0dHJMaXN0KXtcclxuXHRcdCAgICAgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsQXR0ckxpc3Rba2V5XVsnaWQnXSl7XHJcblx0XHQgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGV0YWlsQXR0ckxpc3Rba2V5XSk7XHJcblx0XHQgICAgICAgIHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0ICAgICAgICBrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG5cdFx0ICAgICAgICAgIGlmKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0ICAgICAgICB9KTtcclxuXHRcdCAgICAgICAgaWYoaXNmbGFnKSB7XHJcblx0XHQgICAgICAgICAgZGV0YWlsQXR0ckxpc3RbYXR0ci5hdHRyXSA9IGF0dHIudmFsdWU7XHJcblx0XHQgICAgICAgIH1cclxuXHRcdFx0ICB9XHJcblx0XHQgICAgfSBcclxuXHRcdCAgfSk7XHJcblx0XHR9KTtcclxuXHRcdFxyXG5cdFx0Y29uc3QganNvbmxpc3Q9W107XHJcblx0XHRkZXRhaWxBdHRyTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuXHRcdFx0anNvbmxpc3QucHVzaCh7XHJcblx0XHRcdCAgaWQ6YXR0cltcImlkXCJdfHwgXCJcIixcclxuXHRcdFx0ICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0dmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuXHRcdFx0ICB9KSkuZmlsdGVyKChhKT0+e3JldHVybiBhLmF0dHIgIT0gXCJpZFwifSlcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBqc29ubGlzdDtcclxuXHR9LFxyXG5cdFxyXG5cdC8vIOWGheWuueWPmOWMluWQjuS6i+S7tlxyXG5cdGFzeW5jIG9uQ2hhbmdlKGV2ZW50KSB7XHJcblx0ICAgIHRyeSB7XHJcblx0ICAgICAgICBpZiAoZXZlbnQuaWQpIHtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvL+iOt+WPluihqOWktOWxnuaAp1xyXG5cdFx0XHR2YXIgaGVhZF9hdHRyID0ge307XHJcblx0XHRcdFx0dGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdFx0XHRcdGhlYWRfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHR9KTtcclxuXHQgICAgICAgICAgdmFyIG9ial9hdHRyID0gdGhpcy5oZWFkX3N0eWxlZGVmLmZvcm0ubW9kZWw7XHJcblx0ICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9ial9hdHRyKTtcclxuXHQgICAgICAgICAgdmFyIGlucHV0X3BhcmFtID0gQmFzZTY0LmVuY29kZShcclxuXHQgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShcclxuXHQgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGhlYWRfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdCAgICAgICAgICAgICAgICBhdHRyOiBhLFxyXG5cdCAgICAgICAgICAgICAgICB2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcblx0ICAgICAgICAgICAgICB9KSlcclxuXHQgICAgICAgICAgICApXHJcblx0ICAgICAgICAgICk7XHJcblx0XHRcdCAgdmFyICR0aGlzID0gdGhpcztcclxuXHRcdFx0ICBjb25zdCBqc29uTGlzdCA9IFtdXHJcblx0XHRcdCAgY29uc3QgaXRlbWxpc3QxPSAkdGhpcy5nZXREZXRhaWxBdHRyTGlzdCgkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LCR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLlNlbGVjdF9CdXR0b24pXHJcblx0XHRcdCAgY29uc3QgaXRlbWxpc3QyPSAkdGhpcy5nZXREZXRhaWxBdHRyTGlzdCgkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0LCR0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLlNlbGVjdF9CdXR0b24pXHJcblx0XHRcdCAgXHJcblx0XHRcdCAganNvbkxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUsaXRlbV9saXN0Oml0ZW1saXN0MSxleHRfZGF0YTokdGhpcy5kZXRhaWwxRXh0RGF0YX0pXHJcblx0XHRcdCAganNvbkxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUsaXRlbV9saXN0Oml0ZW1saXN0MixleHRfZGF0YTokdGhpcy5kZXRhaWwyRXh0RGF0YX0pXHJcblx0XHRcdCBcclxuXHRcdFx0ICBjb25zdCBkYXRhX2pzb24gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0XHQgICAgICBKU09OLnN0cmluZ2lmeShqc29uTGlzdClcclxuXHRcdFx0ICApO1xyXG5cdFx0XHQgIHZhciBkYXRhSW5mbz17XHJcblx0ICAgICAgICAgICAgZWRfdHlwZTogMCxcclxuXHRcdFx0XHRzdGFydF90cmFuc2FjdGlvbjogJycsXHJcblx0ICAgICAgICAgICAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLmNsc0lkLFxyXG5cdFx0XHRcdGNsYXNzX25hbWU6ICcnLFxyXG5cdCAgICAgICAgICAgIGV2ZW50X2lkOiBldmVudC5pZCxcclxuXHRcdFx0XHRldmVudF9uYW1lOiAnJyxcclxuXHRcdFx0XHRkYXRhX29ial9pZDogJycsXHJcblx0ICAgICAgICAgICAgb2JqX2F0dHI6IG9ial9hdHRyLFxyXG5cdFx0XHRcdHByal9pZDogJycsXHJcblx0XHRcdFx0cmVmX2Nsc19pZDogJycsXHJcblx0XHRcdFx0cmVsX29ial9pZDogJycsXHJcblx0XHRcdFx0dXNlcl9sb2dpbjogJycsXHJcblx0XHRcdFx0ZGF0YV9qc29uOiBkYXRhX2pzb24sXHJcblx0XHRcdFx0Y29tcG9zZV9pbmZvOiAnJyxcclxuXHRcdFx0XHRleHRfaW5mbzogXCJcIixcclxuXHRcdFx0XHRnbG9iYWxfYXR0cjogJycsXHJcblx0ICAgICAgICAgICAgaW5wdXRfcGFyYW06IGlucHV0X3BhcmFtLFxyXG5cdCAgICAgICAgICB9O1xyXG5cdFx0XHQgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdydW5DdXN0b21FdmVudCcsZGF0YUluZm8pLnRoZW4ocmV0PT57XHJcblx0XHRcdCAgXHQvLyBjb25zb2xlLmxvZyhyZXQpO1xyXG5cdFx0XHQgIFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcmV0LnJlc3VsdDsgXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0LnJldCAhPSAwKSB7XHJcblx0XHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0ICAgIGlmIChyZXN1bHQucmV0ID09IDgwMSkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHQgICAgZWxzZSB1bmkuc2hvd01vZGFsKHt0aXRsZTon5o+Q56S6Jyxjb250ZW50OnRpcCsnLOaPkOekujonK3Jlc3VsdC5yZXQsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHR2YXIgdGlwID0gcmVzdWx0LmluZm8gPyB0eXBlb2YgcmVzdWx0LmluZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuaW5mbyA6IHJlc3VsdC5pbmZvLmpvaW4oJzxici8+JykgOiAnJztcclxuXHRcdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0aWYocmVzdWx0LnJlc3VsdF90eXBlID09IDAgJiYgcmVzdWx0LmFjdGlvbil7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0LmFjdGlvbi5mb3JFYWNoKGl0ZW09PntcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIil7IC8v5YiG5ouj5LitXHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRkYXRhLnBhcmFtLlNob3dfV2VsY29tX1BhZ2U9ZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX2NvbnRlbnRcIil7ICAvL+W3suWIhuaLo1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5wYXJhbS5TaG93X1dlbGNvbV9QYWdlPWZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2YWx1ZS5jbGVhciA9PSB0cnVlICYmICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoPjAgJiYgdmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpeyAvL+WIpOaWreaYr+WQpua4heepuumhteetvuWGheWuuSzmraPlnKjliIbmi6PmmK/lkKbmnInmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfns7vnu5/mo4DmtYvliLDmnInlvoXliIbmi6PkuK3nmoTmlbDmja7vvIznu6fnu63mk43kvZzkvJrmuIXnqbrvvIzmmK/lkKbnu6fnu63vvJ8nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy52aWV3QWNlaW9uQ29udGVudCh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZih2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2VsZWN0X3N1YnRhYmxlX3BhZ2Vfcm93XCIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB2YWx1ZSA9IHtcInBhZ2VfbmFtZVwiOlwi56CB55uY5LitXCIsIFwicm93XCI6e1wiaWRcIjpcInh4XCJ9fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKGVsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy5hY3RpdmVsaXN0W2luZGV4XS5hY3RpdmUgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICBpZihlbGUuZm9ybS5vYmpJZCA9PSB2YWx1ZS5yb3cuaWQpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsZS5TZWxCdXRfQ2hlY2tlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuYWN0aXZlX2lkID0gZWxlLmZvcm0uaHRtbG9iaklkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8v6Ieq5Yqo5rua5Yqo5Yiw5oyH5a6a5YWD57SgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pLmNyZWF0ZVNlbGVjdG9yUXVlcnkoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAuc2VsZWN0KFwiI3RhYnBhbmVsXCIpLy/lr7nlupTlpJblsYLoioLngrlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgLmJvdW5kaW5nQ2xpZW50UmVjdCgoY29udGFpbmVyKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICB1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAuc2VsZWN0KFwiI3RhYnBhbmVsXCIrZWxlLmZvcm0uaHRtbG9iaklkKS8v55uu5qCH6IqC54K5XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAuYm91bmRpbmdDbGllbnRSZWN0KCh0YXJnZXQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgICAgICB1bmkucGFnZVNjcm9sbFRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgICAgICBzY3JvbGxUb3A6IHRhcmdldC50b3AgLSBjb250YWluZXIudG9wLC8v5rua5Yqo5Yiw5a6e6ZmF6Led56a75piv5YWD57Sg6Led56a76aG26YOo55qE6Led56a75YeP5Y675pyA5aSW5bGC55uS5a2Q55qE5rua5Yqo6Led56a7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICAgICAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgICB9KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgICAgICAgLmV4ZWMoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICAgfSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5leGVjKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInJlbW92ZV9zdWJ0YWJsZV9wYWdlX3Jvd1wiKXsgIC8v5riF6Zmk6Z2i5p2/5Lit5oyH5a6aaWTnmoTmlbDmja5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHZhbHVlLnBhZ2VfbmFtZSA9PSAkdGhpcy5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKXsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL+a4hemZpOmdouadv+S4reaMh+Wummlk55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUucm93LmZvckVhY2gocm93PT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKGVsZSxpbmRleCk9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZWxlLmZvcm0ub2JqSWQgPT0gcm93LmlkKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnNwbGljZShpbmRleCwxKTsgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY3Rpb25TZXRSb3coIGl0ZW0udmFsdWUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3N1YnRhYmxlX3BhZ2VfZXh0X2RhdGFcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpIHsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwxRXh0RGF0YTp2YWx1ZS5leHRfZGF0YX0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwyRXh0RGF0YTp2YWx1ZS5leHRfZGF0YX0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJjbGVhcl9zdWJwYWdlX3Jvd3NcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpIHsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwxU3R5bGVEZWZMaXN0OltdLGRldGFpbDFFeHREYXRhOnt9fSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNldERhdGEoe2RldGFpbDJTdHlsZURlZkxpc3Q6W10sZGV0YWlsMkV4dERhdGE6e319KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X2RsZ19jdXJyZW50X2VkaXRfYXR0clwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCR0aGlzLmZvY3VzRmllbGRJZCA9PSBpdGVtLnZhbHVlKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNldERhdGEoe2ZvY3VzRmllbGRJZDogXCJcIn0pXHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNldERhdGEoe2ZvY3VzRmllbGRJZDppdGVtLnZhbHVlfSlcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9kbGdfYXR0clwiKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgLy8gdmFsdWUgPSB7XCJhdHRyXCI6XCJ4eHhcIiwgXCJ2YWx1ZVwiOlwieHh4XCJ9XHJcblx0XHRcdFx0XHRcdFx0XHQgIHZhciBkYXRhID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goYXN5bmMgKGVsZSxpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIGRhdGEuZm9yRWFjaChhc3luYyAoZWxlMixpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0ICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gZWxlMi5hdHRyKXtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgICAgZWxlLnZhbHVlID0gZWxlMi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgICAgIH1cclxuXHRcdFx0XHRcdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdCAgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdC8vIHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0XHRpZihyZXN1bHQuaW5mbyl7XHJcblx0XHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHt0aXRsZTpcIumUmeivrzQuM1wiLGNvbnRlbnQ6cmVzdWx0LmluZm8sc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdCAgXHRcdFxyXG5cdFx0XHQgIFx0fWVsc2V7XHJcblx0XHRcdCAgXHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNFwiLGNvbnRlbnQ6cmV0LmVycl9tc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdCAgXHR9XHJcblx0XHRcdCAgfSkuY2F0Y2goZXg9PntcclxuXHRcdFx0ICBcdC8vIGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0ICBcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4xXCIsY29udGVudDpleC5lcnJNc2csc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdCAgfSk7XHJcblx0ICAgICAgICB9XHJcblx0ICAgIH0gY2F0Y2ggKGV4KSB7XHJcblx0ICAgICAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4Lm1lc3NhZ2U7XHJcblx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi6ZSZ6K+vNC4yXCIsY29udGVudDpcIuaJp+ihjOKAnOWGheWuueWPmOWMluWQjuKAneS6i+S7tuWksei0pe+8mlwiICsgdGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcclxuXHQgICAgfVxyXG5cdH0sXHJcblx0b3BlcmF0aW9uTnVtYmVyKHZhbHVlMSwgdmFsdWUyLG9wZXJhdGlvbil7XHJcblx0XHR2YXIgbnVtYmVyMSA9IDBcclxuXHRcdHZhciBudW1iZXIyID0wXHJcblx0XHRpZih2YWx1ZTEpXHJcblx0XHRcdG51bWJlcjEgPSAgcGFyc2VJbnQodmFsdWUxKVxyXG5cdFx0aWYodmFsdWUyKVx0XHJcblx0XHRcdG51bWJlcjIgPSAgcGFyc2VJbnQodmFsdWUyKVxyXG5cdFx0aWYob3BlcmF0aW9uID09IFwiK1wiKVxyXG5cdFx0e1xyXG5cdFx0XHRyZXR1cm4gbnVtYmVyMSArIG51bWJlcjJcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYob3BlcmF0aW9uID09IFwiLVwiKVxyXG5cdFx0e1xyXG5cdFx0XHRyZXR1cm4gbnVtYmVyMSAtIG51bWJlcjJcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYob3BlcmF0aW9uID09IFwiKlwiKVxyXG5cdFx0e1xyXG5cdFx0XHRyZXR1cm4gbnVtYmVyMSAqIG51bWJlcjJcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYob3BlcmF0aW9uID09IFwiL1wiKVxyXG5cdFx0e1xyXG5cdFx0XHRpZihudW1iZXIyKVxyXG5cdFx0XHRcdHJldHVybiBudW1iZXIxIC8gbnVtYmVyMlxyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmV0dXJuIG51bWJlcjEgXHJcblx0XHR9XHJcblx0XHRlbHNlIHJldHVybiBudW1iZXIyIFxyXG5cdH0sXHJcblx0Ly/mm7TmlrDliIbpobXnrb7kuK3nmoTliJfooajpobnlhoXlrrlcclxuXHR2aWV3QWN0aW9uU2V0Um93KHZhbHVlKSB7XHJcblx0XHRjb25zdCAkdGhpcyA9IHRoaXNcclxuXHRcdHZhciBkZXRhaWxTdHlsZURlZkxpc3QgPSBbXVxyXG5cdFx0aWYodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpXHJcblx0XHR7XHJcblx0XHRcdGRldGFpbFN0eWxlRGVmTGlzdCA9ICR0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3RcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYodmFsdWUucGFnZV9uYW1lID09ICR0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUpXHJcblx0XHR7XHJcblx0XHRcdGRldGFpbFN0eWxlRGVmTGlzdCA9JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdFxyXG5cdFx0fVxyXG5cdFx0ZGV0YWlsU3R5bGVEZWZMaXN0LmZvckVhY2goZWxlPT57XHJcblx0XHRcdHZhbHVlLnJvdy5mb3JFYWNoKChyb3dEYXRhKSA9PiB7XHJcblx0XHRcdCAgICBpZihlbGUuZm9ybS5vYmpJZCA9PSByb3dEYXRhLmlkKXtcclxuXHRcdFx0XHRcdHJvd0RhdGEuYXR0cnMuZm9yRWFjaChhdHRyPT57XHJcblx0XHRcdFx0XHQgICAgZWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGUyPT57XHJcblx0XHRcdFx0XHQgICAgICAgIGlmKGVsZTIubmFtZSE9J0xheW91dCcpe1xyXG5cdFx0XHRcdFx0ICAgICAgICAgIGlmKGVsZTIuZmllbGRJZCA9PSBhdHRyLmF0dHIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGUyLnZhbHVlID0kdGhpcy5vcGVyYXRpb25OdW1iZXIoZWxlMi52YWx1ZSxhdHRyLnZhbHVlLGF0dHIub3BlcmF0aW9uKVxyXG5cdFx0XHRcdFx0XHRcdCAgfVxyXG5cdFx0XHRcdFx0ICAgICAgICB9IGVsc2UgaWYoZWxlMi5uYW1lPT0nTGF5b3V0Jyl7XHJcblx0XHRcdFx0XHQgICAgICAgICAgZWxlMi5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0XHRcdCAgICAgICAgICAgIGlmKGNvbClcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdCAgICAgICAgICAgICAgaWYoY29sLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBcclxuXHRcdFx0XHRcdFx0XHRcdCAge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wudmFsdWUgPSR0aGlzLm9wZXJhdGlvbk51bWJlcihjb2wudmFsdWUsYXR0ci52YWx1ZSxhdHRyLm9wZXJhdGlvbilcclxuXHRcdFx0XHRcdCAgICAgICAgICAgICAgfVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ICAgICAgICAgIH0pXHJcblx0XHRcdFx0XHQgICAgICAgIH1cclxuXHRcdFx0XHRcdCAgICB9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcdFxyXG5cdFx0fSk7XHJcblx0XHRpZih2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSlcclxuXHRcdHtcclxuXHRcdFx0JHRoaXMuc2V0RGF0YSh7ZGV0YWlsMlN0eWxlRGVmTGlzdDpkZXRhaWxTdHlsZURlZkxpc3R9KVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZih2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSlcclxuXHRcdHtcclxuXHRcdFx0ICR0aGlzLnNldERhdGEoe2RldGFpbDFTdHlsZURlZkxpc3Q6ZGV0YWlsU3R5bGVEZWZMaXN0fSlcclxuXHRcdH1cclxuXHRcdFxyXG5cdH0sXHJcblx0XHJcblx0Ly/liqDovb3mraPlnKjliIbmi6PlhoXlrrlcclxuXHR2aWV3QWNlaW9uUm93KGRhdGEsdHlwZSl7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHQgIGlmKEpTT04uc3RyaW5naWZ5KGRhdGEucm93KSA9PSd7fScpe1xyXG5cdFx0cmV0dXJuO1xyXG5cdCAgfVxyXG5cdCAgZGF0YS5yb3cuZm9yRWFjaChyb3c9PntcclxuXHQgICAgdmFyIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwxX3N0eWxlZGVmKTtcclxuXHRcdGlmKHR5cGUpeyAvL+ehruWumuWQjuiEmuacrOi/m+WFpeWKoOi9veW3suWIhuaLo+aVsOaNrlxyXG5cdFx0ICAgIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRpZihkYXRhLnBhZ2VfbmFtZSA9PSB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W3suWIhuaLo1xyXG5cdFx0XHQgIHN0eWxlU3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kZGF0YS5kZXRhaWwyX3N0eWxlZGVmKTsgLy/lvoXliIbmi6NcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdCAgICB2YXIgZGV0YWlsU3R5bGUgPSBKU09OLnBhcnNlKHN0eWxlU3RyKTtcclxuXHRcdGRldGFpbFN0eWxlLmZvcm0ub2JqSWQgPSByb3cuaWQ7XHJcblx0XHRkZXRhaWxTdHlsZS5mb3JtLmh0bWxvYmpJZCA9IHJvdy5pZD9yb3cuaWQucmVwbGFjZSgvLS9nLCcnKS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOidudWxsJztcclxuXHRcdGRldGFpbFN0eWxlLmZvcm0uYXR0cnMgPSByb3cuYXR0cnM7XHJcblx0ICAgIHJvdy5hdHRycy5mb3JFYWNoKGF0dHI9PntcclxuXHQgICAgICAgIGRldGFpbFN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PntcclxuXHQgICAgICAgICAgICBpZihlbGUubmFtZSE9J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdCAgICAgICAgICAgICAgICBpZihjb2wpe1xyXG5cdCAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgfSk7XHJcblx0ICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgfSk7XHJcblx0ICAgIH0pO1xyXG5cdFx0XHJcblx0XHRpZih0eXBlKXsgLy/noa7lrprlkI7ohJrmnKzov5vlhaXliqDovb3lt7LliIbmi6PmlbDmja5cclxuXHRcdCAgICB0aGlzLiRkYXRhLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7XHJcblx0XHQgICAgLy8gY29uc29sZS5sb2codGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRpZihkYXRhLnBhZ2VfbmFtZSA9PSB0aGlzLiRkYXRhLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W3suWIhuaLo1xyXG5cdFx0XHQgICAgdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHQgICAgLy8gY29uc29sZS5sb2codGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpO1xyXG5cdFx0XHRcdHRoaXMuYWN0aXZlbGlzdC5wdXNoKHthY3RpdmU6ZmFsc2V9KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0ICB9KTtcclxuXHR9LFxyXG5cdC8v5Yqg6L295bey5YiG5ouj5YaF5a65XHJcblx0dmlld0FjZWlvbkNvbnRlbnQoZGF0YSl7XHJcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHJcblx0XHRpZiAoZGF0YS5wYWdlX25hbWUgPT0gJHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSkge1xyXG5cdFx0XHQkdGhpcy5kZXRhaWwxRXh0RGF0YSA9IGRhdGEuZXh0X2RhdGEgfHwge31cclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKGRhdGEucGFnZV9uYW1lID09ICR0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUpIHtcclxuXHRcdFx0JHRoaXMuZGV0YWlsMkV4dERhdGEgPSBkYXRhLmV4dF9kYXRhIHx8IHt9XHJcblx0XHR9IFxyXG5cdFx0aWYoSlNPTi5zdHJpbmdpZnkoZGF0YS5jb250ZW50KSA9PSd7fScpe1xyXG5cdFx0ICByZXR1cm47XHJcblx0XHR9XHJcblx0ICAgIGRhdGEuY29udGVudC5mb3JFYWNoKGNvbnQ9PntcclxuXHQgICAgICAgIHZhciBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KCR0aGlzLiRkYXRhLmRldGFpbDJfc3R5bGVkZWYpOyAvL+W3suWIhuaLo1xyXG5cdFx0XHRpZihkYXRhLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKXsgLy/liKTmlq3ov5Tlm57nmoRhY3Rpb27nmoRwYWdlX25hbWXmmK/lkKbmmK/lvoXliIbmi6NcclxuXHRcdFx0ICBzdHlsZVN0ciA9IEpTT04uc3RyaW5naWZ5KCR0aGlzLiRkYXRhLmRldGFpbDFfc3R5bGVkZWYpOyAvL+W+heWIhuaLo1xyXG5cdFx0XHR9XHJcblx0ICAgICAgICB2YXIgZGV0YWlsU3R5bGUgPSBKU09OLnBhcnNlKHN0eWxlU3RyKTtcclxuXHRcdFx0ZGV0YWlsU3R5bGUuU2VsQnV0X0NoZWNrZWQgPSBkYXRhLmNoZWNrYm94Pz90cnVlO1xyXG5cdFx0XHRkZXRhaWxTdHlsZS5mb3JtLm9iaklkID0gY29udC5pZDtcclxuXHRcdFx0ZGV0YWlsU3R5bGUuZm9ybS5odG1sb2JqSWQgPSBjb250LmlkP2NvbnQuaWQucmVwbGFjZSgvLS9nLCcnKS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOidudWxsJztcclxuXHQgICAgICAgIGRldGFpbFN0eWxlLmZvcm0uYXR0cnMgPSBjb250LmF0dHJzO1xyXG5cdCAgICAgICAgY29udC5hdHRycy5mb3JFYWNoKGF0dHI9PntcclxuXHQgICAgICAgICAgZGV0YWlsU3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+eyBcclxuXHQgICAgICAgICAgICBpZihlbGUubmFtZSE9J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdCAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdCAgICAgICAgICAgICAgZWxlLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbD0+e1xyXG5cdCAgICAgICAgICAgICAgICBpZihjb2wpe1xyXG5cdCAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHQgICAgICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICAgICAgfSk7XHJcblx0ICAgICAgICAgICAgfVxyXG5cdCAgICAgICAgICB9KTtcclxuXHQgICAgICAgIH0pO1xyXG5cdFx0XHRcclxuXHRcdFx0aWYoZGF0YS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdCAgLy/lpoLmnpwgY2xlYXIgPSBmYWxzZSDliJnkuI3pnIDopoHmuIXpmaTvvIzmoLnmja5pZOWIpOaWreaYr+WQpuWtmOWcqO+8jOS4jeWtmOWcqOaPkuWFpeWIsOmhtemdou+8jOWmguaenOWtmOWcqOeUqOaWsOeahOWxnuaAp+imhuebllxyXG5cdFx0XHQgIGlmKGRhdGEuY2xlYXIgPT0gZmFsc2UpeyBcclxuXHRcdFx0ICAgIHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHQgICAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChzdHlsZSxpbmRleCk9PntcclxuXHRcdFx0ICAgICAgaWYoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxTdHlsZS5mb3JtLm9iaklkKXtcclxuXHRcdFx0ICAgICAgICBjb250LmF0dHJzLmZvckVhY2goYXR0cj0+e1xyXG5cdFx0XHQgICAgICAgICAgc3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGVsZT0+eyBcclxuXHRcdFx0ICAgICAgICAgICAgaWYoZWxlLm5hbWUhPSdMYXlvdXQnKXtcclxuXHRcdFx0ICAgICAgICAgICAgICBpZihlbGUuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGVsZS52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdCAgICAgICAgICAgIH0gZWxzZSBpZihlbGUubmFtZT09J0xheW91dCcpe1xyXG5cdFx0XHQgICAgICAgICAgICAgIGVsZS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2w9PntcclxuXHRcdFx0ICAgICAgICAgICAgICAgIGlmKGNvbCl7XHJcblx0XHRcdCAgICAgICAgICAgICAgICAgIGlmKGNvbC5maWVsZElkID09IGF0dHIuYXR0cikgY29sLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0ICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgICAgICAgICB9KTtcclxuXHRcdFx0ICAgICAgICAgICAgfVxyXG5cdFx0XHQgICAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgaXNmbGFnID0gZmFsc2U7XHJcblx0XHRcdCAgICAgIH1cclxuXHRcdFx0ICAgIH0pO1xyXG5cdFx0XHQgICAgaWYoaXNmbGFnKSAkdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LnB1c2goZGV0YWlsU3R5bGUpOyAvL+W+heWIhuaLo1xyXG5cdFx0XHQgIH1lbHNle1xyXG5cdFx0XHQgICAgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTsgLy/lvoXliIbmi6NcclxuXHRcdFx0ICB9XHJcblx0XHRcdCAgJHRoaXMuYWN0aXZlbGlzdC5wdXNoKHthY3RpdmU6ZmFsc2V9KTtcclxuXHRcdFx0ICAvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdCAgaWYoZGF0YS5jbGVhciA9PSBmYWxzZSl7XHJcblx0XHRcdCAgICAvL+WmguaenCBjbGVhciA9IGZhbHNlIOWImeS4jemcgOimgea4hemZpO+8jOagueaNrmlk5Yik5pat5piv5ZCm5a2Y5Zyo77yM5LiN5a2Y5Zyo5o+S5YWl5Yiw6aG16Z2i77yM5aaC5p6c5a2Y5Zyo55So5paw55qE5bGe5oCn6KaG55uWXHJcblx0XHRcdCAgICB2YXIgaXNmbGFnID0gdHJ1ZTtcclxuXHRcdFx0ICAgICR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3QuZm9yRWFjaCgoc3R5bGUsaW5kZXgpPT57XHJcblx0XHRcdCAgICAgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsU3R5bGUuZm9ybS5vYmpJZCl7XHJcblx0XHRcdCAgICAgICAgY29udC5hdHRycy5mb3JFYWNoKGF0dHI9PntcclxuXHRcdFx0ICAgICAgICAgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChlbGU9PnsgXHJcblx0XHRcdCAgICAgICAgICAgIGlmKGVsZS5uYW1lIT0nTGF5b3V0Jyl7XHJcblx0XHRcdCAgICAgICAgICAgICAgaWYoZWxlLmZpZWxkSWQgPT0gYXR0ci5hdHRyKSBlbGUudmFsdWUgPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHQgICAgICAgICAgICB9IGVsc2UgaWYoZWxlLm5hbWU9PSdMYXlvdXQnKXtcclxuXHRcdFx0ICAgICAgICAgICAgICBlbGUuc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29sPT57XHJcblx0XHRcdCAgICAgICAgICAgICAgICBpZihjb2wpe1xyXG5cdFx0XHQgICAgICAgICAgICAgICAgICBpZihjb2wuZmllbGRJZCA9PSBhdHRyLmF0dHIpIGNvbC52YWx1ZSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdCAgICAgICAgICAgICAgICB9XHJcblx0XHRcdCAgICAgICAgICAgICAgfSk7XHJcblx0XHRcdCAgICAgICAgICAgIH1cclxuXHRcdFx0ICAgICAgICAgIH0pO1xyXG5cdFx0XHQgICAgICAgIH0pO1xyXG5cdFx0XHQgICAgICAgIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHQgICAgICB9XHJcblx0XHRcdCAgICB9KTtcclxuXHRcdFx0ICAgIGlmKGlzZmxhZykgJHRoaXMuZGV0YWlsMlN0eWxlRGVmTGlzdC5wdXNoKGRldGFpbFN0eWxlKTsgLy/lt7LliIbmi6NcclxuXHRcdFx0ICB9ZWxzZXtcclxuXHRcdFx0ICAgICR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3QucHVzaChkZXRhaWxTdHlsZSk7IC8v5bey5YiG5oujXHJcblx0XHRcdCAgfVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygkdGhpcy4kZGF0YS5kZXRhaWwyU3R5bGVEZWZMaXN0KTtcclxuXHRcdFx0fVxyXG5cdCAgICB9KTtcclxuXHR9LFxyXG5cdG9uQ2xpY2tJdGVtKGUpIHsgLy/pgInmi6npobXnrb5cclxuXHRcdC8vIGNvbnNvbGUubG9nKGUpO1xyXG5cdFx0dGhpcy5jdXJyZW50ID0gZS5jdXJyZW50SW5kZXhcclxuXHR9LFxyXG5cdG9uRGV0YWlsMUVudGVyQ2hhbmdlKGl0ZW0peyAgLy/liIbmi6PkuK3moLflvI/lm57ovabkuovku7ZcclxuXHQgICAgY29uc29sZS5sb2coaXRlbSk7XHJcblx0fSxcclxuXHRkZWxJdGVtKGluZGV4KXsgIC8v5Yig6Zmk5YiG5ouj5Lit5qC35byP6Z2i5p2/XHJcblx0IC8v5Yig6Zmk56CB55uY5Lit5qC35byP6Z2i5p2/XHJcblx0ICB0aGlzLkJlZm9yZV9EZWxfRXZlbnQgPSB0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkJlZm9yZV9EZWxldGU7XHJcblx0ICB0aGlzLkFmdGVyX0RlbF9FdmVudCA9IHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uQWZ0ZXJfRGVsZXRlO1xyXG5cdCAgY29uc3Qgc3R5bGUgPSB0aGlzLmRldGFpbDFTdHlsZURlZkxpc3RbaW5kZXhdO1xyXG5cdCAgLy/liKDpmaTnoIHnm5jkuK3moLflvI/pnaLmnb9cclxuXHQgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdCAgaWYgKHRoaXMuQmVmb3JlX0RlbF9FdmVudD8uSUQpXHJcblx0XHQvL+aYr+WQpuacieWIoOmZpOWJjeS6i+S7tlxyXG5cdFx0dGhpcy5kZWwoc3R5bGUsIHRoaXMuQmVmb3JlX0RlbF9FdmVudCk7XHJcblx0ICBlbHNlIGlmICh0aGlzLkFmdGVyX0RlbF9FdmVudD8uSUQpXHJcblx0XHQvL+aYr+WQpuacieWIoOmZpOWQjuS6i+S7tlxyXG5cdFx0dGhpcy5kZWwoc3R5bGUsIHRoaXMuQWZ0ZXJfRGVsX0V2ZW50KTtcclxuXHR9LFxyXG4gICAgZGVsRGF0YU9iaihzdHlsZSxpbmRleCl7ICAvL+WIoOmZpOW3suWIhuaLo+aVsFxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhzdHlsZSk7XHJcblx0ICB2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdCAgJHRoaXMuQmVmb3JlX0RlbF9FdmVudCA9ICR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkJlZm9yZV9EZWxldGU7XHJcblx0ICAkdGhpcy5BZnRlcl9EZWxfRXZlbnQgPSAkdGhpcy5wYXJhbS5TdWJfUGFnZVswXS5BZnRlcl9EZWxldGU7XHJcblx0ICB1bmkuc2hvd01vZGFsKHtcclxuXHQgIFx0dGl0bGU6ICfmj5DnpLonLFxyXG5cdCAgXHRjb250ZW50OiAn56Gu5a6a5Yig6Zmk6K+l5bey5YiG5ouj5pWw5o2u77yBJyxcclxuXHQgIFx0c3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG5cdCAgXHRcdGlmIChyZXMuY29uZmlybSkge1xyXG5cdFx0XHRcdHZhciBvYmpJRD1zdHlsZS5mb3JtLm9iaklkO1xyXG5cdFx0XHRcdGlmKCFzdHlsZS5mb3JtLm9iaklkLmluY2x1ZGVzKCd7JykpIG9iaklEID0gJ3snK3N0eWxlLmZvcm0ub2JqSWQrJ30nO1xyXG5cdFx0XHRcdCAgICAgICAgICBcclxuXHRcdFx0XHR2YXIgZGF0YUluZm89e1xyXG5cdFx0XHRcdFx0Y2xhc3NfaWQ6c3R5bGUuZm9ybS5jbHNJZCxcclxuXHRcdFx0XHRcdGNsYXNzX25hbWU6JycsXHJcblx0XHRcdFx0XHRvYmpfaWQ6b2JqSURcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGRhdGFJbmZvKTtcclxuXHRcdFx0XHQkdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2RhdGFPYmpEZWwnLGRhdGFJbmZvKS50aGVuKHJldD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmV0KTtcclxuXHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0ICAgY29uc3Qgc3R5bGUgPSAkdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0W2luZGV4XTtcclxuXHRcdFx0XHRcdCAgICR0aGlzLmRldGFpbDJTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LCAxKTsgXHJcblx0XHRcdFx0XHQgICBpZiAoJHRoaXMuQmVmb3JlX0RlbF9FdmVudD8uSUQpXHJcblx0XHRcdFx0XHRcdC8v5piv5ZCm5pyJ5Yig6Zmk5YmN5LqL5Lu2XHJcblx0XHRcdFx0XHRcdCR0aGlzLmRlbDIoc3R5bGUsICR0aGlzLkJlZm9yZV9EZWxfRXZlbnQpO1xyXG5cdFx0XHRcdFx0ICAgZWxzZSBpZiAoJHRoaXMuQWZ0ZXJfRGVsX0V2ZW50Py5JRClcclxuXHRcdFx0XHRcdFx0Ly/mmK/lkKbmnInliKDpmaTlkI7kuovku7ZcclxuXHRcdFx0XHRcdFx0JHRoaXMuZGVsMihzdHlsZSwgJHRoaXMuQWZ0ZXJfRGVsX0V2ZW50KTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5Yig6Zmk5oiQ5Yqf77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681XCIsY29udGVudDpyZXQuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleD0+e1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor681LjFcIixjb250ZW50OmV4LmVyck1zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHR9KTtcclxuXHQgIFx0XHR9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuXHRcdFx0XHRcclxuXHQgIFx0XHR9XHJcblx0ICBcdH1cclxuXHQgIH0pO1xyXG4gICAgICBcclxuICAgIH0sXHJcblx0YXN5bmMgZGVsKHN0eWxlLCBldmVudCkge1xyXG4gIC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0ICAgIHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHQgICAgdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdCAgICAvL+iOt+WPluato+WcqOWIhuaLo+WxnuaAp1xyXG5cdCAgdmFyIGRldGFpbEF0dHJMaXN0ID0gW107XHJcblx0ICB2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0ICBzdHlsZS5mb3JtLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRpZihpdGVtLm5hbWUgPT0gXCJMYXlvdXRcIil7ICAvL+WIpOaWreaYr+WQpuaYr+agheagj+agvOW8j1xyXG5cdFx0ICBpdGVtLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbHMgPT4ge1xyXG5cdFx0XHRpZihjb2xzIT1udWxsKSBkZXRhaWxfYXR0cltjb2xzLmZpZWxkSWRdID0gY29scy52YWx1ZTtcclxuXHRcdCAgfSk7XHJcblx0XHR9ZWxzZVxyXG5cdFx0ICBkZXRhaWxfYXR0cltpdGVtLmZpZWxkSWRdID0gaXRlbS52YWx1ZTtcclxuXHQgIH0pO1xyXG5cdCAgXHJcblx0IGRldGFpbF9hdHRyWydpZCddID0gc3R5bGUuZm9ybS5vYmpJZDtcclxuXHQgIGlmKCR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLlNlbGVjdF9CdXR0b249PXRydWUpeyAvL+WIpOaWremAieaLqeaMiemSruaYr+WQpuS4unRydWVcclxuXHRcdGlmKHN0eWxlLlNlbEJ1dF9DaGVja2VkPT10cnVlKSBcclxuXHRcdCAgZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0ICB9IGVsc2UgXHJcblx0XHRkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHJcblx0ICAgIC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuXHRcdC8v6I635Y+W5q2j5Zyo5YiG5ouj6YeM5rKh5pyJ5pi+56S655qE5a2X5q61XHJcblx0ICBzdHlsZS5mb3JtLmF0dHJzLmZvckVhY2goYXR0ciA9PiB7XHJcblx0XHRmb3IodmFyIGtleSBpbiBkZXRhaWxBdHRyTGlzdCl7XHJcblx0XHQgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsQXR0ckxpc3Rba2V5XVsnaWQnXSl7XHJcblx0XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGV0YWlsQXR0ckxpc3Rba2V5XSk7XHJcblx0XHRcdHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHRrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG5cdFx0XHRcdGlmKGVsZSA9PSBhdHRyLmF0dHIpIGlzZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0aWYoaXNmbGFnKSB7XHJcblx0XHRcdFx0ZGV0YWlsQXR0ckxpc3RbYXR0ci5hdHRyXSA9IGF0dHIudmFsdWU7XHJcblx0XHRcdH1cclxuXHRcdCAgfVxyXG5cdFx0fVxyXG5cdCAgfSk7XHJcblx0XHR2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0ICAgIEpTT04uc3RyaW5naWZ5KFxyXG5cdFx0ICAgICAgT2JqZWN0LmtleXMoaGVhZF9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHQgICAgICAgIGF0dHI6IGEsXHJcblx0XHQgICAgICAgIHZhbHVlOiBoZWFkX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgIH0pKVxyXG5cdFx0ICAgIClcclxuXHRcdCk7XHJcblx0XHQgdmFyIGpzb25saXN0PVtdO1xyXG5cdFx0ZGV0YWlsQXR0ckxpc3QuZm9yRWFjaChhdHRyPT57XHJcblx0XHQgICAganNvbmxpc3QucHVzaCh7XHJcblx0XHQgICAgICBpZDphdHRyW1wiaWRcIl18fCBcIlwiLFxyXG5cdFx0ICAgICAgYXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgYXR0cjogYSxcclxuXHRcdCAgICAgICAgdmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgIH0pKS5maWx0ZXIoKGEpPT57cmV0dXJuIGEuYXR0ciAhPSBcImlkXCJ9KVxyXG5cdFx0ICAgIH0pO1xyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHRjb25zdCBsaXN0ID0gW11cclxuXHRcdGxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUsaXRlbV9saXN0Ompzb25saXN0LGV4dF9kYXRhOiR0aGlzLmRldGFpbDFFeHREYXRhfSlcclxuXHRcdCR0aGlzLnJ1bkN1c3RvbUV2ZW50KGV2ZW50LGlucHV0X3BhcmFtLGxpc3QsJzEnKTtcclxuXHR9LFxyXG5cdFxyXG5cdGFzeW5jIGRlbDIoc3R5bGUsIGV2ZW50KSB7XHJcblx0ICAgICAvL+iOt+WPluihqOWktOWxnuaAp1xyXG5cdFx0dmFyIGhlYWRfYXR0ciA9IHt9O1xyXG5cdFx0dGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHRcdCAgaGVhZF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdFx0Ly/ojrflj5blt7LliIbmi6PlsZ7mgKdcclxuXHRcdHZhciBkZXRhaWxBdHRyTGlzdCA9IFtdO1xyXG5cdFx0dmFyIGRldGFpbF9hdHRyPXt9O1xyXG5cdFx0c3R5bGUuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0aWYoaXRlbS5uYW1lID09IFwiTGF5b3V0XCIpeyAgLy/liKTmlq3mmK/lkKbmmK/moIXmoI/moLzlvI9cclxuXHRcdFx0aXRlbS5zZXR0aW5nLmNvbExpc3QuZm9yRWFjaChjb2xzID0+IHtcclxuXHRcdFx0aWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0XHQgIH0pO1xyXG5cdFx0fWVsc2VcclxuXHRcdFx0ZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0XHR9KTtcclxuXHRcdCAgXHJcblx0XHRkZXRhaWxfYXR0clsnaWQnXSA9IHN0eWxlLmZvcm0ub2JqSWQ7XHJcblx0XHRpZigkdGhpcy5wYXJhbS5TdWJfUGFnZVsxXS5TZWxlY3RfQnV0dG9uPT10cnVlKXsgLy/liKTmlq3pgInmi6nmjInpkq7mmK/lkKbkuLp0cnVlXHJcblx0XHRcdGlmKHN0eWxlLlNlbEJ1dF9DaGVja2VkPT10cnVlKSBcclxuXHRcdFx0XHRkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHRcdH0gZWxzZSBcclxuXHRcdFx0ZGV0YWlsQXR0ckxpc3QucHVzaChkZXRhaWxfYXR0cik7XHJcblx0XHQvL+iOt+WPluW3suWIhuaLo+mHjOayoeacieaYvuekuueahOWtl+autVxyXG5cdFx0c3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG5cdFx0XHRmb3IodmFyIGtleSBpbiBkZXRhaWxBdHRyTGlzdCl7XHJcblx0XHRcdFx0aWYoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxBdHRyTGlzdFtrZXldWydpZCddKXtcclxuXHRcdFx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRldGFpbEF0dHJMaXN0W2tleV0pO1xyXG5cdFx0XHRcdHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHRcdGtleXMuZm9yRWFjaCgoZWxlKSA9PiB7XHJcblx0XHRcdFx0ICBpZihlbGUgPT0gYXR0ci5hdHRyKSBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZihpc2ZsYWcpIHtcclxuXHRcdFx0XHQgIGRldGFpbEF0dHJMaXN0W2F0dHIuYXR0cl0gPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0ICB9XHJcblx0XHRcdH0gXHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuIC8vICAgIHJldHVybjtcclxuXHRcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcblx0XHRcdEpTT04uc3RyaW5naWZ5KFxyXG5cdFx0XHQgIE9iamVjdC5rZXlzKGhlYWRfYXR0cikubWFwKChhKSA9PiAoe1xyXG5cdFx0XHRcdGF0dHI6IGEsXHJcblx0XHRcdFx0dmFsdWU6IGhlYWRfYXR0clthXSB8fCBcIlwiLFxyXG5cdFx0XHQgIH0pKVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cdFx0dmFyIGpzb25saXN0PVtdO1xyXG5cdFx0ZGV0YWlsQXR0ckxpc3QuZm9yRWFjaChhdHRyPT57XHJcblx0XHRcdGpzb25saXN0LnB1c2goe1xyXG5cdFx0XHQgIGlkOmF0dHJbXCJpZFwiXXx8IFwiXCIsXHJcblx0XHRcdCAgYXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdFx0XHRhdHRyOiBhLFxyXG5cdFx0XHRcdHZhbHVlOiBhdHRyW2FdIHx8IFwiXCIsXHJcblx0XHRcdCAgfSkpLmZpbHRlcigoYSk9PntyZXR1cm4gYS5hdHRyICE9IFwiaWRcIn0pXHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBsaXN0ID0gW11cclxuXHRcdGxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUsaXRlbV9saXN0Ompzb25saXN0LGV4dF9kYXRhOiR0aGlzLmRldGFpbDJFeHREYXRhfSlcclxuXHRcdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coanNvbmxpc3QpO1xyXG5cdFx0JHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sbGlzdCwnMicpO1xyXG5cdH0sXHJcblx0XHJcblx0b25QYW5lbENsaWNrKHZhbHVlKXsgLy/ngrnlh7vpnaLmnb/pq5jkuq7mmL7npLpcclxuXHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHRcdHRoaXMuYWN0aXZlX2lkPScnO1xyXG5cdCAgICB0aGlzLmFjdGl2ZWxpc3QuZm9yRWFjaChlbGU9PntcclxuXHQgICAgICAgIGVsZS5hY3RpdmUgPSBmYWxzZTtcclxuXHQgICAgfSk7XHJcblx0ICAgIHRoaXMuYWN0aXZlbGlzdFt2YWx1ZV0uYWN0aXZlID0gdHJ1ZTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKHRoaXMuJGRhdGEuYWN0aXZlbGlzdCk7XHJcblx0fSxcclxuXHRcclxuXHQvL+ehruWumlxyXG5cdG9rKCl7XHJcbiAgICAgICAgdGhpcy5CZWZvcmVfT0tfRXZlbnQgPSB0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLkJlZm9yZV9vaztcclxuICAgICAgICB0aGlzLkFmdGVyX09LX0V2ZW50ID0gdGhpcy5wYXJhbS5TdWJfUGFnZVswXS5BZnRlcl9vaztcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLkJlZm9yZV9PS19FdmVudCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5BZnRlcl9PS19FdmVudCk7XHJcblx0ICAgIGlmKHRoaXMuJGRhdGEuQmVmb3JlX09LX0V2ZW50LklEKSAvL+aYr+WQpuacieehruWumuWJjeS6i+S7tlxyXG5cdCAgICAgICAgdGhpcy5zYXZhKHRoaXMuJGRhdGEuQmVmb3JlX09LX0V2ZW50KTtcclxuXHQgICAgZWxzZSBpZih0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50LklEKSAgLy/mmK/lkKbmnInnoa7lrprlkI7kuovku7ZcclxuXHQgICAgICAgIHRoaXMuc2F2YSh0aGlzLiRkYXRhLkFmdGVyX09LX0V2ZW50KTtcclxuXHR9LFxyXG5cdHNhdmEoZXZlbnQpe1xyXG5cdFx0dmFyICR0aGlzID0gdGhpcztcclxuXHQgICAgaWYodGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0Lmxlbmd0aD09MCl7XHJcblx0ICAgICAgdW5pLnNob3dNb2RhbCh7dGl0bGU6XCLmj5DnpLpcIixjb250ZW50Olwi5rKh5pyJ5b6F5YiG5ouj55qE5pWw5o2u77yBXCIsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cdCAgICB9XHJcblx0ICAgIC8v6I635Y+W6KGo5aS05bGe5oCnXHJcblx0ICAgIHZhciBoZWFkX2F0dHIgPSB7fTtcclxuXHQgICAgdGhpcy4kZGF0YS5oZWFkX3N0eWxlZGVmLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICBoZWFkX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgIH0pO1xyXG5cdCAgICAvLyBjb25zb2xlLmxvZyhoZWFkX2F0dHIpO1xyXG5cdCAgICAvL+iOt+WPluato+WcqOWIhuaLo+WxnuaAp1xyXG5cdCAgICB2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuXHQgICAgdGhpcy4kZGF0YS5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goc3R5bGU9PntcclxuXHQgICAgICB2YXIgZGV0YWlsX2F0dHI9e307XHJcblx0XHQgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuXHQgICAgICAgIGlmKGl0ZW0ubmFtZSA9PSBcIkxheW91dFwiKXsgIC8v5Yik5pat5piv5ZCm5piv5qCF5qCP5qC85byPXHJcblx0ICAgICAgICAgIGl0ZW0uc2V0dGluZy5jb2xMaXN0LmZvckVhY2goY29scyA9PiB7XHJcblx0ICAgICAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcblx0ICAgICAgICAgIH0pO1xyXG5cdCAgICAgICAgfWVsc2VcclxuXHQgICAgICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcblx0ICAgICAgfSk7XHJcblx0XHQgIFxyXG4gICAgICAgICBkZXRhaWxfYXR0clsnaWQnXSA9IHN0eWxlLmZvcm0ub2JqSWQ7XHJcblx0XHQgIGlmKCR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLlNlbGVjdF9CdXR0b249PXRydWUpeyAvL+WIpOaWremAieaLqeaMiemSruaYr+WQpuS4unRydWVcclxuXHRcdCAgICBpZihzdHlsZS5TZWxCdXRfQ2hlY2tlZD09dHJ1ZSkgXHJcblx0XHQgICAgICBkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuXHRcdCAgfSBlbHNlIFxyXG5cdFx0ICAgIGRldGFpbEF0dHJMaXN0LnB1c2goZGV0YWlsX2F0dHIpO1xyXG5cdCAgICB9KTtcclxuXHQgICAgLy8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG5cdFx0Ly/ojrflj5bmraPlnKjliIbmi6Pph4zmsqHmnInmmL7npLrnmoTlrZfmrrVcclxuXHRcdHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKHN0eWxlPT57XHJcblx0XHQgIHN0eWxlLmZvcm0uYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcclxuXHRcdCAgICBmb3IodmFyIGtleSBpbiBkZXRhaWxBdHRyTGlzdCl7XHJcbiAgICAgICAgICAgICAgaWYoc3R5bGUuZm9ybS5vYmpJZCA9PSBkZXRhaWxBdHRyTGlzdFtrZXldWydpZCddKXtcclxuXHRcdFx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRldGFpbEF0dHJMaXN0W2tleV0pO1xyXG5cdFx0XHRcdHZhciBpc2ZsYWcgPSB0cnVlO1xyXG5cdFx0XHRcdGtleXMuZm9yRWFjaCgoZWxlKSA9PiB7XHJcblx0XHRcdFx0XHRpZihlbGUgPT0gYXR0ci5hdHRyKSBpc2ZsYWcgPSBmYWxzZTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZihpc2ZsYWcpIHtcclxuXHRcdFx0XHRcdGRldGFpbEF0dHJMaXN0W2F0dHIuYXR0cl0gPSBhdHRyLnZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdCAgICAgIH1cclxuXHRcdFx0fVxyXG5cdFx0ICB9KTtcclxuXHRcdH0pO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGV0YWlsQXR0ckxpc3QpO1xyXG5cdCAvLyAgICByZXR1cm47XHJcblx0XHR2YXIgaW5wdXRfcGFyYW0gPSBCYXNlNjQuZW5jb2RlKFxyXG5cdFx0ICAgIEpTT04uc3RyaW5naWZ5KFxyXG5cdFx0ICAgICAgT2JqZWN0LmtleXMoaGVhZF9hdHRyKS5tYXAoKGEpID0+ICh7XHJcblx0XHQgICAgICAgIGF0dHI6IGEsXHJcblx0XHQgICAgICAgIHZhbHVlOiBoZWFkX2F0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgIH0pKVxyXG5cdFx0ICAgIClcclxuXHRcdCk7XHJcblx0XHQgdmFyIGpzb25saXN0PVtdO1xyXG5cdFx0ZGV0YWlsQXR0ckxpc3QuZm9yRWFjaChhdHRyPT57XHJcblx0XHQgICAganNvbmxpc3QucHVzaCh7XHJcblx0XHQgICAgICBpZDphdHRyW1wiaWRcIl18fCBcIlwiLFxyXG5cdFx0ICAgICAgYXR0cnM6IE9iamVjdC5rZXlzKGF0dHIpLm1hcCgoYSkgPT4gKHtcclxuXHRcdCAgICAgICAgYXR0cjogYSxcclxuXHRcdCAgICAgICAgdmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuXHRcdCAgICAgIH0pKS5maWx0ZXIoKGEpPT57cmV0dXJuIGEuYXR0ciAhPSBcImlkXCJ9KVxyXG5cdFx0ICAgIH0pO1xyXG5cdFx0fSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcblx0XHRjb25zdCBsaXN0ID0gW11cclxuXHRcdGxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzBdLk5hbWUsaXRlbV9saXN0Ompzb25saXN0LGV4dF9kYXRhOiR0aGlzLmRldGFpbDFFeHREYXRhfSlcclxuXHRcdCR0aGlzLnJ1bkN1c3RvbUV2ZW50KGV2ZW50LGlucHV0X3BhcmFtLGxpc3QsJzEnKTtcclxuXHRcdC8vIGpzb25saXN0LmZvckVhY2goYXN5bmMgKGpzb24sa2V5KT0+e1xyXG5cdFx0Ly8gXHRhd2FpdCAkdGhpcy5ydW5DdXN0b21FdmVudChldmVudCxpbnB1dF9wYXJhbSxqc29uLCcxJyk7XHJcblx0XHQvLyB9KTtcclxuXHR9LFxyXG4gICAgLy/noa7lrppcclxuICAgIG9rMigpe1xyXG4gICAgICAgIHRoaXMuQmVmb3JlX09LX0V2ZW50ID0gdGhpcy5wYXJhbS5TdWJfUGFnZVsxXS5CZWZvcmVfb2s7XHJcbiAgICAgICAgdGhpcy5BZnRlcl9PS19FdmVudCA9IHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uQWZ0ZXJfb2s7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5CZWZvcmVfT0tfRXZlbnQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuQWZ0ZXJfT0tfRXZlbnQpO1xyXG4gICAgICAgIGlmKHRoaXMuJGRhdGEuQmVmb3JlX09LX0V2ZW50LklEKSAvL+aYr+WQpuacieehruWumuWJjeS6i+S7tlxyXG4gICAgICAgICAgICB0aGlzLnNhdmEyKHRoaXMuJGRhdGEuQmVmb3JlX09LX0V2ZW50KTtcclxuICAgICAgICBlbHNlIGlmKHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQuSUQpICAvL+aYr+WQpuacieehruWumuWQjuS6i+S7tlxyXG4gICAgICAgICAgICB0aGlzLnNhdmEyKHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQpO1xyXG4gICAgfSxcclxuICAgIHNhdmEyKGV2ZW50KXtcclxuICAgIFx0dmFyICR0aGlzID0gdGhpcztcclxuICAgICAgICBpZih0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuayoeacieW+heWIhuaLo+eahOaVsOaNru+8gVwiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+iOt+WPluihqOWktOWxnuaAp1xyXG4gICAgICAgIHZhciBoZWFkX2F0dHIgPSB7fTtcclxuICAgICAgICB0aGlzLiRkYXRhLmhlYWRfc3R5bGVkZWYuZm9ybS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaGVhZF9hdHRyW2l0ZW0uZmllbGRJZF0gPSBpdGVtLnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGhlYWRfYXR0cik7XHJcbiAgICAgICAgLy/ojrflj5blt7LliIbmi6PlsZ7mgKdcclxuICAgICAgICB2YXIgZGV0YWlsQXR0ckxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaChzdHlsZT0+e1xyXG4gICAgICAgICAgdmFyIGRldGFpbF9hdHRyPXt9O1xyXG4gICAgXHQgIHN0eWxlLmZvcm0uaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYoaXRlbS5uYW1lID09IFwiTGF5b3V0XCIpeyAgLy/liKTmlq3mmK/lkKbmmK/moIXmoI/moLzlvI9cclxuICAgICAgICAgICAgICBpdGVtLnNldHRpbmcuY29sTGlzdC5mb3JFYWNoKGNvbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoY29scyE9bnVsbCkgZGV0YWlsX2F0dHJbY29scy5maWVsZElkXSA9IGNvbHMudmFsdWU7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1lbHNlXHJcbiAgICAgICAgICAgICAgZGV0YWlsX2F0dHJbaXRlbS5maWVsZElkXSA9IGl0ZW0udmFsdWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgIFx0ICBcclxuICAgIFx0ICBkZXRhaWxfYXR0clsnaWQnXSA9IHN0eWxlLmZvcm0ub2JqSWQ7XHJcbiAgICBcdCAgaWYoJHRoaXMucGFyYW0uU3ViX1BhZ2VbMV0uU2VsZWN0X0J1dHRvbj09dHJ1ZSl7IC8v5Yik5pat6YCJ5oup5oyJ6ZKu5piv5ZCm5Li6dHJ1ZVxyXG4gICAgXHQgICAgaWYoc3R5bGUuU2VsQnV0X0NoZWNrZWQ9PXRydWUpIFxyXG4gICAgXHQgICAgICBkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuICAgIFx0ICB9IGVsc2UgXHJcbiAgICBcdCAgICBkZXRhaWxBdHRyTGlzdC5wdXNoKGRldGFpbF9hdHRyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhkZXRhaWxBdHRyTGlzdCk7XHJcbiAgICBcdC8v6I635Y+W5bey5YiG5ouj6YeM5rKh5pyJ5pi+56S655qE5a2X5q61XHJcbiAgICBcdHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKHN0eWxlPT57XHJcbiAgICBcdCAgc3R5bGUuZm9ybS5hdHRycy5mb3JFYWNoKGF0dHIgPT4ge1xyXG4gICAgXHQgICAgZm9yKHZhciBrZXkgaW4gZGV0YWlsQXR0ckxpc3Qpe1xyXG4gICAgICAgICAgICAgIGlmKHN0eWxlLmZvcm0ub2JqSWQgPT0gZGV0YWlsQXR0ckxpc3Rba2V5XVsnaWQnXSl7XHJcbiAgICBcdCAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkZXRhaWxBdHRyTGlzdFtrZXldKTtcclxuICAgIFx0ICAgICAgICB2YXIgaXNmbGFnID0gdHJ1ZTtcclxuICAgIFx0ICAgICAgICBrZXlzLmZvckVhY2goKGVsZSkgPT4ge1xyXG4gICAgXHQgICAgICAgICAgaWYoZWxlID09IGF0dHIuYXR0cikgaXNmbGFnID0gZmFsc2U7XHJcbiAgICBcdCAgICAgICAgfSk7XHJcbiAgICBcdCAgICAgICAgaWYoaXNmbGFnKSB7XHJcbiAgICBcdCAgICAgICAgICBkZXRhaWxBdHRyTGlzdFthdHRyLmF0dHJdID0gYXR0ci52YWx1ZTtcclxuICAgIFx0ICAgICAgICB9XHJcblx0XHRcdCAgfVxyXG4gICAgXHQgICAgfSBcclxuICAgIFx0ICB9KTtcclxuICAgIFx0fSk7XHJcbiAgICBcdC8vIGNvbnNvbGUubG9nKGRldGFpbEF0dHJMaXN0KTtcclxuICAgICAvLyAgICByZXR1cm47XHJcbiAgICBcdHZhciBpbnB1dF9wYXJhbSA9IEJhc2U2NC5lbmNvZGUoXHJcbiAgICBcdCAgICBKU09OLnN0cmluZ2lmeShcclxuICAgIFx0ICAgICAgT2JqZWN0LmtleXMoaGVhZF9hdHRyKS5tYXAoKGEpID0+ICh7XHJcbiAgICBcdCAgICAgICAgYXR0cjogYSxcclxuICAgIFx0ICAgICAgICB2YWx1ZTogaGVhZF9hdHRyW2FdIHx8IFwiXCIsXHJcbiAgICBcdCAgICAgIH0pKVxyXG4gICAgXHQgICAgKVxyXG4gICAgXHQpO1xyXG4gICAgXHQgdmFyIGpzb25saXN0PVtdO1xyXG4gICAgXHRkZXRhaWxBdHRyTGlzdC5mb3JFYWNoKGF0dHI9PntcclxuICAgIFx0ICAgIGpzb25saXN0LnB1c2goe1xyXG4gICAgXHQgICAgICBpZDphdHRyW1wiaWRcIl18fCBcIlwiLFxyXG4gICAgXHQgICAgICBhdHRyczogT2JqZWN0LmtleXMoYXR0cikubWFwKChhKSA9PiAoe1xyXG4gICAgXHQgICAgICAgIGF0dHI6IGEsXHJcbiAgICBcdCAgICAgICAgdmFsdWU6IGF0dHJbYV0gfHwgXCJcIixcclxuICAgIFx0ICAgICAgfSkpLmZpbHRlcigoYSk9PntyZXR1cm4gYS5hdHRyICE9IFwiaWRcIn0pXHJcbiAgICBcdCAgICB9KTtcclxuICAgIFx0fSk7XHJcblx0XHRjb25zdCBsaXN0ID0gW11cclxuXHRcdGxpc3QucHVzaCh7cGFnZV9uYW1lOiR0aGlzLnBhcmFtLlN1Yl9QYWdlWzFdLk5hbWUsaXRlbV9saXN0Ompzb25saXN0LGV4dF9kYXRhOiR0aGlzLmRldGFpbDJFeHREYXRhfSlcclxuXHRcdFxyXG4gICAgXHQvLyBjb25zb2xlLmxvZyhqc29ubGlzdCk7XHJcbiAgICBcdCR0aGlzLnJ1bkN1c3RvbUV2ZW50KGV2ZW50LGlucHV0X3BhcmFtLGxpc3QsJzInKTtcclxuICAgIFx0Ly8ganNvbmxpc3QuZm9yRWFjaChhc3luYyAoanNvbixrZXkpPT57XHJcbiAgICBcdC8vIFx0YXdhaXQgJHRoaXMucnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbiwnMicpO1xyXG4gICAgXHQvLyB9KTtcclxuICAgIH0sXHJcbiAgICAvL+aJp+ihjOehruWumuiEmuacrFxyXG4gICAgYXN5bmMgcnVuQ3VzdG9tRXZlbnQoZXZlbnQsaW5wdXRfcGFyYW0sanNvbix0eXBlKXtcclxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHR2YXIgZGF0YV9qc29uID0gQmFzZTY0LmVuY29kZShcclxuXHRcdCAgICBKU09OLnN0cmluZ2lmeShqc29uKVxyXG5cdFx0KTtcclxuXHRcdHZhciBkYXRhSW5mbz17XHJcblx0XHQgIGVkX3R5cGU6IDAsXHJcbiAgICAgICAgICBzdGFydF90cmFuc2FjdGlvbjogdHJ1ZSxcclxuXHRcdCAgY2xhc3NfaWQ6IHRoaXMuJGRhdGEuQ2xzSUQsXHJcblx0XHQgIGNsYXNzX25hbWU6ICcnLFxyXG5cdFx0ICBldmVudF9pZDogZXZlbnQuSUQsXHJcblx0XHQgIGV2ZW50X25hbWU6ICcnLFxyXG5cdFx0ICBkYXRhX29ial9pZDogJycsXHJcblx0XHQgIG9ial9hdHRyOiAnJyxcclxuXHRcdCAgcHJqX2lkOiAnJyxcclxuXHRcdCAgcmVmX2Nsc19pZDogJycsXHJcblx0XHQgIHJlbF9vYmpfaWQ6ICcnLFxyXG5cdFx0ICB1c2VyX2xvZ2luOiAnJyxcclxuXHRcdCAgZGF0YV9qc29uOiBkYXRhX2pzb24sXHJcblx0XHQgIGNvbXBvc2VfaW5mbzogJycsXHJcblx0XHQgIGV4dF9pbmZvOiAnJyxcclxuXHRcdCAgZ2xvYmFsX2F0dHI6ICcnLFxyXG5cdFx0ICBpbnB1dF9wYXJhbTogaW5wdXRfcGFyYW0sXHJcblx0XHR9O1xyXG5cdFx0Ly8gY29uc29sZS5sb2coZGF0YUluZm8pO1xyXG5cdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3J1bkN1c3RvbUV2ZW50JyxkYXRhSW5mbykudGhlbihyZXM9PntcclxuXHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0aWYgKHJlcy5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0dmFyIHJlc3VsdCA9IHJlcy5yZXN1bHQ7IFxyXG5cdFx0XHRcdGlmIChyZXN1bHQucmV0ICE9IDApIHtcclxuXHRcdFx0XHQgICAgdmFyIHRpcCA9IHJlc3VsdC5lcnJfaW5mbyA/IHR5cGVvZiByZXN1bHQuZXJyX2luZm8gPT0gJ3N0cmluZycgPyByZXN1bHQuZXJyX2luZm8gOiByZXN1bHQuZXJyX2luZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdCAgICBpZiAocmVzdWx0LnJldCA9PSA4MDEpIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdCAgICBlbHNlIHVuaS5zaG93TW9kYWwoe3RpdGxlOifmj5DnpLonLGNvbnRlbnQ6dGlwKycs5o+Q56S6OicrcmVzdWx0LnJldCxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHZhciB0aXAgPSByZXN1bHQuaW5mbyA/IHR5cGVvZiByZXN1bHQuaW5mbyA9PSAnc3RyaW5nJyA/IHJlc3VsdC5pbmZvIDogcmVzdWx0LmluZm8uam9pbignPGJyLz4nKSA6ICcnO1xyXG5cdFx0XHRcdFx0aWYgKHRpcCkgdW5pLnNob3dNb2RhbCh7dGl0bGU6J+aPkOekuicsY29udGVudDp0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZihyZXN1bHQucmVzdWx0X3R5cGUgPT0gMCl7XHJcblx0XHRcdFx0XHQgIGlmKHJlc3VsdC5hY3Rpb24pe1xyXG5cdFx0XHRcdFx0XHRyZXN1bHQuYWN0aW9uLmZvckVhY2goaXRlbT0+e1xyXG5cdFx0XHRcdFx0XHQgIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJpbnNlcnRfc3VidGFibGVfcGFnZV9yb3dcIil7IC8v5YiG5ouj5LitXHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHQvL+WKoOi9veW+heWIhuaLo+aVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUsJycpO1xyXG5cdFx0XHRcdFx0XHRcdC8vICR0aGlzLnZpZXdBY2Vpb25Sb3codmFsdWUsJ2FkZCcpO1xyXG5cdFx0XHRcdFx0XHRcdC8v5riF56m65p2h56CB5YaF5a65XHJcblx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLml0ZW1zLmZvckVhY2goKGl0ZW0saW5kZXgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKGl0ZW0uZmllbGRJZCAhPSBcIlNfQ05UUl9DT0RFXCIpe1xyXG5cdFx0XHRcdFx0XHRcdFx0ICBpdGVtLnZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHQgIGl0ZW0ub2xkdmFsdWUgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMuJGRhdGEuaGVhZF9zdHlsZWRlZi5mb3JtLm1vZGVsW2l0ZW0uZmllbGRJZF0gPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvL+a4hemZpOW+heWIhuaLo+S4reaIkOWKn+eahOaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdC8vICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3QuZm9yRWFjaCgoc3R5bGUsaW5kZXgpPT57XHJcblx0XHRcdFx0XHRcdFx0Ly8gICBpZihzdHlsZS5mb3JtLml0ZW1zWzBdLmZpZWxkSWQgPT0ganNvbi5hdHRyc1swXS5hdHRyICYmIHN0eWxlLmZvcm0uaXRlbXNbMF0udmFsdWUgPT0ganNvbi5hdHRyc1swXS52YWx1ZSl7IFxyXG5cdFx0XHRcdFx0XHRcdC8vIFx0JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0Ly8gICB9XHJcblx0XHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5kZXRhaWwyU3R5bGVEZWZMaXN0PVtdO1xyXG5cdFx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpcIuWIhuaLo+aIkOWKn1wiLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlj5bmtohcIn0pO1xyXG5cdFx0XHRcdFx0XHQgIH0gZWxzZSBpZihpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3N1YnRhYmxlX3BhZ2VfY29udGVudFwiKXsgIC8v5Yqg6L295aSa5p2h5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0JHRoaXMucGFyYW0uU2hvd19XZWxjb21fUGFnZT1mYWxzZTtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHZhbHVlLmNsZWFyID09IHRydWUgJiYgJHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5sZW5ndGg+MCl7IC8v5Yik5pat5piv5ZCm5riF56m66aG1562+5YaF5a65LOW+heWIhuaLo+aYr+WQpuacieaVsOaNrlxyXG5cdFx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAn5o+Q56S6JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogJ+ezu+e7n+ajgOa1i+WIsOacieW+heWIhuaLo+S4reeahOaVsOaNru+8jOe7p+e7reaTjeS9nOS8mua4heepuu+8jOaYr+WQpue7p+e7re+8nycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzLmNvbmZpcm0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLnNldERhdGEoe2RldGFpbDFTdHlsZURlZkxpc3Q6W10sZGV0YWlsMlN0eWxlRGVmTGlzdDpbXX0pIFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgJHRoaXMudmlld0FjZWlvbkNvbnRlbnQodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnZpZXdBY2Vpb25Db250ZW50KHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCAgfSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJyZW1vdmVfc3VidGFibGVfcGFnZV9yb3dcIil7ICAvL+a4hemZpOmdouadv+S4reaMh+Wummlk55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRpZih2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSl7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdFx0XHRcdFx0XHQvL+a4hemZpOmdouadv+S4reaMh+Wummlk55qE5pWw5o2uXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZS5yb3cuZm9yRWFjaChyb3c9PntcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJGRhdGEuZGV0YWlsMVN0eWxlRGVmTGlzdC5mb3JFYWNoKChlbGUsaW5kZXgpPT57XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZWxlLmZvcm0ub2JqSWQgPT0gcm93LmlkKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICR0aGlzLiRkYXRhLmRldGFpbDFTdHlsZURlZkxpc3Quc3BsaWNlKGluZGV4LDEpOyBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQgIH0gXHJcblx0XHRcdFx0XHRcdCAgZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9zdWJ0YWJsZV9wYWdlX3Jvd1wiKSB7XHJcblx0XHRcdFx0XHRcdCAgXHQkdGhpcy52aWV3QWN0aW9uU2V0Um93KCBpdGVtLnZhbHVlKVxyXG5cdFx0XHRcdFx0XHQgIFx0XHJcblx0XHRcdFx0XHRcdCAgfSBlbHNlIGlmIChpdGVtLmFjdGlvbl90eXBlID09IFwic2V0X3N1YnRhYmxlX3BhZ2VfZXh0X2RhdGFcIikge1xyXG5cdFx0XHRcdFx0XHQgIFx0dmFyIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0ICBcdGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMF0uTmFtZSkgeyAvL+WIpOaWrei/lOWbnueahGFjdGlvbueahHBhZ2VfbmFtZeaYr+WQpuaYr+W+heWIhuaLo1xyXG5cdFx0XHRcdFx0XHQgIFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwxRXh0RGF0YTp2YWx1ZS5leHRfZGF0YX0pXHJcblx0XHRcdFx0XHRcdCAgXHR9IGVsc2UgaWYgKHZhbHVlLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVsxXS5OYW1lKSB7XHJcblx0XHRcdFx0XHRcdCAgXHRcdCR0aGlzLnNldERhdGEoe2RldGFpbDJFeHREYXRhOnZhbHVlLmV4dF9kYXRhfSlcclxuXHRcdFx0XHRcdFx0ICBcdH1cclxuXHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdCAgZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcImNsZWFyX3N1YnBhZ2Vfcm93c1wiKSB7XHJcblx0XHRcdFx0XHRcdCAgXHR2YXIgdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHQgIFx0aWYgKHZhbHVlLnBhZ2VfbmFtZSA9PSAkdGhpcy4kZGF0YS5wYXJhbS5TdWJfUGFnZVswXS5OYW1lKSB7IC8v5Yik5pat6L+U5Zue55qEYWN0aW9u55qEcGFnZV9uYW1l5piv5ZCm5piv5b6F5YiG5oujXHJcblx0XHRcdFx0XHRcdCAgXHRcdCR0aGlzLnNldERhdGEoe2RldGFpbDFTdHlsZURlZkxpc3Q6W10sZGV0YWlsMUV4dERhdGE6e319KVxyXG5cdFx0XHRcdFx0XHQgIFx0fSBlbHNlIGlmICh2YWx1ZS5wYWdlX25hbWUgPT0gJHRoaXMuJGRhdGEucGFyYW0uU3ViX1BhZ2VbMV0uTmFtZSkge1xyXG5cdFx0XHRcdFx0XHQgIFx0XHQkdGhpcy5zZXREYXRhKHtkZXRhaWwyU3R5bGVEZWZMaXN0OltdLGRldGFpbDJFeHREYXRhOnt9fSlcclxuXHRcdFx0XHRcdFx0ICBcdH1cclxuXHRcdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHRcdCAgZWxzZSBpZiAoaXRlbS5hY3Rpb25fdHlwZSA9PSBcInNldF9kbGdfY3VycmVudF9lZGl0X2F0dHJcIikge1xyXG5cdFx0XHRcdFx0XHRcdCAgaWYoJHRoaXMuZm9jdXNGaWVsZElkID09IGl0ZW0udmFsdWUpXHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5zZXREYXRhKHtmb2N1c0ZpZWxkSWQ6IFwiXCJ9KVxyXG5cdFx0XHRcdFx0XHQgIFx0JHRoaXMuc2V0RGF0YSh7Zm9jdXNGaWVsZElkOml0ZW0udmFsdWV9KVxyXG5cdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0ICBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJyZWZyZXNoXCIpeyAgLy/liLfmlrBcclxuXHRcdFx0XHRcdFx0ICAgIHZhciB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0Ly/muIXpmaTlvoXliIbmi6PmiJDlip/nmoTmlbDmja5cclxuXHRcdFx0XHRcdFx0XHQvLyB2YWx1ZS5mb3JFYWNoKCh2YWxfaWQsa2V5KT0+e1xyXG5cdFx0XHRcdFx0XHRcdC8vICAgdGhpcy5kZXRhaWwxU3R5bGVEZWZMaXN0LmZvckVhY2goKHN0eWxlLGluZGV4KT0+e1xyXG5cdFx0XHRcdFx0XHRcdC8vICAgICBpZihzdHlsZS5mb3JtLm9iaklkID09IHZhbF9pZCl7IFxyXG5cdFx0XHRcdFx0XHRcdC8vICAgICAgIHRoaXMuZGV0YWlsMVN0eWxlRGVmTGlzdC5zcGxpY2UoaW5kZXgsMSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gICAgICAgcmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRcdC8vICAgICB9XHJcblx0XHRcdFx0XHRcdFx0Ly8gICB9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0XHQvL+WIt+aWsOW9k+WJjemhtemdolxyXG5cdFx0XHRcdFx0XHRcdHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHRcdFx0XHRcdHVybDonLi4vbW9kYWwvNTYwMj9wYXJhbT0nK0pTT04uc3RyaW5naWZ5KHRoaXMuJGRhdGEucGFyYW0pK1wiJnRpdGxlbmFtZT1cIit0aGlzLiRkYXRhLnRpdGxlXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdCAgfSBlbHNlIGlmKGl0ZW0uYWN0aW9uX3R5cGUgPT0gXCJwcm9tcHRcIil7ICAvL+aJk+W8gOezu+e7n+aPkOekuuW8ueahhlxyXG5cdFx0XHRcdFx0XHQgICAgdmFyIHZhbHVlID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0aXRlbS52YWx1ZS5mb3JFYWNoKGVsZT0+e1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYodmFsdWUpIHZhbHVlKz0nXFxuJztcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlKz1lbGU7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLns7vnu5/mj5DnpLpcIixjb250ZW50OnZhbHVlLHNob3dDYW5jZWw6ZmFsc2UsY29uZmlybVRleHQ6XCLlhbPpl61cIn0pO1xyXG5cdFx0XHRcdFx0XHQgIH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHQgIH1lbHNle1xyXG5cdFx0XHRcdFx0XHRpZigkdGhpcy4kZGF0YS5BZnRlcl9PS19FdmVudC5JRCAhPSBldmVudC5JRCl7IC8v5Yik5pat5b2T5YmN5LqL5Lu25piv5ZCm5piv56Gu5a6a5ZCO5LqL5Lu2XHJcblx0XHRcdFx0XHRcdFx0aWYodHlwZT09JzEnKXtcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNhdmEoJHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQpOyAvL+aJp+ihjOehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2F2YTIoJHRoaXMuJGRhdGEuQWZ0ZXJfT0tfRXZlbnQpOyAvL+aJp+ihjOehruWumuWQjuS6i+S7tlxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ICB9XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0Ly8gJHRoaXMuJGRhdGEuZGV0YWlsMlN0eWxlRGVmTGlzdD1bXTtcclxuXHRcdFx0XHRcdFx0aWYocmVzdWx0LmluZm8pe1xyXG5cdFx0XHRcdFx0XHQgIHVuaS5zaG93TW9kYWwoe3RpdGxlOlwi5o+Q56S6XCIsY29udGVudDpyZXN1bHQuaW5mbyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684XCIsY29udGVudDpyZXMuZXJyX21zZyxzaG93Q2FuY2VsOmZhbHNlLGNvbmZpcm1UZXh0Olwi5Y+W5raIXCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuY2F0Y2goZXg9PntcclxuXHRcdCAgICB2YXIgdGlwID0gdHlwZW9mIGV4ID09IFwic3RyaW5nXCIgPyBleCA6IGV4LmVyck1zZztcclxuXHRcdFx0dW5pLnNob3dNb2RhbCh7dGl0bGU6XCLplJnor684LjFcIixjb250ZW50Olwi5omn6KGM4oCc56Gu5a6a5ZCO4oCd5LqL5Lu25aSx6LSl77yaXCIgKyB0aXAsc2hvd0NhbmNlbDpmYWxzZSxjb25maXJtVGV4dDpcIuWPlua2iFwifSk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cdFxyXG5cdGNhbmNlbChlKXsgLy/lj5bmtohcclxuXHRcdHVuaS5uYXZpZ2F0ZUJhY2soe1xyXG5cdFx0XHRkZWx0YToxIC8v6L+U5Zue5bGC5pWw77yMMuWImeS4iuS4iumhtVxyXG5cdFx0fSk7XHJcblx0fSxcclxuICB9LFxyXG59O1xyXG48L3NjcmlwdD5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///196\n"); |
| | | |
| | | /***/ }), |
| | | /* 197 */ |
| | |
| | | /***/ (function(module, exports, __webpack_require__) { |
| | | |
| | | "use strict"; |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = {\n onLaunch: function onLaunch() {\n __f__(\"log\", 'App Launch', \" at App.vue:4\");\n this.initscan();\n },\n onShow: function onShow() {\n __f__(\"log\", 'App Show', \" at App.vue:8\");\n },\n onHide: function onHide() {\n __f__(\"log\", 'App Hide', \" at App.vue:11\");\n },\n methods: {\n initscan: function initscan() {\n var that = this;\n var main = plus.android.runtimeMainActivity(),\n //获取activity\n IntentFilter = plus.android.importClass('android.content.IntentFilter'),\n //引入过滤器\n // Intent = plus.android.importClass('android.content.Intent'),\n filter = new IntentFilter(),\n receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {\n onReceive: function onReceive(context, intent) {\n //实现onReceiver回调函数\n __f__(\"log\", 'onReceive', intent, \" at App.vue:22\");\n plus.android.importClass(intent);\n var decodesource = intent.getStringExtra(\"com.symbol.datawedge.source\");\n var decodedata = intent.getStringExtra(\"com.symbol.datawedge.data_string\");\n var data = intent.getStringExtra(\"data\");\n var decodelabeltype = intent.getStringExtra(\"com.symbol.datawedge.label_type\");\n var scanResult = {\n decodesource: decodesource,\n decodedata: decodedata || data,\n decodelabeltype: decodelabeltype\n };\n __f__(\"log\", 'onReceive', scanResult, \" at App.vue:34\");\n uni.$emit(\"scanresult\", scanResult);\n }\n });\n filter.addAction(\"com.pda.formobox\"); //监听扫码广播\n filter.addAction('com.rfid.scan'); //com.scan.sx android.intent.action.scanner.RFID\n main.registerReceiver(receiver, filter); //注册监听\n },\n onScan: function onScan(callback) {\n __f__(\"log\", 'onScan', \" at App.vue:44\");\n uni.$off(\"scanresult\");\n uni.$on(\"scanresult\", function (result) {\n callback(result);\n });\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vQXBwLnZ1ZSJdLCJuYW1lcyI6WyJvbkxhdW5jaCIsIm9uU2hvdyIsIm9uSGlkZSIsIm1ldGhvZHMiLCJpbml0c2NhbiIsIkludGVudEZpbHRlciIsImZpbHRlciIsInJlY2VpdmVyIiwib25SZWNlaXZlIiwicGx1cyIsImRlY29kZXNvdXJjZSIsImRlY29kZWRhdGEiLCJkZWNvZGVsYWJlbHR5cGUiLCJ1bmkiLCJtYWluIiwib25TY2FuIiwiY2FsbGJhY2siXSwibWFwcGluZ3MiOiI7Ozs7OztlQUNBO0VBQ0FBO0lBQ0E7SUFDQTtFQUNBO0VBQ0FDO0lBQ0E7RUFDQTtFQUNBQztJQUNBO0VBQ0E7RUFDQUM7SUFDQUM7TUFDQTtNQUNBO1FBQUE7UUFDQUM7UUFBQTtRQUNBO1FBQ0FDO1FBQ0FDO1VBQ0FDO1lBQUE7WUFDQTtZQUNBQztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7Y0FDQUM7Y0FDQUM7Y0FDQUM7WUFFQTtZQUNBO1lBQ0FDO1VBQ0E7UUFDQTtNQUVBUDtNQUNBQTtNQUNBUTtJQUNBO0lBQ0FDO01BQ0E7TUFDQUY7TUFDQUE7UUFDQUc7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzY3JpcHQ+XHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0b25MYXVuY2g6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnQXBwIExhdW5jaCcpO1xyXG5cdFx0XHR0aGlzLmluaXRzY2FuKCk7XHJcblx0XHR9LFxyXG5cdFx0b25TaG93OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ0FwcCBTaG93JylcclxuXHRcdH0sXHJcblx0XHRvbkhpZGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnQXBwIEhpZGUnKVxyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6e1xyXG5cdFx0XHRpbml0c2Nhbigpe1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpcztcclxuXHRcdFx0XHR2YXIgbWFpbiA9IHBsdXMuYW5kcm9pZC5ydW50aW1lTWFpbkFjdGl2aXR5KCksIC8v6I635Y+WYWN0aXZpdHlcclxuXHRcdFx0XHRJbnRlbnRGaWx0ZXIgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoJ2FuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXInKSwvL+W8leWFpei/h+a7pOWZqFxyXG5cdFx0XHRcdC8vIEludGVudCA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcygnYW5kcm9pZC5jb250ZW50LkludGVudCcpLFxyXG5cdFx0XHRcdGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKSxcclxuXHRcdFx0XHRyZWNlaXZlciA9IHBsdXMuYW5kcm9pZC5pbXBsZW1lbnRzKCdpby5kY2xvdWQuZmVhdHVyZS5pbnRlcm5hbC5yZWZsZWN0LkJyb2FkY2FzdFJlY2VpdmVyJywge1xyXG5cdFx0XHRcdFx0b25SZWNlaXZlOiBmdW5jdGlvbihjb250ZXh0LCBpbnRlbnQpey8v5a6e546wb25SZWNlaXZlcuWbnuiwg+WHveaVsFxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnb25SZWNlaXZlJyxpbnRlbnQpO1xyXG5cdFx0XHRcdFx0XHRwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoaW50ZW50KTsgIFxyXG5cdFx0XHRcdFx0XHR2YXIgZGVjb2Rlc291cmNlID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKFwiY29tLnN5bWJvbC5kYXRhd2VkZ2Uuc291cmNlXCIpO1xyXG5cdFx0XHRcdFx0XHR2YXIgZGVjb2RlZGF0YSA9IGludGVudC5nZXRTdHJpbmdFeHRyYShcImNvbS5zeW1ib2wuZGF0YXdlZGdlLmRhdGFfc3RyaW5nXCIpO1xyXG5cdFx0XHRcdFx0XHR2YXIgZGF0YSA9IGludGVudC5nZXRTdHJpbmdFeHRyYShcImRhdGFcIik7XHJcblx0XHRcdFx0XHRcdHZhciBkZWNvZGVsYWJlbHR5cGUgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoXCJjb20uc3ltYm9sLmRhdGF3ZWRnZS5sYWJlbF90eXBlXCIpO1xyXG5cdFx0XHRcdFx0XHR2YXIgc2NhblJlc3VsdD17XHJcblx0XHRcdFx0XHRcdFx0ZGVjb2Rlc291cmNlLFxyXG5cdFx0XHRcdFx0XHRcdGRlY29kZWRhdGEgOmRlY29kZWRhdGEgfHwgZGF0YSxcclxuXHRcdFx0XHRcdFx0XHRkZWNvZGVsYWJlbHR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdvblJlY2VpdmUnLHNjYW5SZXN1bHQpO1xyXG5cdFx0XHRcdFx0XHR1bmkuJGVtaXQoXCJzY2FucmVzdWx0XCIsc2NhblJlc3VsdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0IGZpbHRlci5hZGRBY3Rpb24oXCJjb20ucGRhLmZvcm1vYm94XCIpOyAvL+ebkeWQrOaJq+eggeW5v+aSrVxyXG5cdFx0XHRcdCBmaWx0ZXIuYWRkQWN0aW9uKCdjb20ucmZpZC5zY2FuJykgLy9jb20uc2Nhbi5zeCBhbmRyb2lkLmludGVudC5hY3Rpb24uc2Nhbm5lci5SRklEXHJcblx0XHRcdFx0bWFpbi5yZWdpc3RlclJlY2VpdmVyKHJlY2VpdmVyLCBmaWx0ZXIpOyAvL+azqOWGjOebkeWQrFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRvblNjYW4oY2FsbGJhY2spe1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdvblNjYW4nKTtcclxuXHRcdFx0XHR1bmkuJG9mZihcInNjYW5yZXN1bHRcIik7XHJcblx0XHRcdFx0dW5pLiRvbihcInNjYW5yZXN1bHRcIiwocmVzdWx0KT0+e1xyXG5cdFx0XHRcdFx0Y2FsbGJhY2socmVzdWx0KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cclxuXHQvKuavj+S4qumhtemdouWFrOWFsWNzcyAqL1xyXG5cdC8qTW9ib3gy5Zu+5qCHICovXHJcblx0QGltcG9ydCAnQC91bmlfbW9kdWxlcy91bmktc2Nzcy9pbmRleC5zY3NzJztcclxuXHRAaW1wb3J0ICdAL2ZvbnRzL2ZvbnQtYXdlc29tZS9jc3MvZm9udC1hd2Vzb21lLmNzcyc7XHJcblx0QGltcG9ydCAnQC9mb250cy9mb250LW1vYm94LXVzZXIvZnUuY3NzJztcclxuXHRAaW1wb3J0ICdAL2ZvbnRzL2ZvbnQtbW9ib3gvZm0uY3NzJztcdFxyXG5cdEBpbXBvcnQgJ0AvZm9udHMvZm9udC1zeXMvZnMuY3NzJztcclxuXHQvKk1vYm94M+WbvuaghyAqL1xyXG5cdEBpbXBvcnQgJ0AvZm9udHMvbW9ib3gtZG1zL3N0eWxlLmNzcyc7XHJcblx0QGltcG9ydCAnQC9mb250cy9tb2JveC1ub3JtYWwvc3R5bGUuY3NzJztcclxuXHRAaW1wb3J0ICdAL2ZvbnRzL21vYm94LW9yZy9zdHlsZS5jc3MnO1xyXG5cdEBpbXBvcnQgJ0AvZm9udHMvbW9ib3gtcGxtL3N0eWxlLmNzcyc7XHJcblx0QGltcG9ydCAnQC9mb250cy9tb2JveC1zeXMvc3R5bGUuY3NzJztcclxuXHRAaW1wb3J0ICdAL2ZvbnRzL21vYm94LXdtcy9zdHlsZS5jc3MnO1xyXG5cdFx0XHJcbjwvc3R5bGU+XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n"); |
| | | eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = {\n onLaunch: function onLaunch() {\n __f__(\"log\", 'App Launch', \" at App.vue:4\");\n this.initscan();\n },\n onShow: function onShow() {\n __f__(\"log\", 'App Show', \" at App.vue:8\");\n },\n onHide: function onHide() {\n __f__(\"log\", 'App Hide', \" at App.vue:11\");\n },\n methods: {\n initscan: function initscan() {\n var that = this;\n var main = plus.android.runtimeMainActivity(),\n //获取activity\n IntentFilter = plus.android.importClass('android.content.IntentFilter'),\n //引入过滤器\n // Intent = plus.android.importClass('android.content.Intent'),\n filter = new IntentFilter(),\n receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {\n onReceive: function onReceive(context, intent) {\n //实现onReceiver回调函数\n //console.log('onReceive',intent);\n plus.android.importClass(intent);\n var decodesource = intent.getStringExtra(\"com.symbol.datawedge.source\");\n var decodedata = intent.getStringExtra(\"com.symbol.datawedge.data_string\");\n var data = intent.getStringExtra(\"data\");\n var decodelabeltype = intent.getStringExtra(\"com.symbol.datawedge.label_type\");\n var scanResult = {\n decodesource: decodesource,\n decodedata: decodedata || data,\n decodelabeltype: decodelabeltype\n };\n __f__(\"log\", 'onReceive', scanResult, \" at App.vue:34\");\n uni.$emit(\"scanresult\", scanResult);\n }\n });\n filter.addAction(\"com.pda.formobox\"); //监听扫码广播\n filter.addAction('com.rfid.scan'); //\n main.registerReceiver(receiver, filter); //注册监听\n },\n onScan: function onScan(callback) {\n __f__(\"log\", 'onScan', \" at App.vue:44\");\n uni.$off(\"scanresult\");\n uni.$on(\"scanresult\", function (result) {\n callback(result);\n });\n }\n }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vQXBwLnZ1ZSJdLCJuYW1lcyI6WyJvbkxhdW5jaCIsImluaXRzY2FuIiwib25TaG93Iiwib25IaWRlIiwibWV0aG9kcyIsInRoYXQiLCJtYWluIiwicGx1cyIsImFuZHJvaWQiLCJydW50aW1lTWFpbkFjdGl2aXR5IiwiSW50ZW50RmlsdGVyIiwiaW1wb3J0Q2xhc3MiLCJmaWx0ZXIiLCJyZWNlaXZlciIsImltcGxlbWVudHMiLCJvblJlY2VpdmUiLCJjb250ZXh0IiwiaW50ZW50IiwiZGVjb2Rlc291cmNlIiwiZ2V0U3RyaW5nRXh0cmEiLCJkZWNvZGVkYXRhIiwiZGF0YSIsImRlY29kZWxhYmVsdHlwZSIsInNjYW5SZXN1bHQiLCJ1bmkiLCIkZW1pdCIsImFkZEFjdGlvbiIsInJlZ2lzdGVyUmVjZWl2ZXIiLCJvblNjYW4iLCJjYWxsYmFjayIsIiRvZmYiLCIkb24iLCJyZXN1bHQiXSwibWFwcGluZ3MiOiI7Ozs7OztlQUNlO0VBQ2RBLFFBQVEsRUFBRSxvQkFBVztJQUNwQixhQUFZLFlBQVk7SUFDeEIsSUFBSSxDQUFDQyxRQUFRLEVBQUU7RUFDaEIsQ0FBQztFQUNEQyxNQUFNLEVBQUUsa0JBQVc7SUFDbEIsYUFBWSxVQUFVO0VBQ3ZCLENBQUM7RUFDREMsTUFBTSxFQUFFLGtCQUFXO0lBQ2xCLGFBQVksVUFBVTtFQUN2QixDQUFDO0VBQ0RDLE9BQU8sRUFBQztJQUNQSCxRQUFRLHNCQUFFO01BQ1QsSUFBSUksSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJQyxJQUFJLEdBQUdDLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxtQkFBbUIsRUFBRTtRQUFFO1FBQy9DQyxZQUFZLEdBQUdILElBQUksQ0FBQ0MsT0FBTyxDQUFDRyxXQUFXLENBQUMsOEJBQThCLENBQUM7UUFBQztRQUN4RTtRQUNBQyxNQUFNLEdBQUcsSUFBSUYsWUFBWSxFQUFFO1FBQzNCRyxRQUFRLEdBQUdOLElBQUksQ0FBQ0MsT0FBTyxDQUFDTSxVQUFVLENBQUMsc0RBQXNELEVBQUU7VUFDMUZDLFNBQVMsRUFBRSxtQkFBU0MsT0FBTyxFQUFFQyxNQUFNLEVBQUM7WUFBQztZQUNwQztZQUNBVixJQUFJLENBQUNDLE9BQU8sQ0FBQ0csV0FBVyxDQUFDTSxNQUFNLENBQUM7WUFDaEMsSUFBSUMsWUFBWSxHQUFHRCxNQUFNLENBQUNFLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQztZQUN2RSxJQUFJQyxVQUFVLEdBQUdILE1BQU0sQ0FBQ0UsY0FBYyxDQUFDLGtDQUFrQyxDQUFDO1lBQzFFLElBQUlFLElBQUksR0FBR0osTUFBTSxDQUFDRSxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3hDLElBQUlHLGVBQWUsR0FBR0wsTUFBTSxDQUFDRSxjQUFjLENBQUMsaUNBQWlDLENBQUM7WUFDOUUsSUFBSUksVUFBVSxHQUFDO2NBQ2RMLFlBQVksRUFBWkEsWUFBWTtjQUNaRSxVQUFVLEVBQUVBLFVBQVUsSUFBSUMsSUFBSTtjQUM5QkMsZUFBZSxFQUFmQTtZQUVELENBQUM7WUFDRCxhQUFZLFdBQVcsRUFBQ0MsVUFBVTtZQUNsQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsWUFBWSxFQUFDRixVQUFVLENBQUM7VUFDbkM7UUFDRCxDQUFDLENBQUM7TUFFRFgsTUFBTSxDQUFDYyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO01BQ3RDZCxNQUFNLENBQUNjLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBQztNQUNuQ3BCLElBQUksQ0FBQ3FCLGdCQUFnQixDQUFDZCxRQUFRLEVBQUVELE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNEZ0IsTUFBTSxrQkFBQ0MsUUFBUSxFQUFDO01BQ2YsYUFBWSxRQUFRO01BQ3BCTCxHQUFHLENBQUNNLElBQUksQ0FBQyxZQUFZLENBQUM7TUFDdEJOLEdBQUcsQ0FBQ08sR0FBRyxDQUFDLFlBQVksRUFBQyxVQUFDQyxNQUFNLEVBQUc7UUFDOUJILFFBQVEsQ0FBQ0csTUFBTSxDQUFDO01BQ2pCLENBQUMsQ0FBQztJQUNIO0VBQ0Q7QUFDRCxDQUFDO0FBQUEsMkIiLCJmaWxlIjoiMTk5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgZGVmYXVsdCB7XG5cdG9uTGF1bmNoOiBmdW5jdGlvbigpIHtcblx0XHRjb25zb2xlLmxvZygnQXBwIExhdW5jaCcpO1xuXHRcdHRoaXMuaW5pdHNjYW4oKTtcblx0fSxcblx0b25TaG93OiBmdW5jdGlvbigpIHtcblx0XHRjb25zb2xlLmxvZygnQXBwIFNob3cnKVxuXHR9LFxuXHRvbkhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdGNvbnNvbGUubG9nKCdBcHAgSGlkZScpXG5cdH0sXG5cdG1ldGhvZHM6e1xuXHRcdGluaXRzY2FuKCl7XG5cdFx0XHRsZXQgdGhhdCA9IHRoaXM7XG5cdFx0XHR2YXIgbWFpbiA9IHBsdXMuYW5kcm9pZC5ydW50aW1lTWFpbkFjdGl2aXR5KCksIC8v6I635Y+WYWN0aXZpdHlcblx0XHRcdEludGVudEZpbHRlciA9IHBsdXMuYW5kcm9pZC5pbXBvcnRDbGFzcygnYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcicpLC8v5byV5YWl6L+H5ruk5ZmoXG5cdFx0XHQvLyBJbnRlbnQgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoJ2FuZHJvaWQuY29udGVudC5JbnRlbnQnKSxcblx0XHRcdGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKSxcblx0XHRcdHJlY2VpdmVyID0gcGx1cy5hbmRyb2lkLmltcGxlbWVudHMoJ2lvLmRjbG91ZC5mZWF0dXJlLmludGVybmFsLnJlZmxlY3QuQnJvYWRjYXN0UmVjZWl2ZXInLCB7XG5cdFx0XHRcdG9uUmVjZWl2ZTogZnVuY3Rpb24oY29udGV4dCwgaW50ZW50KXsvL+WunueOsG9uUmVjZWl2ZXLlm57osIPlh73mlbBcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKCdvblJlY2VpdmUnLGludGVudCk7XG5cdFx0XHRcdFx0cGx1cy5hbmRyb2lkLmltcG9ydENsYXNzKGludGVudCk7ICBcblx0XHRcdFx0XHR2YXIgZGVjb2Rlc291cmNlID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKFwiY29tLnN5bWJvbC5kYXRhd2VkZ2Uuc291cmNlXCIpO1xuXHRcdFx0XHRcdHZhciBkZWNvZGVkYXRhID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKFwiY29tLnN5bWJvbC5kYXRhd2VkZ2UuZGF0YV9zdHJpbmdcIik7XG5cdFx0XHRcdFx0dmFyIGRhdGEgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoXCJkYXRhXCIpO1xuXHRcdFx0XHRcdHZhciBkZWNvZGVsYWJlbHR5cGUgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoXCJjb20uc3ltYm9sLmRhdGF3ZWRnZS5sYWJlbF90eXBlXCIpO1xuXHRcdFx0XHRcdHZhciBzY2FuUmVzdWx0PXtcblx0XHRcdFx0XHRcdGRlY29kZXNvdXJjZSxcblx0XHRcdFx0XHRcdGRlY29kZWRhdGEgOmRlY29kZWRhdGEgfHwgZGF0YSxcblx0XHRcdFx0XHRcdGRlY29kZWxhYmVsdHlwZSxcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ29uUmVjZWl2ZScsc2NhblJlc3VsdCk7XG5cdFx0XHRcdFx0dW5pLiRlbWl0KFwic2NhbnJlc3VsdFwiLHNjYW5SZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdFxuXHRcdFx0IGZpbHRlci5hZGRBY3Rpb24oXCJjb20ucGRhLmZvcm1vYm94XCIpOyAvL+ebkeWQrOaJq+eggeW5v+aSrVxuXHRcdFx0IGZpbHRlci5hZGRBY3Rpb24oJ2NvbS5yZmlkLnNjYW4nKSAvL1xuXHRcdFx0bWFpbi5yZWdpc3RlclJlY2VpdmVyKHJlY2VpdmVyLCBmaWx0ZXIpOyAvL+azqOWGjOebkeWQrFxuXHRcdH0sXG5cdFx0b25TY2FuKGNhbGxiYWNrKXtcblx0XHRcdGNvbnNvbGUubG9nKCdvblNjYW4nKTtcblx0XHRcdHVuaS4kb2ZmKFwic2NhbnJlc3VsdFwiKTtcblx0XHRcdHVuaS4kb24oXCJzY2FucmVzdWx0XCIsKHJlc3VsdCk9Pntcblx0XHRcdFx0Y2FsbGJhY2socmVzdWx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///199\n"); |
| | | |
| | | /***/ }), |
| | | /* 200 */ |